摘 要:计算机网络的发展给人们的学习工作、生活带来极大的方便,人们对网络应用追求的终极目标是高速、流畅、安全、方便。在拥塞控制方面,从滑动窗口的提出到变动窗口的使用,都使网络的速度增加很多,然而接下来又出现一种\"糊涂窗口综合症\"的现象限制的网络的发展。本文从糊涂窗口综合症的形成原因讨论入手,分析了接收方和发送方预防糊涂窗口综合症策略。最后创新提出了预防糊涂窗口综合症不仅在TCP协议层,也不仅在接收方和发送方,而应在形成预防糊涂窗口综合症的不同协议层,和不同路径都可能进行预防。
关键词:计算机网络;TCP协议;糊涂窗口综合症;预防
1.糊涂窗口综合症问题分析
众所周知,计算机网络收发两端的应用程序以不同的速率工作时,软件性能会出现严重的问题。让我们考虑接收方应用程序每次仅读取一个八位组的情况。连接建立之后,接收方的TCP软件申请K字节的缓冲空间,并在确认报文段中使用窗口(WINDOW)字段通知对方可用的缓冲区大小。如发送应用程序快速地生成了数据,发送方TCP软件所传输的报文段数据就会装满整个缓冲区。最终发送方会收到确认信息,得知整个接收窗口已经饱和,无法发送后续数据。
当接收应用程序从饱和的缓冲区读取1八位组的数据之后,就有1个八位组的可用缓冲区空间。而当接收方的缓冲区具有可用空间时,TCP软件就会生成一个确认,使用窗口(WINDOW)字段通知发送方。在此例中,接收方会通告1八位的窗口。发送方得知空间可用后,会发送一个包含1八位组数据的报文段。
尽管仅有1八位组窗口能够正常工作,并填满接收方的缓冲区,但这样就造成了一系列短的数据段。传输短的报文段(即有效数据少的报文段)浪费了网络带宽,带来了不必要的计算负载。之所以浪费带宽是因为每个报文段仅携带1八位组的数据,首部与数据的比率太大。而计算负载之所以增加是因为收发双方的TCP软件对每个报文段都要进行复杂的处理。发送方的TCP要申请缓冲区空间、生成报文段首部并为各报文段计算校验和。同样,发送方的IP要把报文段封装到位数据报中、计算首部校验和、为数据报选择路由并将数据报送给相应的网络接口模块。在接收方,IP软件要检验IP首部校验和并将报文送交TCP,TCP再检验报文段的校验和、检查序号、提取报文段中的数据并把数据送入缓冲区。
前面描述了接收方通告一个小的可用窗口值怎样导致产生短的报文段,但发送方也会使各报文段仅包含少量数据。例如,一个TCP实现是只要有可能就尽快地发送数据,那么当发送方应用程序每次只生成1八位组的数据时,TCP也要创建并发送仅带有1八位组数据的报文段。此外,如果应用程序每次生成固定的大小为B八位组的数据块,而发送方的TCP软件一次最多从缓冲区中提取M八位组的数据且M≠B,这时也会造成短报文段的发送,因为缓冲区中剩下的最后一块数据可能会很小。
上述问题被称为糊涂窗口综合症SWS(silly window syndrome),TCP的早期实现暴露出了糊涂窗口综合症的问题,即每个确认报文通告了少量的可用空间(接收缓冲区),而每个报文段仅仅携带少量的数据。
2.预防糊涂窗口综合症策略
现行的TCP标准包括了用启发方法来防止糊涂窗口综合症。在发送方使用的启发式技术避免了传输的各报文段仅包含少量数据。在接收方使用的启发式技术防止送出可能会引发小数据分组的、具有微小增量值的窗口通告。虽然连接两端的启发式方法能够很好地合作,但对收发双方各自避免糊涂窗口综合症的做法,确保了某一端不能有效实施避免措施时协议仍具有良好的性能。
实际上,收发双方的TCP软件都必须包括避免糊涂窗口综合症的代码,这是因为TCP的连接是一个全双工连接,数据通信是双向流动的,因此连接一端的TCP软件必须包括接收和发送这两个方向上的有关代码。
(1)接收方对糊涂窗口的避免
接收端避免糊涂窗口综合症的策略:通告零窗口之后,要等到缓冲区可用空间至少达到总空间的一半或达到报文段长度之后才发送更新的窗口通告。
接收端预防糊涂窗口综合症的措施防止了应用程序以低速接收数据所引起的小窗口通告。在接收方缓冲区饱和的情况下,它送出的确认包含了零窗口通告信息。接收应用程序从缓冲区中提取八位组后,接收方的TCP计算出新的可用缓冲区空间,但是它并不立即发送窗口通告。而是等到可用空间达到缓冲区一半或最长报文段所含的数据量时才发送窗口通告。因此,发送方经常收到将当前窗口大幅度增加的通告,这使得它能够发送较长的报文段。(2)发送方对糊涂窗口的避免
发送方避免糊涂窗口综合症的策略:在一个连接上已经传输的数据还未被确认的情况下,发送方的应用程序又生成了后续数据,并照常将数据送到输出缓冲区中。但这时并不发送后续报文段,而是等到数据足以填满一个达最大长度的报文段之后再把缓冲区数据发送出去。该策略适用于任何情况,包括推操作在内。
如果某个应用程序每次仅产生一个八位组的数据,TCP会立即发送最初的那个八位组,但是在确认到达之前,TCP会把后续数据存入缓冲区中,因此,当应用程序生成数据的速率比网络的速率快不少时(如传输文件),后续的各个报文段将包括很多的数据,而当应用程序比网络速率更慢时(如用户敲键盘),就会发送较短的报文段而不必经过长的延迟。
实际上,现行的TCP要求收发双方实现避免糊涂窗口综合症的启发式策略。接收方要避免小窗口通告,而发送方要使用自适应机制来推迟传输,以便将数据组块形成较长的大报文段。
3.预防糊涂窗口综合症的研究小结
通过研究我们发现糊涂窗口综合症是由于计算机网络在通信过程中由于协议的分层和所经过的路径不同所造成的。也既是只要数据在所经过的协议层需要进行流量控制,和数据所经过的路径需要进行不同速度的存储转发都会形成糊涂窗口综合症。比如在形成的协议层(纵向分析)可能有:数据链路层、运输层(TCP而非UDP),因为它们需要进行流量控制;在形成的通道(横向分析)可能有:接收方、发送方、中间路由器,因为它们收发或转发速率不同。
根据以上形成的原因,我们在预防糊涂窗口综合症时就不仅仅是在发送方和接收方的TCP协议层,而是在发送方、接收方、中间路由,以及数据链路层和运输层都可以进行糊涂窗口综合症的预防。
参考文献:
预防糊涂窗口技术。