システムトレイにある「クイック設定」には、ネットワークのインターネット接続状態を表示するアイコンがある。
このアイコンは「インターネット接続不可」「インターネット有線接続」「インターネット無線接続」のどれかを表示する。これを「ネットワーク接続状態インジケーター」(NCSI、Network Connectivity Status Indicator)という。
この機能は、「ネットワークプローブ」を使って、Windowsのインターネット接続状態を調べ適切な表示・処理をする。アイコンの表示だけでなく、たとえば、公衆Wi-Fi/ホットスポットサービスなどにおいて、ログイン処理が必要なことを通知するのもNCSIの役割である。
原理としては簡単で、Microsoftがインターネットに用意したウェブサイトにアクセスして、テキストファイルが読み出せるかどうかをチェックしている。これが可能ならば、他のウェブサイトへのアクセスも可能なはずと判断する。これをNCSIでは、「アクティブ・プローブ」と呼ぶ。
さらにNCSIは、Windowsの実行中にインターネットとのトラフィックを調査して、接続が継続しているかどうか、接続速度に変化があるかどうかなどをチェックする。これを「パッシブ・プローブ」という。
アクティブプローブとは
アクティブプローブは、HTTPプローブとも呼ばれ、マイクロソフトが用意したサイトにHTTPでアクセスを行い、特定のテキストファイルをダウンロードする。このファイルの中のテキストが「Microsoft Connect Test」であることを確認する。この一連の手順でインターネット接続の有無が確認できる。
アクティブプローブに必要なパラメーターは、すべて以下のレジストリキー以下に定義されている。
HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
そして現在のWindows 11 Ver.24H2では、上記のレジストリキーには以下の表の値が設定されている。
ActiveWebProbeHostおよびActiveWebProbeHostV6と、ActiveWebProbePathおよびActiveWebProbePathV6を使って作られた以下の2つのURLを開く。ダウンロードしたテキストファイルが、「Microsoft Connect Test」(ActiveWebProbeContentおよびActiveWebProbeContentV6)であることを確認することでインターネット接続があることを確認する。
http://www.msftconnecttest.com/connecttest.txt
http://ipv6.msftconnecttest.com/connecttest.txt
なお、NCSIでは、IPv4とIPv6のHTTPプローブは並列に実行され、どちらかが成功すれば、インターネット接続していると判断される。また暗号化はしないため、URLのスキーマには「HTTP」を使う。
かつてはアクティブプローブにはDNSプローブがあり、NCSI専用のDNSサーバーが用意され、ここで名前解決ができるかどうかもNCSIのチェック項目だった。現在では、HTTPプローブのホスト(www.msftconnecttest.com または ipv6.msftconnecttest.com)の名前解決は、システム側に設定されたDNSサーバーを使う。結果的に正しくテキストファイルを受け取ることができるならDNSには問題がなかったことになる。このため、Windows 11ではNCSIは事前にDNSプローブを実行せず、HTTPプローブのみを実行する。
前記レジストリには、DNSプローブ用にDNSサーバーのIPアドレス(ActiveDnsProbeContentおよびActiveDnsProbeContentV6)とホスト名(ActiveDnsProbeHostおよびActiveDnsProbeHostV6)が記述されている。つまり、DNSの名前解決の正解が記録されている。
Windows側に設定されたDNSサーバーで、DNSプローブ用ホスト名の名前解決が正しくできなかったら、Windows側のDNS設定に問題がある、あるいはキャプティブポータルがDNS名前解決を使ってログインページに誘導していると考えることができる。
インターネット接続の有無を確定する前段階として、LAN内のアクセスが可能であることは、DHCP経由でゲートウェイアドレスなどを受け取ったことで確認できる。NCSIでは、LAN内の接続が可能な状態を「ローカル接続」と呼び、インターネット接続状態の前の段階としている。
HTTPを使ってインターネット接続が可能ことを調べるアクティブプローブに対して、受信パケットなどからネットワーク状態を確認することをパッシブプローブという。
たとえば、到達パケットを調べることで、ローカルからのパケットなのか、インターネット側からのパケットなのかを判定できる。これによりパッシブプローブでは、アクティブプローブが失敗しても、インターネット接続しているかどうかを判定できる。
プロキシとキャプティブポータルの検出
HTTPプローブをするとき、サーバーからの応答によりHTTPプロキシ(HTTP Proxy)の検出ができる。HTTPプローブの接続先は、どのような場合にも拒否することがない。HTTPプローブが応答として「HTTP 403 Forbidden」などを受け取った場合、プロキシが存在し、HTTPプローブが拒否されたと考えられる。
プロキシは、自動検出され設定されるはずだが、いくつかの原因、たとえば、まだ検出されていない、プロキシ自動構成ファイルが間違っている、プロキシサーバーが正しく動作していないなどの理由でHTTPプローブが失敗することがある。
なお、NCSIはレジストリを読むことで手動設定されたプロキシサーバーとポートを認識できる。
公衆Wi-Fiサービス(ホットスポット)などでは、アクセスポイントへの接続後、ユーザー認証や利用規約などの承認などのため、ウェブページでの操作が要求されることがある。こうしたウェブページをWindowsでは、これをキャプティブポータルと呼ぶ。
NCSIはこのキャプティブポータルの検出をして、ウェブブラウザでタブを開く。ただし、セキュリティ的な理由もあり、NCSIはそれ以上の処理をキャプティブポータルに対してはしない。
キャプティブポータルが存在する場合、たとえばDNSによる名前解決はできても、HTTPプローブが失敗、あるいは正しいファイルを返さない場合がある。あるいは、HTTPプローブに対して、リダイレクト応答を返すこともある。こうした場合、NCSIはPCがキャプティブポータルを介してインターネット接続していると認識する。
NCSIの実際の動作
イベントビューアーを使いNCSI(「アプリケーションとサービスログ」→「Microsoft」→「Windows」→「NCSI」)のログを取ることで、NCSIの動作を見ることができる。
このログでは、対象ネットワーク・インターフェース(ネットアダプタ)は、DeviceIDやNetLuIDを使って表示される。これらは、PowerShellのGet-NetAdapterで調べられる。
get-netAdapter | select ifAlias,ifDesc,DeviceID,NetLuid
以下のリストは、イベントビューアーからのログを加工したもの。DeviceIDはifAliasに置き換え、同じデバイスを指すNetLuIDは「0xXXXX」に置き換えてある。ここでは、無線LAN(WLAN)を有効(リストの1行目)にして、インターネット接続を検出させたあと、無線LANをオフ(リストの38行目)にした。
少しわかりにくいが、アクティブプローブがIPv4とIPv6で並行してされている。このため、同じ処理が何回も起動されているように見える。
Windowsでは、NCSIによってインターネット接続を視覚的に見ることができる。見た目は単純だが、実際の処理はかなり複雑である。

この連載の記事
-
第472回
PC
WindowsのエラーをMicrosoftに送信するテレメトリ機能を理解する -
第471回
PC
Windowsのコマンドラインでエイリアスを使う -
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる - この連載の一覧へ