【本質】IPルーティングを理解するには

IP ルーティングは、「異なるネットワーク宛てのパケットを、最適な経路で次のルータへ送ること」と説明されることが多いです。この説明で間違いではありませんが、これだけだとマルチキャストルーティングが何をしているのかがわかりにくくなります。この記事では、ルーティングを「パケットをどのインタフェースから出すかを決める処理」としてとらえ直し、IGP、BGP、マルチキャストのルーティングテーブルを同じ見方で読み解きます。

この記事でわかること
  1. ルーティングの本質は、出力インタフェースを決めること
  2. IGP と BGP の経路の違いと、BGP で必要になる再帰ルックアップ
  3. マルチキャストルーティングも、出力インタフェースを決める処理であること

ルーティングの本質

ルーティングの本質は、パケットの宛先アドレスを見て、最適な出力インタフェースを決めることです。つまり、受け取ったパケットをどのインタフェースから出すのかを決める処理です。

たとえば、1.1.1.1 宛のパケットをルータが受信したとします。

1.1.1.1 宛ルータルーティングテーブルを参照出力インタフェースをFa0/0 に決定Fa0/0Fa0/1R11.1.1.1R22.2.2.2
図1 ルータは宛先アドレスを見て出力インタフェースを決める

ルータは、受信したパケットの宛先アドレスを見てルーティングテーブルを検索し、出力インタフェースを Fa0/0 に決めます。この「出力インタフェースを決める」ところまでがルーティングです。ルーティングテーブルに宛先を含む経路が複数ある場合は、プレフィックス長がもっとも長い経路(最長一致)が選ばれます。

出力インタフェースが決まった後、次のルータ(ネクストホップ)へどう届けるかは、出力インタフェースの種類によって変わります。イーサネットであれば、ARP でネクストホップの MAC アドレスを調べ、イーサネットフレームにカプセル化して送ります。シリアルリンクであれば、PPP などでカプセル化して送ります。このように、次のホップへ送る処理はカプセル化の処理として、ルーティングとは切り分けて考えます。

① ルーティング② カプセル化と転送宛先 IP アドレスルーティングテーブルを検索出力インタフェース(と ネクストホップ)イーサネットの場合ARP でネクストホップの MAC アドレスを調べ、イーサネットフレームに入れて送るシリアルリンクの場合PPP などでカプセル化して送る
図2 ルーティングと、その後のカプセル化・転送
補足

ルーティングテーブルの経路には、出力インタフェースと一緒にネクストホップのアドレスも入っています。イーサネットで ARP の対象になるのは、パケットの宛先アドレスではなく、このネクストホップのアドレスです。

ユニキャストルーティング

ユニキャストルーティングでも、IGP で学習した経路と BGP で学習した経路では、出力インタフェースが決まるまでの処理が少し違います。

IGPのルーティング

R1 と R2 の間で EIGRP を有効にしているとします。

192.168.12.0/24.1.2R1R2Loopback02.2.2.2/32EIGRP
図3 IGP(EIGRP)の構成

R1 のルーティングテーブルのうち、R2 から学習した 2.2.2.2/32 宛の経路です。先頭の D は EIGRP を表します。

R1

R1#sh ip route 

D        2.2.2.2 [90/156160] via 192.168.12.2, 00:20:21, FastEthernet0/0.12
表示意味
DEIGRP で学習した経路
2.2.2.2宛先(R2 の Loopback0)
[90/156160]アドミニストレーティブディスタンス 90(EIGRP の内部経路)と、メトリック 156160
via 192.168.12.2ネクストホップ(R2 のアドレス)
00:20:21この経路を学習してからの時間
FastEthernet0/0.12出力インタフェース

IGP の経路には、出力インタフェースの FastEthernet0/0.12 が入っています。宛先アドレスからすぐに出力インタフェースが決まるので、ルーティングの処理はここで完了します。ネクストホップ 192.168.12.2 のアドレス解決やパケットの送信は、カプセル化の処理として切り分けて考えます。

BGPのルーティング

R1 と R2 の間で BGP のピアを張り、R2 の 22.22.22.22/32 を R1 へ広告します。

192.168.12.0/24.1.2R1R2Loopback02.2.2.2/3222.22.22.22/32(BGP で広告)BGPEIGRP
図4 BGP の構成

R1 が学習した 22.22.22.22/32 宛の経路です。先頭の B は BGP を表します。

R1

R1#show ip route 

B        22.22.22.22 [200/0] via 2.2.2.2, 00:20:16
表示意味
BBGP で学習した経路
[200/0]アドミニストレーティブディスタンス 200(iBGP の経路。eBGP なら 20)と、メトリック 0
via 2.2.2.2ネクストホップ。R1 に直接つながっていない R2 の Loopback0 のアドレス

この経路には、出力インタフェースがありません。BGP の経路のネクストホップは、この例の 2.2.2.2 のように、直接つながっていないアドレスになることがあります。そのため、宛先アドレスで1回検索しただけでは出力インタフェースが決まらず、ルーティングの処理は完了しません。

出力インタフェースを決めるには、ネクストホップの 2.2.2.2 をもう一度ルーティングテーブルで検索します。

R1

R1#show ip route 

D        2.2.2.2 [90/156160] via 192.168.12.2, 00:20:21, FastEthernet0/0.12
      22.0.0.0/32 is subnetted, 1 subnets
B        22.22.22.22 [200/0] via 2.2.2.2, 00:20:16

2.2.2.2/32 は EIGRP の経路で、出力インタフェースは FastEthernet0/0.12 です。つまり、BGP で学習した 22.22.22.22/32 宛のパケットも、FastEthernet0/0.12 から出力されることがわかります。

22.22.22.22 宛1回目の検索B 22.22.22.22via 2.2.2.2出力インタフェースなし2回目の検索(2.2.2.2)D 2.2.2.2via 192.168.12.2FastEthernet0/0.12結果出力インタフェースFastEthernet0/0.12ネクストホップ 192.168.12.2ネクストホップ 2.2.2.2 を、もう一度ルーティングテーブルで検索する(再帰ルックアップ)
図5 再帰ルックアップで出力インタフェースを決める

このように、BGP の経路だけではルーティングの処理が完了せず、ネクストホップを直結のネットワークや IGP の経路でもう一度検索して、出力インタフェースを決めます。ルーティングテーブルを複数回検索するこの処理を、再帰ルックアップ(recursive lookup)と呼びます。BGP の経路を使うには、ネクストホップへの経路(この例では EIGRP の 2.2.2.2/32)が必要です。

補足

BGP は、標準(RFC 4271)では AS 間のルーティングプロトコルと定義されています。一方で、TCP(ポート 179)の上で経路情報をやり取りし、ネクストホップへの到達は IGP などに任せるという特徴から、「経路情報を伝えるアプリケーション」のようだと言われることもあります。

なお、Cisco ルータの CEF などの転送の仕組みでは、再帰ルックアップの結果をあらかじめ転送用のテーブル(FIB)に反映しておきます。パケットが届くたびにルーティングテーブルを何度も検索しているわけではありません。

マルチキャストルーティング

R2 が、送信者からマルチキャストアドレス 239.0.0.1 宛のパケットを受信したとします。

239.0.0.1 宛239.0.0.1 宛192.168.12.0/24192.168.23.0/24.1.2.2.3受信者送信者R2出力:Fa0/0.12入力:Fa0/0.23
図6 マルチキャストの構成

このパケットを受信者側へ転送する、R2 のマルチキャストルーティングテーブルを確認します。

R2

R2#show ip mroute 

(192.168.23.3, 239.0.0.1), 00:02:15/00:00:44, flags: LJT
  Incoming interface: FastEthernet0/0.23, RPF nbr 192.168.23.3
  Outgoing interface list:
    FastEthernet0/0.12, Forward/Sparse, 00:02:15/00:02:27
表示意味
(192.168.23.3, 239.0.0.1)送信元アドレス 192.168.23.3、宛先(グループ)アドレス 239.0.0.1 のエントリ。(S,G) と書く
00:02:15/00:00:44エントリができてからの時間と、期限切れになるまでの時間
Incoming interfaceこのパケットを受信するインタフェース(FastEthernet0/0.23)
RPF nbr 192.168.23.3送信元へ向かう上流の隣接アドレス(RPF チェックに使う)
Outgoing interface listパケットを出力するインタフェースの一覧
FastEthernet0/0.12, Forward/SparseFastEthernet0/0.12 から転送する(スパースモード)

(192.168.23.3, 239.0.0.1) は、送信元アドレスが 192.168.23.3、宛先アドレスが 239.0.0.1 という意味です。R2 は、FastEthernet0/0.23 で受信したこのパケットの出力インタフェースを、FastEthernet0/0.12 と決めています。

このように、マルチキャストルーティングも、受信したマルチキャストパケットをどのインタフェースから出力するのかを決める処理です。ユニキャストと違う点は、宛先アドレスだけでなく送信元と受信インタフェースも見ること、出力インタフェースが一覧(複数になることもある)になることです。

項目ユニキャストマルチキャスト
見るもの宛先アドレス送信元アドレスと宛先(グループ)アドレス、受信インタフェース
出力インタフェース1つ(等コストの経路があれば複数)出力インタフェースの一覧(受信者がいる方向すべて)
テーブルを作る仕組みスタティックルート、IGP、BGP などPIM-SM(PIM スパースモード)など
RPF チェック

マルチキャストでは、パケットを受信したインタフェースが、ユニキャストのルーティングテーブルで送信元へ向かうときの出力インタフェースと一致するかを確認します。これを RPF(Reverse Path Forwarding)チェックと呼び、一致しないパケットは転送しません。ループを防ぐための仕組みで、この例では、送信元 192.168.23.3 へ向かうインタフェースである FastEthernet0/0.23 が Incoming interface になっています。

まとめ

種類出力インタフェースの決まり方この記事の例
ルーティングの本質宛先アドレスを見て、どのインタフェースから出すかを決める。次のホップへ送る処理(ARP、カプセル化)は切り分けて考える1.1.1.1 宛 → Fa0/0
IGP の経路経路に出力インタフェースが入っていて、1回の検索で決まるD 2.2.2.2 via 192.168.12.2, FastEthernet0/0.12
BGP の経路経路にはネクストホップだけが入っている。ネクストホップを再検索(再帰ルックアップ)して決まるB 22.22.22.22 via 2.2.2.2 → 2.2.2.2 → FastEthernet0/0.12
マルチキャスト(S,G) と受信インタフェースを見て、出力インタフェースの一覧を決めるFa0/0.23 で受信 → Fa0/0.12 へ出力

コメント