イーサネットとルーティングルータの仕組みを学ぼう(2)

» 2001年06月21日 00時00分 公開
[加地眞也@IT]

 連載の第1回(「ルータの役割とIPネットワークの仕組み」)で述べたように、IPネットワークはノードとノードをつなぐ。だがそれを実際のネットワークで実現するには、さらにもう1つの仕組みが必要だ。それは、物理的なネットワークとの連携である。

ネットワークは1つではない

 よく比喩されることだが、IPアドレスは「住所」のようなものだと思っていい。ただし、住所は1丁目から番号順に並んでいるため所在地が容易に特定できるかもしれないが、IPアドレスの場合はそうはいかない。世界中のどこでどのような番号が使われているか、番号を見ただけですぐには分からないのだ。実はこれこそが、ルーティングの仕組みを理解するための第一歩である。

 ということは、IPアドレスで通信をするのに必要なことが幾つかあるのが分かるはずだ。

  • どこに通信相手がいるのか
  • どのようにしてそのIPアドレスを持つ相手までデータを届けるのか

といった情報や仕組みが必須となる。

 それを知るためには、IPネットワークと物理的なネットワークとの関係を理解する必要がある。ここで登場するのが「イーサネット(Ethernet)」である。

 皆さんが使っているPCやブロードバンドルータを見てみると、まずケーブルを用いてPCからブロードバンドルータへとつながっており、その先はADSL網を経由して再び別のルータへとつながっている。さらに幾つかのルータを経て、Webサーバなどへと接続されている。

物理的に接続されたノード同士の通信を行うイーサネット

 ここで重要なのは、実はネットワークとは「複数の物理的なネットワークが相互に接続されたもの」だということだ。ネットワーク同士を接続する回線がADSL網なのかネットワークケーブルなのかの違いはあるものの*1、一般にルータがそれぞれの間に入って複数の小さなネットワーク同士を接続し、より大きなIPネットワークを構成している。これがもっとも一般的なネットワーク、つまりインターネットの形なのである。ルータとは、複数のネットワークを接続しIP通信を中継する中継基地なのだ。

 小さなネットワーク、という書き方をしたのには理由がある。例えばPCとルータの間(つまりノード間)の接続には、IPネットワークとは別のプロトコルも介在しているのだ。これが前述の「イーサネット」である。図1のネットワーク階層図では、ネットワーク/リンク層に位置している。

図1 ネットワーク階層図 図1 ネットワーク階層図

 イーサネットは、10BASE-T/100BASE-TXで使われるような「ツイスト・ペア・ケーブル」や、10BASE-5などと呼ばれる同軸ケーブルなどの物理的な配線で通信を行うことを前提に考えられたプロトコルだ。階層図では最下位の物理層がこれを示している。

 イーサネットと一言でいっても、実際には「Ethernet II」「IEEE802.3」「IEEE802.2」などの各種仕様が存在している。現在はEthernet IIが多く用いられているが、原理はほぼ同じだ。ここではイーサネットとして総称することにする。このイーサネットは、PCからルータへ、あるいはルータからルータなど、あるネットワーク内で物理的に接続されたノード間での通信を行うためのプロトコルである。つまり、こうした小さな通信が連なることで、遠く離れた国のサーバまで接続されているのだ。

 このような通信を実現するために、PCに挿入するNIC(ネットワーク・インターフェイス・カード)やルータなどの接続ポートには、それぞれ識別番号が割り当てられている。これを「MACアドレス」と呼ぶ。もちろん、IPアドレスとは異なる番号だ。

図2 MACアドレスのフォーマット 図2 MACアドレスのフォーマット
画面1 メルコ BLR-TX4でのMACアドレスの確認例。ポートを2つ持つのでそれぞれのMACアドレスが設定されている 画面1 メルコ BLR-TX4でのMACアドレスの確認例。ポートを2つ持つのでそれぞれのMACアドレスが設定されている
画面2 Windows 2000では「ipconfig /all」コマンドで、搭載されているNICのMACアドレスが確認可能だ(Windows 9xでは「winipcfg.exe」) 画面2 Windows 2000では「ipconfig /all」コマンドで、搭載されているNICのMACアドレスが確認可能だ(Windows 9xでは「winipcfg.exe」)

 MACアドレスは、それぞれのNICが持つ固有の番号だと思ってよい。IPアドレスと同様に全世界でユニークとなるように、各ネットワーク機器メーカーが、製品の出荷時に固有の番号をあらかじめ割り振っている。

イーサネットの通信単位

 イーサネットでの通信では、「フレーム」と呼ばれるデータ単位が用いられる。呼び方は異なるが、IPネットワークの「パケット」と考え方は同じだ。フレームには送信データが格納されるほか、送信先MACアドレスと送信元MACアドレスを含む。この送信データとは、実は「IPパケット」のことである。IPパケットを包含したフレームは、ノードからノードへとデータを順に受け渡し、最終的には目的のノードへとIPパケットを届けるのだ。例えるなら、バケツリレー式にバケツの中の水だけを順々に受け渡していくようなものだと思えばよい。

 このような流れを物理ネットワーク分繰り返し、最終的に目的の送信先ノードへとデータ(IPパケット)が到達した時点で、ノードは送信先IPアドレスから自身へのデータであることを知り、パケットを受け取って上位のプロトコル(を担当するプログラム)へと転送するのである。

 こうしたイーサネットでの通信が行われる物理ネットワークの最小単位を「セグメント」と呼ぶ。ここで、フレームはあくまで1つのセグメント内でしか有効でない点に注意しよう。最後まで到達するのは、あくまでIPパケットだけだ。バケツリレーの例でも、受け渡しているのは水だけなのだ。

*1厳密に言えば、ADSL網はイーサネットとはまた別の「PPPoE(PPP over Ethernet)」という通信規格で電話局側のルータと接続しているのだが、動作としてイーサネットと同じ振る舞いをするので、ここでは省いて考えている。階層図でいえば、ネットワーク/リンク層の違いだけなので、その上位にあたる部分は完全に同じ振る舞いをするわけだ。CATV網、ISDNなどでも同様に、PPPoEとは別のイーサネットに相当する規格が使用されている


経路とルーティングテーブル経路とルーティングテーブル

 ネットワーク、特にインターネットにおいては、先のバケツリレーの際に複数の「経路」が存在する場合がある。つまり、経由するセグメントの組み合わせが複数有り得るということだ。あるいは、たとえ経路が1つしかないとしても、IPアドレスが間違っているなどの理由で、本当に届くのかどうかはIPアドレスの情報だけでは分からない。

 こうした経路選択のために、通常、ルータは「ルーティング・テーブル」と呼ばれる内部情報に「どのIPアドレスへは、どのルータにフレームを転送すべきか」の情報を保持し、通信時に使用する。

画面3 ルーティング・テーブルの例。Windowsなどでは「netstat -rn」コマンドや「route」コマンドでPCでのルーティング・テーブルが参照可能だ(画面をクリックすると拡大表示します) 画面3 ルーティング・テーブルの例。Windowsなどでは「netstat -rn」コマンドや「route」コマンドでPCでのルーティング・テーブルが参照可能だ(画面をクリックすると拡大表示します)

 ルーティング・テーブルは、「送信先IPアドレス」と「担当ルータのIPアドレス」のマッピング表である。あらかじめ各ノードがそれぞれこうした情報を用意することで、ネットワーク間の経路を決定できるようになる。しかし、全社ネットワークなど大規模なネットワークを想定した場合、自分以外のすべてのIPアドレスを把握しなければならないとすると、このルーティング・テーブルは膨大な大きさになる。この解決法を知るには、まず「サブネット」について理解しなくてはならない。

サブネットマスク

 IPアドレスには番号を割り当てる際のルールがあり、前半を「ネットワーク番号」、後半を「ホスト番号」として構成することになっている。

図3 IPアドレスにおけるネットワーク番号とホスト番号 図3 IPアドレスにおけるネットワーク番号とホスト番号

 このようなルールによってグルーピングされた一群のIPアドレスを「サブネット」と呼ぶ。また、ネットワーク番号の範囲を指定するのが「サブネットマスク」と呼ばれるIPアドレスのような数字だ。サブネットマスクでは、ネットワーク番号部分のビットを1として指定する。あるいは、その1のビットの長さを用いて「192.168.10.100/24」などとして、そのIPアドレスでは24ビットまでがネットワーク番号であることを示すこともある。この例では「255.255.255.0」と同じ意味だ。

 ネットワーク番号の範囲は、そのIPアドレスがどの「クラス」(コラム参照)に所属しているかで、最小範囲が決まる。また、管理者がサブネットマスクを設定する(設定はそれぞれのノードごとに必要)ことで、その範囲の変更も行える。サブネットの範囲が変われば認識できるホストの数も変わるので、ネットワーク構築時の大きなポイントとなる。

 さて、上記のルーティング・テーブルにはノード(ホスト)のIPアドレスだけでなく、ノードのサブネットも記載できるようになっている。IPアドレス自体が記載されていなくとも、そのIPアドレスが所属するサブネットのエントリーさえあれば、その経路で送信すればよいからだ。またそのために、同じサブネットに所属するIPアドレスを持つノードは、同一のセグメント内にすべて配置される必要があることに注意しよう。

図4 ルーティング・テーブルによるルーティングの例。「10.10.1.2」のノードでは、デフォルトゲートウェイとして「10.10.1.1」を指定していれば、あとのルーティング処理はルータAが行ってくれる

●ルータA内での処理
「10.10.10.2」の宛先自体は登録されていないが、3行目に「10.10.10.0」のサブネットが登録されていることは分かる。そのため、「10.10.10.2」は必ずこのサブネットにいることが推測できる。そこで、Interfaceとして指定されている「10.10.2.11」のポートからGatewayとなっている「10.10.2.10」のルータAのポートへ、イーサネット・フレームを転送してやればよい

●ルーティングテーブル例(ルータA)
宛先IPアドレス ネットマスク Interface Gateway Metric*1
192.168.10.11 255.255.255.255 192.168.10.10 192.168.10.10 1
10.10.2.0 255.255.255.0 10.10.2.11 10.10.2.11 1
10.10.10.0 255.255.255.0 10.10.2.11 10.10.2.10 1

Metricとは「距離」の意味。幾つルータを越えるか(ホップ数)で示される。ただし、それほど厳密でなくても動作は可能。RIP使用時には経路選択の優先度として使用される
図4 ルーティング・テーブルによるルーティングの例。「10.10.1.2」のノードでは、デフォルトゲートウェイとして「10.10.1.1」を指定していれば、あとのルーティング処理はルータAが行ってくれる

 このようなサブネットの利用で、ルータは同一セグメント内のすべてのIPアドレスを把握しなくとも、サブネット単位で管理すればよいのだ。これにより、ルーティング・テーブルは必要最小限度の大きさで済むことになる。

IPアドレスのあれこれ

 IPアドレスはその番号によってクラス分けがなされている。クラス分けによって異なるのは、ネットワーク番号の範囲だ。本来は、ネットワークの規模(含まれるノードの数)によって使い分けられることを想定していたが、近年のIPアドレスの枯渇問題のために、最近ではクラスCが割り振られることが多くなった。クラスAを取得しても、実際には使いきれるような大きな組織は少ないからだ。

クラス 範囲 サブネットマスクの最小値
A 0.0.0.0〜127.0.0.0 255.0.0.0
B 128.0.0.0〜191.255.0.0 255.255.0.0
C 192.0.0.0〜223.255.255.0 255.255.255.0

クラスDとEも定義されているが、特別な利用のために予約されているため、通常は使用されない


 また、「192.168.1.0/24」などとホスト部(のビット)がすべて0とされている記述がある場合、これはそのサブネット自身を示す特殊なIPアドレス(サブネット・アドレス)である。ルーティング・テーブルでは、このサブネット・アドレスを用いてエントリーを表記している。

 そのほか、「192.168.1.255/24」などと逆にホスト部のビットがすべて1となっている場合は、「ブロードキャスト・アドレス」と呼ばれる。通常のIPアドレスはただ1つのノードしか示さないが、ブロードキャスト・アドレスはそのサブネットに所属するすべてのノードに向けたアドレスだ。どのノードが該当するか分からないため、すべてのノードに対してパケットを受け取らせたい場合などに使用される。


ダイナミック・ルーティング

 こうしたルーティング・テーブルの設定は、個々のマシンやルータごとに行う必要があるが、「RIP(Routing Information Protocol)」というプロトコルを用いるプログラム(UNIXなどではroutedが一般的)を動かすことによって、ルータやノード間で自動的にルーティング・テーブル情報を交換して、テーブルを自動更新させることもできる。現在では、RIP2*2と呼ばれるバージョンが主流だ。結果的に、自身が管理するセグメントでの情報さえ正確に記載しておけば、ネットワーク全体のルーティングテーブルが自動的に作成されるわけだ。

 こうした仕組みを「ダイナミック・ルーティング」と呼ぶ。これに対し、ユーザーや管理者が手動でルーティング・テーブルを作成/管理する方法を「スタティック・ルーティング」と呼ぶ。ブロードバンドルータでも、いずれかの方法の選択が可能だ。通常は、ルーティングを手動で行うか、RIPで行うかなどの設定ができるようになっている。また手動の場合は、ルーティング・テーブルの追加/削除を行うオプションが用意されている。

図5 ダイナミック・ルーティングの動作。ルータCから、B→Aへと順にルーティングテーブルのエントリーが転送されていく様子を示している。Metricが転送されるごとに1ずつ増え、距離がそれだけあることが分かる。この例では、CからAへの一方向しか示してないが、もちろん双方向でこうした自動転送が行える 図5 ダイナミック・ルーティングの動作。ルータCから、B→Aへと順にルーティングテーブルのエントリーが転送されていく様子を示している。Metricが転送されるごとに1ずつ増え、距離がそれだけあることが分かる。この例では、CからAへの一方向しか示してないが、もちろん双方向でこうした自動転送が行える

 ただし、ほとんどの場合、ブロードバンドルータとつながるISP側のルータでは、独自に最適化されたルーティング・テーブルを採用している。気軽にダイナミック・ルーティングにしたり、ルーティング・テーブルを変更することは、ISP全体に悪影響を及ぼす可能性が高いので、通常はスタティック・ルーティングとしておき、それ以上変更する必要はほとんどないだろう。

画面4 メルコ BLR-TX4のルーティング設定画面。上段ではダイナミックかスタティック・ルーティングかを指定できる。下段ではスタティック・ルーティングのためのルーティング・テーブルが管理可能だ 画面4 メルコ BLR-TX4のルーティング設定画面。上段ではダイナミックかスタティック・ルーティングかを指定できる。下段ではスタティック・ルーティングのためのルーティング・テーブルが管理可能だ

デフォルトゲートウェイ

 ブロードバンドルータに接続するPCでも、同様にこうしたルーティングの仕組みが動作しており、ルーティング・テーブルを元にしたルーティングが行われている。しかし、その保守は通常のルータほど複雑なものにはならない。それは「デフォルトゲートウェイ」という考え方があるためだ。

 デフォルトゲートウェイとは、「ルーティング・テーブルに載っていないIPアドレスへの送信時に、最終的に利用するルータのIPアドレス」のことだ。ルーティング・テーブルは保持するものの、ほとんどのPCではデフォルトゲートウェイとしてブロードバンドルータを指定しさえすれば、通信できるようになっている。なぜなら、外部との出口はそのブロードバンドルータでしかありえないからだ。

 こうしたデフォルトゲートウェイのみの設定は、部門ネットワークやSOHO環境など、セグメントの比較的小さなネットワーク環境では標準的な設定である。

*2実は、前述したルーティング・テーブルの使用方法は、RIP2を前提にしたものだ。RIP2はサブネットを使用するが、RIPではサブネットマスクを使用しないため、各クラスでのデフォルトのネットワーク番号のみ利用する。現在では、まずRIP2しか使われないと思っていい


MACアドレスをどうやって知る?

 ルーティング・テーブルの図を見ると、ルーティング・テーブルにはIPアドレスしか記載されていないことが分かる。しかし実際には、イーサネットの通信において、そのIPアドレスを持つノードのMACアドレスに対してフレームを転送しなくてはならない。単純にIPアドレスからMACアドレスを推測するのは不可能なのだが、どのように変換すればよいのだろうか?

 実は、IPアドレスを元にノードにMACアドレスを問い合わせるARP(Address Resolution Protocol)というプロトコルが用意されている。ARPは、セグメント全体に「このIPアドレスを持つノードのMACアドレスは何か?」という問い合わせを行い、該当するノードがMACアドレスを返答する。これにより、イーサネットは該当するノードのMACアドレスに対してフレームを転送できるようになる。

 なお、このように入手したIPアドレスとMACアドレスの対照表を「ARPテーブル」と呼び、ノードやルータは一定時間キャッシュするのが普通だ。キャッシュによって、頻繁に通信するノードにいちいちARP問い合わせをする必要が減るからだ。ARPテーブルは、Windowsでは「ARP」コマンドによって確認することができる。


今回のポイント

(1) イーサネットは物理的な最小のネットワーク単位であるセグメント内をつなぐ。IPパケットをバケツリレーのようにして転送する

(2) ルーティングテーブルによってフレームのルーティング先が決定される。ルーティングテーブルの管理方法には、「スタティック・ルーティング」と「ダイナミック・ルーティング」とがある


【お詫びと訂正】

画面2の注釈で「Windows 2000では「ipconfig -a」コマンドで、搭載されて〜」となっていましたが、ipconfigコマンドのオプションは「ipconfig /all」の誤りでした。ここに訂正させていただき、ご迷惑をおかけした読者の方々にお詫びさせていただきます

(2001/10/27)



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。