はじめに
こんにちは、ネットワークエンジニアの「だいまる」です。
前回の記事で投稿したマルチキャストの基本である「IGMP」に続き、今回は「PIM-SM」についてまとめていきたいと思います。
![](http://image.moshimo.com/af-img/5491/000000074386.png)
主なモードは2つ!! それは「Sparse」と「Dense」!!
マルチキャストには「Sparse」と「Dense」の主に2つのモードがあります。
この2つのモード違いについて、これから説明したいと思います。
Sparseモード
Sparseモードとは、「マルチキャストのディストリビューションツリーである送信元ツリーと共有ツリーの2つを生成し、帯域に余裕がないWAN経由等で用いるモード」となります。
Sparseモードでは、Explicit Joinというマルチキャストグループへの参加を明示的に通知する特徴(PULL型)があります。
![](https://www19.a8.net/0.gif?a8mat=3YYNIM+6W9S1E+2PEO+1ICG3L)
Denseモード
Denseモードとは「送信元ツリーのみを作成し、帯域に余裕があるLAN環境等で利用することが多いモード」です。
このモードは、グループへの参加を明示的に送信するSparseモードとは異なり、定期的にグループへの参加確認を行うPUSH型となります。
![](https://www18.a8.net/0.gif?a8mat=3YYD8O+37I44Y+3IB8+60WN5)
そもそも「送信元ツリー」と「共有ツリー」とは?
SparseモードとDenseモードの概要をまとめた際に出てきた「送信元ツリー」と「共有ツリー」とは、いったい何か?を次に説明していきたいと思います。
送信元ツリーとは?
送信元ツリーとは、「Senderごとに生成されSenderとReceiverを結ぶ最短経路を生成するツリー」となります。
正直、「は?」って感じですよね。
![](http://daimaru-tech-blog.com/wp-content/uploads/2022/12/cropped-だいまる.webp)
私も「は?」って思いましたww
具体的なイメージは下の図を見てもらえればわかりやすいと思います。
上の図では、送信元①と送信元②の計2つがあります。
各送信元を根(ルート)として、最短経路を通るようなツリーが作成されるのが「送信元ツリー」となるのです。
最短経路でのツリー作成となるため、遅延は少なくなる等のメリットがあります。
一方、各送信元(Sender)ごとにツリーが生成されるため、同一ネットワークに複数の送信元(Sender)が存在する場合はルータの負荷増大につながるデメリットもあります。
共有ツリーとは?
共有ツリーとは、「RP(ランデブーポイント)を中心に生成される1つだけのツリー」となっています。
このツリーは、RP(ランデブーポイント)を根(ルート)としたツリーのため、送信者(Sender)がRPにマルチキャストパケットを送信し、RPがそのパケットを各Receiverに送信します。
生成されるツリーは1つのため、ルータの負荷は抑えられます。
一方、RPを必ず経由することから最短経路ではない場合があり、遅延が増えるデメリットもあります。
![](https://www14.a8.net/0.gif?a8mat=3TNY5O+K8RCI+399O+65U41)
PIM-SMとは?
マルチキャストのモードとツリーについてまとめたところで、今回の本題である「PIM-SM」について説明していきます。
PIM-SMとは?
PIM-SMとは、「Sparseモードのマルチキャストルーティングを行うプロトコル」になります。
Sparseモードは、「送信元ツリー」と「共有ツリー」の2つを組み合わせて使っているモードであり、明示的な要求がなければマルチキャストグループに参加できないモードです。
一般的には、共有ツリー作成のためにRP(ランデブーポイント)の設定が必要となります。
ツリー作成のフローをこれから簡単に説明したいと思います。
![](https://www12.a8.net/0.gif?a8mat=3T061I+D5X2B6+CO4+15TP8X)
PIM-SMのツリー作成フロー
- ①ルータの登録方法
-
空のディストリビューションツリーを作成し、Joinメッセージの受信によりツリーに追加される
- ②Senderの登録方法
-
RPに向けて(S,G)Register(PIM Register)メッセージを送信しRPが登録(送信元ツリーを利用)
- ③Receiverの登録方法
-
LHRがIGMP Reportを受信し、LHRからRPに(※,G)Join(PIM Join)メッセージを送信し、RPが登録(共有ツリーを利用)
![](https://www15.a8.net/0.gif?a8mat=3Z0TY0+6D7WOI+447K+C2VV5)
マルチキャストルータのネイバ検出
ネイバの検出には、Helloパケットを利用し30sec毎に224.0.0.13宛に送信されます。
そもそもの話でネイバ検出を行うためには、経路となる全IFでマルチキャストの有効化、PIM-SMの有効化を行う必要があります。
このマルチキャスト有効化とPIM-SM有効化については、今回CMLで確認します。
今回実機確認で利用した構成は以下の通りです。
この構成でRouter1で設定した内容について説明していきたいと思います。
マルチキャストの有効化を行うために、以下Configを投入します。
ip multicast-routing
上記コマンドを投入すると、以下の状態に変化します。
Router1#show ip multicast
Multicast Routing: disabled
Multicast Multipath: disabled
Multicast Route limit: No limit
Multicast Fallback group mode: Sparse
Number of multicast boundaries configured with filter-autorp option: 0
MoFRR: Disabled
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ip multicast-routing
Router1(config)#end
Router1#show ip multicast
Multicast Routing: enabled
Multicast Multipath: disabled
Multicast Route limit: No limit
Multicast Fallback group mode: Sparse
Number of multicast boundaries configured with filter-autorp option: 0
MoFRR: Disabled
Router1#
この設定を追加することで、Mutlicast RoutingとMultipath部分が「disable」から「enable」に変化します。
PIM-SMを有効化するためには、IF配下に「ip pim sparse-mode」を設定します。
今回の構成ではRouter1-Router2とRouter1-Router3の区間で設定します。
設定前の確認では「neighbor」や「RP」が出力されませんでした。
Router1#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority
P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
L - DR Load-balancing Capable
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
Router1#show ip pim interface
Address Interface Ver/ Nbr Query DR DR
Mode Count Intvl Prior
Router1#show ip pim rp
では、実際に設定追加してみましょう。
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#interface gigabitEthernet 0/2
Router1(config-if)#ip pim sparse-mode
Router1(config-if)#exit
Router1(config)#interface gigabitEthernet 0/1
Router1(config-if)#ip pim sparse-mode
Router1(config-if)#end
Router1#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
L - DR Load-balancing Capable
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
Router1#show ip pim rp
上記投入後、対向ルータではまだ設定していないのでネイバーが確立されません。
では次にRouter2/Router3で設定を投入してみましょう。
Router2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router2(config)#interface gigabitEthernet 0/1
Router2(config-if)#ip pim sparse-mode
Router2(config-if)#end
Router2/Router3に設定投入後のRouter1の状態を見ていきましょう。
Router1#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
L - DR Load-balancing Capable
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
192.168.2.2 GigabitEthernet0/2 00:00:09/00:01:36 v2 1 / DR S P G
192.168.1.2 GigabitEthernet0/1 00:01:02/00:01:43 v2 1 / DR S P G
Router1#
Router1#show ip pim rp
Router1#
Router1でPIMのネイバーが検出されましたが、RPは設定を行ってないので出力されませんでした。
PIM-SMの有効化後は、RPをstaticで指定していきます。
RPのLoopbackアドレスは、Router1の10.1.0.1とします。
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ip pim rp-address 10.1.0.1
Router1(config)#end
Router1#show ip pim rp
Group: 224.0.1.40, RP: 10.1.0.1, next RP-reachable never
Router1#
RPの設定後、「show ip pim rp」コマンドに出力されるようになりました。
PIMネイバーが確立されるとHelloパケットでのやり取りが開始されます。
そのパケットの中身を確認していきましょう。
Router1-Router2間で取得したHelloパケットの中身を見ると224.0.0.13宛に送信されており、Type0(Helloパケット)でやり取りされています。
![](http://daimaru-tech-blog.com/wp-content/uploads/2024/02/Screenshot-2024-02-24-at-14.43.53.png)
![](https://www11.a8.net/0.gif?a8mat=3Z0TY0+6D7WOI+447K+C2101)
(※,G)メッセージ
(*,G)メッセージは「PIM-JOINメッセージ」と呼ばれ、ルータに送信されRPまで届くとツリーに追加されます。
- エントリ作成トリガー
- 最初のディストリビューション作成時
- ReceiverからIGMPメンバシップ受信時
- (※,G)Joinメッセージの受信
- RPFの中身
- Incoming IF:RPのIPアドレスへの最短経路IF
- RPF Neighbor:Incoming IFのネイバアドレス
- Outgoing IF情報
- Receiverが存在するIF
- Joinメッセージを受信したIF
Router3上での事前確認は、Outgoing IFには何も登録されていない状況となっております。
Router3#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 00:06:54/00:02:55, RP 10.1.0.1, flags: SJC
Incoming interface: GigabitEthernet0/2, RPF nbr 192.168.2.1
Outgoing interface list:
GigabitEthernet0/1, Forward/Sparse, 00:00:04/00:02:09
Receiver3の設定(Receiver3のIFにip igmp join-group 224.0.1.40を設定)を投入後、Outgoing IFにGigE0/1が追加されました。
Router3#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 00:07:19/stopped, RP 10.1.0.1, flags: SJCL
Incoming interface: GigabitEthernet0/2, RPF nbr 192.168.2.1
Outgoing interface list:
GigabitEthernet0/1, Forward/Sparse, 00:00:29/00:02:37
この時、Router3とReceiver3の間ではIGMPメッセージのやり取りが行われています。
![](http://daimaru-tech-blog.com/wp-content/uploads/2024/02/image.png)
(S,G)メッセージ
(S,G)メッセージは「FHRからRPに送られる際に利用するPIM Registerメッセージ」となります。
- 作成条件
- FHRがSenderからマルチキャスト宛のパケットを受信時
- Join or Pruneメッセージの受信時
- RPに限り、PIM Registerメッセージの受信時
- RPF情報
- Incoming IF:SenderのIPアドレスへのIF
- RPF nbr:SenderのIFへのネイバアドレス
- Outgoing IF:Joinを受け取ったIFやReceiverが存在するIF
SenderからICMPにより「240.0.1.40」宛に送信する前に状態は以下の通り、(※,240.0.1.40)のみとなります。
Router2#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 06:29:28/00:02:52, RP 10.1.0.1, flags: SJCL
Incoming interface: GigabitEthernet0/1, RPF nbr 192.168.1.1
Outgoing interface list:
GigabitEthernet0/2, Forward/Sparse, 02:10:59/00:02:01
Ping送信後、想定通り(172.168.1.2,224.0.1.40)が作成されます。
Router2#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 06:31:18/stopped, RP 10.1.0.1, flags: SJCLF
Incoming interface: GigabitEthernet0/1, RPF nbr 192.168.1.1
Outgoing interface list:
GigabitEthernet0/2, Forward/Sparse, 02:12:48/00:02:09
(172.168.1.2, 224.0.1.40), 00:00:20/00:02:39, flags: LFT
Incoming interface: GigabitEthernet0/3, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/1, Forward/Sparse, 00:00:20/00:03:09
GigabitEthernet0/2, Forward/Sparse, 00:00:20/00:02:39
この時のSenderとRouter2間のICMPが飛んだ後、Router2とRouter1間のPIMメッセージを見てみましょう。
以下の画像の通り、Registerメッセージが飛んでおり、172.168.1.2から224.0.1.40宛のパケットとなっております。
このメッセージにより送信元ツリーが作成されるのです。
![](http://daimaru-tech-blog.com/wp-content/uploads/2024/02/image-1.png)
最後に
今回は、マルチキャストのプロトコルの1つである「PIM-SM」についてまとめました。
次回は、「PIM-SM」のスイッチオーバ機能やAuto-RP、MLDについてまとめていきたいと思います。