尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Win10能上网却显示无Internet:NCSI探测与分层排查

Win10能上网却显示无Internet:NCSI探测与分层排查 1. 先搞清楚Windows 判断有没有网的依据是什么有台机器我印象特别深。办公区的台式机浏览器能正常刷网页、微信能收发文件、云盘也能正常同步唯独任务栏那个小地球图标上永远挂着一个黄色感叹号鼠标移上去写着无法连接到 Internet。用户每天来问一次说是不是网有问题。我打开网页给他看一切正常他更糊涂了。这个现象在 Win10 上出现的频率高到自己成了一个经典问题。大多数人第一次遇到会手忙脚乱去重启路由器、重置网络、甚至重装系统但其实它的本质往往跟真的上不了网完全是两回事。Win10 判断你有没有网靠的不是能不能打开网页而是一套独立的探测机制。理解了这套机制你就知道为什么会出现明明能上网图标却说没网这种自相矛盾的画面也才能对症下药而不是盲目折腾。1.1 NCSI 的探测链路与判定逻辑Windows 里负责这件事的组件叫 NCSI全称 Network Connectivity Status Indicator中文一般叫网络连接状态指示器。它的工作方式很直接定期向微软指定的几个地址发起探测请求只要收到预期回应就认为网络正常收不到就在图标上挂一个感叹号或者地球图标。具体到 Win10它主要做三件事向www.msftconnecttest.com发起 HTTP 请求访问/connecttest.txt这个路径正常情况下服务器会返回一段纯文本Microsoft Connect Test。系统只要读到这段文字就判定能上网。解析域名dns.msftncsi.com期望得到131.107.255.255这个 IP。这一步是用来验证 DNS 是否正常工作的。综合上面两步的结果再结合网卡链路状态、DHCP 是否拿到地址等信息最终给出已连接受限连接等结论任务栏图标就跟着变。这里有个关键点NCSI 只看它自己那几个探测目标能不能通不关心你实际想访问的网站能不能开。只要探测目标被挡住、被改了地址、或者返回了非预期内容它就会判定无 Internet哪怕你所有正经网站都跑得飞快。这就是矛盾的根源。注意不同版本的 Win10 探测地址略有差异。早期版本用的是www.msftncsi.com加/ncsi.txt返回Microsoft NCSI。较新的版本换成了上面说的 msftconnecttest 那一套。排查时两套都要心里有数尤其是装了老版本镜像或做过系统迁移的机器。1.2 浏览器能开网页图标却挂感叹号矛盾从哪来明白了原理这个矛盾就很好解释了。你打开网页用的是浏览器自己的网络请求走的是系统 TCP/IP 栈只要你到目标网站的链路通就能开。但 NCSI 探测的目标是特定的两个域名加一个固定的 IP路径不同受到的干扰来源也就不同。我实际处理过的成因大致可以归成这么几类成因大类具体表现图标状态探测域名被解析到错误地址msftconnecttest.com解析结果是个内网 IP 或黑洞地址感叹号常驻探测请求被中间环节拦截返回的不是预期文本或干脆超时感叹号常驻本机网络配置残留异常Winsock 或 TCP/IP 栈被第三方软件改乱感叹号常驻或时有时无相关系统服务未正常运行NlaSvc 等没起来或被禁用感叹号常驻组策略关闭了活动探测探测根本没发出去感叹号常驻看到没五类里只有第一类和真正的网络故障沾一点边其余四类都是本机配置问题。所以当你确认浏览器能正常打开网页、能 ping 通常见网站时第一反应不应该是网坏了而应该是NCSI 的探测链路被什么东西挡了或者改了。顺便说一个我踩过的认知坑有段时间我以为只要重置网络就万事大吉看到感叹号就netsh winsock reset一条龙。后来发现有些机器重置完当场好了重启又犯因为根因在天花板那一层——路由器或者公网 DNS 把探测域名解析给吞了本机怎么重置都没用。这个教训让我养成了先分层定位、再动手的习惯。2. 别急着改注册表五分钟分层排查法很多人一搜这个问题出来的答案清一色是改注册表 EnableActiveProbing 为 0导入一段 reg 文件。这些方法确实能消掉感叹号但很多情况下只是把探测关掉了图标不显示了问题根本没解决——好比家里烟雾报警器一直响你直接把电池抠了火还在烧。所以动手之前先把问题定位清楚。我这套分层排查法是多年下来磨出来的五分钟能跑完逻辑是从外到内、从软件到硬件一层一层收窄范围。2.1 第一层确认真实连通性与探测目标可达性第一件事是明确到底能不能上网而不是靠图标下结论。打开浏览器访问两个不同类型的网站一个国内的、一个相对冷门的看是不是都能开。如果都能开说明基础连通性没问题可以继续往下排查 NCSI。接着直接去敲探测目标这一步是整个排查里信息量最大的ping www.msftconnecttest.com ping dns.msftncsi.com正常应该能看到msftconnecttest.com解析出一个公网地址并回包dns.msftncsi.com解析出131.107.255.255并回包。两个都对得上说明链路和 DNS 基本正常问题多半在本机软件层如果其中一个 ping 不通或者解析出奇怪的结果问题就找到了方向。再看一眼探测的文本能不能拿到。用 PowerShell 或者浏览器都行# PowerShell 里直接发起请求看返回内容是不是 Microsoft Connect Test (Invoke-WebRequest -Uri http://www.msftconnecttest.com/connecttest.txt -UseBasicParsing).Content如果这条命令返回的正是Microsoft Connect Test那说明探测本身完全正常问题极可能出在系统服务或策略层——这时候你再去重置网络栈就是无用功。如果返回的是别的文本、被重定向到某个页面、或者直接报错那就是探测被拦或被改了方向也清楚了。提示有些环境里浏览器开了全局自定义配置命令行工具的请求走的路径和浏览器不一样。测的时候尽量用命令行结果更接近 NCSI 的真实行为。2.2 第二层DNS 解析与 Hosts 文件的干扰第一层如果发现解析结果不对第二层就重点查 DNS。最常见的两种情况一是 DNS 服务器本身把探测域名解析到了内网地址或者广告页二是本机 Hosts 文件里被人写死了条目。先看本机 DNS 配置ipconfig /all找到当前网卡的 DNS 服务器地址如果是指向路由器可以尝试临时改成公共 DNS比如 114.114.114.114 或 223.5.5.5再测一次。改完记得ipconfig /flushdns清一下缓存因为 DNS 结果是有缓存的不清的话你会以为改了没用。ipconfig /flushdns nslookup www.msftconnecttest.com nslookup dns.msftncsi.com然后检查 Hosts 文件路径是C:\System32\drivers\etc\hosts准确路径是C:\Windows\System32\drivers\etc\hosts。这个文件正常应当是清一色的注释行以#开头。如果里面出现了 msftncsi、msftconnecttest 相关的非注释条目那基本就是元凶了。有些安全软件、某些网络类工具会往 Hosts 里写东西做域名重定向卸载后没清干净就留下了这个坑。2.3 第三层系统网络栈与服务状态核查前两层都没问题就进第三层查本机的网络组件状态。这一步的核心是看几个关键服务有没有正常跑起来Network Location AwarenessNlaSvc负责网络位置识别直接决定连通性判定结果。Network List Servicenetprofm维护网络配置文件列表。DNS ClientDnscacheDNS 缓存与解析。DHCP Client地址获取。Network Connections管理网络连接。用services.msc打开服务面板逐个确认启动类型是自动、状态是正在运行。NlaSvc 尤其重要它如果被禁用了感叹号基本是必然的而且改注册表都没用。顺带看一眼网络栈有没有被改乱netsh interface ipv4 show config如果看到奇怪的静态地址、异常的网关或者子网掩码不对那就是配置层的问题了。到这一步还没找到根因才考虑做网络栈重置。3. 对症下药几类高频成因的处置方式排查完基本能锁定是哪一类问题。下面把几类高频成因的处置方式一个个说清楚包含为什么这么做、什么时候不要这么做。3.1 探测域名被解析到错误地址这类最典型的表现是nslookup www.msftconnecttest.com返回的不是公网地址而是127.0.0.1、0.0.0.0、某个内网网段地址或者干脆解析失败。根因通常在上游——路由器 DNS 出了问题或者运营商侧对这几个域名处理异常。处理顺序建议这样先把网卡 DNS 手动改成公共 DNS223.5.5.5、114.114.114.114 都行清缓存再测。如果改成公共 DNS 后立刻正常说明问题在原来的 DNS 服务器上这时候可以考虑在路由器里也把 DNS 改掉一劳永逸解决全屋设备的问题。如果改了 DNS 还是解析不对就要查 Hosts 和本机是否有其他域名重定向配置。这一步前面讲过重点看 Hosts 里有没有被写入条目。删掉相关行、保存、清缓存即可。还有一种隐蔽情况路由器开了某些上网管控或者域名过滤功能把探测域名悄悄拦了。这种在路由器后台把相关过滤规则关掉或加白名单就能解决。我遇到过一台路由器开了儿童上网保护结果把 msftconnecttest 一起拦了排查了半天才发现。3.2 网络配置残留与 Winsock 重置很多网络类软件在安装时会修改系统的网络组件配置比如插入自定义的 LSP分层服务提供程序、改动 Winsock 目录、写死路由表。卸载后这些改动往往不会完全还原残留下来就会干扰正常请求NCSI 探测首当其冲。判断方法如果 ping 得通、DNS 解析也对、服务状态也正常但探测文本就是拿不到那就要怀疑网络栈被改过。这时候做一次网络栈重置是合理的netsh winsock reset netsh int ip reset ipconfig /flushdns三条命令跑完必须重启电脑不重启不生效。这里我要提醒一句netsh winsock reset不是保健药别没事就吃。它会重置 Winsock 目录某些依赖自定义 LSP 的软件部分安全软件、网络加速工具在重置后可能失效甚至需要重装。所以做之前最好先确认根因确实指向网络栈。重置完重启再跑一遍第一层的探测命令如果文本能正常拿到了感叹号通常会在几十秒到一两分钟内消失。图标更新的速度取决于系统刷新周期不是实时的别重置完没看到变化就以为失败了。3.3 NlaSvc 等服务未正常工作服务问题很好判断services.msc一看便知。NlaSvc 如果显示已停止右键启动如果启动类型是禁用改成自动再启动。绝大多数情况下启动之后图标会在短时间内恢复正常。如果 NlaSvc 启动报错启动不了多半是依赖它的组件出了问题常见的是网络列表服务或者底层网络驱动异常。这时候可以看一下系统日志事件查看器里Windows 日志 - 系统里找 NlaSvc 相关的错误通常会带具体的错误码按错误码去查更高效。还有一种情况是服务被第三方优化工具批量禁用了。这类工具为了提速会把一堆它认为没用的系统服务关掉NlaSvc 就是常被误伤的倒霉蛋之一。如果你接手的是别人优化过的机器进服务面板从头到尾扫一遍把被禁用的网络相关服务恢复成自动往往一次能解决好几个莫名其妙的网络小毛病。3.4 组策略关闭了连通性检测如果前面几项都正常探测命令也能拿到正确文本但图标始终显示感叹号那就要看看组策略里是不是把活动探测关掉了。路径是计算机配置 - 管理模板 - 系统 - Internet 通信管理 - Internet 通信设置里面有一项叫关闭 Windows 网络连接状态指示器活动测试如果被设置成已启用那么系统根本就不会去发探测请求图标自然一直显示受限。这种设置常见于某些企业环境为了减少外网探测流量而统一关闭。家庭用户一般不会碰到但如果是公司配发的电脑、或者装过某些精简优化版系统镜像就有可能出现。处理方式很简单把它改回未配置或已禁用gpupdate /force刷新策略然后重启网卡或电脑。这个坑的隐蔽点在于——你改注册表 EnableActiveProbing 改得再多组策略优先级更高一切白搭。所以排查顺序里组策略必须看一眼。4. 注册表层级的精准修复与验证闭环前面几层都过了还是不行才轮到注册表。这里我要先泼盆冷水注册表方案在网上被滥用得最厉害。很多人直接让人把 EnableActiveProbing 改成 0图标确实不显示了但探测也被关掉了等于把报警器拆了。除非你清楚自己在干什么否则不要用这种眼不见为净的做法。4.1 EnableActiveProbing 与探测键值说明相关键值都在这一个位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet里面的关键项有键值名称正常值作用EnableActiveProbing1是否启用活动探测0 表示关闭ActiveWebProbeHostwww.msftconnecttest.comHTTP 探测的目标主机ActiveWebProbePathconnecttest.txt探测的路径ActiveWebProbeContentMicrosoft Connect Test期望返回的文本ActiveDnsProbeHostdns.msftncsi.comDNS 探测目标ActiveDnsProbeContent131.107.255.255期望解析出的地址理解这张表的关键在于搞清楚几个值之间的关系系统是拿ActiveWebProbeContent里的文本去和实际返回做比对的只要有一个字不对就判定失败。所以有时候不是网络不通而是期望文本和实际返回对不上——比如某些拦截设备返回了一个自定义页面而不是那行纯文本。4.2 完整操作步骤与验证如果确认是键值被改乱了恢复的步骤是这样的打开注册表编辑器regedit定位到上面的路径。逐项核对把不符合的正常值的改回去。改动前先导出备份这步不能省文件 - 导出 - 选择选定的分支 - 保存为 nlasvc备份.reg备份做完再改。改完不重启也能生效但需要重启 NlaSvc 服务或者直接重启网卡# 重启 NlaSvc 服务 net stop nlasvc net start nlasvc注意 NlaSvc 有依赖关系直接停可能被系统拒绝这时候重启电脑最省事。验证环节别偷懒。改动后等一两分钟跑一遍探测命令确认返回正常再看图标状态。如果图标还是没变可以断开网络再重连或者重启网卡强制刷新状态# 以管理员身份运行先禁用再启用网卡网卡名要换成你的实际名称 netsh interface set interface 以太网 admindisabled netsh interface set interface 以太网 adminenabled网卡名可以用netsh interface show interface查看。这一步能让 NCSI 立刻重新发起探测比等系统自己刷新快得多。注意如果探测键值本身是正常的只是图标抽风那不要乱改注册表。重启一次 NlaSvc 或者重启电脑多数会自己恢复。注册表这东西改得越多风险越大。4.3 不想动注册表的替代方案有些人一看到注册表就头皮发麻也完全有不动它的办法。我一般会先推荐这两条第一直接用系统自带的网络重置。路径是设置 - 网络和 Internet - 状态 - 网络重置。它会一次性重置所有网络适配器和组件到出厂状态效果和手敲netsh命令差不多但更省事。代价是重置后需要重新配置网络相关设置比如自定义的静态 IP、无线密码可能需要重新输入。第二卸载重装网卡驱动。如果是驱动层面的问题导致的连通性判定异常卸载网卡驱动勾选删除驱动程序软件后重启让系统自动重装往往能解决。这个方法对时好时坏的感叹号特别有效——那种一会儿有网一会儿没网的八成是驱动状态不稳定。还有一种取巧但合法的做法把探测地址换成一个你自己能控制的、稳定可达的地址。有几家提供连通性探测的服务返回内容和 NCSI 期望的格式一致把ActiveWebProbeHost和ActiveWebProbePath改成它们即可。不过这属于绕开而不是修复用在确认是本地环境问题、上游又不方便改的场景里。我不太推荐作为常规方案因为一旦那个第三方服务挂了你的图标又该犯病了。5. 那些容易被忽略的周边因素前面讲的是主线但实际处理中真正让人绕远路的往往是这些边角因素。我把踩过的都列一下。5.1 路由器与运营商侧的影响路由器这一层经常被忽略但它引发的感叹号一点不少。常见的有路由器固件的 DNS 转发有 bug把探测域名解析到内网路由器开了行为管理或域名过滤把 msftconnecttest 当成可疑外网探测拦了路由器本身对 HTTP 探测响应做了改写。判断方法很简单把电脑的 DNS 手动改成公共 DNS绕过路由器转发如果立刻正常锅就在路由器身上。处置就是在路由器里关掉相关过滤功能或者把 DNS 改成公共的让路由器别自己乱转发。运营商侧相对少见但也不是没有。个别地区的网络对某些域名处理异常或者骨干侧路由抖动导致探测目标临时不可达。这种情况通常过一段时间会自愈或者换个 DNS 就好。我碰到过一次用户全公司十几台机器集体挂感叹号实际业务完全正常第二天自己好了事后判断是上游某个节点的临时问题。5.2 第三方网络类软件留下的配置残留这条我要重点说因为它太常见了。很多网络类软件在运行时会接管系统的网络请求卸载时又清理不干净留下一堆注册表项、服务、驱动、Hosts 条目。它们可能改动了网络栈、写入了静态路由、修改了 DNS 配置、在防火墙里加了规则。症状是网络明明没问题但某些特定的请求会失败NCSI 探测正好是其中之一。处理思路是——彻底卸载可疑软件然后用前面说的netsh重置或者系统网络重置清一遍重启后再看。有个细节要留意某些软件卸载后残留的是假网卡。你在设备管理器里切到查看 - 显示隐藏的设备展开网络适配器可能会看到几个灰色的、名字奇怪适配器。这些虚拟适配器如果状态异常会干扰系统的网络判定。右键卸载它们重启电脑通常能改善。5.3 系统时间、驱动与补丁带来的假象这三样看起来八竿子打不着但确实会造成感叹号我挨个说。系统时间错了会导致 HTTPS 请求失败虽然 NCSI 默认的探测走的是 HTTP但系统里其他网络组件可能受影响间接引发连通性判定异常。这个坑在旧机器、长时间不联网的机器上特别常见。对一下时间就解决了。网卡驱动老旧或者是从系统自带库里随便装的会出现链路状态和实际连通性对不上的情况。典型表现是明明接着网线却显示网络电缆被拔出或者相反。去网卡厂商官网下最新的对应型号驱动装上比用系统自带的强很多。系统补丁也是因素之一。个别累积更新改动了网络组件的行为导致部分机器的 NCSI 判定变敏感。如果感叹号是某次更新之后开始出现的可以回滚那个更新试试。这种情况不多但确实存在尤其是预览版、非正式渠道镜像更容易碰到。6. 长期预防与速查把问题解决一次不算本事让它别再反复出现才是真功夫。这节我讲讲日常怎么维护以及一张能应急的速查表。6.1 网络配置的备份与还原点习惯我现在的习惯是任何一次对网络配置的较大改动之前先做两件事导出相关注册表分支创建一个系统还原点。注册表备份前面讲过就那一个 Internet 键值分支几秒钟的事。系统还原点通过创建还原点面板手动建一个命名里带上日期和网络调整前字样以后真出问题了直接回滚比重装系统省事一百倍。平时还可以把当前正常的网络配置导出netsh interface ipv4 dump ipv4配置备份.txt netsh winsock show catalog winsock目录备份.txt不算严格意义的还原但对比起来非常直观。哪天配置又乱了你把它和当前的导出一对比哪条被改了、被加了一目了然。这招在我帮别人救火的时候用得最多定位速度能快好几倍。6.2 现象与处置速查表最后给一张实战速查表遇到问题按表索骥能省不少时间现象最可能的原因首选处置浏览器全正常感叹号常驻探测被拦或 NlaSvc 异常跑探测命令查服务探测文本拿不到DNS 正常网络栈被改动netsh winsock reset 重启解析出内网或错误地址DNS 或 Hosts 被改改公共 DNS清 Hosts服务面板里 NlaSvc 停了被优化工具禁用启动并设为自动公司机器集体挂感叹号组策略关闭了活动探测查策略路径改回未配置时好时坏反复出现驱动或软件残留重装驱动清残留某次更新后才出现补丁行为改动回滚该更新换了 DNS 就好换回来又犯路由器侧过滤在路由器里关过滤或改 DNS这张表的用法是先按现象找到最可能的原因再对照前面的章节做具体操作。多数情况下前三行能覆盖八成的场景。最后说一句我自己的体会。这个问题最大的坑不是技术难而是容易过度操作。很多人一上来就重置网络、改注册表、重装系统把简单问题搞复杂甚至引入新问题。真正的解法是先理解 NCSI 在做什么然后用分层排查把范围收窄最后只对根因动手。一套流程走下来往往十几分钟就能解决而且解决得干干净净不会过几天又冒出来。
返回列表