Cisco IOS マルチキャスト IGMPv2の設定

スポンサーリンク

IGMPはマルチキャストグループに参加するためのプロトコルです。このページでは、デフォルトバージョンであるIGMP version 2についてまとめます。

概要

IGMP version 2についてまとめます。IGMP version 1との違いを箇条書きで記すと以下の通りです。

  • querierの概念
  • Max Response Timeの定義
  • leave messageの定義
  • group specific queryの定義

IGMP 概要

multicast groupへの参加

multicast groupに参加する方法は、IGMPv1もIGMPv2も代わりありません。multicast groupに参加したいホストは、Membership report(通称join message)と呼ばれるパケットを送付します。このパケット以下の通りで、参加したいgroupのマルチキャストアドレス宛てに送付します。

Ethernet II, Src: cc:00:0e:04:00:00 (cc:00:0e:04:00:00), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01)
Internet Protocol, Src: 192.168.0.1 (192.168.0.1), Dst: 239.1.1.1 (239.1.1.1)
Internet Group Management Protocol
    [IGMP Version: 2]
    Type: Membership Report (0x16)
    Max Response Time: 0.0 sec (0x00)
    Header checksum: 0xf9fc [correct]
    Multicast Address: 239.1.1.1 (239.1.1.1)

multicast groupの維持

last hop routerは、multicast memberが存在するかどうか(生存しているかどうか)を確認するために、定期的(デフォルトは60秒間隔)にMembership Queryを送信します。このパケット以下の通りで、224.0.0.1(全ルータ)宛てに送信されます。

IGMPv1との違いは、Max Response Time(デフォルト10秒)の概念が存在する事です。

Ethernet II, Src: cc:02:0e:04:00:00 (cc:02:0e:04:00:00), Dst: IPv4mcast_00:00:01 (01:00:5e:00:00:01)
Internet Protocol, Src: 192.168.0.3 (192.168.0.3), Dst: 224.0.0.1 (224.0.0.1)
Internet Group Management Protocol
    [IGMP Version: 2]
    Type: Membership Query (0x11)
    Max Response Time: 5.0 sec (0x32)
    Header checksum: 0xeecd [correct]
    Multicast Address: 0.0.0.0 (0.0.0.0)

Membership Queryを受信したmulticast memberは、Membership Reportを返信し、未だmulticast memberに参加している旨を伝えます。

IGMPv1との違いは、Membership Reportの重複がなくなった事です。last hop routerが知りたいのは、multicastを転送すべきかどうかです。従って、multicast receiverが何台存在するかは重要でなく、multicast receiverが存在するかどうかが重要な情報です。つまり、全台のmulticast receiverが応答を返す必要はなく、1台のmulticast receiverが応答を返せば十分です。

multicast receiverは、Membership Queryを受信するとMax Response Time以内のランダム時間後にMembership Reportを返信しようとします。もし、他のmulticast receiverが先にMembership Reportを返信した事が判明すれば、Membership Reportの返信を取りやめます。このような仕組みによって、IGMPv2はMembership Reportの重複を避け、帯域を節約するようにしています。

Ethernet II, Src: cc:00:0e:04:00:00 (cc:00:0e:04:00:00), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01)
Internet Protocol, Src: 192.168.0.1 (192.168.0.1), Dst: 239.1.1.1 (239.1.1.1)
Internet Group Management Protocol
    [IGMP Version: 2]
    Type: Membership Report (0x16)
    Max Response Time: 0.0 sec (0x00)
    Header checksum: 0xf9fc [correct]
    Multicast Address: 239.1.1.1 (239.1.1.1)

multicast groupの離脱

IGMPv1ではtimeoutになるまでmulticastを転送し続けるしようになっていますが、IGMPv2ではmultiacst groupからの脱退を意思表明するパケットが定義されています。multicast groupから脱退したいホストは以下のようなleave messageを送信します。

Ethernet II, Src: cc:01:12:d8:00:00 (cc:01:12:d8:00:00), Dst: IPv4mcast_00:00:02 (01:00:5e:00:00:02)
Internet Protocol, Src: 192.168.0.2 (192.168.0.2), Dst: 224.0.0.2 (224.0.0.2)
Internet Group Management Protocol
    [IGMP Version: 2]
    Type: Leave Group (0x17)
    Max Response Time: 0.0 sec (0x00)
    Header checksum: 0xf8fc [correct]
    Multicast Address: 239.1.1.1 (239.1.1.1)

leave messageを受信したlast hop routerは、まだmulticast receiverが残っているかどうかを確認するために、Membership Queryを送信します。このQuery messageはgroup specific queryと呼ばれ、通常のQueryよりもMax Response Timeが短めに設定されております。group specific queryに対して2回(設定変更可)応答がなかった場合、last hop routerはmulticast receiverが存在しないと判断しmulticastを転送しないようになります。

Ethernet II, Src: cc:02:12:d8:00:00 (cc:02:12:d8:00:00), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01)
Internet Protocol, Src: 192.168.0.3 (192.168.0.3), Dst: 239.1.1.1 (239.1.1.1)
Internet Group Management Protocol
    [IGMP Version: 2]
    Type: Membership Query (0x11)
    Max Response Time: 0.2 sec (0x02)
    Header checksum: 0xfefa [correct]
    Multicast Address: 239.1.1.1 (239.1.1.1)

もし、leave messageなしにmulticast memberから離脱した(例えば電源障害など)場合は、IGMPv1と同様の挙動になります。すなわち、Membership Queryに対して3回応答がなかった場合、multicast memberが存在しないと判断します。

querierの選出

last hop routerが複数存在する環境において、IGMPv1ではPIM DRとなる(IPアドレスが大きい)ルータがMembership Queryを送信します。一方、IGMPv2はquerierと呼ばれるルータがMembership Queryを送信します。

last hop routerは自分よりもIPアドレスが大きいルータからのMembership Queryを受信すると、Membership Queryを送信しないようになります。すると、IPアドレスが最も小さいルータのみがMembership Queryを送信するようになります。このMembership Queryを送信しているルータの事をquerierと呼びます。

querierになれなかったルータはMembership Queryを監視します。もしも一定時間(デフォルト120秒)Membership Queryを受信できなかった場合は、querierがdownしたのではないかと判断し、querierの役割を引き継ぎます(Membership queryを送信するようになります)。

IGMPv2 設定

multicast receiverの設定

以下のコマンドを入力する事で、multicast memberに参加する事ができます。このような設定を使う事で、ルータをmulticast receiver代わりにエミュレートする事ができます。

Router(config-if)# ip igmp join-group <group_addr>

last hop routerの設定

multicast-routingを有効にし、さらにpimを有効にすると、multicast memberが存在すると判断した場合は、multicast packetを転送するようになります。設定コマンドは以下の通りです。

Router(config)# ip multicast-routing
Router(config)# interface <interface>
Router(config-if)# ip pim { dense-mode | sparse-mode | sparse-dense-mode }

任意の設定として、timerのチューニングが可能です。

項目 デフォルト値 説明
query-max-response-time 10 sec queryに対する最大応答時間
query-interval 60 sec queryを送信する間隔
querier-timeout 120 sec querierがdownしたと判断する時間
このパラメータで指定した間、queryを受信できなかった場合は、querierがdownしたのではないかと判断します。
last-member-query-interval 1000 msec group specific queryに対する最大応答時間
last-member-query-count 2 group specific queryを送信する回数
Router(config-if)# ip igmp query-max-response-time <sec>
Router(config-if)# ip igmp query-interval <sec>
Router(config-if)# ip igmp querier-timeout <sec>
Router(config-if)# ip igmp last-member-query-interval <msec>
Router(config-if)# ip igmp last-member-query-count <sec>

動作確認

R1, R2をmulticast receiverとして、R3, R4をlast hop routerとして設定します。

        e0/0      e0/0
  +------+.1      .3+------+
  |  R1  +----┬----+  R3 | 
  +------+    │    +------+
              │
  +------+    │    +------+
  |  R2  +----┴----+  R3 | 
  +------+.2      .4+------+
        e0/0      e0/0

        192.168.0.0/24
 [R1]
interface Ethernet0/0
 ip address 192.168.0.1 255.255.255.0
 ip igmp join-group 239.1.1.1

 [R2]
interface Ethernet0/0
 ip address 192.168.0.2 255.255.255.0
 ip igmp join-group 239.1.1.1

 [R3]
ip multicast-routing 
!
interface Ethernet0/0
 ip address 192.168.0.3 255.255.255.0
 ip pim dense-mode
 ip igmp last-member-query-interval 200
 ip igmp last-member-query-count 3
 ip igmp query-max-response-time 5
 ip igmp query-interval 15
 ip igmp querier-timeout 60

 [R4]
ip multicast-routing 
!
interface Ethernet0/0
 ip address 192.168.0.4 255.255.255.0
 ip pim dense-mode
 ip igmp last-member-query-interval 200
 ip igmp last-member-query-count 3
 ip igmp query-max-response-time 5
 ip igmp query-interval 15
 ip igmp querier-timeout 60

なお、設定全文は下記ファイルです。

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
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 ip address 192.168.0.1 255.255.255.0
 ip igmp join-group 239.1.1.1
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
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
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 ip address 192.168.0.2 255.255.255.0
 ip igmp join-group 239.1.1.1
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
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 Ethernet0/0
 ip address 192.168.0.3 255.255.255.0
 ip pim dense-mode
 ip igmp last-member-query-interval 200
 ip igmp last-member-query-count 3
 ip igmp query-max-response-time 5
 ip igmp query-interval 15
 ip igmp querier-timeout 60
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
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 Ethernet0/0
 ip address 192.168.0.4 255.255.255.0
 ip pim dense-mode
 ip igmp last-member-query-interval 200
 ip igmp last-member-query-count 3
 ip igmp query-max-response-time 5
 ip igmp query-interval 15
 ip igmp querier-timeout 60
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
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

パケットの観察

IGMPに関するパケットのみを抽出します。IGMPv1と異なり、1つのmulticast receiverのみがMembership reportを返信している事が読み取れます。

No.     Time        Source                Destination           Protocol Info
      7 4.657000    192.168.0.3           224.0.0.1             IGMP     V2 Membership Query, general
      8 6.360000    192.168.0.1           239.1.1.1             IGMP     V2 Membership Report / Join group 239.1.1.1
     17 19.672000   192.168.0.3           224.0.0.1             IGMP     V2 Membership Query, general
     21 21.172000   192.168.0.2           239.1.1.1             IGMP     V2 Membership Report / Join group 239.1.1.1
     31 34.672000   192.168.0.3           224.0.0.1             IGMP     V2 Membership Query, general
     33 38.438000   192.168.0.1           239.1.1.1             IGMP     V2 Membership Report / Join group 239.1.1.1

設定確認

以下のコマンドで、multicast memberを確認する事ができます。Expiresはmulticast memberとして認識しなくなるまでの残り時間です。15秒間隔(デフォルトでは60秒)で3回応答がない場合はmulticast memberとして削除する仕様なので、この場合はExpires30秒から45秒の間を遷移するはずです。

R3#show ip igmp groups
IGMP Connected Group Membership
Group Address    Interface                Uptime    Expires   Last Reporter   Group Accounted
239.1.1.1        Ethernet0/0              00:05:10  00:00:35  192.168.0.1
224.0.1.40       Ethernet0/0              00:05:11  00:00:34  192.168.0.3
R3#

以下のコマンドでIGMPに関する設定を確認する事ができます。IGMP version, query interval, query timeout, querierなどの項目は要チェックです。

R3#show ip igmp interface Ethernet 0/0
Ethernet0/0 is up, line protocol is up
  Internet address is 192.168.0.3/24
  IGMP is enabled on interface
  Current IGMP host version is 2
  Current IGMP router version is 2
  IGMP query interval is 15 seconds
  IGMP querier timeout is 60 seconds
  IGMP max query response time is 5 seconds
  Last member query count is 3
  Last member query response interval is 200 ms
  Inbound IGMP access group is not set
  IGMP activity: 2 joins, 0 leaves
  Multicast routing is enabled on interface
  Multicast TTL threshold is 0
  Multicast designated router (DR) is 192.168.0.4
  IGMP querying router is 192.168.0.3 (this system)
  Multicast groups joined by this system (number of users):
      224.0.1.40(1)
R3#
タイトルとURLをコピーしました