[Network] | ||||||||||||||
高速なネットワーク・インターフェイスを自動的に選択可能にする―― メトリックを利用したルーティングの制御 ――
|
||||||||||||||
|
解説 |
最近のノートPCには、標準で10/100BASE-TXイーサネット・インターフェイスが標準搭載されるようになった。これによりノートPCユーザーは、ネットワーク・ケーブルを接続するだけで、ネットワークに参加できる。
しかしその一方で、安価になった無線LAN製品も広く普及しつつある。ひと昔前、会議に必要な資料は紙に印刷して、それを参加者に配布するのが常だった。しかし最近では、会議室までノートPCを持ち込んで、資料はコンピュータ・ディスプレイで参照するという人も多いようだ。この際、会議室から無線LANのアクセス・ポイントに接続できるようになっていると、あらかじめハードディスクにファイルをコピーしなくても、普段自分のデスクにいるときと同様にして、会議室からファイル・サーバにアクセスして必要なファイルを取り出したり、最寄りのプリンタからドキュメントを印刷してほかのメンバーに配布したりできるようになる(あまり大声ではいえないが、退屈な会議なら、こっそりWebニュースをのぞいたり、メールをチェックしたりもできる)。
より高速な無線LAN規格も出始めているが、現時点で最も普及している無線LAN技術はIEEE 802.11bだろう。IEEE 802.11bは、2.4GHz帯の無線電波を利用して、最大11Mbit/sの転送レートを実現する無線LAN規格である。ただし11Mbit/sというのはあくまで理論上の最大値で、電波状態などの環境にもよるが、実効レートはおおよそ4〜5Mbit/s程度といったところだ。100BASE-TX(最大100Mbit/s程度)と比較するとかなり遅いが、メールの送受信や一般的なWebページの参照程度なら、これでも問題なく使える。このため人によっては、会議などの移動時だけでなく、自分のデスクにいるときでも、無線LANを使っているというケースもあるようだ。
しかし、場面によっては、どうしても高速な100BASE-TXを使いたいと思うときがある。最も典型的なケースは、大量のデータをバックアップする場合である。例えばノートPCで電子メールを受信しているなら、定期的に受信メールのバックアップをとりたいと考えるだろう。添付ファイルなどもあるので、受信ボックスはすぐに数百Mbytes級のサイズになってしまう。これを遅い無線LANでバックアップするのは厄介だ。
10/100BASE-TXインターフェイスが別にあるなら、大量のデータをバックアップするなどの場合だけ、これにケーブルをつないで、高速な100BASE-TXでファイルを転送すればよい。バックアップが完了したら、ケーブルを抜いて、無線LANを使用するいつもの状態に戻る。
ところでこの際でも、無線LANインターフェイスは有効なまま(接続状態のまま)で操作できると非常に便利である。つまり、100BASE-TXインターフェイスにケーブルが接続されていないときは無線LANを使い、ケーブルを接続すると自動的に100BASE-TX側を(優先して)使い、再度ケーブルを抜くと自動的に無線LANを使うようになるということだ。2つのインターフェイスが利用可能な場合には、高速な方を優先して使わせたいということである。
Windowsでは、ネットワーク・インターフェイスのメトリック値をうまく設定することでこれが可能になる。
ここでいうメトリック(metric=「距離」とか「計量」の意味)とは、ネットワーク・インターフェイスのルート(経路)に割り当てられる値で、そのルートを使用する場合の「通信コスト」を表す。具体的には、リンク・スピード(データ転送速度)やホップ数、遅延時間などからそのルートのコストが計測される。メトリック値が小さいルートほど、通信にかかるコストが小さいということを意味している。実際にはTCP/IPのプロトコル・スタックは、ルーティング・テーブル上に利用可能なルートが複数存在する場合には、このメトリックの小さなルート(インターフェイス)を優先的に使用するようになっている。ルーティングとメトリックの関係などについては「TIPS―ルーティング・テーブルを操作する」などを参照していただきたい。
つまり今回のような場合、100BASE-TXインターフェイスに対して、無線LANインターフェイスよりも小さいメトリック値が割り当てられるようになっていれば、100BASE-TXが使える場合にはそちらを、使えない場合は無線LANを使うようになる。
現在使用しているインターフェイスのメトリック値を確認するには、コマンドラインから「netstat -r」を実行して、IPのルーティング・テーブルを表示すればよい。Windows 2000で「netstat -r」を実行すると、以下のようになる。一番右端に表示されているのがメトリック値である。この例では、すべてが1になっている。Windows 2000では、手動で設定しないかぎり、インターフェイスのメトリック値としてはすべて1が割り当てられる。
C:\>netstat -r |
これに対しWindows XPでは、各ルートに対して自動的にメトリック値が割り当てられる機能が追加された。具体的には、インターフェイスのリンク・スピード(物理的な通信速度)に応じて、以下のメトリック値が割り当てられる。
リンク・スピード | メトリック値 |
200Mbits/sより高速 | 10 |
20Mbits/s超〜200Mbits/s以下 | 20 |
4Mbits/s超〜20Mbits/s以下 | 30 |
500Kbits/s超〜4Mbits/s以下 | 40 |
500Kbits/s以下 | 50 |
(内部ループバック) | 1 |
![]() |
|
リンク・スピードとメトリック値の関係 | |
Windows XPでは、デフォルトではこのようにネットワーク・インターフェイスのリンク・スピードに応じてメトリック値が決定される。メトリック値が小さい方が優先度が高い(通信コストが少ない)とされる。数値の絶対値にはあまり意味はなく、大小関係だけに基づいて判断される。ただしここでいうリンク・スピードとは、各インターフェイスが本来持っている(はずの)物理的な最高速度のことである。無線LANのように、通信状態によって時々刻々と変わる現在の実効通信速度を反映したものではないし、途中で変動したりもしない。 |
つまり100BASE-TXインターフェイスにはメトリック値20が、IEEE 802.11b無線LANインターフェイス(11Mbits/s)にはメトリック値30がそれぞれ自動的に割り当てられることになる。これによりWindows XPでは、この自動メトリック機能により、何の設定を行うことなく、今回の目的を達成できる。Windows XPにIEEE 802.11b無線LANカードと100BASE-TXイーサネットを接続し、netstat -rコマンドを実行すると次のようになった。
C:\>netstat -r |
デフォルトのルートが2つあるが(いずれも同じゲートウェイを指している)、上側のメトリックが30の方が無線LAN、下側のメトリックが20の方が100BASE-TXのイーサネットである。このようにWindows XPでは、各インターフェイスの持つリンク・スピードに応じて、メトリック値が自動的に変わるようになっている。
しかし手元で実験したところでは、最大11Mbits/sのIEEE 802.11b無線LANインターフェイスでありながら、メトリック値として100BASE-TXと同じ20が割り当てられる場合があった(詳細は不明だが、より高速な無線LAN規格も存在するので、それらとまとめて同じように扱われているのかもしれない)。このような場合には、インターフェイスのメトリック値をマニュアルで指定すればよい。また前述のとおり、Windows 2000にはメトリックの自動割り当て機能はないが、マニュアルで指定すれば、今回の目的を達成できる。
操作方法 |
インターフェイスのメトリック値をマニュアル設定する
ネットワーク・インターフェイスのメトリック値を設定するには、コントロール・パネルの[ネットワーク接続](Windows XPの場合。Windows 2000では[ネットワークとダイヤルアップ接続])でインターフェイスのプロパティ・ダイアログを表示し、コンポーネント一覧から「インターネット プロトコル(TCP/IP)」を選択して[プロパティ]ボタンをクリックし、次に表示される[インターネット プロトコル(TCP/IP)のプロパティ]ダイアログの[全般]タブにある[詳細設定]ボタンをクリックし、次に表示される[TCP/IP 詳細設定]ダイアログの[IP設定]タブを表示する。
![]() |
||||||
[TCP/IP 詳細設定]ダイアログ | ||||||
画面はWindows XPでのもの。メトリック値をマニュアル設定するには、チェック・ボックスをオフにし、任意の値を入力する。 | ||||||
|
画面はWindows XPのものである。自動メトリック機能のないWindows 2000では、[インターフェイス メトリック]という名前のエディット・コントロールがあるだけで、チェック・ボックスはない(そしてエディット・コントロールには、デフォルトで「1」が指定されている)。
今回のケース(100BASE-TXとIEEE 802.11b無線LAN)なら、Windows XPでの自動設定に従って、100BASE-TXには20を、無線LANには30をそれぞれメトリック値として指定すればよいだろう。ただしWindows XPでは、100BASE-TXには自動的に20が割り当てられるので、無線LAN側だけをより大きな値に設定して、優先度を下げればよいはずだ。
メトリック値を設定したら、それらが有効になっているかどうか、コマンド・プロンプトから「netstat -r」を実行して確認しておこう。
インターフェイスの切り替えにともなう注意点
以上では、100BASE-TXケーブルの抜き差しによるデフォルト・ルートの変更について解説しているが、このケーブルの抜き差しはいつでも行えるわけではないことに注意していただきたい。その原理を考えると分かるが、これは、100BASE-TXのイーサネット・インターフェイスを有効にしたり、無効にしたりしている。その結果、より優先度の低い無線LAN側のルートが無効になったり、有効になったりして、デフォルト・ルートが切り替わっている。
無線LANインターフェイスに対して割り当てられたIPアドレスは、システムを起動してから終了するまで(DHCPサーバ側で変更したりしなければ)ずっと同じである。それに対してイーサネット側のIPアドレスは、有効になったり、無効になったりする。もしイーサネット側のIPアドレスを使って動作しているアプリケーションがあると、ケーブルを抜いたとたんにTCPやUDPのソケットが無効化され、上位アプリケーションには通信エラーが伝えられる。例えばメールの送受信処理中やInternet Explorerなどを使ったブラウズの途中でケーブルを抜くと、それらのアプリケーションはエラーを起こし、終了してしまうことになる。ファイルの転送やFTPによる送受信処理などもエラーとなるだろう。
だが、実際にはWindowsネットワークにおけるファイル・サービスなどは、通信が一時途絶えたとしても、何度か自動的にリトライを行うようになっている(IPアドレスが変わっても問題ない)。またメールを始めとして、Windows上のアプリケーションは、実際に送受信中でなければIPアドレスが変わったりしてもエラーとはならないものが多いし、ユーザーが明示的に再処理(再表示)などの操作を行えば、問題なく処理を継続できる場合も多い。
このような事情があるため、ネットワーク・ケーブルの抜き差しによるデフォルト・ルートの変更は、まったく問題がないとはいえないが、現実的にはかなりの場面で有効に使えると思われる(特にクライアント用途では)。ネットワークのトラフィックが(明らかに)発生しているときにケーブルを抜き差しするのは問題だが、システムがアイドル状態(外部との通信が行われていない状態)ならば構わないだろう。あえていうならば、システムをサスペンドやリジュームするような感覚で(これらを行う場合は、何も作業をしていないのが普通)、利用するとよいだろう。
この記事と関連性の高い別の記事
- Windows Server 2008で無線LANを利用する(TIPS)
- 安全な来客専用の無線LAN環境を構築する(バッファロー ゲストポート編))(TIPS)
- Windows 2000/Windows XPのICSを活用する(NATを利用する方法)(1)(TIPS)
- WindowsのVirtual Routerで仮想無線LANルーターを構築する(TIPS)
- Windowsでルーティングテーブルを操作する(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。

![]() |
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |