はじめに
この記事は、IPマルチキャストのシリーズを続けています。 基本的なIPマルチキャストがどのように機能するかを見ていきます。 次に、PIM Dense Mode (PIM-DM) がどのように動作し、どのように設定し、どのようにトラブルシュートするのかを見ていきます。 これは、後の記事で、より複雑でスケーラブルな PIM Sparse Mode を扱う前に、私たちのウォーミングアップになるはずです。 これは、The Protocols of IP Multicast.
Understanding IP Multicast Forwarding
Multicast Routing Protocol の目的は、ルーターが協力してマルチキャスト パケットを興味のある受信者に効率的に配信できるようにすることです。 これを行う過程で、マルチキャストルーティングプロトコルは、近隣のルーターがマルチキャストルーティングプロトコルも使用している近隣のルーターを発見し追跡するメカニズムも提供します。
前回の記事で見たように、マルチキャストパケットストリームの受信に関心があるコンピュータは、IGMPを使用して隣接するルーターに通知します。 ルーターは、マルチキャストプロトコルを使用して、マルチキャストパケットストリームのコピーがルーターに送信されるように手配し、受信者を含む LAN に転送できるようにします。 パケットストリームのソース側で何が起こるかについては言及しませんでした。 IPマルチキャストでは、送信元が通信したり、ルーターに登録・通知したりするプロトコルはありません。 送信元はただIPマルチキャストパケットの送信を開始し、近隣のルータが適切な処理を行うかどうかが決まります。 (「正しいこと」が何であるかは、マルチキャストルーティングプロトコルによって異なります。)
次の図は、ソースが赤でマルチキャスト パケットを送信し、下流のルーターがパケットを複製して他のルーター、最終的にはすべての LAN セグメントにフラッディングしているところを示しています。 まもなく説明しますが、これは、Cisco のプロトコル独立マルチキャスト (PIM) マルチキャスト ルーティング プロトコルが Dense モードで動作する場合の初期動作 (および周期的な動作) です。 ルータやLANセグメントの一部には、各パケットのコピーが2つ入ってくることがあります。 しかし、ルーターはパケットを「逆方向」に転送することはありません。 ルーターEがCから受け取ったパケットのコピーをルーターBに転送した場合、BはパケットをAに転送し、AはそれをCに転送し、といった転送のループが起こるかもしれないことを考えてみてください。
マルチキャスト転送のループを防ぐために、IP マルチキャストは常に RPF チェックを実行しますが、これについては後で説明します。 たとえば、図のルータEは、各マルチキャストパケットの2つのコピー(Bから1つ、Cから1つ)を受け取る必要はありません。
マルチキャストルーティングプロトコルは、コピーを送信する(またはコピーを送信しない)インターフェイスを判断します。 上の図が示すように、マルチキャスト転送は、ネットワークを通る分岐経路である論理ツリーに沿って行われます。 すべてのマルチキャスト転送情報はマルチキャスト状態テーブルに格納され、ある人はマルチキャストルーティングテーブルと呼びます。 この情報は、show ip mrouteという便利なコマンドで見ることができます。 show ip mrouteコマンドの出力例(PIM Dense Modeが動作している場合)を簡単に見てみましょう。
Router# show ip mroute 233.1.1.1IP Multicast Routing TableFlags: D - Dense, S - Sparse, C - Connected, L - Local, P - Pruned R - RP-bit set, F - Register flag, T - SPT-bit setTimers: Uptime/ExpiresInterface state: Interface, Next-Hop, State/Mode(*, 233.1.1.1), uptime 0:57:31, expires 0:02:59, RP is 0.0.0.0, flags: DC Incoming interface: Null, RPF neighbor 0.0.0.0 Outgoing interface list: Ethernet0, Forward/Dense, 0:57:31/0:02:52 FastEthernet1, Forward/Dense, 0:56:55/0:01:28 FastEthernet2, Forward/Dense, 0:56:45/0:01:22(172.16.16.1/32, 233.1.1.1), uptime 20:20:00, expires 0:02:55, flags: C Incoming interface: FastEthernet1, RPF neighbor 10.20.30.1 Outgoing interface list: Ethernet0, Forward/Dense, 20:20:00/0:02:52
これを理解するために、224-239で始まるアドレスはIPマルチキャストアドレスまたはグループであることに注目してください。 (グループはそのマルチキャスト宛先アドレスの受信者グループを指します)。
(*, 233.1.1.1)で始まるエントリは共有マルチキャストツリーのエントリで,(*, G) エントリと呼ばれることがあります。 (ここでのGは単なる223.1.1.1)です。 PIM-DMではパケット転送に使用しませんが,マルチキャストの役割を持つインタフェース(既知のIGMP受信者やPIM隣接者)を,このエントリの下に送信インタフェースとしてリストアップします。
(172.16.16.1, 233.1.1) で始まるエントリを (S, G) エントリと呼んでいます。 Sはソース,Gはグループです。 IPヘッダにおけるソースとデスティネーションと考えればよいでしょう(実際にパケットに現れるのはそこですから)。 このエントリは、特定のマルチキャストグループに対するソース固有のマルチキャストツリーです。 一般に、このようなエントリーは、ソースとグループごとに1つずつ存在します。 ユニキャストルーティングのネクストホップはRPFネイバーとして表示され、受信インターフェースはRPFインターフェース、ソース172.16.16.1へのユニキャストルーティングで使用されるインターフェースであることに注意してください。 送信インタフェースリストでは,FastEthernet1 で受信した 172.16.16.1 から宛先 233.1.1 のパケットは Ethernet0 にコピーされます。
トラブルシューティングのために,特定の (S, G) のマルチキャスト中継ツリーを描画することができ ます。 これを行うには、各ルータでshow ip mrouteコマンドを実行します。 ネットワーク地図のコピーを取り、送信インタフェースリスト(「OIL」または「OILIST」)の各インタフェースに送信矢印を描きます。
PIM-DM show ip mrouteの出力で見ることができる状態フラグ:
- D = Dense Mode。 (*,G)エントリにだけ表示されます。 グループはDenseモードで動作しています。
- C = Directly Connected Host (IGMP!)
- L = Local (ルータはマルチキャストグループのメンバに設定されています)
- P = Pruned (All OILIST interfaces set to Prune).P = Prune (OILIST interface set to Prune).
- C = Dense Mode (Dense Mode)です。
- T = Forwarding via Shortest Path Tree (SPT),少なくとも1つのパケットを受信/転送したことを示す。
RPFチェックとその理由
IPマルチキャスト転送では、常にRPFチェックを行います。 RPFはReverse Path Forwardingの略です。 RPFチェックの目的は、簡単な方法でマルチキャストパケット転送のループを防止しようとすることです。 各マルチキャストストリームについて、マルチキャストルーターはソースアドレス、つまりどのデバイスがマルチキャストを送信したかを確認します。 次に、ユニキャストルーティングテーブルで送信者を調べ、ユニキャストパケットをマルチキャストソースに送信するために使用するインターフェースを決定します。 このインターフェースはRPFインターフェースで、ルーターがマルチキャストを受信することを「期待」しているものです。 これは、その特定のソースからマルチキャストを受信するための「公式に承認された」インターフェースと考えることができます。 ルーターは、その特定のソースとその特定のマルチキャスト宛先(グループ)のマルチキャスト状態情報の一部としてRPFインタフェースを格納します。
マルチキャストパケットがルーターに受信されると、ルーターはパケットがどのインタフェースに来たかを追跡します。 パケットが新しいソースからの最初のパケットである場合、先ほど説明したように、RPFインタフェースが決定され、mrouteテーブルに格納されます。 そうでない場合、ルーターはmrouteテーブルでソースとマルチキャストグループを検索する。 パケットがRPFインタフェースで受信された場合、パケットはコピーされ、mrouteテーブルにリストされている各出口インタフェースに転送されます。 パケットがRPFでないインタフェースで受信された場合、パケットは廃棄されます。 もしルーターが人であれば、これは「あの人は何のためにこれを送ってきたのだろう」と同じことになる。 彼らは混乱しているに違いない、彼らが今送ってきたものを無視しよう」
また、ルーターは、それが入ってきたインタフェース(RPFインタフェース)からパケットのコピーを送り返すことはありません。 言い換えれば、RPF インターフェースの近隣ルーターが何らかの方法でマルチキャストストリームのコピーを送信するように要求したとしても、ルーターはマルチキャストストリームのコピーを受信する送信インターフェースのリストに RPF インターフェースを追加することはないのです。
ルーターEはまた、BまたはCがRPFインタフェースに接続されているかどうかに基づいて、おそらく2つのパケットストリームのうちの1つを無視しているのでしょう。 等コスト経路であっても、通常、RPFインタフェースとして選択されるのは1つのインタフェースだけです。
ただし、コマンド ip multicast multipath (Cisco IOS Version 12.0(8) T, 12.0(5) S の新機能) を参照してください。 このコマンドを適切に使用すると、特定のマルチキャストグループの異なるソースに対して負荷分散を行うことができます。 これはソースごとであり、ストリームごとではないので、実際には負荷分散に近いものになります。
2つのルータ間の2つのリンク上の1つのパケットストリーム(1つのソースとグループ)のロードバランシングは、ループバックインターフェース間のGREトンネルを使用して行うこともできますが、高帯域幅フローでこれを行うことのパフォーマンスへの影響が心配されるかもしれません。 RPF チェックを制御することで、マルチキャストトラフィックの行き先を制御します。 ルータがあるインタフェースでマルチキャストソースに戻る経路を学習しない場合、そのインタフェースはRPFインタフェースにはなりません。
PIM のグラフトやジョインが RPF インタフェースから送信され、ソース (PIM Sparse モードでは RP) に戻ることは後で説明します。 この動作が行われる場所を制御することで、どのリンクでマルチキャストが転送されるかを制御することができます。 静的mrouteエントリ(マルチキャストRPFチェックのためにソースに戻る静的ルート)は、マルチキャストトラフィックを誘導する別の方法です。 マルチキャストMBGP(Multiprotocol BGP for Multicast)について説明すると、MBGPもマルチキャストトラフィックが使用するリンクを指示または制御する方法を提供することがわかります。 また、RPFインターフェイスがIPマルチキャストを有効にしていない場合、事実上、ルーターは受信しないパケットを期待していることに注意してください。
PIM Dense Mode – Overview
Protocol Independent Multicast には、Dense Mode と Sparse Mode という 2 つのモードがあります。 この記事では、前者のみをカバーするスペースがあります。
PIM Dense Mode (PIM-DM) は、IP マルチキャスト ルーティングを処理するためにかなり単純なアプローチを使用します。 PIM-DM の背後にある基本的な前提は、マルチキャストパケットストリームがほとんどの場所に受信機を持つということです。 例えば、ある会社のCEOや社長による会社説明会などがこれにあたります。 対照的に、PIMスパースモード(PIM-SM)は、比較的少数の受信者を想定しています。 この違いは、2 つのプロトコルの初期動作とメカニズムに表れています。 PIM-SMは、要求されたときだけマルチキャストを送信します。 一方、PIM-DMは、マルチキャストトラフィックをフラッディングすることから始め、それが不要なリンクごとに、Pruneメッセージを使って停止させるのです。 Prune メッセージは、あるルーターが別のルーターに「今、ここにあるマルチキャストは必要ない」と伝えるようなものだと考えています。
以前の Cisco IOS リリースでは、PIM-DM は 3 分ごとにすべてのマルチキャストトラフィックを再フラッド化しました。 これは、低容量のマルチキャストには適していますが、より高い帯域幅のマルチキャストパケットストリームには適していません。 最近のCisco IOSでは、12.1(5)T以降、PIM Dense Mode State Refreshという新機能がサポートされています。 この機能は、PIM状態リフレッシュメッセージを使用して、発信するインターフェイスのPrune状態をリフレッシュするものです。 また,トポロジーの変化をより早く認識することができます。 デフォルトでは,PIM状態リフレッシュメッセージは60秒ごとに送信されます。
上の図のルータEとFについて考えてみましょう。 2台のPIM-DMルータがLANに接続すると、互いのマルチキャストパケットを見ることができます。 一方はパケットをLANに転送し、もう一方は転送しないようにします。 両者ともAssertメッセージを送ります。 ルーティングメトリックが最も良いものが勝ち、IPアドレスの高いものが同点となります。 異なるルーティングプロトコルを使っている場合は、管理距離のように重み付けしたルーティングメトリック方式で、どちらのルータをフォワーダ(LANにマルチキャストパケットを転送する)にするか決めます。 LANセグメントにレシーバーがない場合、レシーバーのないダウンストリームルーターからのPruneによってフォワーダーが沈黙することがあります。 下流のルーターは、Assert プロセスの勝者を反映するために、RPF 近隣を調整する必要があるかもしれません。
詳細に繰り返すと、マルチキャストトラフィックが非RPFインタフェースで受信されると、インタフェースがポイントツーポイントであれば、Prun メッセージが送信されます。 これらの Prune メッセージは、その量 (潜在的には、受信したマルチキャストごとに 1 つ) がさらなる問題を引き起こさないように、レート制限されています。
RPF 以外のインターフェースが LAN である場合、Assert メッセージが送信されます。 その後,非フォワーダルータは,マルチキャストストリームを必要としない場合,RPFインタフェースでPruneを送信します。 このようなPruneは、送信インタフェースリスト(OILIST)にインタフェースがない状態に移行するときに1回だけ送信されます。 LANのPruneの受信者は、他のLANルーターがまだマルチキャストストリームを必要とする場合、PIM Joinメッセージを送ってPruneを打ち消すことができるように、その処理を3秒間遅らせることができるようになっています。 (「Yo, that router doesn’t need it, but I still do! 」)
ルーターが Pruned し、しばらくして受信者が IGMP メッセージでマルチキャストストリームを要求したとします。 その後、ルーターはGraftメッセージを送信します。
次の図は、確かに多少圧縮された形で、これを示しています。
(2), LAN上のルータEとFは、EまたはFが転送したマルチキャストを見たときに、Assertパケットを交換します。 ユニキャストのルーティングメトリックやアドレスでEが勝ったとする。 このとき、FはLAN上でマルチキャストを転送しないことを知る。 なお、イーサネットは彼らのRPFインタフェースなので、GとHは関係ありません。
(3)、ルータGに下流の受信機がないとします。
(5)で、ルータGに下流の受信機がなく、LANのフォワーダであるルータEにLAN Pruneを送ります。
(4) で、ルータHにローカルまたは下流の受信機があれば、LAN Joinでこれに対抗します。
PIM Protocol and Packet Types
PIM は完全なルーティングプロトコルで、さまざまな種類のメッセージがあります。 さまざまなメッセージについて延々と説明するつもりはありません。 しかし、それはプロトコルについて少し教えてくれるので、簡単に見てみる価値があると思います。
PIM は Hello メッセージを使用して、隣接を発見し、隣接を形成します。 Helloは、All-PIM-Routersのローカルマルチキャストアドレス224.0.0.13に30秒ごとに送信されます(PIMv1ではAllRouters、224.0.0.2が使用されます)。 各LANには、PIMスパースモードで使用するPIM Designated Router (DR)があります。 また、IGMPv1 Querier:LANの最上位IPアドレスとなります。 show ip pim neighborコマンドは、近隣と隣接およびタイマー情報を表示します。
2004/12/11追記明確化しました。 IGMP querierとDesignated Routerは問題の2つの役割です。
IGMPバージョン1では、「DRは次のタスクを担当する:
- PIM registerおよびPIM join and pruneメッセージをRPに向けて送信し、ホストグループのメンバーシップを通知する:
- IGMP host-query メッセージを送信する」
IGMPバージョン2では、両者は切り離されました。 IGMPクエリアはLAN上の最下位IPで選出されます。 PIMは、LAN上の最高IPでDRを選出し、LANにマルチキャストを転送します。 (
PIM には Join/Prune メッセージもあり、上記のように使用されます。 GraftとGraft ACKメッセージもあり、Graftが確実に行われることがわかります(現実世界と違う?)。
そしてPIM Assertメッセージがあります。
PIM-SM には、Register、Register-Stop、および RP-Reachability (PIMv2 にはない) の 3 つのメッセージタイプがあります。
PIM Dense Mode の設定
PIM-DM の設定は、上記すべてと比較して非常に簡単です。
ip multicast-routing
次に,マルチキャストに参加させたい各インタフェースで,interfaceコマンドでIPマルチキャストとPIMを有効にします。
interface …
ip pim dense-mode
実際には sparse-dense モードを設定したほうがよいでしょう。
interface …
ip pim sparse-dense-mode
この理由は、ランデブーポイントについてルータに知らせることによって、一部またはすべてのマルチキャストグループをスパースモードに簡単に移行することができるようになるからです。 また、多くのルーターやルーター インターフェイスを再構成することなく、これを行うこともできます。
単純な IP マルチキャスト用にスタブ ネットワークを構成することができます。 小規模なリモートサイトのようなネットワークのスタブ部分には、単純化のために PIM を実行しないことです。 これは、自分のコントロール下にないルータで特に良いアイデアです: ルータとマルチキャストルーティングを共有させたくないからです。 また、このようなルータへのPIM-DMフラッディングも(古いCisco IOSリリースで)排除します。
スタブマルチキャストを設定するには、マルチキャスト受信者の可能性があるスタブルータのLANインタフェースで
ip igmp helper-address a.b.c.d
と構成してください。 アドレスa.b.c.dは,PIMを話す中央のルータのアドレスです。 中央ルータでは、スタブネイバーが送信する可能性のあるPIMメッセージを除外するフィルタを次のように設定します:
ip pim neighbor-filter access-list
URLのコマンドガイドも参照してください:
http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122cgcr/fipr_c/ipcpt3/1cfmulti.htm .
IPマルチキャストをトラブルシューティングするためにいくつかのshowコマンドも用意されています。 私が一番好きなのは、
- show ip mroute
- show ip pim interface
- show ip pim neighbor
- show ip rpf
スペース的に厳しいので、例はコマンドリファレンスを見ていただくことにして、ここでは、「Show ip mroute」とします。
トラブルシューティングの注意事項:ネットワークに高帯域幅のマルチキャストがある場合、sparse-dense モードを使用しているなら、新しい Cisco IOS リリースで Prune State Refresh を使用することを確認してください。 ルータがRPの存在を「忘れて」Denseモードに戻り、定期的なフラッディングが発生することが心配です。 これは稀な事故かもしれませんが、あなたの朝を台無しにするかもしれません。 これは、後の PIM-SM やランデブーポイントの記事で取り上げます。
おわりに
多くのマルチキャストのトピックについて、お勧めの本があります。 IP マルチキャストネットワークの開発: CISCO IP Multicast Networks の設計と展開のための決定版ガイド, Beau Williamson.
もうひとつの非常に優れた Cisco マルチキャスト リンクは、こちらでご覧になれます。