IGMPはマルチキャストグループに参加するためのプロトコルです。このページでは、旧バージョンであるIGMP version 1についてまとめます。
IGMP 概要
multicast groupへの参加
multicast groupに参加したいホストは、Membership report(通称join message)と呼ばれるパケットを送付します。このパケット以下の通りで、参加したいgroupのマルチキャストアドレス宛てに送付します。
Ethernet II, Src: cc:01:0b:24:00:00 (cc:01:0b:24:00:00), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01) Internet Protocol, Src: 192.168.0.2 (192.168.0.2), Dst: 239.1.1.1 (239.1.1.1) Internet Group Management Protocol [IGMP Version: 1] Type: Membership Report (0x12) Header checksum: 0xfdfc [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(全ルータ)宛てに送信されます。
Ethernet II, Src: cc:03:0b:24:00:00 (cc:03:0b:24:00:00), Dst: IPv4mcast_00:00:01 (01:00:5e:00:00:01) Internet Protocol, Src: 192.168.0.4 (192.168.0.4), Dst: 224.0.0.1 (224.0.0.1) Internet Group Management Protocol [IGMP Version: 1] Type: Membership Query (0x11) Header checksum: 0xeeff [correct] Multicast Address: 0.0.0.0 (0.0.0.0)
Membership Queryを受信したmulticast memberは、Membership Reportを返信し、未だmulticast memberに参加している旨を伝えます。なお、パケットは以下の通りです。
Ethernet II, Src: cc:01:0b:24:00:00 (cc:01:0b:24:00:00), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01) Internet Protocol, Src: 192.168.0.2 (192.168.0.2), Dst: 239.1.1.1 (239.1.1.1) Internet Group Management Protocol [IGMP Version: 1] Type: Membership Report (0x12) Header checksum: 0xfdfc [correct] Multicast Address: 239.1.1.1 (239.1.1.1)
multicast groupの離脱
last hot routerはMembership Queryに対して3回(回数のチューニング不可)応答がなかった場合、multicast memberは存在しないと判断し、multicastを転送しないようになります。
IGMPv1 設定
multicast receiverの設定
以下のコマンドを入力する事で、multicast memberに参加する事ができます。このような設定を使う事で、ルータをmulticast receiver代わりにエミュレートする事ができます。なお、デフォルトでIGMP version 2が使用されますので、IGMP version 1を使用する場合は明示的なversion指定が必要です。
Router(config-if)# ip igmp join-group <group_addr> Router(config-if)# ip igmp version 1
last hop routerの設定
multicast-routingを有効にし、さらにpimを有効にすると、multicast memberが存在すると判断した場合は、multicast packetを転送するようになります。設定コマンドは以下の通りです。なお、デフォルトでIGMP version 2が使用されますので、IGMP version 1を使用する場合は明示的なversion指定が必要です。
Router(config)# ip multicast-routing Router(config)# interface <interface> Router(config-if)# ip pim { dense-mode | sparse-mode | sparse-dense-mode } Router(config-if)# ip igmp version 1
任意の設定として、query-intervalの設定やdr-priorityの設定が可能です。
Router(config-if)# ip igmp query-interval <sec> Router(config-if)# ip pim dr-priority <priority>
動作確認
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 ip igmp version 1 [R2] interface Ethernet0/0 ip address 192.168.0.2 255.255.255.0 ip igmp join-group 239.1.1.1 ip igmp version 1 [R3] ip multicast-routing ! interface Ethernet0/0 ip address 192.168.0.3 255.255.255.0 ip pim dr-priority 10 ip pim dense-mode ip igmp version 1 ip igmp query-interval 15 [R4] ip multicast-routing ! interface Ethernet0/0 ip address 192.168.0.4 255.255.255.0 ip pim dense-mode ip igmp version 1 ip igmp query-interval 15
なお、設定全文は下記ファイルです。
パケットの観察
IGMPに関するパケットのみを抽出します。特筆すべき事は以下の通りです。
- membership queryを送信するのはDRルータのみです。
- R1, R2の両方がmembership reportを返信します。
最初はR3, R4の両方がqueryを送信していますが、dr-priorityが大きいR3がPIM DRとして選出されると、R3のみがqueryを送信するようになります。
membership reportに着目すると、R1, R2の両方がmembership reportを返信している事が分かります。IGMPv1では全てのmulticast memberが返信する仕様になっていますが、IGMPv2では帯域節約のために1台のmulticast memberが返信する仕様になっています。
No. Time Source Destination Protocol Info 1 0.000000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 4 1.094000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 5 1.203000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 10 15.016000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 13 16.078000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 17 16.172000 192.168.0.4 224.0.0.1 IGMP V1 Membership Query 19 16.188000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 22 16.234000 192.168.0.4 224.0.0.1 IGMP V1 Membership Query 28 17.094000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 29 17.203000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 39 30.031000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 43 31.078000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 44 31.188000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 50 45.031000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 55 46.094000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 56 46.203000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 64 60.047000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 68 61.094000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 69 61.203000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 76 75.047000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 79 76.078000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 81 76.188000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 91 90.063000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 95 91.188000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 96 92.078000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report 104 105.078000 192.168.0.3 224.0.0.1 IGMP V1 Membership Query 108 106.203000 192.168.0.2 239.1.1.1 IGMP V1 Membership Report 109 107.094000 192.168.0.1 239.1.1.1 IGMP V1 Membership Report
話がやや横道にそれますが、PIM DRの選出方法についてまとめます。PIM DRは以下のように決定されます。
- dr-priorityが大きいルータがPIM DRとして選出されます。
- dr-priorityが等しい場合は、IPアドレスが大きいルータがPIM DRとして選出されます。
PIMに関するパケットをキャプチャすると以下の通りです。IPアドレスやdr-priorityに関する情報が含まれている事が読み取れます。
Ethernet II, Src: cc:02:06:f8:00:00 (cc:02:06:f8:00:00), Dst: IPv4mcast_00:00:0d (01:00:5e:00:00:0d) Internet Protocol, Src: 192.168.0.3 (192.168.0.3), Dst: 224.0.0.13 (224.0.0.13) Protocol Independent Multicast Version: 2 Type: Hello (0) Checksum: 0xb187 [correct] PIM parameters Holdtime (1): 105s Generation ID (20): -681683621 DR Priority (19): 10 Unknown option (21), length: 4, value: 0x1000000
設定確認
以下のコマンドで、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:02:51 00:00:38 192.168.0.2 224.0.1.40 Ethernet0/0 00:04:51 00:00:38 192.168.0.4 R3#
以下のコマンドでIGMPに関する設定を確認する事ができます。IGMP version, query interval, DRルータなどの項目は要チェックです。
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 1 Current IGMP router version is 1 IGMP query interval is 15 seconds 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.3 (this system) 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#