我的 Win 7 电脑已经正常运行了 2 年,没有任何问题,但现在我无法在 LAN/Internet 上传输大数据。
我可以:
- ping 任何内容
- 全速浏览互联网、下载文件
- 发送带有非常小的附件的电子邮件。
- 在Speedtest.net上测试下载速度,测得稳定的全速。
我不能:
- 在 Speedtest.net 上测试上传速度。上传卡住了……
- 保存/发送带有大附件(>128k)的电子邮件消息,独立于电子邮件提供商或电子邮箱。
这不是硬件/电缆/卡或其他网络设备的问题!当我从 Linux Live CD 启动时,无需进行任何硬件更改,所有数据发送、测试都可以全速正常进行。
我已经在 Win7 中尝试过:
- 完全禁用 Windows/第三方防火墙
- 重置 IP 堆栈参数(netsh int ip reset c:\resetlog.txt)
- 电脑还原
- 重新安装 LAN 驱动程序
当我在 Windows 中使用 Wireshark 检查数据包时,我看到大量(可能占已发送数据包的 60%)“TCP 重传”。有时会收到“TCP 重复确认”或“TCP 无序”。
Linux 不这样做。
答案1
我想知道这是否是 Windows 中设置的 MTU 大小。我看到了很多 TCP 重传和 TCP 重复确认......(不记得 TCP 顺序错误)但我在路由器的 MTU 为 1500 时看到了这些,而当我按照路由器制造商的建议将 MTU 设置为 1400 时,它们就消失了。您可以致电路由器制造商和 ISP,看看他们是否有任何建议(即使/“如果”这是 Windows 问题)
我知道问题不在于你的路由器,但 Windows 也有一个 MTU 设置。
这可能不起作用,但值得尝试在 Windows 中更改它。
C:\>netsh interface ipv4 show subinterfaces
MTU MediaSenseState Bytes In Bytes Out Interface
---------- --------------- --------- --------- -------------
4294967295 1 0 13487914 Loopback Pseudo-Interface 1
1500 1 3734493902 282497358 Local Area Connection
在上面查找本地连接和/或无线区域连接,您将把 MTU 更改为 1400 或接近 1400。
现在尝试发送较小的数据包,直到它们起作用。从 1472 开始(即 1500-28)C:>ping www.cantreachthissite.com -f -l 1472
我还没有尝试过 ping,我将在这里引用页面作者的话
主机名应该是您无法访问的站点,-f 将数据包标记为不应分片的数据包,-l 1472 设置数据包的大小(1472 = 以太网默认 MTU - 数据包头,其中以太网默认 MTU 为 1500,数据包头为 28 字节)
如果数据包因为需要分段而无法发送,您将得到类似如下的信息:
数据包需要分段但设置了 DF。继续尝试将数据包大小降低 10(即 -l 1460、1450、1440 等),直到 ping 请求成功。将数据包大小增加 1,直到收到“数据包需要分段但设置了 DF。”。最后一个成功值加上 28 就是您的 MTU 值。
在我的情况下,大小为 1430 的数据包成功,但大小为 1431 的数据包失败,因此 1430 + 28 = 1458。
步骤 3:设置 MTU
现在您已经确定了需要更改的接口和最适合您的 MTU,现在是时候进行更改了。再次从提升的命令提示符中输入以下内容,将我的 MTU 1458 替换为您自己的值:
netsh interface ipv4 set subinterface "Local Area Connection" mtu=1458 store=persistent
或者如果您使用无线连接:
netsh interface ipv4 set subinterface "Wireless Network Connection" mtu=1458 store=persistent
^^ 以上方法可能无法为您解决问题,但值得尝试。
答案2
我找到了解决方案:
在网络适配器属性上将“节能以太网”从启用设置为禁用。
经过(仅)此设置后,speedtest.net 上传和所有其他上传工作量将达到 100%。