【マルチキャスト】PIM-SMをわかりやすく解説(スタティックRP)

 PIM-SMの動作をサンプル構成をもとに解説していきます。

 以下の記事を先に読んでいただくことをお勧めします。

  >> 参考 :  【初心者わかりやすく】マルチキャストルーティングの第1歩
スポンサーリンク

マルチキャスト設定

IGP設定

 まずは、各ネットワーク間がユニキャストでルーティングできるように設定します。ここでは、OSPFで設定しているとします。

 注意として、配信サーバはマルチキャストだけ配信できれば良いので、デフォルトゲートウェイは設定しなくても良いです。 受信機もマルチキャストを受信するだけなら、デフォルトゲートウェイ設定は不要ですが、配信サーバからのマルチキャスト宛のPingに返答ができるように、今回はデフォルトゲートウェイを設定します。

マルチキャストルーティングの有効化

 Ciscoでは、マルチキャストルーティングはデフォルトで無効のため、有効にします。

R2,R3,R5
   (config)# ip multicast-routing

インタフェースでPIM-SMを有効

 下記、インタフェースで、PIM-SMを有効にします。

配信サーバ、受信機 それぞれが接続されているインタフェースもPIM-SMを有効にします。

R2,R3,R5
(config-if)# ip pim sparse-mode

 PIM-SMをインタフェースで有効にすることで、ルータはPIM Helloパケットを送信し始めます。

 例えば、R2→R3を観察します。 30秒間隔でPIM Helloが送信されていることがわかります。ホールドタイムは、デフォルトで30秒の3.5倍で105秒です。 R3からも同様にPIM Helloが送信されます。

   

   

 コンソール上では、以下のログを出力され、R2とR3はPIM隣接関係になります。

R2
%PIM-5-NBRCHG: neighbor 192.168.23.3 UP on interface FastEthernet0/0.23
R3
%PIM-5-NBRCHG: neighbor 192.168.23.2 UP on interface FastEthernet0/0.23

 コマンドではshow ip pim neighbor で隣接関係を確認できます。

R2# 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
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
192.168.23.3      FastEthernet0/0.23       00:45:16/00:01:43 v2    1 / DR S P G
192.168.25.5      FastEthernet0/0.25       00:44:40/00:01:20 v2    1 / DR S P G

 R2、R3、R5間それぞれ同様の動作によりPIM隣接関係を構築します

ランデブーポイントの設定

 では、ランデブーポイント(RP)を設定します。今回はR5のループバックアドレス(5.5.5.5)をRPとします。 今回は、RPを動的に学習するのではなく、手動で構成します。

R5
R5(config)# interface Loopback0
R5(config-if)# ip address 5.5.5.5 255.255.255.255
R5(config-if)#!
R5(config-if)# router ospf 1
R5(config-router)# network 5.5.5.5 0.0.0.0 area 0
!
R2、R3、R5
(config)# ip pim rp-address 5.5.5.5

 するとコンソール上に以下のログが出力されます。

R2
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up

R3
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up

R5
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel1, changed state to up

 トンネルインタフェースがUPしています。 全ルータで、Tunnel0がUPし、RPであるR5だけ Tunnel1がUPしています。 トンネルインタフェースは何に使うのでしょうか。

スポンサーリンク

動作確認

PIMレジスタ

 配信サーバからのマルチキャスト(239.1.1.1)の内容を、ファーストホップルータであるR2は、RP(R5)に対して、PIMレジスタとして送信します。 このPIMレジスタにトンネルインタフェースが使用されます。 Tunnel0は、PIMレジスタのカプセル化に使用し、Tunnel1はPIMレジスタのカプセル化解除に使用します。

  配信サーバから、239.1.1.1へPingを実行し、R2とR5間のPIMレジスタを確認します。

   

 これで、RPに配信サーバ(192.168.12.1)から239.1.1.1へのマルチキャストの登録を試みます。次にRP自身が、ファースホップルータ向けにPIM Join を送り、192.168.12.1から239.1.1.1へのマルチキャストを受信すると、RPは、PIMレジスタ停止(Register-stop)が送信されます。

   

PIM参加と離脱

 受信機が239.1.1.1を受信したい場合、ラストホップルータであるR3にIGMPを送信します。(IGMPv2の動作はhttps://hirotanoblog.com/multicast-igmpv2/1442/を参照してください)。IGMPを受信したR3はRPへ接続するインタフェースよりPIM参加(PIM Join)を送信します。

   

   

 R3〜R5間のPIM参加のパケットは以下のようになります。

   

   

マルチキャストルーティングの確認

共有ツリー・送信元ツリー

 マルチキャストルーティングを確認します。マルチキャストルーティングでは、共有ツリーと送信元ツリーが作成されます。

           説明
共有ツリー   RPから配信されるマルチキャストのルーティング情報。RPは複数の送信元で共有されるため、このような名前が付いています。
PIM-SMの場合、共有ツリーは必ず作成されます。マルチキャストパケットを受信して、送信元アドレスがわかると、送信元ツリーへ推移します。
送信元ツリー特定の送信元アドレスから配信されるマルチキャストのルーティング情報

 スパニングツリーの記事でも書きましたが、ツリーという言葉が出てきたら、一番大事なことは、ツリーのルート(根っこ)はどこなのかを意識することです。 スパニングツリーの根っこはルートブリッジです。

 では、マルチキャストの共有ツリーと送信元ツリーのそれぞれの根っこは以下の通りです。

           根っこは?                     
共有ツリーランデブーポイント(RP)
送信元ツリー配信元サーバ(送信元アドレス)

 あと、ツリーは根っこから枝の先までループしないことを保証する必要があります。 マルチキャストにおいて、根っこ(共有ツリー:ランデブーポイント、送信元ツリー:送信元アドレス)に対して、RPFを実行することで、ループを排除します。

R2のルーティング確認

R2# 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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode


(*, 239.1.1.1), 00:02:31/stopped, RP 5.5.5.5, flags: SPF
  Incoming interface: FastEthernet0/0.25, RPF nbr 192.168.25.5
  Outgoing interface list: Null


(192.168.12.1, 239.1.1.1), 00:02:31/00:03:26, flags: FT
  Incoming interface: FastEthernet0/0.12, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0.25, Forward/Sparse, 00:02:31/00:02:56
       説明
共有ツリー(*, 239.1.1.1) は、送信元は任意で、宛先239.1.1.1のパケットについてのルーティングです。このようなパケットはRPから配信される、共有ツリーです。Incoming interfaceは、RP向けのFastEthernet0/0.25です。転送先はいないので、Outgoing interfaceはありません。
送信元ツリー(192.168.12.1, 239.1.1.1)は送信元192.168.12.1から宛先239.1.1.1のパケットについてのルーティングです。
Incoming interfaceは、配信サーバがいるFastEthernet0/0.12となり、Outgoing interfaceはRP向けの FastEthernet0/0.25となります。

R5のルーティング確認

R5# 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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode


(*, 239.1.1.1), 00:22:28/00:02:41, RP 5.5.5.5, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0.35, Forward/Sparse, 00:08:08/00:02:41


(192.168.12.1, 239.1.1.1), 00:03:04/00:02:53, flags: T
  Incoming interface: FastEthernet0/0.25, RPF nbr 192.168.25.2
  Outgoing interface list:
    FastEthernet0/0.35, Forward/Sparse, 00:03:04/00:02:41
       説明
共有ツリー(*, 239.1.1.1)は、RPから配信される共有ツリーを表します。Incoming interfaceは自身がRPなので、Nullとなります。Outgoing interfaceは、受信機向けのFastEthernet0/0.35となります
送信元ツリー(192.168.12.1, 239.1.1.1)は送信元192.168.12.1から宛先239.1.1.1のパケットについてのルーティングです。
Incoming interfaceは、配信サーバがいるFastEthernet0/0.25となり、Outgoing interfaceは受信機向けのFastEthernet0/0.35となります。

R3のルーティング確認

R3# 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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode


(*, 239.1.1.1), 00:22:55/00:02:06, RP 5.5.5.5, flags: SC
  Incoming interface: FastEthernet0/0.35, RPF nbr 192.168.35.5
  Outgoing interface list:
    FastEthernet0/0.34, Forward/Sparse, 00:08:35/00:02:06
       説明
共有ツリー(*, 239.1.1.1)は、RPから配信される共有ツリーを表します。Incoming interfaceはRP向けのFastEthernet0/0.35で、Outgoing interfaceは受信機がいる FastEthernet0/0.34です。

 これで、R3は、共有ツリーをもとに、ランデブーポイントから239.1.1.1のパケットを受信し、受信機へ転送できます。

共有ツリー→送信元ツリーへの切り替え

 ここで受信機から一番近いルータ(R3: ラストホップルータ)は、送信元のアドレスが192.168.12.1 だとわかります。 ここで、共有ツリーから送信元ツリーに切り替えます。192.168.12.1へ向けのインタフェースに239.1.1.1に対してのPIM参加を送信します。(ルーティングテーブルを参照し192.168.12.1宛の出力インタフェースから送信されます。)

 R3からのPIM参加のパケットは以下です。

   

   

 これで、R2からマルチキャストパケットを受信すると、もうランデブーポイントからマルチキャストパケットを受信する必要がないので、R5向けにPIM Pruneメッセージを送信します。

 R3からRP向けのPIM Pruneメッセージは以下です。

   

   

 R3のルーティングテーブルを見ると、送信元ツリーが登録されていることがわかります。

R3# 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, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode


(*, 239.1.1.1), 01:39:26/stopped, RP 5.5.5.5, flags: SJC
  Incoming interface: FastEthernet0/0.35, RPF nbr 192.168.35.5
  Outgoing interface list:
    FastEthernet0/0.34, Forward/Sparse, 01:25:06/00:02:30


(192.168.12.1, 239.1.1.1), 00:00:05/00:02:54, flags: JT
  Incoming interface: FastEthernet0/0.23, RPF nbr 192.168.23.2
  Outgoing interface list:
    FastEthernet0/0.34, Forward/Sparse, 00:00:05/00:02:54

 ラストホップルータの共有ツリーから送信元ツリーの推移はデフォルトで即時に実行されます。

 これで、ランデブーポイントを経由せず、最短経路で、配信元サーバから受信機まで、マルチキャストが配信されました。

   

疎通確認

 配信元サーバ(Ciscoデバイスを使用)で239.1.1.1にPingを実行すると、レスポンスが確認できます。

R1# ping 239.1.1.1           
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:

Reply to request 0 from 192.168.34.4, 28 ms

設定情報

 各ルータの設定内容をまとめます。

R2(config)# ip multicast-routing 

R2(config)# interface FastEthernet0/0.12 
R2(config-subif)# ip pim sparse-mode 
R2(config-subif)# interface FastEthernet0/0.23 
R2(config-subif)# ip pim sparse-mode 
R2(config-subif)# interface FastEthernet0/0.25 
R2(config-subif)# ip pim sparse-mode 

R2(config)# ip pim rp-address 5.5.5.5 

R2(config)# router ospf 1 
R2(config-router)# network 192.168.12.0 0.0.0.255 area 0 
R2(config-router)# network 192.168.23.0 0.0.0.255 area 0 
R2(config-router)# network 192.168.25.0 0.0.0.255 area 0 
R3(config)# ip multicast-routing 

R3(config)# interface FastEthernet0/0.23 
R3(config-subif)# ip pim sparse-mode 
R3(config-subif)# interface FastEthernet0/0.34 
R3(config-subif)# ip pim sparse-mode 
R3(config-subif)# interface FastEthernet0/0.35 
R3(config-subif)# ip pim sparse-mode 

R3(config)# ip pim rp-address 5.5.5.5 

R3(config)# router ospf 1 
R3(config-router)# network 192.168.23.0 0.0.0.255 area 0 
R3(config-router)# network 192.168.35.0 0.0.0.255 area 0 
R5(config)# ip multicast-routing 

R5(config)# interface Loopback0
R5(config-if)# ip address 5.5.5.5 255.255.255.255
R5(config-if)# interface FastEthernet0/0.25 
R5(config-subif)# ip pim sparse-mode 
R5(config-subif)# interface FastEthernet0/0.35 
R5(config-subif)# ip pim sparse-mode 

R5(config)# ip pim rp-address 5.5.5.5 

R5(config)# router ospf 1 
R5(config-router)# network 5.5.5.5 0.0.0.0 area 0 
R5(config-router)# network 192.168.25.0 0.0.0.255 area 0 
R5(config-router)# network 192.168.35.0 0.0.0.255 area 0 

 最後までお読み頂きありがとうございました。

コメント