1.什么是糊涂窗口综合征?
糊涂窗口综合征的现象是,交换的数据段大小不是全长而是一些较小的数据。由于每个数据段的有用数据(数据部分)较少,因而消耗的资源也更多,相应的传输效率也更低。我的理解是因为糊涂窗口综合征的原因使大量小数据在网络上传输,而且由于TCP是一种可靠的传输协议,每个数据包都要用一个ACK来确认(没用使用延迟确认情况下如此),所以浪费一些时间,而且丢包和失序的可能性也增加了。
2.产生原因
导致糊涂窗口综合征的原因可能是来自TCP的发送端、接收端的其中一方或者是双方同时导致的,下面是发送端和接收端的引起糊涂窗口综合征的原因。
发送端:当接收到来自应用程序的数据时马上发送数据。通常发生在发送端使用会产生大量小数据的应用程序时(如ssh)(没有等待将其他数据合成一个更大的报文段,因为没有使用Nagle算法)。
接收端:接收端的通告窗口较小。接收端在可用空间较小的情况下更新窗口将导致发送端只能发送小的数据段发送到接收端。这可能是因为应用程序由于某种原因导致处理数据的速度较慢,从而可用空间耗尽,然后处理了一些数据,可用空间增加,然后发送窗口通告,但因为可用空间有限,所以发送端只能发送数据段较小,造成浪费。
3.解决方法
解决方法就是制定规则,来消除“糊涂”变化(较小变化)。
由于糊涂窗口综合征是可以是发送端或接收端的任一方引起而且它们的原因各不相同,所以它们要实现各自的规则。
发送端:a.全长的报文段可以发送
b.数据段长度>=接收端通告过的最大窗口值的一半的,可以发送
c.满足一下任一条件的都可以发送:
(i)某一ACK不是目前期盼的(即没有未经确认的在传数据)。
(ii)该连接禁用Nagle算法。
接收端:在窗口可增至一个全长的报文段(即接收端的MSS)或缓冲空间一半之前,不能·通告比当前窗口(可能是0)更大的窗口值。
4.参考文献
《TCP/IP详解》第二版
http://blog.chinaunix.net/uid-21237130-id-159734.html