在SDN流量的相关文献中,实验部分总是会提出一些TCP和UDP的流量控制和流量拥塞问题,今天做一个简单的梳理。
如果一个城市,为了缓解拥堵,那么对应应该采取的办法是拥塞控制;但是如果仅仅对于市中心的某一条路避免堵车,那么就是流量控制。这就对应着流量拥塞和流量控制。
TCP采用大小可变的滑动窗口协议,由接收端通过window size字段反馈当前可接收的字节数。
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的端端流量控制。
原文点击这里