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
なお、設定全文は下記ファイルです。
パケットの観察
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#