同じセグメント内のホスト同士の通信では、そのLANで使われているプロトコルを使って通信する。そのためIPの各実装では、そのLANで使われているプロトコルから完全に独立することはできない。
まず、送信先となるIPアドレスを持つホストにデータリンク層のデータとして送信するために必要な情報を収集しなければならない。 例えばイーサネットであれば、送信先となるIPアドレスを持つホストのインターフェースが持つMACアドレスである。 そのためにブロードキャストによって「このIPアドレスの人は返事して!」とメッセージを送る。 そのIPアドレスを持っているホストはそれに対して返答する。 その返答の送信元が、送信先IPアドレスを持つホストのMACアドレスである。
これは後述するルータやゲートウェイかも知れない。 ルータやゲートウェイは、自身が知っている(転送しなければならない)IPアドレスに関してブロードキャストされていたら、本来そのIPアドレスを持つホストの代わりに返事をする。
なお、一般にブロードキャストは負荷が高くLAN内の通信を阻害するため、こうして得られたMACアドレスは今後同じIPアドレスに送信するときにはブロードキャストせずに再利用できるように、キャッシュに控えておく。
IPの実装では、こうしたアドレス解決と実際の送受信部分だけはデータリンク層のプロトコルに依存することになる。 しかしこの依存部分は、実際にそのデータリンク層のプロトコルを使うホストでだけ必要になるため、世界中に散らばる各セグメントとの通信の際には問題にならない。 異なるデータリンク層のプロトコルを使うセグメントに分かれたホスト同士の通信の場合は、後述するゲートウェイがこれを解決する。
セグメントとセグメントの間、あるいはセグメントとWANの間にはルーティング(routing)を行なうための特別なホストであるルータ(router)がある。 ルータにはあらかじめ、自身が繋がれているそれぞれのセグメントにいるホストのIPアドレスを教えてある。 これはルーティングテーブルと呼ばる。 ルータは、一方のセグメントのホストから他方のセグメントのホストにパケットが送られようとしていると、一旦後者のホストの代わりにパケットを(前者のLANのプロトコルで)受け取り、ルーティングテーブルを参照してどのセグメントに送ればいいかを選択し、そのパケットを後者のLANのプロトコルで後者のホストに送る。 ルータはルーティングテーブルによって、あるIPアドレスに送るにはどのセグメントに送ればよいかを把握している。一部が破壊されても、このルーティングテーブルを書き換えるだけで破壊箇所を迂回することが可能になる。
ルータと似ているが、ルーティングテーブルを持たないが異なるLANのプロトコルを変換して右から左、左から右に中継するだけのものにはブリッジと呼ばれるものがある。しかしブリッジはIPより下位の層(OSI参照モデルのデータリンク層)の話でありIPのことなど知らないので割愛する。
また特に、異なるプロトコルを用いるセグメント同士の間をつなぐルータはゲートウェイ(Gateway; Gate=門, way=道)と呼ばれる。 本来ゲートウェイはOSI参照モデルのネットワーク層におけるブリッジに相当するルータの基本機能の一部なのだが、セグメントのほとんどがイーサネットになっているため、特にセグメントとWANとの間にあるルータだけがゲートウェイであることが多い。 またルータが知らないIPアドレスは(ルーティング処理の一環として)全てデフォルトゲートウェイと呼ばれる特別なゲートウェイに送られる。デフォルトゲートウェイは通常WANとの接続部分にあるため、未知のIPアドレスへのパケットは全てWAN側(外の世界)のルータにパケットを送信することになる。 そしてWANのルータが送信先となるIPアドレスの存在するセグメントのゲートウェイにパケットを送信し、ゲートウェイが送信先となるIPアドレスを持つホストにパケットを送信することで世界中のホストと通信が行なわれる。
RFC
⇒RFC 791 - Internet Protocol
⇒RFC 1112 - Host Extensions for IP Multicasting
⇒RFC 1518 - An Architecture for IP Address Allocation with CIDR
⇒RFC 1519 - Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy
⇒RFC 1817 - CIDR and Classful Routing
⇒RFC 2101 - IPv4 Address Behaviour Today
カテゴリ: インターネットのプロトコル | RFC
更新日時:2008年8月13日(水)10:44
取得日時:2008/10/08 22:25