糊涂窗口综合症

糊涂窗口综合症Silly window syndrome),亦称愚蠢窗口综合症愚笨窗口综合症,是TCP流量控制英语Flow control (data)实现不良导致的一种计算机网络问题。当发送程序缓慢地生产数据,接收程序缓慢地消耗数据,或者两者同时存在时,滑动窗口运作会出现严重问题。如果一个服务器无法处理所有传入的数据而存在此问题,它会要求客户端减少一次发送的数据量(TCP网络数据包的滑动窗口)。如果服务器仍然无法处理所有传入的数据,窗口会随此问题越来越小,有时甚至将使传输数据小于数据包头,使数据传输变得极为低效。这个问题的名字取自窗口缩小到“愚蠢”的值。当该综合症发生时,连接上交换的数据段是小数据段而不是全尺寸的数据段[1]

基于窗口的流量控制网络协议,特别是使用非固定段大小的(例如TCP),都有可能陷入糊涂窗口综合症[2]

处理每个数据包都存在一定量的开销英语Computational overhead,数据包数增加会增加网络通信的开销,可能使数据处理量进一步减少。最终的结果就是抖动英语Thrashing (computer science)

描述

编辑

SWS 可能由 TCP 连接的任何一方引起:接收方应该等到可以发较大窗口通告再发窗口通告,但是没有等而发了小窗口公告;发送方应该等到数据够多的时候一次性发送一个较大的段,但是没有等而发了较小的段[2]

解决方案

编辑

当发送者与接收者之间没有就数据流量或数据包大小的容量同步时,则会发生窗口综合症问题。如果糊涂窗口综合症是由发送方产生,则纳格算法发挥作用。 纳格的解决方案要求发送方发送第一个英语TCP segment,即使它是小的,然后就等待直至收到一个ACK,或者累积到最大大小段(MSS)。如果糊涂窗口综合症由接收方产生,则David D Clark算法英语David D Clark's algorithm发挥作用。Clark的解决方案是关闭窗口,直到接收到最大段大小(MSS)的另一个段,或者缓冲区为半空。

糊涂窗口综合症的成因有三种:

  1. 当服务器宣布空闲空间为0
  2. 当客户端每次只能生成1个字节
  3. 当服务器一次只能消耗1个字节

在糊涂窗口综合症期间,通信效率几乎为零,因此该问题的持续时间应尽可能短。

TCP 的实现要满足以下规则[2]

  1. 接收方 TCP 不能通告小窗口。RFC 1122中定义的接收算法是不通告比当前正被通告的窗口大的段(可以是0),直到窗口可以增加一个全尺寸段(即接收MSS)或者增加接收方缓冲区的一半大,以较小者为准。在两种情况下,该规则可以发挥作用: 当缓冲区中的部分数据已被应用程序消费而缓冲区可用时,以及当TCP必须响应窗口探测时。
  2. 发送方 TCP 不能发送过小的段,纳格算法发挥作用。发送方只有以下情况才能发送段
    1. 待发送的数据为一个全尺寸的段。
    2. TCP 可以发送大小至少为另一端在此连接上通告的最大窗口大小的一半。
    3. 纳格算法启动的情况下,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. 
  1. ^ Clark, D. D. Window and Acknowledgement Strategy in TCP. tools.ietf.org. [2020-02-27]. (原始内容存档于2019-03-27) (英语). 
  2. ^ 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. 

外部链接

编辑