我遇到了一个奇怪的情况,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来解决这个问题。