【技术】宽带症候群
Windows 用来检测网络连通性的 IP 似乎被劫持了
起因
前几天发现 Windows 的网络图标一直显示未联网状态,但实际上是联网了,后来搜索了下大概率是 Windows 的网络连通性探测的机制有问题了。
Active Probe
一般来说,如果联网了,并且实际能够通过浏览器访问互联网,但 Windows 却显示 无 Internet, 已连接,大概率是 Active Priobe 出了问题。
Active Probe 会从两个角度进行测试:
- DNS 解析
- HTTP 连接
两个测试任意一个不过都会导致 无 Internet, 已连接 这个结果。除了图标的显示有差别外,Windows 其实把 Active Probe 的结果用在了很多系统内置条件的判断上,网络不通会导致非常多的功能不可用。
? 注册表中 Active Probe 相关参数
经过一番测试后发现用来测试 Web 连通性的域名 www.msftconnecttest.com 对应的 IP 被 TCP 劫持了,ICMP 和 UDP 似乎没有问题。
排查
于是分别对两个测试的内容进行手动测试,由于没有 v6 环境,就跳过了 v6 测试。最终发现 DNS 解析测试是完全没有问题的,而 HTTP 连接测试则出现了劫持情况。
具体表现为:
- www.msftconnecttest.com 解析出的 v4 在使用 ICMP 和 UDP 进行 ping 时能够正确到达目的地,但 TCP 被劫持,具体通过延迟来判断,我本地对这个 IP 的 UDP 和 ICMP ping 延迟都是相通的,而 TCP 则少了一个量级
- 全国性的对这个 IP 的 80 端口不可访问
? TCP 路由跟踪
? 全球端口测试
解决方案
既然 Active Probe 因为自己不可控的原因不能成功,那就禁用 Active Probe 。
将 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcParametersInternet
的 EnableActiveProbing
从 1
改为 0
来禁用,完成后重启即可。
更新解决方案
判断用户是否已经联网并不是个技术活儿,微软使用的方法是让设备自动访问微软专用的域名测试网络连通状态。
如果能访问该域名说明网络是正常的,如果无法访问则代表网络异常,但有时候微软这些域名可能出现访问异常。
这就会导致网络状态指示器显示用户已经离线,所以现在还有个变通解决方法就是直接修改用于测试的微软域名。
这个方法在微软官方论坛里已经公布,如果你确实遇到网络指示器的问题再修改,正常的话请不要修改默认域名。
如果你懒得动手的话直接点这里下载蓝点网做好的注册表,下载后打开选择合并到注册表即可无需说动修改键值。