ルータのデータ転送の流れ(続き)
【ルータR2】ルーティング対象のIPパケットの受信
ルータR1から転送されたIPパケットは、ルータR2が受信します。このときのIPパケットのアドレス情報は次のとおりです。
- 宛先MACアドレス:R21
- 送信元MACアドレス:R12
- 宛先IPアドレス:192.168.2.100
- 送信元IPアドレス:192.168.1.100
全ページの最後に述べたように、MACアドレスは書き換わっていますが、IPアドレスはホスト1が送信したものと同じです。宛先MACアドレスはルータR2のものですが、宛先IPアドレスはルータR2のものではありません。ホスト2のIPアドレスです。
【ルータR2】ルーティングテーブルの検索
ルータR2は受信したIPパケットをルーティングするために、宛先IPアドレス192.168.2.100に一致するルート情報を、自分が持っているルーティングテーブルから検索します。すると、「192.168.2.0/24」のルート情報が見つかります。ネクストホップは「直接接続」となっていて、最終的な宛先IPアドレス192.168.2.100はルータR2と同じネットワーク上であることが分かります。
【ルータR2】レイヤ2ヘッダを書き換えてIPパケットを転送
IPパケットの最終的な転送先である192.168.2.100(ホスト2)が、自分のインタフェース2と同じネットワーク上にあることが分かったルータR2は、ホスト2へIPパケットを転送しようとします。しかし、それにはホスト2のMACアドレスを知る必要があります。
そこで、ルータR1はARP(⇒本連載第2回)を行って、ネクストホップアドレス192.168.0.2からMACアドレス(どちらもルータR2)を求めます。ARPにより、宛先(ルータR2)MACアドレスが「R21」だと分かります。
そこで、ルータR2はARPを行って、宛先IPアドレス192.168.2.100(ホスト2)のMACアドレスを求めます。すると、それが「H2」だと分かります。
そうしたら、ルータR2は、IPパケットに新しいイーサネットヘッダを付けてインタフェース2からホスト2に向けて転送します。新しいイーサネットヘッダの宛先MACアドレスは「H2」で、送信元MACアドレスは「R22」です。このルータR2によるルーティングにおいても、MACアドレスはすっかり書き換えられた一方、IPアドレスは全く変わっていません。
以上で、ホスト1から送信されたIPパケットは、ルータR1、ルータR2のルーティングを経て、最終的な宛先であるホスト2まで無事に届けられます。
忘れないで!「通信は双方向」という原則
IPパケットがホスト2に届けられた以降の解説は割愛しますが、「通信は原則として双方向である」ことを思い出してください。
ホスト1からホスト2へ何かデータを送信すると、その返事として、ホスト2からホスト1へデータが送信されます。ホスト2からホスト1へ送信する場合にも同じように、ルータが宛先IPアドレスとルーティングテーブルから転送先を判断します。そして、レイヤ2ヘッダを書き換えながら転送していくことになります。
ただし、こうしたルータのルーティングの動作は、前述のように、
「ルーティングテーブルが完成していることが大前提」
です。
ルーティングは電車の乗り換えのようなイメージ
ルータがIPパケットをルーティングするとき、イーサットヘッダなどのレイヤ2ヘッダが書き換えられます。これは、レイヤ2の役割が同一ネットワーク上でのデータ転送であり、ルータを越えるとネットワークが変わるためです。この「ルータを越えるとレイヤ2ヘッダが書き換えられる」ことは、電車の乗り換えをイメージするとよいでしょう。
通信データの最終的な宛先が他のネットワーク上にあるというのは、「電車で行きたい駅が、最寄駅とは違う電鉄会社または路線にある」のに似ています。電鉄会社や路線が違うと、直通で目的の駅までは行けません。ターミナル駅で乗り換えなければいけません。このターミナル駅がルータに相当し、目的の駅まで行きたい人がIPパケットに、レイヤ2ヘッダの情報(送信元/宛先のMACアドレス)が乗車駅と下車駅に相当します。
図6の下段では、A駅とX駅、X駅とY駅、Y駅とB駅がそれぞれ同じ電鉄会社/路線にあります。A駅からB駅に行くのには、X駅とY駅というターミナル駅で乗り換える必要があります。切符もA駅→X駅、X駅→Y駅、Y駅→B駅という3枚が必要です。つまり、ターミナル駅を越えるたびに、乗車駅と下車駅が変わっていきます。
ネットワークでも同様で、図6の上段のように、ホスト1→ルータR1、ルータR1→ルータR2、ルータR2→ホスト2と、2つのルータ(ターミナル駅)でネットワークを越えて(乗り換えて)、最終的な宛先までIPパケットを届けます。ルータでは毎回、送信元MACアドレス(乗車駅)と宛先MACアドレス(下車駅)が書き換えられます(切符が変わります)。
一方で、A駅からB駅へ行くこと、つまり、ホスト1からホスト2へIPパケットを届けることは、最初から最後まで変わりません。
そして、ルーティングでも電車の乗り換えでも、宛先をきちんと知っていることが大前提です。ルーティングでは、ルータのルーティングテーブルがきちんと完成していなければいけません。目的の駅まで到達するためには、どこでどの電車に乗り換えればよいかが分かっていなければいけないのと同じです。