我遇到了一个奇怪的互联网访问问题,我不知道如何调试。大约 90% 的时间里,一组特定的网站无法加载,并显示“连接重置”状态。通过它们的 IP 访问它们会产生相同的结果。Ping IP 成功(无数据包丢失)。我运行的是安装了最新更新的 Windows Server 2012。
Fiddler(HTTP MITM 调试器)告诉我 HTTP 响应是“HTTP 504”。Wireshark 显示我在 TCP 层接收到“连接重置”数据包。
我尝试了以下更改:
问题仍然存在:
- 通过 IP 访问
- 使用 wget
- 使用不同的网络适配器(带 3G 功能的 USB 绑定手机)
- 使用其他浏览器
- 在 VirtualBox VM 中使用浏览器
- 禁用防火墙
- 启动至带网络连接的安全模式。
- 更改 DNS 服务器。
- 以不同的非管理员用户身份登录。
问题消失时:
- 使用不同的机器
- 使用 TOR
- 使用不同的操作系统
- 在 Fiddler 中重新发出 HTTP 请求超过五次(即,前 5 次重新发出失败,之后的重新发出成功)。
- 使用 Fiddler 捕获 HTTP 请求并在另一台机器上重新发出。
我最后的办法是重新安装操作系统。我还能尝试其他什么方法来调试此问题吗?
答案1
失败的连接是与启用 CloudFlare 的网站的 TCP 连接。Windows Server 2012 默认启用显式拥塞通知 - TCP 数据包中的 ECN 和 CWR(拥塞窗口减少)标志设置为 true。
我通过运行解决了这个问题
netsh interface tcp set global ecncapability=disabled
答案2
这有点牵强,但我见过这种方法修复了一些奇怪的问题,而这些问题我以前无法通过其他方法解决。所以在完全重新安装之前,这种方法绝对值得一试。
通过运行以下命令重置 Windows 计算机上的 TCP/IP 堆栈
netsh int ip reset c:\resetlog.txt
(最后一个参数为日志路径,可选)
如果您点击下面的链接,还可以找到一个自动化工具。