「IPで通信する端末は、まず最初に相手が自分と同じネットワーク(サブネット)に属しているかどうかを調べ、ネットワークが異なればルータを経由して通信する」必要がある。本パートでは、こういったルータで接続された2つのサブネット間で行なわれる通信について解説し、ルーティングの基本動作を押さえていく。
直接通信できない場合はルーティング
まずは、前回のおさらいを兼ねて、サブネットマスクの設定を間違った場合を見てみよう。たとえば、クラスBのネットワークを256のサブネットに分割したネットワーク内で、あるPCだけサブネットマスクの設定をしなかった場合を考えてみる。
このネットワークでは、すべての機器のサブネットマスクに255.255.255.0(24ビット長)を設定する必要がある。しかし、うっかり間違って「IPアドレス:172.16.1.1、サブネットマスク:未設定」とした場合、このPCのサブネットマスクは255.255.0.0(16ビット長)になってしまう。これは、RFC 1878においてクラスBのサブネットマスクがデフォルトの値として規定されているからだ。したがって、このPCから172.16.2.xxxや172.16.204.xxxといったIPアドレスの機器とは通信できない。
データの送信元の端末は、通信相手が自分と異なるネットワークに属している場合、パケットをルータに送り、宛先のネットワークへ向けて中継を依頼することになっている。中規模以上のネットワークでは、1つのセグメント内に複数のルータが設置されていることもある。そういった場合、送信元の端末は宛先の端末の所属に応じて、正しいルータにパケットの中継を依頼しなければならない(図1)。このように、パケットの配送経路(Route)を決定する動作を「ルーティング」と呼ぶ。
図1 直接通信とルータによる中継
図1の例でいえば、PC1とPC2は同一のサブネットに存在しているため、直接通信によってパケットを送ることができる。しかし、PC1から異なるネットワークにある端末にパケットを送る場合には、あらかじめデフォルトゲートウェイとして指定されたルータに中継を依頼する必要があるわけだ。
ルーティングはルータやレイヤ3スイッチの機能として説明されることが多いが、実際にはIPで通信する端末はすべてルーティングを行なっている。クライアントPCやプリンタなどの機器も例外ではない。プリンタ/FAXなどの複合機などにはUNIX系のOSを搭載した高度なルーティング機能を備えた機種もあるが、ほとんどは最小限のシンプルな動作に限定されている。ここではクライアント系OSであるWindowsを主な例として、ルーティングの動作を説明する。
ルーティングテーブル
通信相手が自分とは異なるネットワークにある場合、まず送信元端末は「相手のネットワークまでパケットを送るには、配送経路をどうすべきか」を判断しなければならない。この判断の拠りどころになるのが「ルーティングテーブル」と呼ばれるデータベースだ。Windows XPでルーティングテーブルを表示した結果は、画面1のようになっている。
画面1 ルーティングテーブルの見方
この例は、ルーティングテーブルを表示させるコマンドの“routeprint”を用いたものだ。なお、ホストのネットワーク接続状態やインターフェイスごとのネットワーク統計などを確認するための“netstat”コマンドに“-r”オプションを付けることでも同じ結果を得ることができる。
コマンドプロンプトでroute printコマンドを実行すると、画面1のように、コマンドを実行した端末のインターフェイスの一覧が表示される。その下に表示されているのが登録されているルーティングテーブルである。このルーティングテーブルで表示される各項目を左側から順に説明しよう。
「Network Destination」は宛先ネットワークを意味する。「Netmask」はサブネットマスクで、この値と通信相手のIPアドレスの論理積を計算し、パケットの宛先ネットワークを求める。次の「Gateway」が、パケットの中継を依頼するルータのIPアドレスだ。
「Interface」は端末がパケットを送り出すLANポート(ネットワークインターフェイス)のIPアドレスである。一番右の「Metric」は優先順位を指す。詳しくはあとのパートで述べるが、同じルートが複数存在する場合、どれを優先するかを決めるために使われる値で、数値が小さいほうが優先される。
次に、このルーティングテーブルの各行を見ていこう。1行目は「他に選択肢がない場合の経路」を意味する「デフォルトルート」である。デフォルトルートの「Network Destination」と「Netmask」は、ともに「0.0.0.0」が使われる。デフォルトルートについては、あとでもう一度詳しく説明する。
2行目は「ローカルループバック」で、「同じ端末内のプログラム同士の通信経路」を意味する。ローカルループバックのネットワークアドレスには127.0.0.0/8、インターフェイスのIPアドレスには127.0.0.1が使われる。この経路を利用した場合、パケットは端末の外には出て行かない。
3行目は「ローカルルート」で、「同じネットワーク(サブネット)内の経路」を意味する。ローカルルートの宛先は端末の属するネットワークアドレスで、「Gateway」は端末のIPアドレスと一致する。
4行目は「ホストルート」である。ホストルートの宛先は“IPアドレス/32”で表現される。通信相手となる端末が属するネットワークではなく、端末ごとに経路を制御する場合に使用する。Windowsの場合、自分自身に向けてのホストルートだけが自動的に登録される。
これ以降の、5行目と7、8行目は「ブロードキャスト」、6行目は「マルチキャスト」という特別な経路情報を意味する。ブロードキャストはサブネット内のすべての端末に対して、マルチキャストは特定のグループに対して同報通信を行なうというものである。