二つのネットワークを仲介するネットワーク機器のうち、Layer3で仲介する機器を「ルータ」と呼びます。昨今は「Wi-Fiルータ」という名称でおなじみかもしれませんね。ただこの「Wi-Fiルータ」という名称で呼ばれる機器が、実際に「ルータ」としては動作していないことも多々あるのでネットワーク技術に携わるものとしては用語用法に注意が必要です。それでは「ルータ」の掟を解説しましょう。なおLayer3プロトコルのうち、ここではIPプロトコルで仲介するものに絞って解説を進めるのでご承知おきください。とはいえ、今日では、IP以外のLayer3プロトコルをルータで仲介するケースはほぼないでしょうから、IPだけ理解していれば十分でしょう。
IP「ルータの掟!」
IPルータは次のような掟で動作していると考えることができます。
- あるポートに受信した(IPパケットを含む)フレームについて、自身のMACアドレス宛、かつ受信ポートに設定した自身のIPアドレス宛であるものは自身あてとして処理する
- あるポートに受信した(IPパケットを含む)フレームについて、自身のMACアドレス宛、かつ受信ポートに設定した自身のIPアドレス宛ではないものは、他へ転送するべきものとしてフレームからIPパケットを取り出す
- 他へ転送するべきIPパケットの宛先IPアドレスが、自身のもつポートに設定したIPアドレスの中で同一のセグメントのものがあればそのポートを「送信するポート」に使う。自身のもつポートに設定したIPアドレスの中で同一のセグメントのものがない場合、宛先IPアドレスをルーティングテーブルと照合し、宛先IPアドレスに到達できる次のゲートウェイ(ルータ)のIPアドレスを得て、そのゲートウェイのIPアドレスと同じセグメントに接続しているポートを「送信するポート」に使う。
- 以下をセットしたL2フレームを生成し、「送信するポート」から、送信する。
- ソースMACフィールド:「送信するポート」のMACアドレス
- 宛先MACアドレスフィールド
- 宛先IPアドレスが「送信するポート」に設定したIPアドレスと同一のIPセグメント内であればARPテーブル上にある当該IPアドレスに紐づいたMACアドレス
- 異なるセグメント宛であればARPテーブル上にあるゲートウェイ(先にルーティングテーブルから得た当該ネットワークへのゲートウェイ)のIPアドレスに紐づいたMACアドレス
「ルータの掟!」で理解するルータ動作1 一つのルータを超える場合
では「ルータの掟!」でルータの動作を検証してみましょう。
なおここから先の図解説明では、IPパケットを乗せたL2フレームのフォーマットを図1のように簡略化して使用します。
それぞれ
DstMAC:宛先MACアドレス
SrcMAC:ソースMACアドレス
SrcIP :ソースIPアドレス
DstIP :宛先IPアドレス
「10.1.1.0/24」と「10.1.2.0/24」という二つのセグメントを「ルータ1」が、「10.1.2.0/24」と「10.1.3.0/24」という二つのセグメントを「ルータ2」がそれぞれ仲介しているものとします。
「10.1.1.0/24」セグメントにあるPC1「10.1.1.20」から「10.1.2.0/24」セグメントにあるPC2「10.1.2.20」に向けたIPパケットの転送を考えます。
- PC1は、自身のIPアドレス「10.1.1.20」をSrcIPアドレス、PC2のIPアドレス「10.1.2.20」をDstIPアドレスにセットしたIPパケットを生成します。
- PC2のIPアドレス「10.1.2.20」が自身のIPアドレスとは別セグメントであるため、自身の持つルーティングテーブルを参照し、PC2のIPアドレス「10.1.2.20」を含むネットワークへのゲートウェイ「10.1.1.1」を見つけます。
- ARPテーブルを参照しゲートウェイ「10.1.1.1」のMACアドレスを得ます。
- PC1は、DstMACにゲートウェイ「10.1.1.1」のMACアドレス、SrcMACに自身のMACアドレス、Payloadに生成したIPパケットをセットしたL2フレームを生成し送信します。
- ルータ1は、「10.1.1.0/24」セグメントに接続したポートで前項フレームが、自身のMACアドレス宛、かつ受信ポートに設定した自身のIPアドレス宛ではないため、他へ転送するべきものとしてフレームからIPパケットを取り出します。
- IPパケットの宛先IPアドレス「10.1.2.20」は、ルータ1自身のもつポートに設定したIPアドレスのうち、「10.1.2.1/24」と同一のセグメントであるため、そのポートを「送信するポート」に使うことにします。
- ARPテーブルから「10.1.2.20」に紐づいたMACアドレス「E」を得てDstMACにセット、「送信するポート」のMACアドレス「C」をSrcMACにセット、Payloadに取り出したIPパケットをセットしたL2フレームを生成し送信します。
- ルータ1から送信されたL2フレームのDstMACの値「C」を自身のMACアドレスに持つPC2が、フレームを受信し、DstIPが自身のIPアドレスであるため、IPパケットを取り出し処理します。
こうしてPC1から送信されたIPパケットがPC2に届きます。
「ルータの掟!」で理解するルータ動作2 複数のルータを超える場合
今度は、「10.1.1.0/24」セグメントにあるPC1「10.1.1.20」から「10.1.3.0/24」セグメントにあるPC3「10.1.2.20」に向けたIPパケットの転送を考えます。
- PC1は、自身のIPアドレス「10.1.1.20」をSrcIPアドレス、PC3のIPアドレス「10.1.3.20」をDstIPアドレスにセットしたIPパケットを生成します。
- PC2のIPアドレス「10.1.2.20」が自身のIPアドレスとは別セグメントであるため、自身の持つルーティングテーブルを参照し、PC2のIPアドレス「10.1.3.20」を含むネットワークへのゲートウェイはないものの、デフォルトゲートウェイ(宛先ネットワーク「0.0.0.0」の項)「10.1.1.1」を見つけます。
- ARPテーブルを参照しゲートウェイ「10.1.1.1」のMACアドレスを得ます。
- PC1は、DstMACにゲートウェイ「10.1.1.1」のMACアドレス、SrcMACに自身のMACアドレス、Payloadに生成したIPパケットをセットしたL2フレームを生成し送信します。
- ルータ1は、「10.1.1.0/24」セグメントに接続したポートで前項フレームが、自身のMACアドレス宛、かつ受信ポートに設定した自身のIPアドレス宛ではないため、他へ転送するべきものとしてフレームからIPパケットを取り出します。
- IPパケットの宛先IPアドレス「10.1.3.20」は、自身のもつポートに設定したIPアドレスの中で同一のセグメントのものがないため、宛先IPアドレスをルーティングテーブルと照合し、宛先IPアドレスに到達できる次のゲートウェイのIPアドレス「10.1.2.2」を得て、「10.1.2.2」と同じセグメントに接続している「10.1.2.1」を設定したポートを「送信するポート」に使うことにします。
- ARPテーブルから「10.1.2.2」に紐づいたMACアドレス「D」を得てDstMACにセット、「送信するポート」のMACアドレス「C」をSrcMACにセット、Payloadに取り出したIPパケットをセットしたL2フレームを生成し送信します。
- ルータ1から送信されたL2フレームのDstMACの値「C」を自身のMACアドレスに持つルータ2が、フレームを受信し、DstIPが自身のIPアドレスではないため、転送するべき対象としてIPパケットを取り出します。
- IPパケットの宛先IPアドレス「10.1.3.20」は、ルータ2自身のもつポートに設定したIPアドレスのうち、「10.1.3.1/24」と同一のセグメントであるため、そのポートを「送信するポート」に使うことにします。
- ARPテーブルから「10.1.3.20」に紐づいたMACアドレス「G」を得てDstMACにセット、「送信するポート」のMACアドレス「F」をSrcMACにセット、Payloadに取り出したIPパケットをセットしたL2フレームを生成し送信します。
- ルータ2から送信されたL2フレームのDstMACの値「G」を自身のMACアドレスに持つPC3が、フレームを受信し、DstIPが自身のIPアドレスであるため、IPパケットを取り出し処理します。
こうしてPC1から送信されたIPパケットがPC3に届きます。
コメント