TCP流量控制
为了提高信道利用率,TCP采用连续ARQ协议。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
实现方法:通过滑动窗口实现
TCP的两端都维持一个发送/接收缓存和接收/发送窗口。TCP的缓存是一个循环队列,其中发送窗口可以用3个指针表示。而发送窗口的大小受TCP数据报中窗口大小值的影响,TCP数据报中的窗口大小是接收端通知发送端其还可以接收多少数据,所以发送窗口根据接收的的窗口大小的值动态变化。
原理这就是运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。
死锁:考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送放将发送窗口设置为0,停止发送数据。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那么发送方的发送窗口就一直为零导致死锁。
死锁解决方法:解决这个问题,TCP为每一个连接设置一个持续计时器(persistence timer)。只要TCP的一方收到对方的零窗口通知,就启动该计时器,周期性的发送一个零窗口探测报文段。对方就在确认这个报文的时候给出现在的窗口大小(注意:TCP规