http协议哪一层 tcp如何保证可靠性( 二 )


?接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;窗口大小字段越大, 说明网络的吞吐量越高;接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后, 就会减慢自己的发送速度;如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端
问题1:窗口关闭是什么?怎么解决?现象:接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送放将发送窗口设置为0,停止发送数据 。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失,那么发送方的发送窗口就一直为零导致死锁。
解决:TCP连接方收到零窗口通知就启动计时器,发送窗口探测报文 。探测时,若接收窗口仍为0,那接收报文一方就重新启动计时器;若不是0,死锁局面打破 。
问题2:糊涂窗口综合征是什么?怎么解决?接收方腾出几个字节告诉发送方窗口大小,而发送方会义无反顾发送这几个字节,导致报文利用率很低,这就是糊涂窗口综合征
解决方式:
1.让接收方不通告小窗口给发送方
if 窗口大小

推荐阅读