TCP窗口缩放选项是用来增加TCP接收窗口的大小而超过65536字节。这个TCP选项以及其他的几个选项在RFC1323(处理长肥管道网络,LFN)中定义。
实际上,通讯的吞吐量由两个窗口限制:拥塞窗口和接受窗口。第一个总是保证不要发送操作网络的容量(用塞控制),第二个不要超过接收方数据处理的能力(流控制)。接收方可能被数据冲跨,如果负载非常大(例如一个WEB SERVER)。每个TCP分段包含当前接收窗口的值。如果例如发送端收到一个ACK其对4000个字节作应答并且指定接收窗口是10000字节,那么发送端在发送14000个字节后就不能发送了,即使拥塞窗口是允许的。
为什么需要这个选项?
窗口缩放因子对于BDP大于64KB的时候的数据传输的效率非常有用。例如,如果一个T1传输链路,1.5Mbps是通过卫星的链路,RTT时间是513ms,那么BDP是:1500000*.513 = 769,500位或者96,188字节。最大的64KB窗口仅仅允许填充链路缓冲区的68%或者是1.02Mbps。
通过使用窗口扩大因子,文件传输可以接近 1.5Mbps,而充分利用可用带宽。
这个选现在慢速网络上发送大于64KB的文件也是有用的。
通过使用窗口扩大因子,接收窗口可能增加到最大1GB。
这个选项是TCP头选项字段的一个字节部分。最终的窗口扩大因子将是头部非选项部分定义的大小与这个系数2的幂的积:
新的窗口大小=首部定义的大小* 2^窗口扩大因子
操作系统的配置
Windows
TCP窗口扩大在Windows2000, XP,server 2003以及Vista中实现。Vista默认是打开的,其他操作系统实现为选项。因为许多router和防火墙不能正常的实现TCP窗口的扩大,会导致用户的internet连接几分钟的故障,然后又没有原因的正常工作。如果在Vista中诊断问题,错误小时显示为不能与主要的DNS服务器通讯。如果防火墙不支持TCP扩展也会有这样的问题。
Linux
Linux内核(从2.6.8 2004年8月)已经默认enable了TCP窗口扩大选项。其默认选择一个适当的值。配置参数在/proc文件系统中,见pseudo-file /proc/sys/net/ipv4/tcp_window_scaling和它的搭档 /proc/sys/net/ipv4/tcp_rmem和/proc/sys/net/ipv4/tcp_wmem。