Cisco IOS マルチキャスト PIM dense modeの設定

スポンサーリンク

マルチキャストルータ間の通信を制御するプロトコルとしてPIMがあります。PIMには様々なモードが存在しますが、ここでは最も実装が簡単なdense modeについて説明します。

概要

マルチキャストによる通信を理解するには、PIMを理解する必要があります。PIMとはProtocol-Independent Multicastの略で、文字通りOSPFやBGPなどのルーティングプロトコルとは独立したマルチキャスト専用のルーティングプロトコルです。PIMにはdense mode, sparse modeなどの複数のmodeが存在し、概要は以下のようになります。

モード 説明
dense mode とりあえず転送して不要なパケットは後から遮断します。
不要なトラフィックが流れしまいますが、メモリ, CPUリソースに優しいモードです。
sparse mode RPと呼ばれる待ち合わせ場所を設けるモードです。
ソースからは送信元ツリーと呼ばれるツリーに従ってRPまで転送され、
RPからは共有ツリーと呼ばれるツリーに従ってレシーバまで転送されます。
bidirectional mode RPからレシーバまでだけでなく、ソースからRPまでも共有ツリーを使用します。
ソースとレシーバの関係がmany to manyの場合に適した転送方式です。
ssm mode ソースからレシーバまでの送信元ツリーを作成するモードです。
ソースとレシーバの関係がone to oneの場合に適した転送方式です。

このページでは、PIM dense modeについてまとめます。

PIM dense mode 基本動作

基本設定

マルチキャストによるルーティングを有効にするには、以下のコマンドを有効にします。

Router(config)# ip multicast-routing 

マルチキャスト通信を実現したいinterfaceに対して、PIMを有効にします。

Router(config-if)# ip pim dense-mode

受信したマルチキャストパケットをサーバに対して転送するには、以下のいずれかのコマンドを使用します。サーバがIGMPをサポートしている場合は”ip igmp join-group”を使用し、サーバがIGMPをサポートしていない場合はmembership reportに関わらず無条件に転送する”ip igmp static-group”を使用します。

Router(config-if)# ip igmp join-group <group_addr>
Router(config-if)# ip igmp static-group <group_addr>
ip igmp join-group ip igmp static-group
動作概要 IGMP membership reportを受信した場合のみ
マルチキャストを転送します。
配下にmuticast receiverがいるとみなし
無条件にマルチキャストを転送します
使用目的 サーバがIGMPをサポートする場合 サーバがIGMPをサポートしない場合
ping応答 あり なし

動作確認

以下の構成で、Host1からHost2への通信について考察します。なお、検証の都合上、一部のinterfaceのみマルチキャストを有効にしています。

 [ip address]
                                        +--------+
                                        | Host 2 |
                                        +---+----+
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   +----┐
                  e0/2      e0/0  │  .2+--------+.2  │  e0/1      e0/2
+--------+        .1+--------+.1  │  e0/0      e0/1  │  .4+--------+.4        +--------+
| Host 1 +----------+   R1   +----┤                  ├----+   R4   +----------+ Host 4| 
+--------+          +--------+    │  e0/0      e0/1  │    +--------+          +--------+
           192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24
                                  └----+   R3   +----┘
                      192.168.12.0/24   +---+----+   192.168.23.0/24
                                          .3│e0/2   
                                            │192.168.3.0/24
                                        +---+----+
                                        | Host 3| 
                                        +--------+

              R1 Loopback0     R2 Loopback0     R3 Loopback0     R4 Loopback0
              10.1.1.1/32      10.2.2.2/32      10.3.3.3/32      10.4.4.4/32


 [multicast domain]
                                         receive
                                         239.1.1.1
                                        +--------+
                                        | Host 2 |
                                        +---+----+
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   |
                  e0/2      e0/0  │  .2+--------+        e0/1      e0/2
+--------+        .1+--------+.1  │  e0/0                .4+--------+.4        +--------+
| Host 1 +----------+   R1   +----┤                  ├----+   R4   +----------+ Host 4| 
+--------+          +--------+    │  e0/0      e0/1  │    +--------+          +--------+
   feed    192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24
 239.1.1.1                        └----+   R3   +----┘
                      192.168.12.0/24   +---+----+
                                          .3│e0/2   
                                            │192.168.3.0/24
                                        +---+----+
                                        | Host 3 |
                                        +--------+
 [R1]
ip multicast-routing 
!
interface Loopback0
 ip pim dense-mode
!
interface Ethernet0/0
 ip pim dense-mode
!
interface Ethernet0/2
 ip pim dense-mode

 [R2]
ip multicast-routing 
!
interface Loopback0
 ip pim dense-mode
!
interface Ethernet0/0
 ip pim dense-mode
!
interface Ethernet0/1
 ip pim dense-mode
!
interface Ethernet0/2
 ip pim dense-mode

 [R3]
ip multicast-routing 
!
interface Loopback0
 ip pim dense-mode
!
interface Ethernet0/0
 ip pim dense-mode
!
interface Ethernet0/1
 ip pim dense-mode
!
interface Ethernet0/2
 ip pim dense-mode

 [R4]
ip multicast-routing 
!
interface Loopback0
 ip pim dense-mode
!
interface Ethernet0/1
 ip pim dense-mode
!
interface Ethernet0/2
 ip pim dense-mode

設定全文は下記ファイルです。ルーティングなどの詳細設定は下記を参照ください。

R1
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.1.1.1 255.255.255.255
 ip pim dense-mode
!
interface Ethernet0/0
 ip address 192.168.123.1 255.255.255.0
 ip pim dense-mode
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.1.1 255.255.255.0
 ip pim dense-mode
 half-duplex
 no keepalive
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 10.1.1.1 0.0.0.0
 network 192.168.1.1 0.0.0.0
 network 192.168.123.1 0.0.0.0
 no auto-summary
!
router ospf 1
 log-adjacency-changes
 network 10.1.1.1 0.0.0.0 area 0
 network 192.168.1.1 0.0.0.0 area 0
 network 192.168.123.1 0.0.0.0 area 0
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R2
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.2.2.2 255.255.255.255
 ip pim dense-mode
!
interface Ethernet0/0
 ip address 192.168.123.2 255.255.255.0
 ip pim dense-mode
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.234.2 255.255.255.0
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.2.2 255.255.255.0
 ip pim dense-mode
 half-duplex
 no keepalive
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 10.2.2.2 0.0.0.0 area 0
 network 192.168.2.2 0.0.0.0 area 0
 network 192.168.123.2 0.0.0.0 area 0
 network 192.168.234.2 0.0.0.0 area 0
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R3
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.3.3.3 255.255.255.255
 ip pim dense-mode
!
interface Ethernet0/0
 ip address 192.168.123.3 255.255.255.0
 ip pim dense-mode
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.234.3 255.255.255.0
 ip pim dense-mode
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.3.3 255.255.255.0
 ip pim dense-mode
 half-duplex
 no keepalive
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 10.3.3.3 0.0.0.0
 network 192.168.3.3 0.0.0.0
 network 192.168.123.3 0.0.0.0
 network 192.168.234.3 0.0.0.0
 no auto-summary
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R4
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R4
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ip multicast-routing 
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.4.4.4 255.255.255.255
 ip pim dense-mode
!
interface Ethernet0/0
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/1
 ip address 192.168.234.4 255.255.255.0
 ip pim dense-mode
 half-duplex
!
interface Ethernet0/2
 ip address 192.168.4.4 255.255.255.0
 ip pim dense-mode
 half-duplex
 no keepalive
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router eigrp 10
 network 10.4.4.4 0.0.0.0
 network 192.168.4.4 0.0.0.0
 network 192.168.234.4 0.0.0.0
 no auto-summary
!
router ospf 1
 log-adjacency-changes
 network 10.4.4.4 0.0.0.0 area 0
 network 192.168.4.4 0.0.0.0 area 0
 network 192.168.234.4 0.0.0.0 area 0
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

疎通確認

Host 2をエミュレートするには、igmp join-groupコマンドが有効です。Host 1からHost 2への疎通が可能である場合はping応答を返すように、以下のコマンドを投入します。

 [R2]
interface Ethernet 0/2
 ip igmp join-group 239.1.1.1

Host 1から疎通可能である事を確認するために、R1からinterfaceを指定してpingを送信します。(interfaceを省略すると、PIMが有効になっている全てのinterfaceからpingが送信されてしまいます。なお、ハードウェアやIOSによってはinterface指定が効かない事もありますが、そのような場合でも拡張pingでsource interfaceとsource ip addressを指定すると送信元指定が効く事もあります。)

R1#ping 239.1.1.1 source Ethernet 0/2 repeat 5

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1

Reply to request 0 from 192.168.123.2, 64 ms
Reply to request 1 from 192.168.123.2, 76 ms
Reply to request 2 from 192.168.123.2, 60 ms
Reply to request 3 from 192.168.123.2, 36 ms
Reply to request 4 from 192.168.123.2, 24 ms
R1#

PIM 確認

PIM neighborが確立されると以下のようなメッセージが出力されます。

R1(config)#interface Ethernet 0/0
R1(config-if)#ip pim dense-mode
R1(config-if)#
*Mar  1 00:03:53.595: %PIM-5-DRCHG: DR change from neighbor 0.0.0.0 to 192.168.123.1 on interface Ethernet0/0
R1(config-if)#
R1(config-if)#
*Mar  1 00:05:14.655: %PIM-5-NBRCHG: neighbor 192.168.123.2 UP on interface Ethernet0/0
*Mar  1 00:05:14.671: %PIM-5-DRCHG: DR change from neighbor 192.168.123.1 to 192.168.123.2 on interface Ethernet0/0
R1(config-if)#

PIMの設定は以下のコマンドで確認できます。これらコマンドはトラブルシューティング試験で非常に有効ですので、必ず使いこなせるようにしましょう。

R1#show ip pim interface

Address          Interface                Ver/   Nbr    Query  DR     DR
                                          Mode   Count  Intvl  Prior
10.1.1.1         Loopback0                v2/D   0      30     1      10.1.1.1
192.168.1.1      Ethernet0/2              v2/D   0      30     1      192.168.1.1
192.168.123.1    Ethernet0/0              v2/D   2      30     1      192.168.123.3
R1#
R1#
R1#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      S - State Refresh Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
192.168.123.3     Ethernet0/0              00:20:46/00:01:40 v2    1 / DR S
192.168.123.2     Ethernet0/0              00:26:53/00:01:39 v2    1 / S
R1#

ルーティングテーブル 確認

マルチキャストでは、マルチキャスト用のルーティングテーブルが作成されます。マルチキャストルーティングテーブルは以下のコマンドで確認できます。

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,
       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
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:00:30/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:00:30/00:00:00
    Ethernet0/0, Forward/Dense, 00:00:30/00:00:00

(192.168.1.1, 239.1.1.1), 00:00:30/00:02:37, flags: PT
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:00:30/00:02:35

(*, 224.0.1.40), 00:01:24/00:02:09, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:01:24/00:00:00
    Ethernet0/0, Forward/Dense, 00:01:24/00:00:00
    Loopback0, Forward/Dense, 00:01:24/00:00:00

R3#

PIM prune

パケット 確認

端的な言い方をすると、PIM dense modeは”とりあえず転送して不要なパケットは後から遮断”の方針です。この構成の場合、R4配下にレシーバは存在しないので、R3はR4にパケットを転送する必要がありません。このような不要である旨を伝えるメッセージがPIM pruneです。

R3 e0/1でパケットキャプチャを実施すると、以下のようにR4からR3へのPIM pruneを観測する事ができます。

Ethernet II, Src: cc:03:10:08:00:01 (cc:03:10:08:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d)
Internet Protocol Version 4, Src: 192.168.234.4 (192.168.234.4), 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: 0x7c92 [correct]
    PIM options
        Upstream-neighbor: 192.168.234.3
        Reserved byte(s): 00
        Num Groups: 1
        Holdtime: 210s 
        Group 0: 239.1.1.1/32
            Num Joins: 0
            Num Prunes: 1
                IP address: 192.168.1.1/32

ルーティングテーブルの確認

Prune messageによりパケットの転送が不要になったinterfaceには、ルーティングテーブル上でPruneと表記されます。

R3#show ip mroute

 <omitted>

(192.168.1.1, 239.1.1.1), 00:00:30/00:02:37, flags: PT
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:00:30/00:02:35

PIM Graft

動作確認

上記の設定に加え、Host 4をマルチキャストグループに参加させます。

 [multicast domain]
                                         receive
                                         239.1.1.1
                                        +--------+
                                        | Host 2 |
                                        +---+----+
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   |
                  e0/2      e0/0  │  .2+--------+        e0/1      e0/2
+--------+        .1+--------+.1  │  e0/0                .4+--------+.4        +--------+
| Host 1 +----------+   R1   +----┤                  ├----+   R4   +----------+ Host 4| 
+--------+          +--------+    │  e0/0      e0/1  │    +--------+          +--------+
   feed    192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24  receive
 239.1.1.1                        └----+   R3   +----┘                         239.1.1.1
                      192.168.12.0/24   +---+----+
                                          .3│e0/2   
                                            │192.168.3.0/24
                                        +---+----+
                                        | Host 3 |
                                        +--------+

パケット 確認

Prune messageを送信した後に、Host 4がマルチキャストグループに参加したくなった場合はどうなるのでしょうか。マルチキャストルーティングテーブルのPruneのエントリが消えるまで(180秒)待たなければまらないのでしょうか。さすがに180秒は長すぎます。このような問題を解消するのがGraft (“接ぎ木”の意味) messageです。

Graft messageを観察するためにHost 4をマルチキャストグループに参加させます。

 [R4]
interface Ethernet 0/2
 ip igmp join-group 239.1.1.1

上記のip igmp join-groupコマンドを実行すると、R4からR3に向けてPIM Graft messageが送信されます。Graft messageは、Prune messageの打ち消しの意味で、”さっきはマルチキャスト要らないと言ったけど、やっぱりマルチキャスト転送して下さい”という旨を伝えるメッセージです。パケットキャプチャすると以下のようになっています。

Ethernet II, Src: cc:03:10:08:00:01 (cc:03:10:08:00:01), Dst: cc:02:10:08:00:01 (cc:02:10:08:00:01)
Internet Protocol Version 4, Src: 192.168.234.4 (192.168.234.4), Dst: 192.168.234.3 (192.168.234.3)
Protocol Independent Multicast
    0010 .... = Version: 2
    .... 0110 = Type: Graft (6)
    Reserved byte(s): 00
    Checksum: 0x7992 [correct]
    PIM options
        Upstream-neighbor: 192.168.234.3
        Reserved byte(s): 00
        Num Groups: 1
        Holdtime: 210s 
        Group 0: 239.1.1.1/32
            Num Joins: 1
                IP address: 192.168.1.1/32
            Num Prunes: 0

もし、GraftがPIM neighborに届いていなかったとしたら経路の切り替わりが遅くなってしまうので、R3はR4に対して、以下のような確認応答のGraft-Ackと呼ばれるメッセージを返します。

Ethernet II, Src: cc:02:10:08:00:01 (cc:02:10:08:00:01), Dst: cc:03:10:08:00:01 (cc:03:10:08:00:01)
Internet Protocol Version 4, Src: 192.168.234.3 (192.168.234.3), Dst: 192.168.234.4 (192.168.234.4)
Protocol Independent Multicast
    0010 .... = Version: 2
    .... 0111 = Type: Graft-Ack (7)
    Reserved byte(s): 00
    Checksum: 0xf38d [correct]
    PIM options
        Upstream-neighbor: 192.168.234.4
        Reserved byte(s): 00
        Num Groups: 1
        Holdtime: 210s 
        Group 0: 239.1.1.1/32
            Num Joins: 1
                IP address: 192.168.1.1/32
            Num Prunes: 0

ルーティングテーブル 確認

Graft messageによりPruneからForwardに変わった事が読み取れます。

R3#show ip mroute

 <omitted>

(192.168.1.1, 239.1.1.1), 00:00:35/00:02:25, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:00:35/00:00:00

PIM Assert

動作確認

PIMの構成を変更します。全てのinterfaceでPIMを有効し、Host 1からHost 4への通信について考察します。なお、ルーティングはOSPFとEIGRPに2種類を動作させています。

 [ip address]
                                        +--------+
                                        | Host 2 |
                                        +---+----+
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   +----┐
                  e0/2      e0/0  │  .2+--------+.2  │  e0/1      e0/2
+--------+        .1+--------+.1  │  e0/0      e0/1  │  .4+--------+.4        +--------+
| Host 1 +----------+   R1   +----┤                  ├----+   R4   +----------+ Host 4| 
+--------+          +--------+    │  e0/0      e0/1  │    +--------+          +--------+
           192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24
                                  └----+   R3   +----┘
                      192.168.12.0/24   +---+----+   192.168.23.0/24
                                          .3│e0/2   
                                            │192.168.3.0/24
                                        +---+----+
                                        | Host 3 |
                                        +--------+

              R1 Loopback0     R2 Loopback0     R3 Loopback0     R4 Loopback0
              10.1.1.1/32      10.2.2.2/32      10.3.3.3/32      10.4.4.4/32


 [multicast domain]
                                        +--------+
                                        | Host 2 |
                                        +---+----+
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   +----┐
                  e0/2      e0/0  │  .2+--------+.2  │  e0/1      e0/2
+--------+        .1+--------+.1  │  e0/0      e0/1  │  .4+--------+.4        +--------+
| Host 1 +----------+   R1   +----┤                  ├----+   R4   +----------+ Host 4| 
+--------+          +--------+    │  e0/0      e0/1  │    +--------+          +--------+
   feed    192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24  receive
 239.1.1.1                        └----+   R3   +----┘                         239.1.1.1
                      192.168.12.0/24   +---+----+
                                          .3│e0/2   
                                            │192.168.3.0/24
                                        +---+----+
                                        | Host 3 |
                                        +--------+

 [OSPF domain]
                                            │192.168.2.0/24
                                          .2│e0/2
                                        +---+----+
                                  ┌----+   R2   +----┐
                  e0/2      e0/0  │  .2+--------+.2  │  e0/1      e0/2
                  .1+--------+.1  │  e0/0      e0/1  │  .4+--------+.4    
              ------+   R1   +----┤                  ├----+   R4   +------
                    +--------+                              +--------+      
           192.168.1.0/24                                        192.168.4.0/24

 [EIGRP domain]
                  e0/2      e0/0                          e0/1      e0/2
                  .1+--------+.1                          .4+--------+.4    
              ------+   R1   +----┤                  ├----+   R4   +------
                    +--------+    │  e0/0      e0/1  │    +--------+      
           192.168.1.0/24         │  .3+--------+.3  │         192.168.4.0/24
                                  └----+   R3   +----┘
                      192.168.12.0/24   +---+----+   192.168.23.0/24
                                          .3│e0/2   
                                            │192.168.3.0/24

疎通確認

Host 1からHost 4への疎通を確認します。

このような構成の場合、R2経由とR3経由の2通りの経路が存在します。経路が複数存在する場合はPIM Assert messageにより不要な経路を遮断します。1発目のpingに対して応答が2回返ってきたのは、PIM Assertにより遮断される前であったためです。

 [R4]
interface Ethernet 0/2
 ip igmp join-group 239.1.1.1

 [R1]
R1#ping 239.1.1.1 source Ethernet 0/2 repeat 3

Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1

Reply to request 0 from 192.168.234.4, 116 ms
Reply to request 0 from 192.168.234.4, 116 ms
Reply to request 1 from 192.168.234.4, 52 ms
Reply to request 2 from 192.168.234.4, 100 ms
R1#

パケット 確認

マルチキャストを受信したR2は、e0/1からマルチキャストパケットを転送します。転送したパケットはR3にもR4にも届くので、R3は経路が複数存在する事を検知できます。

経路が複数存在する事を検知したらPIM Assertと呼ばれるメッセージを送信し、R2とR3のどちらがマルチキャストソースに近いか判断します。具体的には、マルチキャストソース(この場合は192.168.1.0/24)のエントリに関する、Administrative distanceとmetricを含むPIM Assert messageを送信し、どちらがマルチキャストソースに近いかを判断します。

パケットキャプチャした結果は以下の通りです。

Ethernet II, Src: cc:01:10:08:00:01 (cc:01:10:08:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d)
Internet Protocol Version 4, Src: 192.168.234.2 (192.168.234.2), Dst: 224.0.0.13 (224.0.0.13)
Protocol Independent Multicast
    0010 .... = Version: 2
    .... 0101 = Type: Assert (5)
    Reserved byte(s): 00
    Checksum: 0x25b1 [correct]
    PIM options
        Group: 239.1.1.1/32
        Source: 192.168.1.1
        0... .... = RP Tree: False
        Metric Preference: 110
        Metric: 20

Ethernet II, Src: cc:02:10:08:00:01 (cc:02:10:08:00:01), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d)
Internet Protocol Version 4, Src: 192.168.234.3 (192.168.234.3), Dst: 224.0.0.13 (224.0.0.13)
Protocol Independent Multicast
    0010 .... = Version: 2
    .... 0101 = Type: Assert (5)
    Reserved byte(s): 00
    Checksum: 0x75d4 [correct]
    PIM options
        Group: 239.1.1.1/32
        Source: 192.168.1.1
        0... .... = RP Tree: False
        Metric Preference: 90
        Metric: 307200

判定基準は以下の通りです。

  • AD値が小さいルータを優先します。
  • 上記が等しい場合は、メトリック値が小さいルータを優先します。
  • 上記が等しい場合は、IPアドレスが大きいルータを優先します。

この構成の場合の判定基準は以下のようになりますので、R3が優先されます。なお、優先されたルータをAssert Winnerと呼び、優先されないルータをAssert Loserと呼びます。

要因 R2 R3
第一判定基準 AD 110 90
第二判定基準 metric 20 307200
第三判定基準 ip address 192.168.234.2 192.168.234.3

ルーティングテーブル 確認

Assert Loser側はPruneと表記され、Assert Winner側にはAというフラグが表示されている事が読み取れます。

 [R2]
R2#show ip mroute 192.168.1.1 239.1.1.1

 <omitted>

(192.168.1.1, 239.1.1.1), 00:01:23/00:01:37, flags: PT
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:01:22/00:01:37

R2#

 [R3]
R3#show ip mroute 192.168.1.1 239.1.1.1

 <omitted>

(192.168.1.1, 239.1.1.1), 00:01:33/00:02:06, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:01:33/00:00:00, A

R3#

デバッグメッセージ 確認

Assertの様子は以下のデバッグコマンドにより確認できます。

Router# debug ip pim

R2はloseと表示され、R3ではWinと表示されている事が読み取れます。

 [R2]
R2#
*Mar  1 00:06:07.891: PIM(0): Send v2 Assert on Ethernet0/1 for 239.1.1.1, source 192.168.1.1, metric [110/20]
*Mar  1 00:06:07.895: PIM(0): Assert metric to source 192.168.1.1 is [110/20]
*Mar  1 00:06:07.899: PIM(0): We win, our metric [110/20]
*Mar  1 00:06:07.903: PIM(0): Schedule to prune Ethernet0/1
*Mar  1 00:06:07.903: PIM(0): (192.168.1.1/32, 239.1.1.1) oif Ethernet0/1 in Forward state
*Mar  1 00:06:08.895: PIM(0): Received v2 Assert on Ethernet0/1 from 192.168.234.3
*Mar  1 00:06:08.899: PIM(0): Assert metric to source 192.168.1.1 is [90/307200]
*Mar  1 00:06:08.903: PIM(0): We lose, our metric [110/20]
*Mar  1 00:06:08.903: PIM(0): Prune Ethernet0/1/239.1.1.1 from (192.168.1.1/32, 239.1.1.1)
*Mar  1 00:06:08.907: PIM(0): Insert (192.168.1.1,239.1.1.1) prune in nbr 192.168.123.1's queue
*Mar  1 00:06:08.911: PIM(0): Insert (192.168.1.1,239.1.1.1) prune in nbr 192.168.234.3(Ethernet0/1)'s queueold_nbr(192.168.123.1)(Ethernet0/0)
*Mar  1 00:06:08.915: PIM(0): Insert (192.168.1.1,239.1.1.1) prune in nbr 192.168.234.3's queue
*Mar  1 00:06:08.919: PIM(0): Send (192.168.1.1, 239.1.1.1) PIM-DM prune to oif Ethernet0/1 in Prune state
*Mar  1 00:06:08.923: PIM(0): (192.168.1.1/32, 239.1.1.1) oif Ethernet0/1 in Prune state


 [R3]
R3#
*Mar  1 00:06:07.555: PIM(0): Received v2 Assert on Ethernet0/1 from 192.168.234.2
*Mar  1 00:06:07.559: PIM(0): Assert metric to source 192.168.1.1 is [110/20]
*Mar  1 00:06:07.563: PIM(0): We win, our metric [90/307200]
*Mar  1 00:06:07.563: PIM(0): Schedule to prune Ethernet0/1
*Mar  1 00:06:07.567: PIM(0): (192.168.1.1/32, 239.1.1.1) oif Ethernet0/1 in Forward state
*Mar  1 00:06:08.487: PIM(0): Send v2 Assert on Ethernet0/1 for 239.1.1.1, source 192.168.1.1, metric [90/307200]
*Mar  1 00:06:08.491: PIM(0): Assert metric to source 192.168.1.1 is [90/307200]
*Mar  1 00:06:08.495: PIM(0): We win, our metric [90/307200]
*Mar  1 00:06:08.495: PIM(0): (192.168.1.1/32, 239.1.1.1) oif Ethernet0/1 in Forward state

Asset Winnerの制御

Assert WinnerはAdministrative Distanceやmetricを調節する事によって制御する事ができます。例えば、以下のようにR2のDistanceをR3よりも小さくすれば、R2をAssert Winnerにする事ができます。

 [R2]
router ospf 1
 distance ospf intra-area 89

R2#show ip route

 <omitted>

C    192.168.123.0/24 is directly connected, Ethernet0/0
C    192.168.234.0/24 is directly connected, Ethernet0/1
O    192.168.4.0/24 [89/20] via 192.168.234.4, 00:00:05, Ethernet0/1
     10.0.0.0/32 is subnetted, 3 subnets
C       10.2.2.2 is directly connected, Loopback0
O       10.1.1.1 [89/11] via 192.168.123.1, 00:00:05, Ethernet0/0
O       10.4.4.4 [89/11] via 192.168.234.4, 00:00:05, Ethernet0/1
O    192.168.1.0/24 [89/20] via 192.168.123.1, 00:00:05, Ethernet0/0
C    192.168.2.0/24 is directly connected, Ethernet0/2
R2#

マルチキャストルーティングテーブルを削除した後、Host 1からHost 4へのpingを再び送信します。

 [R2, R3]
clear ip mroute *

 [R1]
R1#ping 239.1.1.1 source Ethernet 0/2

Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1

Reply to request 0 from 192.168.234.4, 172 ms
Reply to request 0 from 192.168.234.4, 176 ms
R1#

Assert Winnerが入れ替わり、R2がWinner、R3がLoseとなっている事が読みれます。

 [R2]
R2#show ip mroute 192.168.1.1 239.1.1.1

 <omitted>

(192.168.1.1, 239.1.1.1), 00:00:03/00:02:56, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:00:03/00:00:00, A

R2#

 [R3]
R3#show ip mroute 192.168.1.1 239.1.1.1

 <omitted>

(192.168.1.1, 239.1.1.1), 00:00:09/00:02:54, flags: PT
  Incoming interface: Ethernet0/0, RPF nbr 192.168.123.1
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:00:09/00:02:50

R3#
タイトルとURLをコピーしました