0

通过网络以高延迟将数据从 Windows 机器发送到 Windows 或 Linux 会占用 10% 的链路容量。同时,从 Linux 通过同一网络发送相同数据的速度几乎快了十倍。即使仅通过延迟数据包在低延迟连接上模拟高延迟,问题也是一样的。

似乎它会影响我尝试过的所有应用程序。在 Windows 7 和 Windows Server 2003 上进行了测试,并观察到了相同的行为。

从 tcpdump 可以看出,Windows 在快速突发中发送了大约 10 个数据包,然后等待 ACK,而 Linux 发送大约 100 个数据包而不等待 ACK。

我试图在没有改进的情况下启用 Compound TCP。

我正在寻找有关如何找出正在发生的事情的任何建议。以及如何解决它。

4

1 回答 1

5

通过增加 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 Window Scaling 不仅对接收而且对发送都被禁用,这将显着限制连接速度。要启用 TCP Window Scaling,请将 Auto-Tuning 级别设置为正常:

netsh interface tcp set global autotuninglevel=normal
于 2012-05-25T23:51:19.627 回答