PIM Sparse modeはRPと呼ばれる待ち合わせ場所を経由する通信になります。しかし、いつもRPを経由すると遠回りになってしまうので、一定速度以上の通信はRPを経由しなくなるSwitch Overという機能が備わっています。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# ip pim spt-threshold { <threshold> | infinity } [ group-list <std_acl> ]
構成図
これ以降の動作確認は、以下の環境で行います。R2をRP Candidator かつ BSR Routerとして設定します。
[ip address] e0/0 e0/1 .2+--------+.2 192.168.12.0/24┌----+ R2 +----┐192.168.23.0/24 │ +--------+ │ │ │ .1│e0/0 e0/1│.3 +---+----+ +---+----+ +--------+ | R1 +----------+ R3 +----------+ Host 3 | +--------+.1 .3+--------+.3 .103+--------+ e0/2 e0/2 e0/3 e0/3 192.168.13.0/24 192.168.3.0/24 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32 [multicast domain] BSR Router RP Candidator e0/0 e0/1 .2+--------+.2 192.168.12.0/24┌----+ R2 +----┐192.168.23.0/24 │ +--------+ │ │ │ .1│e0/0 e0/1│.3 +---+----+ +---+----+ +--------+ | R1 +----------+ R3 +----------+ Host 3 | +--------+.1 .3+--------+.3 .103+--------+ e0/2 e0/2 e0/3 e0/3 192.168.13.0/24 192.168.3.0/24
[R1] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/0 ip pim sparse-mode ! interface Ethernet0/2 ip pim sparse-mode ! ip pim autorp listener [R2] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/0 ip pim sparse-mode ! interface Ethernet0/1 ip pim sparse-mode ! ip pim autorp listener ip pim send-rp-announce Loopback0 scope 1 ip pim send-rp-discovery Loopback0 scope 2 [R3] no ip domain lookup ! ip multicast-routing ! interface Loopback0 ip pim sparse-mode ! interface Ethernet0/1 ip pim sparse-mode ! interface Ethernet0/2 ip pim sparse-mode ! interface Ethernet0/3 ip pim sparse-mode ! ip pim autorp listener
設定全文は下記ファイルです。詳細設定は下記を参照ください。
switch over 無効化
仕様説明
sparse modeのマルチキャスト通信がRPを経由するのは、いつも最短ルートになるとは限らず無駄に帯域を消費してしまう事があります。その無駄を軽減する機能がsiwtch overです。switch overとはライスホップルータに設定する機能で、通信帯域がある閾値を超過するとマルチキャストソースとマルチキャストレシーバをつなぐツリーを作成します。
以下のコマンドでswitch overする閾値を設定します。閾値としてinfinityを設定すると必ずswitch overしないようになり、閾値として0を設定すると必ずswitch overするようになります(デフォルトの閾値は0であり、デフォルトの挙動は必ずswitch overします)。また、
Router(config)# ip pim spt-threshold { <threshold> | infinity } [ group-list <std_acl> ]
switch over 無効化設定
switch overの挙動を理解するために、まずはswitch overを無効化した状態について考察します。R3に以下の設定を投入しswitch overを無効化します。
[R3] ip access-list standard SPT 10 permit host 239.3.3.3 ! ip pim spt-threshold infinity group-list SPT
マルチキャストルーティングテーブル確認
R1 Loopback0からHost3への疎通を確認します。
[Host3] interface Ethernet0/3 ip igmp join-group 239.3.3.3 [R1] R1#ping 239.3.3.3 source Loopback 0 repeat 2 Type escape sequence to abort. Sending 2, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 Reply to request 0 from 192.168.3.103, 96 ms Reply to request 1 from 192.168.3.103, 8 ms Reply to request 1 from 192.168.3.103, 32 ms R1#
マルチキャストルーティングテーブルを確認すると以下の通りです。R1, R2で送信元ツリーが、R2, R3で共有ツリーが作成された事が読み取れます。
[R1] R1#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:01:12/stopped, RP 10.2.2.2, flags: SPF Incoming interface: Ethernet0/0, RPF nbr 192.168.12.2 Outgoing interface list: Null (10.1.1.1, 239.3.3.3), 00:01:12/00:02:25, flags: FT Incoming interface: Loopback0, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Sparse, 00:01:12/00:03:16 R1# [R2] R2#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:00:46/stopped, RP 10.2.2.2, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:00:46/00:02:43 (10.1.1.1, 239.3.3.3), 00:00:41/00:02:23, flags: JT Incoming interface: Ethernet0/0, RPF nbr 192.168.12.1 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:00:41/00:02:18 R2# [R3] R3#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:00:49/00:02:19, RP 10.2.2.2, flags: SC Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2 Outgoing interface list: Ethernet0/3, Forward/Sparse, 00:00:49/00:02:10 R3#
swtich over 有効化
switch over 有効化設定
先ほど無効化したswitch overを再び有効化します。
[R3] no ip pim spt-threshold infinity group-list SPT
マルチキャストルーティングテーブル確認
R1 Loopback0からHost3への疎通を確認します。
[Host3] interface Ethernet0/3 ip igmp join-group 239.3.3.3 [R1] R1#ping 239.3.3.3 source Loopback 0 repeat 2 Type escape sequence to abort. Sending 2, 100-byte ICMP Echos to 239.3.3.3, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 Reply to request 0 from 192.168.3.103, 108 ms Reply to request 0 from 192.168.3.103, 108 ms Reply to request 1 from 192.168.3.103, 72 ms Reply to request 1 from 192.168.3.103, 72 ms R1#
マルチキャストルーティングテーブルを確認すると以下の通りです。R1 (10.1.1.1, 239.3.3.3)に着目するとOutgoing interfaceがe0/0からe0/2に変わり、R3には(10.1.1.1, 239.3.3.3)という新しいエントリが作成された事が分かります。この2つのエントリは、switch overによって作成された、R1からHost3へのRPを経由しないルートです。
[R1] R1#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:02:22/stopped, RP 10.2.2.2, flags: SPF Incoming interface: Ethernet0/0, RPF nbr 192.168.12.2 Outgoing interface list: Null (10.1.1.1, 239.3.3.3), 00:02:22/00:02:23, flags: FT Incoming interface: Loopback0, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/2, Forward/Sparse, 00:01:06/00:03:22 R1# [R2] R2#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:09:19/stopped, RP 10.2.2.2, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:09:19/00:03:01 (10.1.1.1, 239.3.3.3), 00:00:16/00:02:43, flags: PJT Incoming interface: Ethernet0/0, RPF nbr 192.168.12.1 Outgoing interface list: Null R2# [R3] R3#show ip mroute 239.3.3.3 <omitted> (*, 239.3.3.3), 00:03:01/stopped, RP 10.2.2.2, flags: SJC Incoming interface: Ethernet0/1, RPF nbr 192.168.23.2 Outgoing interface list: Ethernet0/3, Forward/Sparse, 00:03:01/00:02:56 (10.1.1.1, 239.3.3.3), 00:01:40/00:02:57, flags: JT Incoming interface: Ethernet0/2, RPF nbr 192.168.13.1 Outgoing interface list: Ethernet0/3, Forward/Sparse, 00:01:40/00:02:56 R3#
パケットキャプチャ
switch overとは、具体的にはマルチキャストソースからレシーバへのツリーの作成と共有ツリーの削除を行います。
ラストホップルータは、ツリーを作成するためにマルチキャストソース方向に(S, G) joinを送信します。また、共有ツリーが不要な旨をRPに伝えるためにRP方向に(*, G) pruneを送信します。
[ip address] +--------+ ┌----+ R2 +----┐ │ +--------+ │ ↑ │ │ │ (*, G) prune .1│ │ │ +---+----+ +---+----+ +--------+ | R1 +----------+ R3 +----------+ Host 3| +--------+ +--------+ +--------+ <------------- (S, G) join
この構成でR3からR1へ送信された(S. G) joinは以下の通りです。
Ethernet II, Src: cc:02:05:1c:00:01 (cc:02:05:1c:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d) Internet Protocol Version 4, Src: 192.168.23.3 (192.168.23.3), Dst: 224.0.0.13 (224.0.0.13) Protocol Independent Multicast 0010 .... = Version: 2 .... 0011 = Type: Join/Prune (3) Reserved byte(s): 00 Checksum: 0xfc35 [correct] PIM options Upstream-neighbor: 192.168.23.2 Reserved byte(s): 00 Num Groups: 1 Holdtime: 210s Group 0: 239.3.3.3/32 Num Joins: 1 IP address: 10.2.2.2/32 (SWR) Num Prunes: 0
この構成でR3からR2へ送信された(*. G) pruneは以下の通りです。
Ethernet II, Src: cc:02:06:dc:00:01 (cc:02:06:dc:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d) Internet Protocol Version 4, Src: 192.168.23.3 (192.168.23.3), Dst: 224.0.0.13 (224.0.0.13) Protocol Independent Multicast 0010 .... = Version: 2 .... 0011 = Type: Join/Prune (3) Reserved byte(s): 00 Checksum: 0xff37 [correct] PIM options Upstream-neighbor: 192.168.23.2 Reserved byte(s): 00 Num Groups: 1 Holdtime: 210s Group 0: 239.3.3.3/32 Num Joins: 0 Num Prunes: 1 IP address: 10.1.1.1/32 (SR)