【ネットワーク入門】マルチキャストの代表的なプロトコル(PIM-SM)について

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

はじめに

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

前回の記事ではマルチキャストの基本となる「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(ランデブーポイント)を経由するため、最短経路ではなくなります

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

基本を押さえた後は、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が保持する共有ツリーを利用します。

マルチキャスト受信者(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パケットを利用し、30秒ごとに224.0.0.13宛に送信」します。

このネイバーを確立させるためには「マルチキャストを利用するInterfaceでPIM-SMの有効化」を行う必要があります。

このネイバー確立は動作確認を行います。

ちなみに構成は以下の通りです。

マルチキャスト受信者(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

動作確認(Config/Showコマンド編)

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
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」に変化したことがわかります。

STEP
PIM-SMの有効化

マルチキャストルーティングの有効化を行った後は、「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ネイバーが検出されたのがわかります。

STEP
RP(ランデブーポイント)の指定

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

では、実機で確認しましょう。

マルチキャスト受信者(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

設定が追加されていない状態を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についてまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

目次