PIM-SM(PIM Sparse Mode)の動作を、Cisco ルータの検証構成をもとに順に確認していきます。RP(ランデブーポイント)は動的に学習させず、全ルータに手動で設定する「スタティック RP」の構成です。
マルチキャストルーティングの全体像は、先に次の記事を読んでおくと理解しやすくなります。
>> 参考:【初心者わかりやすく】マルチキャストルーティングの第1歩
- マルチキャストルーティングと PIM-SM を有効にし、PIM の隣接関係を作る
- RP を手動で設定し、PIM Register でマルチキャストを RP に届ける
- 受信機の参加(Join)から共有ツリーができ、送信元ツリーに切り替わるまでの流れ
show ip mrouteで共有ツリーと送信元ツリーを読み取る
検証構成
配信サーバ(192.168.12.1)が 239.1.1.1 宛てにマルチキャストを配信し、受信機(Receiver-1)が IGMPv2 で 239.1.1.1 への参加を要求します。R5 のループバックアドレス(5.5.5.5/32)を RP にします。
マルチキャストの設定
ユニキャストのルーティングを設定する
まず、各ネットワーク間でユニキャストのルーティングができるようにします。ここでは OSPF で設定しています(設定は記事の最後にまとめています)。PIM は、ユニキャストのルーティングテーブルを使って RPF チェック(受信したインターフェースが正しいかの確認)をするので、ユニキャストのルーティングが前提になります。
配信サーバはマルチキャストを送信するだけなので、デフォルトゲートウェイを設定しなくてもかまいません。受信機も、マルチキャストを受信するだけならデフォルトゲートウェイは不要です。今回は、配信サーバからのマルチキャスト宛ての ping に受信機が応答できるよう、受信機にはデフォルトゲートウェイを設定します。
マルチキャストルーティングを有効にする
Cisco ルータでは、マルチキャストルーティングは既定で無効なので、有効にします。
R2,R3,R5 (config)# ip multicast-routing
インターフェースで PIM-SM を有効にする
R2・R3・R5 のルータ間のインターフェースと、配信サーバや受信機がつながっているインターフェースで PIM-SM を有効にします。
R2,R3,R5 (config-if)# ip pim sparse-mode
インターフェースで PIM-SM を有効にすると、ルータは PIM Hello パケットを送り始めます。例えば R2 から R3 への Hello を見てみます。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| No. | Time | Source | Destination | Protocol | Length | Info |
|---|---|---|---|---|---|---|
| 7 | 2.417281 | 192.168.23.2 | 224.0.0.13 | PIMv2 | 76 | Hello |
| 51 | 32.367083 | 192.168.23.2 | 224.0.0.13 | PIMv2 | 76 | Hello |
| 115 | 61.685471 | 192.168.23.2 | 224.0.0.13 | PIMv2 | 76 | Hello |
| 157 | 90.867000 | 192.168.23.2 | 224.0.0.13 | PIMv2 | 76 | Hello |
| 199 | 120.223980 | 192.168.23.2 | 224.0.0.13 | PIMv2 | 76 | Hello |
▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 231▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.13▾ Protocol Independent Multicast 0010 .... = Version: 22 .... 0000 = Type: Hello (0) Reserved byte(s): 00 Checksum: 0x4ee3 [correct] ▾ PIM Options: 53 ▸ Option 1: Hold Time: 105 ▸ Option 20: Generation ID: 1252280022 ▸ Option 19: DR Priority: 1 ▸ Option 21: State Refresh Capable: Version = 1, Interval = 0s ▸ Option 65004: RPF Proxy Vector
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Dst: 224.0.0.13 | 宛先は ALL-PIM-ROUTERS(すべての PIM ルータ)のマルチキャストアドレス。一覧の Time を見ると、約30秒ごとに送られている |
| 2 | Type: Hello (0) | PIM Hello メッセージ |
| 3 | Hold Time: 105 | この時間 Hello が届かなければ、隣接関係を切る。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)を設定する
RP を設定します。今回は R5 のループバックアドレス(5.5.5.5)を RP にします。RP を動的に学習させるのではなく、全ルータに手動で設定します。RP のアドレスには、どのルータからもユニキャストで届く必要があるので、ループバックのネットワークも OSPF で広告しておきます。
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
トンネルインターフェースがアップしています。全ルータで Tunnel0 が、RP である R5 だけ Tunnel1 もアップしています。このトンネルは、次の PIM Register で使われます。
動作確認
PIM Register(送信元を RP に登録する)
配信サーバが 239.1.1.1 宛てにマルチキャストを送ると、ファーストホップルータ(送信元に一番近いルータ)である R2 は、そのマルチキャストを PIM Register に入れて、RP(R5)にユニキャストで送ります。このカプセル化にトンネルインターフェースが使われ、Tunnel0 は PIM Register のカプセル化に、R5 の Tunnel1 はカプセル化の解除に使われます。
配信サーバから 239.1.1.1 へ ping を実行し、R2 と R5 の間の PIM Register を確認します。
1▸ Internet Protocol Version 4, Src: 192.168.12.2, Dst: 5.5.5.5▾ Protocol Independent Multicast 0010 .... = Version: 22 .... 0001 = Type: Register (1) Reserved byte(s): 00 Checksum: 0xdeff [correct] ▸ PIM Options3▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 239.1.1.1▾ Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Src: 192.168.12.2, Dst: 5.5.5.5 | R2 から RP(R5)へのユニキャストでカプセル化している |
| 2 | Type: Register (1) | PIM Register メッセージ |
| 3 | Src: 192.168.12.1, Dst: 239.1.1.1 | 中に入っている元のマルチキャストパケット(配信サーバからの ping) |
これで RP は、配信サーバ(192.168.12.1)から 239.1.1.1 へのマルチキャストがあることを知ります。次に RP は、送信元に向けて (192.168.12.1, 239.1.1.1) の PIM Join を送り、送信元からのマルチキャストをカプセル化せずに直接受け取れるようにします。直接受け取れるようになると、RP は R2 に Register-Stop を送り、カプセル化をやめさせます。
1▸ Internet Protocol Version 4, Src: 5.5.5.5, Dst: 192.168.12.2▾ Protocol Independent Multicast 0010 .... = Version: 22 .... 0010 = Type: Register-stop (2) Reserved byte(s): 00 Checksum: 0x1f33 [correct] ▾ PIM Options3 Group: 239.1.1.1/32 Source: 192.168.12.1
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Src: 5.5.5.5, Dst: 192.168.12.2 | RP(R5)から R2 へのユニキャスト |
| 2 | Type: Register-stop (2) | Register-Stop メッセージ(カプセル化の停止要求) |
| 3 | Group・Source | 停止する対象。送信元 192.168.12.1 からグループ 239.1.1.1 へのマルチキャスト |
受信機の参加(PIM Join)
受信機が 239.1.1.1 を受信したいときは、ラストホップルータ(受信機に一番近いルータ)である R3 に IGMP を送ります。IGMPv2 の動作は IGMPv2 の記事 を参照してください。IGMP を受け取った R3 は、RP に向かうインターフェースから PIM Join を送ります。
R3 から R5 への PIM Join は次のようになります。
1▸ Internet Protocol Version 4, Src: 192.168.35.3, Dst: 224.0.0.13▾ Protocol Independent Multicast 0010 .... = Version: 22 .... 0011 = Type: Join/Prune (3) Reserved byte(s): 00 Checksum: 0xf430 [correct] ▾ PIM Options3 Upstream-neighbor: 192.168.35.5 Reserved byte(s): 00 Num Groups: 1 Holdtime: 2104 ▾ Group 0: 239.1.1.1/32 ▸ Num Joins: 1 Num Prunes: 0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Dst: 224.0.0.13 | Join/Prune も ALL-PIM-ROUTERS 宛てに送る |
| 2 | Type: Join/Prune (3) | Join と Prune は同じメッセージで運ぶ |
| 3 | Upstream-neighbor: 192.168.35.5 | Join を受け取ってほしい上流の PIM ネイバー。RP に向かう R5 |
| 4 | Group 0: 239.1.1.1/32 | 239.1.1.1 への参加(Join が1件、Prune が0件) |
マルチキャストルーティングを確認する
マルチキャストルーティングでは、共有ツリーと送信元ツリーが作られます。
| ツリー | 表記 | 説明 |
|---|---|---|
| 共有ツリー | (*, G) | RP を根にして配信されるツリー。RP は複数の送信元で共有されるので、この名前があります。PIM-SM では、共有ツリーが必ず作られます |
| 送信元ツリー | (S, G) | 特定の送信元アドレスを根にして配信されるツリー。最短経路で届くので、最短パスツリー(SPT)とも呼びます |
スパニングツリーの記事でも書きましたが、「ツリー」という言葉が出てきたら、ツリーの根(ルート)がどこかを意識するのが一番大事です。スパニングツリーの根はルートブリッジでした。マルチキャストでは、共有ツリーの根は RP、送信元ツリーの根は配信サーバ(送信元アドレス)です。
また、ツリーは根から枝の先までループしないことを保証する必要があります。マルチキャストでは、根(共有ツリーなら 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 のパケットについてのエントリ。Incoming interface は RP 向けの FastEthernet0/0.25 です。R2 の先に受信機はいないので、Outgoing interface list は Null です |
送信元ツリー(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 から配信される共有ツリー。R5 自身が RP なので、Incoming interface は Null です。Outgoing interface は受信機側(R3)に向かう FastEthernet0/0.35 です |
送信元ツリー(192.168.12.1, 239.1.1.1) | 送信元 192.168.12.1 からのエントリ。Incoming interface は配信サーバ側(R2)に向かう 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 は、共有ツリーをもとに RP から 239.1.1.1 のパケットを受け取り、受信機へ転送できます。
共有ツリーから送信元ツリーへの切り替え
マルチキャストを受け取ると、ラストホップルータの R3 は、送信元のアドレスが 192.168.12.1 だとわかります。ここで R3 は、共有ツリーから送信元ツリーに切り替えます。ユニキャストのルーティングテーブルで 192.168.12.1 宛ての出力インターフェースを調べ、そこから 239.1.1.1 についての PIM Join(送信元 192.168.12.1 を指定した (S, G) Join)を送ります。
R3 から R2 への PIM Join は次のとおりです。
▸ Internet Protocol Version 4, Src: 192.168.23.3, Dst: 224.0.0.13▾ Protocol Independent Multicast 0010 .... = Version: 2 .... 0011 = Type: Join/Prune (3) Reserved byte(s): 00 Checksum: 0x4094 [correct] ▾ PIM Options1 Upstream-neighbor: 192.168.23.2 Reserved byte(s): 00 Num Groups: 1 Holdtime: 2102 ▾ Group 0: 239.1.1.1/32 ▾ Num Joins: 1 IP address: 192.168.12.1/32 (S) Num Prunes: 0
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Upstream-neighbor: 192.168.23.2 | 送信元 192.168.12.1 に向かう上流のネイバー。RP の R5 ではなく R2 になっている |
| 2 | IP address: 192.168.12.1/32 (S) | 送信元 192.168.12.1 を指定した 239.1.1.1 への参加。送信元ツリーへの Join |
R2 から直接マルチキャストを受け取れるようになると、RP からこの送信元のマルチキャストを受け取る必要はなくなります。そこで R3 は、R5 に向けて PIM Prune を送ります。
R3 から RP への PIM Prune は次のとおりです。
▸ Internet Protocol Version 4, Src: 192.168.35.3, Dst: 224.0.0.13▾ Protocol Independent Multicast 0010 .... = Version: 2 .... 0011 = Type: Join/Prune (3) Reserved byte(s): 00 Checksum: 0x3391 [correct] ▾ PIM Options1 Upstream-neighbor: 192.168.35.5 Reserved byte(s): 00 Num Groups: 1 Holdtime: 2102 ▾ Group 0: 239.1.1.1/32 Num Joins: 0 ▾ Num Prunes: 1 IP address: 192.168.12.1/32 (SR)
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Upstream-neighbor: 192.168.35.5 | RP に向かう上流のネイバー(R5) |
| 2 | IP address: 192.168.12.1/32 (SR) | 送信元 192.168.12.1 についての Prune。R は RPT ビットで、共有ツリー(RP 側)からこの送信元だけを外すという意味。(S, G, rpt) 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
送信元ツリーの Incoming interface は、R2 に向かう FastEthernet0/0.23 になっています。共有ツリーの (*, 239.1.1.1) も残っているので、ほかの送信元から 239.1.1.1 が配信されたときは、まず RP 経由で受け取れます。
Cisco ルータでは、ラストホップルータの共有ツリーから送信元ツリーへの切り替えは、既定で最初のパケットを受け取った時点ですぐに行われます。これで、RP を経由せず、最短経路で配信サーバから受信機までマルチキャストが届くようになりました。
疎通確認
配信サーバ(Cisco の機器を使用)から 239.1.1.1 へ ping を実行すると、受信機(192.168.34.4)から応答が返ってきます。
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
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
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
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
まとめ
| 段階 | メッセージ | 内容 |
|---|---|---|
| 隣接関係 | PIM Hello | 224.0.0.13 宛てに約30秒ごと。Hold Time は 105 秒 |
| 送信元の登録 | PIM Register | ファーストホップ(R2)がマルチキャストをカプセル化して RP へユニキャストで送る |
| 登録の停止 | Register-Stop | RP が送信元から直接受け取れるようになったら、R2 にカプセル化をやめさせる |
| 受信機の参加 | (*, G) Join | ラストホップ(R3)が RP に向けて送り、共有ツリーができる |
| 送信元ツリーへの切り替え | (S, G) Join | R3 が送信元に向けて送り、最短経路の送信元ツリーができる |
| 共有ツリーから外れる | (S, G, rpt) Prune | R3 が RP に向けて送り、この送信元の分だけ RP 経由の配信を止める |
コメント