IP ルーティングは、「異なるネットワーク宛てのパケットを、最適な経路で次のルータへ送ること」と説明されることが多いです。この説明で間違いではありませんが、これだけだとマルチキャストルーティングが何をしているのかがわかりにくくなります。この記事では、ルーティングを「パケットをどのインタフェースから出すかを決める処理」としてとらえ直し、IGP、BGP、マルチキャストのルーティングテーブルを同じ見方で読み解きます。
- ルーティングの本質は、出力インタフェースを決めること
- IGP と BGP の経路の違いと、BGP で必要になる再帰ルックアップ
- マルチキャストルーティングも、出力インタフェースを決める処理であること
ルーティングの本質
ルーティングの本質は、パケットの宛先アドレスを見て、最適な出力インタフェースを決めることです。つまり、受け取ったパケットをどのインタフェースから出すのかを決める処理です。
たとえば、1.1.1.1 宛のパケットをルータが受信したとします。
ルータは、受信したパケットの宛先アドレスを見てルーティングテーブルを検索し、出力インタフェースを Fa0/0 に決めます。この「出力インタフェースを決める」ところまでがルーティングです。ルーティングテーブルに宛先を含む経路が複数ある場合は、プレフィックス長がもっとも長い経路(最長一致)が選ばれます。
出力インタフェースが決まった後、次のルータ(ネクストホップ)へどう届けるかは、出力インタフェースの種類によって変わります。イーサネットであれば、ARP でネクストホップの MAC アドレスを調べ、イーサネットフレームにカプセル化して送ります。シリアルリンクであれば、PPP などでカプセル化して送ります。このように、次のホップへ送る処理はカプセル化の処理として、ルーティングとは切り分けて考えます。
ルーティングテーブルの経路には、出力インタフェースと一緒にネクストホップのアドレスも入っています。イーサネットで ARP の対象になるのは、パケットの宛先アドレスではなく、このネクストホップのアドレスです。
ユニキャストルーティング
ユニキャストルーティングでも、IGP で学習した経路と BGP で学習した経路では、出力インタフェースが決まるまでの処理が少し違います。
IGPのルーティング
R1 と R2 の間で 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
| 表示 | 意味 |
|---|---|
| D | EIGRP で学習した経路 |
| 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 へ広告します。
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
| 表示 | 意味 |
|---|---|
| B | BGP で学習した経路 |
| [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 から出力されることがわかります。
このように、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 宛のパケットを受信したとします。
このパケットを受信者側へ転送する、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/Sparse | FastEthernet0/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(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 へ出力 |
コメント