Windows 7 与 Linux 中的 HTTP 下载速度差异

Windows 7 与 Linux 中的 HTTP 下载速度差异

我遇到了一个奇怪的情况,Windows 7 Home Premium PC 没有明显原因地显示互联网传输速度有限。

设置:

  • 内部千兆局域网,位于运行 DD-WRT 的 TP-Link WDR3600 路由器后面
  • 光纤互联网连接,下载速度 100Mbit/s,上传速度 8Mbit/s
  • 通过有线接口(千兆位)连接的 Windows 7 Home Premium PC
  • 在 Windows PC 上运行的 Virtualbox Linux 客户虚拟机
  • 虚拟机的网络接口桥接在有线主机接口上,并具有 LAN IP 地址
  • 在同一个局域网上,有一个 NAS 通过 HTTP 提供文件(千兆位)
  • Windows 中没有设置 HTTP 代理,Windows 中的 LAN 设置菜单中已禁用“自动检测设置”
  • 路由器中已禁用 QoS
  • 所有测试均通过千兆以太网完成

事实:

  • 尽管互联网连接尚未饱和,但 Windows PC 上的互联网传输速度并未超过 ~20Mbit/s。
  • 从 Linux VM 下载的相同互联网速度毫无问题地达到了 100Mbit/s 的连接限制。当下载通过管道传输到 /dev/null 时是如此,当它写入磁盘时也是如此
  • 通过 HTTP 将文件从 NAS 下载到 Windows PC 可轻松达到约 600Mbit/s 的传输速度
  • Windows 和 Linux 中的 MTU 相同
  • 尝试禁用有线网络接口(Windows)上的 Large Segment Offload,但没有效果
  • 在 Firefox、Chrome 和 IE 之间切换,结果没有变化
  • Windows 中的 Speedtest.net 达到 100/8 传输速度

一些被丢弃的假设:

  • 这不是硬件问题,因为 Linux VM 可以使用相同的界面快速下载,并且 LAN 下载也可以正常工作
  • 不是路由器问题,虚拟机下载速度很快
  • 不是网络连接问题,VM 下载速度很快
  • 不是磁盘速度限制,虚拟机下载到磁盘的速度很快
  • 并非特定于浏览器的问题
  • 不是碎片问题,Windows 和 VM 中的 MTU 相同

一些可能性:

  • Windows TCP 堆栈限制,或与 HTTP 相关的配置

知道这是怎么回事吗?为什么 Windows 没有占用所有带宽?

答案1

好吧,经过一番调查之后,似乎是 Windows 7 TCP 接收窗口缩放存在问题。

这些是我最初的 TCP 设置:

C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : disabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : disabled
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled
** The above autotuninglevel setting is the result of Windows Scaling heuristics
overriding any local/policy configuration on at least one profile.


C:\Windows\system32>netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : enabled
Qualifying Destination Threshold  : 3
Profile type unknown              : normal
Profile type public               : normal
Profile type private              : restricted
Profile type domain               : normal

我的以太网连接被归类为“家庭”网络,在启发式输出中似乎属于“配置文件类型私有”类别。

根据这篇优秀的文章,禁用启发式方法应该可以解决这个问题。

因此我这样做了:

# disable heuristics
C:\Windows\system32>netsh interface tcp set heuristics wsh=disabled
Ok.

# enable receive-side scaling
C:\Windows\system32>netsh int tcp set global rss=enabled
Ok.

# manually set autotuning profile
C:\Windows\system32>netsh interface tcp set global autotuning=experimental
Ok.

# set congestion provider
C:\Windows\system32>netsh interface tcp set global congestionprovider=ctcp
Ok.

C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : experimental
Add-On Congestion Control Provider  : ctcp
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled

更改这些设置后,下载速度再次快速上升,达到互联网连接的限制。

答案2

Windows 7 和 Windows Server 2008 R2 下下载速度慢的问题是由于 TCP/IP 堆栈中的错误造成的。如果位置 A 和位置 B 之间的延迟非常低(1-8 毫秒),您会注意到下载速度比正常速度慢。应用 Microsoft 的 KB2675785https://support.microsoft.com/en-us/kb/2675785来解决这个问题。

相关内容