糊涂窗口综合症
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() | 此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
![]() | 此条目需要精通或熟悉相关主题的编者参与及协助编辑。 |
糊涂窗口综合症(Silly window syndrome),亦称愚蠢窗口综合症、愚笨窗口综合症,是TCP流量控制实现不良导致的一种电脑网络问题。当发送程序缓慢地生产数据,接收程序缓慢地消耗数据,或者两者同时存在时,滑动窗口运作会出现严重问题。如果一个伺服器无法处理所有传入的数据而存在此问题,它会要求客户端减少一次发送的数据量(TCP网络数据包的滑动窗口)。如果伺服器仍然无法处理所有传入的数据,窗口会随此问题越来越小,有时甚至将使传输数据小于数据包头,使数据传输变得极为低效。这个问题的名字取自窗口缩小到“愚蠢”的值。当该综合症发生时,连接上交换的数据段是小数据段而不是全尺寸的数据段[1]。
基于窗口的流量控制网络协议,特别是使用非固定段大小的(例如TCP),都有可能陷入糊涂窗口综合症[2]。
处理每个数据包都存在一定量的开销,数据包数增加会增加网络通信的开销,可能使数据处理量进一步减少。最终的结果就是抖动。
描述
[编辑]SWS 可能由 TCP 连接的任何一方引起:接收方应该等到可以发较大窗口通告再发窗口通告,但是没有等而发了小窗口公告;发送方应该等到数据够多的时候一次性发送一个较大的段,但是没有等而发了较小的段[2]。
解决方案
[编辑]当发送者与接收者之间没有就数据流量或数据包大小的容量同步时,则会发生窗口综合症问题。如果糊涂窗口综合症是由发送方产生,则纳格算法发挥作用。 纳格的解决方案要求发送方发送第一个段,即使它是小的,然后就等待直至收到一个ACK,或者累积到最大大小段(MSS)。如果糊涂窗口综合症由接收方产生,则David D Clark算法发挥作用。Clark的解决方案是关闭窗口,直到接收到最大段大小(MSS)的另一个段,或者缓冲区为半空。
糊涂窗口综合症的成因有三种:
- 当伺服器宣布空闲空间为0
- 当客户端每次只能生成1个字节
- 当伺服器一次只能消耗1个字节
在糊涂窗口综合症期间,通信效率几乎为零,因此该问题的持续时间应尽可能短。
TCP 的实现要满足以下规则[2]:
- 接收方 TCP 不能通告小窗口。RFC 1122中定义的接收算法是不通告比当前正被通告的窗口大的段(可以是0),直到窗口可以增加一个全尺寸段(即接收MSS)或者增加接收方缓冲区的一半大,以较小者为准。在两种情况下,该规则可以发挥作用: 当缓冲区中的部分数据已被应用程式消费而缓冲区可用时,以及当TCP必须响应窗口探测时。
- 发送方 TCP 不能发送过小的段,纳格算法发挥作用。发送方只有以下情况才能发送段
- 待发送的数据为一个全尺寸的段。
- TCP 可以发送大小至少为另一端在此连接上通告的最大窗口大小的一半。
- 纳格算法启动的情况下,TCP 在没有急需 ACK 的数据的情况下,TCP 可以发送任何它必须立即发送的数据。
其中 2.1 是最直截了当的,直接避免了段的开销过高的问题。2.2 避免主机总是通告过小的窗口。2.3 避免 TCP 在有急需 ACK 的数据的情况下还发送比较小的段。如果发送方应用程式一直在往连接写入大小很小的数据,2.3 可以避免糊涂窗口。2.2 要求发送方记录接收方通告的最大窗口。
纳格算法禁止我们在有急需ACK数据的情况下发送过小的段,那么纳格算法中的小指的是多小呢?2.1 说明大小不能小于SMSS(接收方的MSS或者不超过PMTU的最大包大小)[2]。
发送端糊涂窗口避免
[编辑]一种发送TCP的启发法方法是必须允许发送程序执行“写”调用,并在发送大段之前收集每个调用传送的数据。发送TCP将延迟发送段,直到它累积起合理数量的数据。这被称为聚集(clumping)。
接收端糊涂窗口避免
[编辑]一种接收端的启发式方法是维护可用窗口的内部记录,并且延迟向发送方宣告增加窗口大小,直到可以推进显着的量。该数量取决于接收端的缓冲器大小和最大段大小。通过此方法可以防止接收端程序缓慢提取八字节数据时宣告小窗口。
参考资料
[编辑]- Comer, Douglas E. Internetworking with TCP/IP 5. Prentice Hall: Upper Saddle River, NJ. 2006.
- Postel, J. NCP/TCP Transition Plan. 1981 [5 October 2016]. (原始内容存档于2016-06-10).
Some TCP implementations did not protect against silly window syndrome.
- ^ Clark, D. D. Window and Acknowledgement Strategy in TCP. tools.ietf.org. [2020-02-27]. (原始内容存档于2019-03-27) (英语).
- ^ 2.0 2.1 2.2 2.3 Fall; Kevin R. TCP/IP illustrated.—2nd ed. the United States of America: Pearson Education, Inc. 2012: 708. ISBN 0-321-33631-3.