公众号旧文
Windows 是如何判断“无 Internet,安全”的
相信你也一定见到过下面的这种情况:

一般出现在刚连上 WiFi 时,或者路由器正常,但是光猫故障时。
这个功能叫 Windows NCSI:
Network Connectivity Status Indicator,网络连接状态指示器
该功能不是简单看有没有 WiFi,而是 Windows 主动探测互联网连通性。
1. 整体流程
无线网卡连接 WiFi
|
v
DHCP 获取 IP
|
v
检查网关是否可达
|
v
NCSI 探测微软服务器
|
v
判断 Internet 状态
|
v
显示:Internet访问 / 无Internet
第一阶段:有没有拿到 IP
连接 WiFi 后,Windows 会先检查 IP 地址
例如:
IPv4:
192.168.1.100
网关:
192.168.1.1
DNS:
192.168.1.1
如果 DHCP 都失败,会显示:无 Internet
第二阶段:测试默认网关
Windows 会尝试:
ping 192.168.1.1
也就是路由器。
第三阶段:NCSI 网络探测
Windows 有一个服务:
Network Location Awareness
服务名:
NlaSvc
该服务负责网络状态判断。
IPv4 检测
Windows 会访问:
http://www.msftconnecttest.com/connecttest.txt
请求:
GET /connecttest.txt
正常返回:
Microsoft Connect Test
表示:互联网可访问,然后显示:Internet访问
IPv6 检测
类似:
http://ipv6.msftconnecttest.com/connecttest.txt
第四阶段:DNS测试
Windows 还会检查:
dns.msftncsi.com
如果 DNS 正常,说明:DNS可用
所以实际上判断:
| 测试 | 作用 |
|---|---|
| DHCP | 有没有局域网地址 |
| 网关 | WiFi是否正常 |
| DNS | 域名解析 |
| HTTP探测 | 是否能访问公网 |
为什么有时候能上网,却显示“无Internet”?
这个很常见。
例如你的网络:
电脑
|
路由器
|
代理
|
互联网
能访问:
google.com
github.com
但是微软探测:
msftconnecttest.com
失败。
于是 Windows 就会提示:无 Internet
但是实际上有网。
企业 WiFi 为什么会跳登录页面?
例如酒店:
连接 WiFi
↓
显示:需要登录
↓
打开网页认证
这叫:
Captive Portal(强制门户)
流程:
Windows访问:
http://www.msftconnecttest.com/connecttest.txt
结果不是:
Microsoft Connect Test
而是:
302 Redirect
https://hotel-login.com
Windows判断网络存在,但是需要认证
然后弹出需要采取操作
可以自己测试
Windows:
打开浏览器
访问:
http://www.msftconnecttest.com/connecttest.txt
正常显示:
Microsoft Connect Test
异常可能:
404
跳转
打不开
Windows 相当于内置了一个小型网络探针,它周期性判断:
链路状态
DNS状态
HTTP状态
公网状态
只是它探测目标固定是 Microsoft NCSI 服务器
高级一点:修改探测地址
注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
里面:
ActiveWebProbeHost
默认:
www.msftconnecttest.com
还有:
ActiveWebProbePath
/connecttest.txt
可以改成自己的:
例如:
http://check.example.com/status.txt
实现个性化的网络健康检测。
一句话总结:
Windows WiFi 的“Internet访问/无Internet”不是 WiFi 信号判断,而是通过 DHCP → 网关 → DNS → 访问微软 NCSI 探测地址,综合判断当前网络是否具备公网访问能力。