【ネットワーク入門】マルチキャスト・PIM-SMについて

  • URLをコピーしました!
目次

はじめに

こんにちは、ネットワークエンジニアの「だいまる」です。

前回の記事で投稿したマルチキャストの基本である「IGMP」に続き、今回は「PIM-SM」についてまとめていきたいと思います。

主なモードは2つ!! それは「Sparse」と「Dense」!!

マルチキャストには「Sparse」と「Dense」の主に2つのモードがあります。

この2つのモード違いについて、これから説明したいと思います。

Sparseモード

Sparseモードとは、「マルチキャストのディストリビューションツリーである送信元ツリーと共有ツリーの2つを生成し、帯域に余裕がないWAN経由等で用いるモード」となります。

Sparseモードでは、Explicit Joinというマルチキャストグループへの参加を明示的に通知する特徴(PULL型)があります。

Denseモード

Denseモードとは「送信元ツリーのみを作成し、帯域に余裕があるLAN環境等で利用することが多いモード」です。

このモードは、グループへの参加を明示的に送信するSparseモードとは異なり、定期的にグループへの参加確認を行うPUSH型となります。

そもそも「送信元ツリー」と「共有ツリー」とは?

SparseモードとDenseモードの概要をまとめた際に出てきた「送信元ツリー」と「共有ツリー」とは、いったい何か?を次に説明していきたいと思います。

送信元ツリーとは?

送信元ツリーとはSenderごとに生成されSenderとReceiverを結ぶ最短経路を生成するツリーとなります。

正直、「は?」って感じですよね。

私も「は?」って思いましたww

具体的なイメージは下の図を見てもらえればわかりやすいと思います。

マルチキャスト受信者(Receiver)※ユーザ
マルチキャスト受信者(Receiver)※ユーザ
送信元(Sender)②
送信元(Sender)②
送信元(Sender)①
送信元(Sender)①
送信元ツリー①
送信元ツリー①
送信元ツリー②
送信元ツリー②
Text is not SVG – cannot display

上の図では、送信元①と送信元②の計2つがあります。

各送信元を根(ルート)として、最短経路を通るようなツリーが作成されるのが「送信元ツリー」となるのです。

最短経路でのツリー作成となるため、遅延は少なくなる等のメリットがあります。

一方、各送信元(Sender)ごとにツリーが生成されるため、同一ネットワークに複数の送信元(Sender)が存在する場合はルータの負荷増大につながるデメリットもあります。

共有ツリーとは?

共有ツリーとは「RP(ランデブーポイント)を中心に生成される1つだけのツリー」となっています。

このツリーは、RP(ランデブーポイント)を根(ルート)としたツリーのため、送信者(Sender)がRPにマルチキャストパケットを送信し、RPがそのパケットを各Receiverに送信します。

生成されるツリーは1つのため、ルータの負荷は抑えられます。

一方、RPを必ず経由することから最短経路ではない場合があり、遅延が増えるデメリットもあります。

マルチキャスト受信者(Receiver)※ユーザ
マルチキャスト受信者(Receiver)※ユーザ
送信元(Sender)②
送信元(Sender)②
送信元(Sender)①
送信元(Sender)①
共有ツリー
共有ツリー
RP(ランデブーポイント)
RP(ランデブーポイント)
RP(ランデブーポイント)に
一度送信
RP(ランデブーポイント)に…
Text is not SVG – cannot display

PIM-SMとは?

マルチキャストのモードとツリーについてまとめたところで、今回の本題である「PIM-SM」について説明していきます。

PIM-SMとは?

PIM-SMとは、「Sparseモードのマルチキャストルーティングを行うプロトコル」になります。

Sparseモードは、「送信元ツリー」と「共有ツリー」の2つを組み合わせて使っているモードであり、明示的な要求がなければマルチキャストグループに参加できないモードです。

一般的には、共有ツリー作成のためにRP(ランデブーポイント)の設定が必要となります。

ツリー作成のフローをこれから簡単に説明したいと思います。

PIM-SMのツリー作成フロー

①ルータの登録方法

空のディストリビューションツリーを作成し、Joinメッセージの受信によりツリーに追加される

②Senderの登録方法

RPに向けて(S,G)Register(PIM Register)メッセージを送信しRPが登録(送信元ツリーを利用)

③Receiverの登録方法

LHRがIGMP Reportを受信し、LHRからRPに(※,G)Join(PIM Join)メッセージを送信し、RPが登録(共有ツリーを利用)

マルチキャスト受信者(Receiver)※ユーザ
マルチキャスト受信者(Receiver)※ユーザ
送信元(Sender)②
送信元(Sender)②
送信元(Sender)①
送信元(Sender)①
共有ツリー
共有ツリー
RP(ランデブーポイント)
RP(ランデブーポイント)
RP(ランデブーポイント)に
(S.G)PIM-Registerを送信
(送信元ツリー)
RP(ランデブーポイント)に…
IGMP Reportを受信
IGMP Reportを受信
LHRとして、RPに
(※,G)PIM-JOINを送信
(共有ツリー)
LHRとして、RPに…
Text is not SVG – cannot display

マルチキャストルータのネイバ検出

ネイバの検出には、Helloパケットを利用し30sec毎に224.0.0.13宛に送信されます。

そもそもの話でネイバ検出を行うためには、経路となる全IFでマルチキャストの有効化、PIM-SMの有効化を行う必要があります。

このマルチキャスト有効化とPIM-SM有効化については、今回CMLで確認します。

今回実機確認で利用した構成は以下の通りです。

マルチキャスト受信者(Receiver)※ユーザ 今回はIOS Routerを代替として利用
マルチキャスト受信者(Receiver)※ユーザ 今回はIOS Routerを代替として利用
送信元(Sender)
送信元(Sender)
RP(ランデブーポイント)
RP(ランデブーポイント)
Router1
Router1
Router2
Router2
Router3
Router3
L2SW1
L2SW1
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/3
Gi0/3
Gi0/3
Gi0/3
Gi0/2
Gi0/2
Gi0/3
Gi0/3
Gi0/2
Gi0/2
Gi0/1
Gi0/1
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/1
Gi0/1
Text is not SVG – cannot display

 この構成でRouter1で設定した内容について説明していきたいと思います。

STEP
マルチキャスト有効化

マルチキャストの有効化を行うために、以下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」に変化します。

STEP
PIM-SMの有効化

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は設定を行ってないので出力されませんでした。

STEP
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パケット)でやり取りされています。

(※,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メッセージのやり取りが行われています。

(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宛のパケットとなっております。

このメッセージにより送信元ツリーが作成されるのです。

最後に

今回は、マルチキャストのプロトコルの1つである「PIM-SM」についてまとめました。

次回は、「PIM-SM」のスイッチオーバ機能やAuto-RP、MLDについてまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

目次