ルータのデータ転送の流れ

ルータのデータ(IPパケット)の転送の流れは以下のようになります。

  1. ルーティング対象のIPパケットを受信する
  2. 宛先IPアドレスからルーティングテーブル上のルート情報を検索して、転送先を決定する
  3. レイヤ2ヘッダを書き換えてIPパケットを転送する

なお、ルータがIPパケットを転送するには、あらかじめルーティングテーブルに転送先のネットワークの情報(ルート情報)が登録されていることが大前提です。

ルーティングの大前提

ルーティングテーブルが完成していることがルーティングの大前提。知らないネットワークにはデータ(IPパケット)を転送できません。

以下のネットワーク構成でホスト1からホスト2にIPパケットを送信する場合を例にして、ルータがIPパケットを転送していく様子を解説していきます。

ルータのデータ転送 ネットワーク構成例

すべてイーサネットインタフェースとしています。また、ネットワーク構成を簡単にするために、レイヤ2スイッチを介さずに各イーサネットインタフェース間を直接接続しているものとします。

ルーティング対象のIPパケットの受信 R1

ルータがルーティングする対象のIPパケットは、以下のようなアドレス情報のパケットです。

宛先レイヤ2アドレス(MACアドレス):ルータ
宛先IPアドレス:ルータのIPアドレス以外

ホスト1からホスト2宛てのIPパケットは、まず、R1へ転送されます。そのときのアドレス情報は、以下のようになっています。

宛先MACアドレス:R11
送信元MACアドレス:H1
宛先IPアドレス:192.168.2.100
送信元IPアドレス:192.168.1.100

宛先MACアドレスがR1のもので、宛先IPアドレスはR1ではなくホスト2のIPアドレスです。受信したIPパケットはルーティング対象のIPパケットです。

なお、ホスト1がまずR1へ転送するためには、ホスト1はR1のIPアドレスを知っている必要があります。それが、ホスト1のデフォルトゲートウェイの設定です。ホスト1のデフォルトゲートウェイとして、R1の192.168.1.254を設定している必要があります。そして、デフォルトゲートウェイのIPアドレスからARPでMACアドレスを解決します。

ルーティングテーブルの検索 R1

R1はルーティング対象のパケットの宛先IPアドレスに一致するルーティングテーブルのルート情報を検索します。宛先IPアドレス192.168.2.100に一致するルート情報は192.168.2.0/24です。そのため、転送先のネクストホップ(次のルータ)は192.168.0.2、すなわちR2であることがわかります。


R1 ルーティング対象IPパケットの受信とルーティングテーブルの検索

図では、例としてHTTPのデータとしています。ルータは単純なルーティングを行うときにはトランスポート層以降の部分はチェックしません。

レイヤ2ヘッダを書き換えてIPパケットを転送 R1

R1はルーティングテーブルのルート情報から受信したIPパケットを192.168.0.2(R2)へ転送します。そのために、R2のMACアドレスが必要です。ルーティングテーブル上の一致するルート情報のネクストホップアドレスである192.168.0.2のMACアドレスを求めるためにARPを行います。ARPで宛先MACアドレスR21がわかれば、新しいイーサネットヘッダに書き換えてIPパケットをインタフェース2から転送します。レイヤ2ヘッダであるイーサネットヘッダはまったく新しくなります。しかし、IPヘッダのIPアドレスはまったく変わりません。

  • IPヘッダでは、TTLを-1して、それにともなってヘッダチェックサムの再計算を行います。
  • ルータでNATを行うときにはIPアドレスが書き換えられます。単純なルーティングを行うときには、IPアドレスは変わりません。

R1 レイヤ2ヘッダを書き換えてIPパケットを転送

ルーティング対象のIPパケットの受信 R2

R1から転送されたIPパケットはR2で受信します。このときのIPパケットのアドレス情報は以下のとおりです。

宛先MACアドレス:R21
送信元MACアドレス:R12
宛先IPアドレス:192.168.2.100
送信元IPアドレス:192.168.1.100

ホスト1が送信したものとMACアドレスは書き換わっていますが、IPアドレスは同じです。宛先MACアドレスがR2のMACアドレスで宛先IPアドレスはR2のIPアドレスではありません。これはルーティング対象のIPパケットです。

ルーティングテーブルの検索 R2

R2はルーティングするために宛先IPアドレス192.168.2.100に一致するルート情報を検索します。すると、192.168.2.0/24のルート情報が見つかります。ネクストホップは直接接続となっていて、最終的な宛先IPアドレス192.168.2.100はR2と同じネットワーク上だということがわかります。


R2 ルーティング対象IPパケットの受信とルーティングテーブルの検索

レイヤ2ヘッダを書き換えてIPパケットを転送 R2

R2はルーティングテーブルのルート情報から、IPパケットの最終的な宛先である192.168.2.100(ホスト2)は、R2のインタフェース2と同じネットワーク上にいることがわかります。ホスト2へIPパケットを転送するためには、ホスト2のMACアドレスが必要です。そこで、IPパケットの宛先IPアドレス192.168.2.100のMACアドレスを求めるためにARPを行います。

ARPでホスト2のMACアドレスH2がわかれば、新しいイーサネットヘッダを付けて、R2のインタフェース2からIPパケットを転送します。やはり、R2で受信したときとはMACアドレスは変わりますが、IPアドレスは同じです。


R2 レイヤ2ヘッダを書き換えてIPパケットを転送

R2で転送したIPパケットは無事に最終的な宛先となっているホスト2まで届くことになります。

また、以降の解説は省略しますが、通信は原則として双方向であるということをあらためて思い出してください。

ホスト1からホスト2へ何かデータを送信すると、その返事としてホスト2からホスト1へデータの送信が発生します。ホスト2からホスト1へ送信するデータも同じようにルータが宛先IPアドレスとルーティングテーブルから転送先を判断します。そして、レイヤ2ヘッダを書き換えながら転送していくことになります。

こうしたルータのルーティングの動作は、前述のように「ルーティングテーブルが完成していることが大前提」です。このことは、ルーティングの解説でくどいぐらいに書きますが、とても大事なことなので忘れないでください。

ルーティングは電車の乗り換えのようなイメージ

ルータがIPパケットをルーティングするときに、イーサネットヘッダなどのレイヤ2ヘッダが書き換わっていきます。レイヤ2は同じネットワーク上のデータの転送を行う役割があります。ルータを超えるとネットワークが変わるので、レイヤ2ヘッダも書き換わっていきます。このようなルータを超えると、レイヤ2ヘッダが書き変わっていくことは、電車の乗り換えのようなイメージで考えてください。

ネットワークの通信で最終的な宛先が他のネットワーク上に接続されているというのは、電車で行きたい駅が最寄駅とは電鉄会社または路線が違うようなイメージです。電鉄会社や路線が違うと、直通で目的の駅までは行けません。ターミナル駅で乗り換えしなければいけません。ターミナル駅がルータに相当します。

TCP/IP通信では、最終的にIPパケットを宛先のホストまで届けるようにします。そのために、同じネットワーク上の転送をどんどん繰り返します。同じネットワーク上の転送のために、イーサネットなどのレイヤ2ヘッダを付けていきます。ルータを超えてネットワークが変わると、レイヤ2ヘッダも変わっていきます。

IPパケットに相当するのが、目的の駅まで行きたい人です。電鉄会社が違うと、一本で目的の駅には行けないので、ターミナル駅で電車を乗り換えていきます。レイヤ2ヘッダが電車に相当するイメージです。

そして、ルーティングでも電車の乗り換えでも大事なことは、きちんと宛先を知っていることが大前提です。ルーティングではルータのルーティングテーブルがきちんと完成していなければいけません。目的の駅まで到達するためには、どこでどの電車に乗り換えればよいかがわかっていなければいけないのと同じです。


ルーティングと電車の乗り換え

IPルーティングのキホン