このページの本文へ

Windows Info 第473回

Windowsは内部的にどうやってインターネットへの接続状態を確認している?

2025年03月16日 10時00分更新

文● 塩田紳二 編集● ASCII

  • お気に入り
  • 本文印刷

 システムトレイにある「クイック設定」には、ネットワークのインターネット接続状態を表示するアイコンがある。

ネットワーク接続状態インジケーター

システムトレイにあるクイック設定は、フライアウト開かない状態では、ネットワークのインターネット接続状態を示す3種類のNCSIアイコンを表示する

 このアイコンは「インターネット接続不可」「インターネット有線接続」「インターネット無線接続」のどれかを表示する。これを「ネットワーク接続状態インジケーター」(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によってインターネット接続を視覚的に見ることができる。見た目は単純だが、実際の処理はかなり複雑である。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン