ASCII.jp Windows 8のネットワーク自動接続機能の仕組みを詳しく見る
Windows 8ではWindows Connection Managerで自動的に接続するネットワークを決定する
Windows 8から、Windowsではネットワークの選択を自動で行なうようになった。これを司っているのがWindows Connection Manager(以下WCMと略す)だ。
Windows 8ではあらかじめ決められた順に自動的にネットワークに接続する
Windows 7では無線LANの接続先指定に対して優先順位をユーザーが付けていたが、この仕組みはWindows 8で廃止された。Windows 8では、ユーザーが手動でネットワークを選択しない限り、WCMがネットワークを自動的に選択する。
たとえば、起動直後にどのネットワークを使うのか、スタンバイから復帰したとき、これまで接続していたネットワークに接続できなくなったときなどには、WCMが自動的にネットワークを決定する。
WCMでは、「有線LAN」「無線LAN」「モバイルブロードバンドネットワーク(WWAN、無線WAN)」という「インターフェース」を扱う。なお、Windowsは複数のネットワークインターフェースを管理することができる。実際にはこのほかにBluetoothによるネットワーク接続もあるが、Windows 8のWCMはBluetooth経由のネットワークに対しては接続の管理はしていない。また、USB経由のインターネット接続、具体的にはスマートフォンでのUSBテザリングもあるが、これもWCMは管理していない。
なお、アイコンなどを見るとBluetoothやUSBによるネットワーク接続は、有線LANと同じ扱いになっているようだ。WCMでは有線LANは最も優先度が高いため、WCMがBluetoothやUSBによるネットワーク接続を勝手に他のネットワークに切り替えることはない。
有線LANを接続するWindows Connection ManagerBluetooth/USBテザリングも有線扱いなので要注意
また、有線LANに対しては何も制御しないため、自動的に接続されることも接続先を選ぶこともない。このためBluetoothやUSB経由の接続では「従量制課金接続」を設定できない。現実にはモバイルルーターやスマートフォンをBluetoothやUSBで接続して利用することは多いはずだが、従量制課金接続としての設定が不可能なために、Windows UpdateやOneDriveの同期などが有線LANなどと同様に実行されることに注意する必要がある。
Windowsでは、無線LANインターフェースおよびモバイルブロードバンドインターフェースの接続先を「プロファイル」という情報として管理する。これは1つのインターフェースが複数のネットワークに接続する可能性があるからだ。プロファイルにはSSIDや暗号化キーなどの接続に関する情報と、自動的に接続するかどうか、あるいは接続中にもスキャンを行って他の接続先への切り替えを行なうかどうかといったWindows側の設定が含まれている。
「インターフェース」は「プロファイル」を使って「ネットワーク」に接続する。接続されている状態では、インターフェースには、ネットワークに応じたアドレスが割り当てられ、ネットワークの一部となる。つまり、Windowsでは「ネットワーク」とは「インターフェース」と「プロファイル」の組み合わせになる。
Windows Connection Managerの動作を詳しく見ていく
WCMは、簡単にいうと、ネットワーク(インターフェースとプロファイルの組)に優先順位を付け、その優先順位に従って上位のもので接続が可能なものをネットワークとして選択するという仕組みだ。
基本的なルールとしては、複数のネットワークへの同時接続を避け、以下のような方針でネットワークを1つ選択する。
1:有線LAN(イーサーネット)2:現在のセッション中にユーザーが手動で接続したネットワーク3:インターネット接続に最も適したネットワーク4:ドメインとインターネットの両方に接続可能なネットワーク(ドメイン運用時)
有線LANは優先度が一番高く、これが利用可能な状態にあるならばWCMは有線LANを必ず選択する。次に優先度が高いのは、ユーザーが手動で選択したネットワークだ。こうしたネットワークがない場合、あるいは接続中のネットワークでインターネット接続ができい場合には、WCMは別のネットワークへの切り替えを行なう。
なお、Microsoftのサイトにある解説では、有線LANがインターネット接続可能など、接続するインターフェースが切り替わったとき、それ以外のインターフェースに対しては、「ソフト切断」が行なわれるとある。
複数のネットワークインターフェースを持つWindowsでは、このようにネットワークインターフェースが自動で切り替わる可能性がある。しかし、ソフトウェア側は以前のネットワークで割り当てを受けたネットワークアドレスなどを使ったまま通信しようとする。
このため、ネットワークが切り替わった場合、それまで使っていたネットワークを簡単に切断することはできない。たとえば、無線LANを使っているときに、イーサーネットケーブルを接続すれば、有線LANの優先度が最も高いため、WCMは、イーサーネットをネットワーク接続として選択するが、無線LANのほうをすぐには切断せず、以下の手順を用いて「ソフト切断」状態に切り替える。
1. 他のプロファイルが選択されるなどで、利用しないことが決まった接続中のインターフェースは、ソフト切断状態とされる2. ソフト切断が設定されると、該当のインターフェースがもう利用出来なくなったことがTCPスタックに通知される3. 既存のTCPセッションは、切断されないが、新しいTCPセッションはこのインターフェースを使わなくなる4. ただし、新しいセッションがこのインターフェース(アドレス)を指定していて、他のネットワークでは指定された宛先へ接続できない(経路がない)場合には、ソフト切断が指定されたネットワークが利用されることがある5. TCPスタックは、ネットワーク状態に変更があったことをアプリケーションに通知する6. アプリケーションはネットワーク状態の変更イベントを受け取ったとき、可能なら既存の接続を新しいネットワーク向けに切り替える7. Windowsはソフト切断したインターフェースで行われる転送を30秒ごとにチェックして、転送量が一定の閾値以上ならばなにもしない8. 一定の閾値以下になったとき、Windowsはインターフェースを切断する
このようなルールで「ソフト切断」が行なわれ、最終的にはインターフェースが切断される。すぐに切断せずに「ソフト切断」になるのは、通信中にケーブルが接続される(あるいは抜ける)ことがあるなど、インターフェースの切り替えとアプリケーションの動作には関連がなく、できるだけアプリケーションに動作を継続させるためだ。
ただし、無線LANのネットワークの変更などは、インターフェースとしては同一になるため、「ソフト切断」は発生しない。