3.3.1 セグメント間通信

セグメントを越えた通信は IP アドレスとMACアドレスの両方をうまく使うことで 成り立っています。IPアドレスについては次の節で詳しく説明しますが、ここで は IP アドレスはインターネット上の唯一性を保証するアドレスであるという だけの前提で解説をします。

ホストAnon は図のように、IP アドレス A ,MACアドレス a を持ち、ホスト Blue ( IP B, MAC b )と通信しようとしているとします。但し、ホスト Anon の属するセグメントとホストBlueの属するセグメントは異なっていますが、 Routerを介してつながっているとします。

\epsfile{file=connect-seg}

この状況で、まずホスト Annon は、自身のIP A と相手のIP B を比較し、 同じセグメントにないことを発見します(IP のどこを見れば同じセグメントか 否かが分かるかは次の節で解説します)。すると、ホスト Annon は、直接通信は出来ないので、Router(IP Rx)に中継を頼むことにします。 ここで、ホスト Annon は、中継をしてくれる Router (IP Rx) は最初から知っているとします(実際の設定でも、静的に設定することも ありますし、半動的にDHCPなどで設定ファイルが書かれる場合もあります。勿論 、更に進んで常に動的に決定される場合もあります)。そこで、Router の IP Rx を自身のIP A と比較して、同じセグメントであることを発見すると、 Router 宛に Blue 宛の通信パケットを送ります。この際に、まず、ARPを 用いて、Router のMACアドレス rx を取得し、データパケットのヘッダと して、宛先IP アドレスはBlueの B であるにもかかわらず、宛先MACアドレス としては Router の MACアドレスrxを指定して、パケットを送り出します。 当然、Router は自身宛のMACアドレスが宛先に書いてある訳ですから、この パケットを受け取って、データリンク層からネットワーク層に送ります。 Routerのネットワーク層では、自分宛ではなく、ホストBlue (IP B)で あることを発見しますが、中継をするように設定された Router は親切にも、 自身の内部にある表(ルーティングテーブルという)を検索し、Blue が 自分のインターフェースの先にあることを発見し(同じセグメント)、 ARPを用いて相手先のMACアドレスb を解決して、ホストBlue宛にパケットを 送り出し、これによってめでたく、ホスト Annon から ホスト Blue 宛の パケットが到着した訳です。

このようにして、中継機能をもったマシンを一般にルータと呼んでいます。 ルータは、中継機能を持っていれば良く、専用ルータである場合もあれば、 通常のUnixやあるいはWindowsである場合もあります(最近のWindows2000や XPには中継機能が実装されています)。この中継自体は IPフォワーディング (IP forwarding)と呼ばれ、どの方向に向かって送り出すかを予め決定する ことをルーティング(経路制御)と言います。今の例では、ルータは Router で、2つのインターフェースを持つだけ(足が2つという言い方をします)で したが、たくさんの足があっても構いません。また、上記のメカニズムに よれば、ルーティングテーブルさえ正しく管理されていれば、インターネット 上のどこにでもパケットは正しく届く筈です。つまり、実は重要なのは このルーティングテーブルだと言う事になりますが、これを正しく保つのは 中々大変なことで、自動的なツールを使っても設定間違いでネットワーク の一部が止まることが今でも時々あります。

Unix 上でもWindows上でも、ルーティングテーブルを見るには以下のように します(表示は違いますが、コマンドは同じです)。

> netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            10.16.164.254      UGSc        4       68   nge0
10.16.164/24       link#1             UC          3        0   nge0
10.16.164.33       00:00:39:00:00:01  UHLW        1    25675   nge0   1121
10.16.164.110      00:90:cc:01:c0:11  UHLW        6   402346    lo0
10.16.164.254      00:00:0c:02:d0:21  UHLW        5        3   nge0    418
127.0.0.1          127.0.0.1          UH          5      448    lo0

上で表示をしているマシンはUnixですが、単なるクライアントですので、多くの 足を持っている訳ではなく、単純に先の例と同じく、同一セグメント以外のホスト に対しては、一行目の default の次の列にある 10.16.164.254 に 全てのパケットを中継して貰うように設定されています。



Noriyo Kanayama