通过网络以高延迟将数据从Windows计算机发送到Windows或Linux,使用10%的链接容量。同时,从Linux通过同一网络发送相同的数据几乎快十倍。即使仅通过延迟数据包在低延迟连接上模拟高延迟,问题也是相同的。
它似乎影响了我尝试过的所有应用程序。测试在Windows 7和Windows Server 2003上执行,并观察到相同的行为。
从tcpdump可以看出,Windows在快速突发中发送大约10个数据包然后等待ACK,同时Linux发送大约100个数据包而不等待ACK。
我试图在没有改进的情况下启用Compound TCP。
我正在寻找有关如何了解正在发生的事情的任何建议。以及如何解决它。
答案 0 :(得分:4)
我能够通过在Windows注册表中增加TCP发送和接收缓冲区的大小来完全解决我的问题(需要重新启动):
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
DefaultReceiveWindow = 1024000
DefaultSendWindow = 1024000
如果这些密钥不存在,则两者的默认值均为8KB,这是Windows等待ACK之后的数据量。
同时确保
netsh interface tcp show global
未显示
Receive Window Auto-Tuning Level : disabled
否则,TCP窗口缩放不仅会被禁用,也会被禁用,这会显着限制连接速度。要启用TCP窗口缩放,请将自动调整级别设置为正常:
netsh interface tcp set global autotuninglevel=normal