はじめに
こんにちは、ネットワークエンジニアの「だいまる」です。
前回の記事ではマルチキャストの基本となる「IGMP」について、説明しました。
今回は、マルチキャストの根幹となる「PIM-SM」と呼ばれるプロトコルについて説明したいと思います。
そもそもPIM-SMとは?
PIM-SMとは、「Protocol Independent Multicast Sparse Mode」の略称です。
名前の通り、マルチキャストのSparseモードでマルチキャストネットワークの構築を行うプロトコルが「PIM-SM」になります。
いきなり出てきたSparseモードとは?
マルチキャストネットワークを構築する「PIM」には、「Sparse Mode」と「Dense Mode」の2種類が存在します。
Sparse Modeは、「マルチキャストで利用するディストリビューションツリーが2種類あり、帯域に余裕がないネットワークで用いるモード」になります。
また、2種類のディストリビューションツリーとは「送信元ツリー」と「共有ツリー」と呼ばれるツリーになります。
このモードでは、「Explicit Join(明示的な参加)」という「マルチキャストグループへの参加は明示する必要がある」特徴があります。
一方、Dense Modeは、「送信元ツリーのみを利用し、帯域に余裕のあるネットワークで用いるモード」になります。
また、Sparse Modeの「Explicit Join」とは異なり、定期的にマルチキャストグループへの参加確認を実施するモードになります。
更なる深掘り!3種類のツリーについて
マルチキャストのプロトコルである「PIM」には、「Sparse Mode」と「Dense Mode」の2種類があると説明したと思います。
その際に出てきた「ディストリビューションツリー」、「送信元ツリー」、「共有ツリー」について、この章では説明したいと思います。
①:ディストリビューションツリーとは?
ディストリブーションツリーとは、「送信元を根(Root)とし、受信者を葉(Leaf)として構成されるマルチキャストのツリー」になります。
このツリーを理論的に学ぶなら「グラフ理論」がおすすめです
②送信元ツリーとは?
送信元ツリーとは、「名前の通り送信元(Sender)ごとに生成され、受信者(Receiver)と最短経路で結ぶディストリビューションツリー」となります。
以下の図の場合、「Group1」と「Group2」の2つのグループに分かれていますが、「緑のツリー」と「赤のツリー」が送信者(Sender)ごとに生成されています。
これが「送信元ツリー」です。
このツリーは「最短経路」で生成されるのですが、「最短経路」とはOSPFやIS-IS等のメトリックを基に算出された経路が用いられます。
このツリーのメリットは、各送信者から受信者への通信が最短経路になるため、遅延値の最小化やピンポン(同じ区間の往復)することがなくなります。
厳密にはメトリックと物理構成(ケーブルの距離等)に影響されます
一方、デメリットは、各送信者ごとにツリーが生成されるため、数が多くなるとルータの負荷が増大します。
③共有ツリーとは?
共有ツリーとは、「RP(ランデブーポイント)を根(Root)として生成されるディストリビューションツリー」になります。
「RP(ランデブーポイント)」とは、マルチキャスト通信の起点となるルータになります。
このルータは自動、手動、どちらでも設定することができます。
このツリーの特徴は、1つしか生成されないため、ルータの負荷を抑えることができます。
一方、送信元のマルチキャストパケットは必ずRP(ランデブーポイント)を経由するため、最短経路ではなくなります。
基本を押さえた後は、PIM-SMの仕組みと動作確認をしよう!
ここまでSparseとDenseの2つのモード、3種類のディストリビューションツリーについてまとめました。
PIM-SMの概要がわかった次は、理論と実機で確認していきましょう。
①:PIM-SMのディストリビューションツリーの作成
Step1:マルチキャストグループへのルータ登録
最初に実施すべきことは、マルチキャストグループに参加させるルータや機器の追加です。
この部分に関しては、IGMPによる追加となります。(以下記事でまとめています)
この時、PIM-SMでは「送信元ツリー」と「共有ツリー」の2種類が作成されます。
「送信元ツリー」は、送信者(Sender)からRP(ランデブーポイント)までのツリーとなります。
一方、「共有ツリー」は、「RP(ランデブーポイント)から各受信者へのツリー」になります。
Step2:送信者(Sender)の登録
Step1でも触れた通り、送信者(Sender)を登録するためには送信元ツリーを利用し、(S,G)Register(PIM Register)メッセージを送信し、RPに登録依頼を行います。
Step3:受信者(Receiver)の登録
ラストホップルータ(LHR)が、IGMP reportを受信者(Receiver)から受信し、LHRからRPに(*,G) Join(PIM Join)メッセージを送信し、RPに登録します。
この登録の際は、LHRが保持する共有ツリーを利用します。
②マルチキャストルータのネイバー確立はどうなっているの?
ネイバー確立の仕組み
マルチキャストを利用するルータ間のネイバー確立は「Helloパケットを利用し、30秒ごとに224.0.0.13宛に送信」します。
このネイバーを確立させるためには「マルチキャストを利用するInterfaceでPIM-SMの有効化」を行う必要があります。
このネイバー確立は動作確認を行います。
ちなみに構成は以下の通りです。
動作確認(Config/Showコマンド編)
マルチキャストの有効化を行うために、以下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
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
この設定変更の前後状態を確認すると「Multicast Routing」が「Disable」から「Enablle」に変化したことがわかります。
マルチキャストルーティングの有効化を行った後は、「PIM-SMを有効化」する必要があります。
「PIM-SM有効化」のコマンドは以下のとおりとなります。
interface gigbatiEthernet 0/X
ip pim sparse-mode
!
今回は、Router1上での設定追加で動作確認を行いたいと思います。
設定前の状態では、「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での設定です。
Router1#conf t
Router1(config)#interface gigabitEthernet 0/1
Router1(config-if)#ip pim sparse-mode
Router1(config-if)#end
この段階では、ネイバーが確立されていないため、何も起きないのでRouter2にも設定を追加します。
Router2#conf t
Router2(config)#interface gigabitEthernet 0/1
Router2(config-if)#ip pim sparse-mode
Router2(config-if)#end
Router1とRouter2に設定を終えた後、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でPIMネイバーが検出されたのがわかります。
Step1・Step2を終えた後に、最後に実施することは「RP(ランデブーポイント)の指定」です。
今回、「RP(ランデブーポイント)」の指定は「Static(手動)」で実施します。
動作確認の環境では、「Router1」を「RP(ランデブーポイント)」と設定するため、Router1のLoopbackアドレスを以下のコマンドで指定します。
ip pim rp-address <RP(ランデブーポイント)のIPアドレス>
実際に投入したコマンドは以下のとおりとなります。
Router1#conf t
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
RP(ランデブーポイント)の指定後、showコマンドで確認できるようになりました。
動作確認(パケットキャプチャ編)
「動作確認(Config/Showコマンド編)」で設定した後は、ルータ間で流れるHelloパケットの中身を見ていきましょう。
パケットの中身を見ると送信元がRouterのInterfaceに設定したアドレスに対し、宛先は「224.0.0.13」になっていることがわかります。
また、パケットタイプは「Helloパケットを示すType0」になっていることがわかります。
③2種類のPIM-SMメッセージ
種類①:(※,G)メッセージ
(※,G)メッセージは「PIM Joinメッセージ」とも呼ばれ、LHR(ラストホップルータ)で受信後、RPに送信することで共有ツリーに追加されます。
マルチキャストツリーの参加者を指す「エントリ」が作成される条件やマルチキャストの経路生成で利用されるRPF(Reverse Path Forwarding)の中身は以下のとおりとなります。
- エントリの作成条件
- ディストリビューションツリーの初期作成時
- ReceiverからIGMPメンバシップ受信時
- (※,G)Joinメッセージの受信
- RPFの中身
- Incoming IF:RPのIPアドレスへの最短経路IF
- RPF Neighbor:Incoming IFのネイバアドレス
- Outgoing IF情報
- Receiverが存在するIF
- Joinメッセージを受信したIF
では、実機で確認しましょう。
設定が追加されていない状態をRouter3で確認します。
Cisco IOSでは「show ip mroute」を入力することでディストリビューションツリーを確認することができます。
事前確認では、何も表示されないことがわかります。
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:
Router3の受信者(Receiver)向けのインターフェースGi0/1に「ip igmp join-group 224.0.1.40」を設定すると、マルチキャストグループに追加されるため、Outgoing Interfaceに出力されるようになります。
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メッセージのやり取りが行われています。
(S,G)メッセージ
(S,G)メッセージは、「送信者の登録でFHR(ファーストホップルータ)からRP(ランデブーポイント)にメッセージを送信する際に利用するメッセージ(PIM Registerメッセージ)」です。
送信者の登録条件となる「エントリ作成条件」や「RFP情報」は以下のとおりとなります。
- エントリ作成条件
- FHR(ファーストホップルータ)が送信者からマルチキャスト宛のパケットを受信時
- Join or Pruneメッセージの受信時
- RP(ランデブーポイント)に限り、PIM Registerメッセージの受信時
- RPF情報
- Incoming IF:SenderのIPアドレスへのIF
- RPF neighbor:SenderのIFへのネイバアドレス
- Outgoing IF:Joinを受け取ったIFやReceiverが存在するIF
Senderから「240.0.1.40」宛にPingを送信する前の状態は以下の通りとなります。
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
SenderからのPing送信後、想定通り(172.168.1.2,224.0.1.40)が作成されます。
このSenderが「172.168.1.2」になっているため、このアドレスが追加されています。
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宛のパケットとなっております。
このメッセージにより送信元ツリーが作成されるのです。
最後に
今回は、マルチキャストのプロトコルの1つである「PIM-SM」についてまとめました。
次回は、「PIM-SM」のスイッチオーバ機能やAuto-RP、MLDについてまとめていきたいと思います。