目次
PIM-SMの概要
PIM-SMはSparseモードのマルチキャストルーティングプロトコルです。マルチキャストレシーバがさまざまなLAN上に分散しているようなネットワーク構成を想定しています。
さまざまなLAN上にレシーバが分散している構成で、Denseモードのようなフラッディングを行うと、他のアプリケーションの通信に大きな影響を及ぼす可能性があります。そこで、PIM-SMではExplicit Joinモデルに従います。これは、レシーバの位置をきちんと把握し、レシーバが存在するインタフェースにのみマルチキャストパケットをルーティングするというものです。
このような動作のために、PIM-SMでは送信元ツリーと共有ツリーの2つのディストリビューションツリーを組み合わせます。2つのツリーの境となるルータをRP(Rendezvous Point)といいます。マルチキャストソースからRPまで送信元ツリーを作成し、RPからレシーバまで共有ツリーを作成して、マルチキャストパケットをルーティングします。そのため、ソースから送信されたマルチキャストパケットは基本的にRPを経由して、マルチキャストレシーバへルーティングされます。
すべてRPを経由してマルチキャストパケットをルーティングするという性質上、RPやマルチキャストソース、レシーバの位置しだいでは最適な経路でのルーティングではないことがあります。そのようなときに、スイッチオーバー機能によって、RPを経由せずにマルチキャストソースとレシーバ間の最短経路に経路を切り替えてマルチキャストパケットを転送することも可能です。
RPはマルチキャストグループごとに決定します。1つのマルチキャストグループに対して1つのRPアドレスを決定します。また、1つのRPアドレスを複数のマルチキャストグループのRPとして設定することもできます。
PIM-SMはマルチキャストルーティングプロトコルとして、デファクトスタンダードになっています。一般的にマルチキャストルーティングプロトコルといえば、PIM-SMを採用していることが多いです。
PIM-SMのディストリビューションツリーの特徴
前述のように、PIM-SMでは共有ツリーと送信元ツリーの2つを組み合わせます。それぞれ、以下のような特徴があります。
PIM-SMの共有ツリーの特徴
共有ツリーはRPからラストホップルータまでのツリーで、(*,G)のエントリです。Gはマルチキャストグループで、(*,239.1.1.1)のような例です。これは、宛先IPアドレスが239.1.1.1のマルチキャストパケットを転送するためのエントリです。
共有ツリーの(*,G)エントリは、以下のタイミングで作成されます。
- IGMPレポートを受信したとき
- PIM(*,G)Joinを受信したとき
- 最初の(S,G)エントリを作成するとき
(*,G)エントリのIIFは、RPのアドレスに対するRPFインタフェースです。RPアドレスに対するRPFインタフェースはデフォルトでは、ユニキャストルーティングテーブルから自動的に決定されます。また、RPFネイバーはIIFの先に存在するPIMネイバーです。RPの(*,G)エントリのIIFはNullで、RPFネイバーは0.0.0.0となります。
また、(*,G)エントリのOILとして、以下のインタフェースが追加されます。
- IGMPレポートを受信したインタフェース
- PIM(*,G)Joinを受信したインタフェース
- ip igmp join-groupコマンド、またはip igmp static-groupコマンドが設定されているインタフェース
PIM-SMの送信元ツリーの特徴
送信元ツリーは、ファーストホップルータからRPまでのディストリビューションツリーで、(S,G)エントリです。SはマルチキャストソースのIPアドレスで、Gはマルチキャストグループです。(192.168.1.1,239.1.1.1)のような例です。宛先IPアドレスが239.1.1.1で送信元IPアドレスが192.168.1.1のマルチキャストパケットを転送するためのエントリです。
(S,G)エントリは以下のタイミングで作成されます。
- PIM(S,G)Joinを受信したとき
- PIM Registerメッセージを受信したとき(RPのみ)
- 直接接続のマルチキャストソースからマルチキャストパケットを受信したとき(ファーストホップルータ)
なお、(S,G)エントリを作成するときにはテンプレートとして(*,G)エントリが作成されます。
(S,G)エントリのIIFは、マルチキャストソースのIPアドレスに対するRPFインタフェースです。デフォルトでは、ユニキャストルーティングテーブルから自動的に決まります。RPFネイバーはIIFの先のPIMネイバーです。
(S,G)エントリのOILとして、以下のインタフェースが追加されます。
- テンプレートの(*,G)エントリのOIL – IIF
- PIM(S,G)Joinを受信したインタフェース
PIM-SMのディストリビューションツリーの作成
PIM-SMの共有ツリーと送信元ツリーを作成する順序が必ず決まっているわけではありません。それぞれ作成するトリガーが違っています。共有ツリーと送信元ツリーの作成について解説します。
共有ツリーの作成
まず、共有ツリーの作成の様子から解説します。前提として、PIM-SMではすべてのマルチキャストルータがルーティング対象のマルチキャストグループに対するRPのアドレスを認識しています。共有ツリーの作成は、マルチキャストのレシーバがトリガーとなり次のような流れで行われます。
レシーバがIGMPレポートを送信
レシーバがマルチキャストグループに参加するとIGMPレポートを送信します。ラストホップルータはこれを受信して、IGMPテーブルに登録します。このとき、レシーバが参加したマルチキャストグループに対応する(*,G)エントリを作成します。
(*,G)エントリのIIF(Incoming interface)は設定されているRPのアドレスに対するRPFインタフェースです。また、RPFインタフェース上のPIM-SMネイバーがRPF nbrに入ります。そして、OIL(Outgoing interface list)にはIGMPレポートを受信したインタフェースが入ります。
ラストホップルータからPIM(*,G)Joinを送信
IGMPレポートを受信したラストホップルータは、RPからレシーバまでの共有ツリーを作るために、RPの方向に向けてPIM(*,G)Joinメッセージを送信します。RPの方向とはつまり、(*,G)エントリのIIFです。
RPまでPIM(*,G)Joinを送信
PIM(*,G)Joinメッセージを受信したルータは、そのマルチキャストグループに対応した(*,G)エントリを作成します。IIFはやはりRPのアドレスに対するRPFインタフェースで、RPF nbrも先ほどと同様です。また、OILはPIM(*,G)Joinを受信したインタフェースが入ります。
そして、さらにRPへ向けてPIM(*,G)Joinメッセージを送信します。これをRPに到達するまで続けていきます。なお、RP自身では(*,G)エントリのIIFはNull、RPF nbrは0.0.0.0です。
送信元ツリーの作成
次に送信元ツリーの作成について解説します。前提として、PIM-SMではすべてのマルチキャストルータがルーティング対象のマルチキャストグループに対するRPのアドレスを認識しています。そして、RPからレシーバまで共有ツリーが作成されるという動作を認識しています。送信元ツリーの作成は、マルチキャストソースがマルチキャストパケットを送信したことをトリガーとして次のような流れで行われます。
マルチキャストソースがマルチキャストパケットを送信
マルチキャストソースがマルチキャストパケットを送信すると、ファーストホップルータがそのマルチキャストパケットを受信します。ファーストホップルータは直接接続されたソースからマルチキャストパケットを受信すると、先にテンプレートとしての(*,G)を作成した後で(S,G)エントリを作成します。
ただし、この時点ではファーストホップルータはマルチキャストレシーバの存在を認識していないため、OILはNullです。また、IIFはマルチキャストパケットを受信したインタフェースになり、RPF nbrは0.0.0.0です。
RPへPIM Registerメッセージを送信
ファーストホップルータはRPのアドレスを認識しています。そして、PIM-SMの動作の仕組みとして、レシーバが存在すればRPからレシーバまで共有ツリーが作成されています。そのため、マルチキャストパケットをRPまで転送すれば、レシーバまで到達する可能性があります。ファーストホップルータは、PIM Registerメッセージにマルチキャストパケットをカプセル化して、RPまでユニキャストで転送します。
RPで(S,G)エントリの作成
PIM Registerメッセージを受信したRPは対応する(S,G)エントリを作成します。この(S,G)エントリのIIFはソースのIPアドレスに対するRPFインタフェースです。OILは(*,G)エントリのOILからIIFを除いたものになります。PIM Registerメッセージにカプセル化されているマルチキャストパケットを取り出して転送します。
RPからソースの方向へPIM(S,G)Joinを送信
ファーストホップルータは、マルチキャストパケットを受け取るごとにPIM RegisterメッセージをRPまでユニキャストします。マルチキャストのまま、ファーストホップルータからRPまでルーティングできるようにRPからソースの方向に向けてPIM(S,G)Joinメッセージを送信します。ソースの方向とは、すなわち、(S,G)エントリのIIFです。
ファーストホップルータまでPIM(S,G)Joinを送信
PIM(S,G)Joinメッセージを受信したルータは、(S,G)エントリを作成します。また、(S,G)エントリを作成する前にそのテンプレートとして(*,G)エントリも作成されます。(S,G)エントリのIIFはソースの方向のRPFインタフェースです。OILは(*,G)エントリのOILからIIFを除いたものに、PIM(S,G)Joinを受信したインタフェースが追加されます。
そして、さらにソースの方向に向かってPIM(S,G)Joinが送信されていきます。ファーストホップルータまでPIM(S,G)Joinが到達すると、ファーストホップルータのOILにPIM(S,G)Joinを受信したインタフェースが追加されます。これにより、ファーストホップルータはマルチキャストパケットをルーティングできるようになります。
PIM Register-stopの送信
ファーストホップルータはソースからのマルチキャストパケットをPIM Registerメッセージにカプセル化したものと、マルチキャストパケットのままルーティングします。RPでは、2つのマルチキャストパケットが重複するようになります。マルチキャストパケットのままルーティングされてくれば、PIM Registerメッセージは不要になるのでファーストホップルータに対してPIM Register-stopメッセージを送信します。
このようにマルチキャストソースからのマルチキャストパケットを受信することで、ファーストホップルータとRPまでの送信元ツリーを作成することができます。
最終的にマルチキャストパケットの転送経路は、以下のようになります。
- ソースからファーストホップルータ
- ファーストホップルータからRP
- RPからラストホップルータ
- ラストホップルータからレシーバ
次の記事で具体的なネットワーク構成を例にして、PIM-SMのディストリビューションツリー作成について解説しています。
IPマルチキャストの仕組み
- ユニキャスト/ブロードキャスト/マルチキャストの振り返り
- IPマルチキャストの用途 ~同じデータの同報~
- マルチキャストグループへの参加 ~マルチキャストデータを受信できるようにする~
- マルチキャストアドレス ~レイヤ3とレイヤ2のマルチキャストアドレス~
- IGMPの概要 ~マルチキャストグループへの参加を通知~
- IGMPの仕組み
- IGMPの設定と確認コマンド
- IGMPスヌーピング
- マルチキャストルーティングの概要
- ディストリビューションツリー
- RPFチェック
- PIM-DMの仕組み
- PIM-DMの設定と確認コマンド
- PIM-SMの仕組み ~ディストリビューションツリー作成~
- PIM-SMの仕組み ~ディストリビューションツリー作成例~
- PIM-SMの設定と確認コマンド
- PIM-SM ダイナミックなRPの設定 ~Auto RP/BSRの概要~
- PIM-SM AutoRPの設定例
- PIM-SM BSRの設定例
- Bidirectional PIMの設定と確認コマンド
- PIM SSMの設定と確認コマンド
- PIM-SMの設定演習 [スタティックRP]
- PIM-SMの設定演習 [Auto RP]
- PIM-SMの設定演習 [BSR]
- PIM-SMの設定演習 [Bidirectional PIM]
- PIM-SMの設定演習 [SSM]
- PIM-SMの設定演習 [トラブルシュート]
- Anycast RP ~RPの負荷分散~
- Anycast RPの設定と確認コマンド
- Anycast RPの設定例
- マルチキャストパケットの転送経路の制御 ~ip mrouteコマンド~
- ip multicast rate-limitコマンド ~マルチキャストパケットのレート制限~
- ip multicast rate-limitコマンドの設定例
- IGMPレポートの制限
- PIM-SM 設定ミスの切り分けと修正 Part1
- PIM-SM 設定ミスの切り分けと修正 Part2
- PIM-SM 設定ミスの切り分けと修正 Part3