引子
最近电脑莫名其妙地出现了可以正常上网,但是任务栏上的网络图标显示“无Internet”的问题。如果不使用微软账户的话,这个问题其实没什么影响,但是如果使用微软账户,这个问题会导致所有与微软账户相关的软件无法登录,比如Microsoft 365和Outlook邮箱。 在网上找了很多帖子都没有解决,最终通过相关帖子的学习提供一种解决该问题的思路,如果有用,请不要吝惜你的点赞😁如果你有更好的解决方案,欢迎评论分享
思路
要想知道这个问题的原因,首先我想到的是需要了解Windows网络感知的原理。通过查找相关资料,发现Windows系统中的网络感知功能是通过获取特定服务器的请求来实现的,具体可以参考[1],其中介绍了Windows 7中的网络感知功能实现方式,在Windows 10中,实现方式类似,但是服务器地址变了。进入注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet 路径可以查看具体服务器地址。 根据[1],下面简要介绍一下在我的机器上,网络感知的基本过程:
- 向 dns.msftncsi.com 发送 DNS 查找请求。此 DNS 地址应解析为 131.107.255.255。
- 请求 http://www.msftconnecttest.com/connecttest.txt,如果网络正常,则此文件是纯文本文件,仅包含文本
Microsoft Connect Test 。
如果上面过程1不正常,则提示“无法访问Internet”,如果1正常2不正常,则提示需要进行身份验证。
尝试
检查dns解析
大致了解原理后开始尝试问题的解决办法,我的思路首先是检查 dns.msftncsi.com是否被正确的解析了,通过Ping检查:
ping dns.msftncsi.com
结果返回:
正在 Ping dns.msftncsi.com [131.107.255.255] 具有 32 字节的数据:
请求超时。
说明正确的解析了 dns.msftncsi.com,ping不通的原因是 dns.msftncsi.com不会响应Ping请求[2]。
检查网页请求
在确认上一步没有问题之后,点击http://www.msftconnecttest.com/connecttest.txt查看是否能名获取正确的文本内容,测试发现文本内容也可以正确获取。到这一步就可以排除网络和连接的问题了。
最终方法
在排除网络的原因之后,我猜测可能是驱动的原因,在禁用网络适配器并重新启用后,网络就可以正常连接了。
总结
这个问题的解决其实带有一定的偶然性,但是在解决问题的过程中学习了Windows的网络感知原理,特此记录分享。
|