有关 NCSI 的常见问题解答
以下部分提供有关 Windows 中网络连接状态指示器 (NCSI) 的快速常见问题解答。
重要
以前由 Azure Front Door 托管的公共 NCSI 探测服务器现在由 Akamai 托管。 此更改于 2023 年 6 月 20 日发生。
Microsoft 建议的最佳做法是使用防火墙规则来允许 NCSI 流量,而不应基于 IP 地址。 如果观察到 NCSI 探测失败,请首先检查确认企业防火墙或代理未阻止客户端探测。 如果探测器在上述日期之前工作过,则添加的允许向 13.107.4.52 发出出站 HTTP 请求的规则就是问题所在。
可以通过单击“开始”> 键入 wf.msc > 按 Enter,在“具有高级安全性的 Windows Defender 防火墙”中修改出站规则。 应基于起始服务创建出站规则。
NLS(网络列表服务)适用于:
- Windows Server 2022 和未来迭代
- Windows 11
NLA(网络位置感知)服务适用于:
- Windows Server 2019 和以前的迭代
- Windows 10 和以前的迭代
对于基于外部硬件的防火墙后面的用户,我们建议客户与其硬件供应商合作,为其环境构建适当的规则,因为每个规则在实现中都有不同的控制和配置。 NCSI 探测遵循与 Windows 更新相同的要求,即允许主机名通过而不映射到特定 IP 地址。
主动探测由 NCSI 所监视的以下事件触发,这些事件表明可能需要刷新网络状态:
- 一般性的接口或网络条件变化。
- 代理检测或更改。
- 热点检测或更改。
满足新的网络条件时(无论是有线、无线还是使用 VPN 的网络),网络接口都可以使用,并且主动探测将测试网络连接。 例如,建立无线连接时会进行以下测试:
[Microsoft-Windows-NCSI/Analytic ] Transitioning to State: Interface NetReady
Interface Luid: 0x47008000000000
探测成功后会提供以下输出:
[Microsoft-Windows-NCSI/Analytic ] Active Internet Probe finished on interface {426b6867-b0e4-4ff9-a14b-dd6a4345c24e} (true) {426b6867-b0e4-4ff9-a14b-dd6a4345c24e}, true, true, false, true, false
- 如果探测未遍历代理,则 NCSI 会记录这种情况。
- 网络接口图标会变化以反映可访问 Internet 连接。
- 如果在未提供凭据,或者默认不允许在未提供进一步输入的情况下访问 Internet 的强制验证门户后面操作,主动探测将设置为本地功能。 有关详细信息,请参阅强制验证门户。
有许多因素可能导致主动探测无法访问 Internet 探测服务器,或无法从访问客户端的服务器成功接收响应。 这些限制如下:
- 代理错误、配置错误、间歇性环境问题。
- PAC 文件问题,它们会导致数据包无法传入正确的代理,甚至导致客户端不知道代理的存在,但客户端必须通过此代理发送探测。
- VPN 配置、设置处理延迟,以及错误地将探测路由到某个位置,而由于连接超时,在该位置无法轻松访问 Internet。
- 常用 NCSI 查找名称存在 DNS 服务器解析问题。 这些问题往往是间歇性的,并不是因为缺少记录。
如果为接口记录的跳点计数至少达到了系统最小值,则它会向 Internet 更新接口功能。 除非发生了“何时发送主动探测?”中所述的事件之一,否则不会为此接口执行更多主动 探测。
如果 NCSI 发现连接仅限本地,则表示以下状况属实:
- 跃点计数未达到系统最小值。
- 无法检索特定接口的跃点计数数据。
- 路由表中未为下一个跃点指向 Internet 上根服务器的接口创建条目。
- 主动探测已启用,但自接口连接以来没有任何主动探测成功完成。
默认跃点计数为 8,但此数量对于企业而言不一定是最佳的。 值 3 适用于大多数企业基础结构。
备注
Microsoft 不建议非企业用户更改此跃点计数值,因为此值随时可能有变化。
有多种因素决定了是否应根据被动轮询信息运行被动探测。 必须满足以下条件:
- 受组策略的允许。 如果未配置组策略,则默认允许被动探测。 可以通过导航到“计算机配置\管理模板\网络\网络连接状态指示器\指定被动轮询”在组策略中进行这种验证。
- 用户已登录或者在过去 30 秒内登录过。
如果允许被动探测器运行,则它每隔 15 秒会运行一次。 可以通过编辑以下注册表项来替代此间隔:
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\PassivePollPeriod
在以下路径中可以找到探测内容以及预定义的 DNS 探测主机:
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
备注
从 Windows 10 内部版本 14393 (1607) 开始,Web 探测 (HTTP) 请求将发送到 www.msftconnecttest.com/connecttest.txt
。
HTTP 200 OK 预期响应应该包含有效负载“Microsoft 连接测试”,如下所示:
HTTP:Request, GET /connecttest.txt
HTTP:Response, Status: Ok, URL: /connecttest.txt
在此之前使用的是 www.msftncsi.com/ncsi.txt
,预期响应为“HTTP 200 正常”,有效负载包含“Microsoft NCSI”。
对于 DNS 探测,查询将发送到“dns.msftncsi.com”,如下所示:
Query for dns.msftncsi.com of type A on class Internet
Response - Success, 131.107.255.255
备注
4-c-0003.c-msedge.net 通常可识别为 MSFT 服务网络的入口点,其中包括 Microsoft 的托管 Internet 探测服务器。 “4”表示 IPv4。 6-c-0003.c-msedge.net 表示 IPv6。
从 Windows 11 开始,始终使用 HTTP。 你可能会看到 DNS 活动,但其目的是识别要将 HTTP 探测发送到何处。 在此之前,如果没有代理,NCSI 将使用 DNS 进行探测。 示例:
[Microsoft-Windows-NCSI/Analytic ] Active Internet Probe (DNS) started on interface {426b6867-b0e4-4ff9-a14b-dd6a4345c24e}
如下表中所示,网络探测失败的原因有多种。 遇到的任何故障都会记录在事件查看器中以供调查。
输出 | 说明 |
---|---|
ActiveDnsProbeFailed | DNS 探测失败。 通过数据包捕获进行验证。 |
ActiveHttpProbeFailed | 未解析探测服务器的 DNS 名称。 NSCI 在尝试发送 Web 探测请求之前失败。 原因可能是 DNS 故障、无法连接到代理服务器等。 通过数据包捕获进行验证。 |
ActiveHttpProbeFailedButDnsSucceeded | 已解析探测服务器 DNS 名称,但对该已解析 IP 地址进行 HTTP 探测失败。 使用数据包捕获应用程序并验证数据捕获。 |
ActiveHttpProbeFailedHotspotDetected | HTTP 探测无法穿越热点或强制验证门户。 此原因通常是在收到 HTTP 响应 200 但响应有效负载中没有文本文件 connecttest.txt,或收到非 200 HTTP 状态代码(例如 302、304)时确定的。 在处理无法建立无线连接的问题时,通常会观察到此状态代码。 通过数据包捕获进行验证。 用户可能需要对热点进行身份验证,或者可能需要修改热点配置。 |
NoAddress | 未为目标适配器分配首选 IP 地址。 涉及到一个无法通过 NSCI 解决的更大问题。 |
NoGlobalAddress | 与 NoAddress 相同,但特定于 IPV6 接口。 |
NoRoute | 从中发送探测的接口在路由表中没有指向 Internet 的路由。 可能发生这种问题的一些场景包括,新连接的 VPN 尚未使用新路由更改路由表,或者在强制隧道 VPN 方案中,因为路由表已修改,在连接 VPN 接口后,物理接口转向本地连接。 |
PassivePacketHops | 并非故障。 收到的数据包指示建立了某种程度的连接。 在功能提升而不是下降时使用此变更原因。 |
下面是探测失败时的输出:
[Microsoft-Windows-NCSI/Analytic ] Active Internet Probe finished on interface {426b6867-b0e4-4ff9-a14b-dd6a4345c24e} (false) {426b6867-b0e4-4ff9-a14b-dd6a4345c24e}, false, true, false, false, false
[Microsoft-Windows-NCSI/Operational ] Capability change on {426b6867-b0e4-4ff9-a14b-dd6a4345c24e} (0x6008001000000 Family: V4 Capability: Local ChangeReason: SuspectDnsProbeFailed) {426b6867-b0e4-4ff9-a14b-dd6a4345c24e}
备注
如果探测失败是由于遍历代理,则 NCSI 会将连接状态设置为“无”。 如果失败的探测未遍历代理(直接探测),则 NCSI 会将连接状态设置为“本地”。
当 NCSI 能够获取具有匹配预期内容“Microsoft 连接测试”的主动探测时。 由于位于热点后面,NCSI 除了检测和报告热点之外发挥不了其他作用。 需要由用户向热点进行身份验证,以允许将流量传出到 Internet。
对于系统而言,NCSI 的责任是在其探测重定向时准确地将连接报告为本地。 只有 Internet 托管的探测服务器应返回预期的内容来证明已建立 Internet 连接。
探测失败的示例可能传达了以下信息:
[Microsoft-Windows-NCSI/Analytic ] Active Internet Probe finished on interface {426b6867-b0e4-4ff9-a14b-dd6a4345c24e} (false)
{426b6867-b0e4-4ff9-a14b-dd6a4345c24e}, false, true, false, false, false
[Microsoft-Windows-NCSI/Operational ] Capability change on {426b6867-b0e4-4ff9-a14b-dd6a4345c24e}
(0x6008001000000 Family: V4 Capability: Local ChangeReason: SuspectDnsProbeFailed){426b6867-b0e4-4ff9-a14b-dd6a4345c24e}
此行为是设计使然。 Windows 希望用户知道他们正在连接到需要在强制验证门户中完成身份验证的网络。 Windows 过去会短暂地显示一个小弹出窗口,并鼓励用户选择此窗口来打开浏览器。 用户经常会错过此窗口,因此不知道可以通过它打开浏览器进行身份验证。 有关详细信息,请参阅连接到公司或公用网络时打开浏览器。
以下 URL 列表提到或暗示了 msftconnecttext.com
:
Microsoft Office 通过对 get_IsConnectedToInternet 发出 API 调用来确定 Internet 连接性。 如果 Microsoft Office 等应用程序能够指出未建立 Internet 连接,但你可以浏览网站,则表明存在 NCSI 问题。 如果你无法浏览或执行其他基本网络操作,则可能表明出现了一般性网络问题,并且 NCSI 故障排除不适用。
任务栏网络图标依赖于 NCSI,即使它指示没有网络活动,上面的规则也适用。 这可能是由于 NCSI 以外的更常见网络问题造成的。
Linux 未提供内置 API(应用程序编程接口)供应用程序检查持续性的 Internet 连接变化。 应用程序必须从零开始实现自己的网络检查,或者使用各种 Linux 实用工具持续检查不断变化的网络状况。
此外,某些 Linux 应用程序不会执行连接检查。 它们会发送数据包并在事后处理错误,而 NCSI 允许应用程序在发生即时性连接问题时向用户发出警报。
备注
企业必须确保其基础结构不会阻止简单的 HTTP 或 DNS 主动探测。 如果以下任何一项配置错误,就会发生这种情况:
- 被阻止的防火墙
- DNS 服务器
- 强制 VPN 隧道
- 代理服务器
- 路由器
- 拦截探测的第三方软件
对于普通使用者而言,不要求提供现成用户配置的潜在障碍更少。 如果引入的 VPN 或第三方软件可能拦截、错误路由或延迟 NCSI 主动探测,则就会出现问题。