TCP协议的流量控制

        我们知道TCP有流量控制和拥塞控制的功能。首先两者是有区别的:流量控制只与发送者和接收者之间的端-端通信有关,也就是它是一个局部的控制;但是拥塞控制是一个全局的问题,涉及所有主机、路由器及路由器的存储-转发能力。通俗来说,一个城市,为了缓解拥堵,那么对应应该采取的办法是拥塞控制;但是如果仅仅对于市中心的某一条路避免堵车,那么就是流量控制。

        这篇文章先介绍TCP的流量控制,拥塞控制在下一篇文章中详细介绍。

        TCP采用大小可变的滑动窗口协议,由接收端通过window size字段反馈当前可接收的字节数。

TCP协议的流量控制_第1张图片

        win反映的是窗口的剩余大小,ACK表示目前接收端接收到的数据的序号。发端根据这个序号和收端剩余的大小就可以调整自己下一步发送多少,这就是流量控制的基本思想。

        对于发送端的数据缓冲区有这些量:LastByteSent是目前发送的最后1比特的数据编号;LastByteAckd是目前接收到确认的最后1比特的数据编号;Revwin是窗口大小。鉴于每次发送方都是收到ACK之后滑动窗口继续发送,发送到LastByteSent这个位置,LastByteSent-LastByteAckd也就是这次发送数据的多少,那么只要满足:LastByteSent–LastByteAckd<=RcvWin(接收端空闲窗口大小) 就会保证不会溢出了。

        那么接收端RcvWin怎么算呢?假设接收端缓冲区大小为RcvBuffer。LastByteRead:上层应用程序接收的最后一个字节序号,LastByteRcvd:接收端从网络接收的最后一个字节序号,那么LastByteRcvd–LastByteRead就是已经接受但是还没有传递给上层的数据。所以空闲区域RcvWin= RcvBuffer-(LastByteRcvd–LastByteRead).

        接收端通过计算出空闲区域Recwin,在把这个消息反馈给发送方,发送方借此调整发送速率,进而实现TCP的端端流量控制。

        

        拓展阅读

        TCP协议的拥塞控制 

        数据链路层的流量控制

你可能感兴趣的:(计算机网络)