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


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

推荐阅读