マルチキャスト制御プロトコル
Status: draft
IGMPv1・v2・v3 / MLDv1・v2 / PIM-SM v2 の補足です。定義は crates/wpg-protocols/src/mcast.rs、サンプルは templates/protocols/mcast/ にあります。
到達経路とサンプル
| id | プロトコル | 下位レイヤ | サンプル |
|---|---|---|---|
igmp + igmpv2 | IGMPv1 / v2 (クエリ、レポート、Leave) | IPv4 protocol 2 | igmpv2-query.wpg.yaml |
igmp + igmpv3_query | IGMPv3 クエリ | IPv4 protocol 2、type 0x11 で残り 8 オクテット以上 | igmpv3-query.wpg.yaml |
igmp + igmpv3_report | IGMPv3 レポート | IPv4 protocol 2、type 0x22 | igmpv3-report.wpg.yaml |
icmpv6 + mld | MLDv1 (クエリ、レポート、Done) | ICMPv6 type 130 / 131 / 132 | mldv1-query.wpg.yaml |
icmpv6 + mldv2_query | MLDv2 クエリ | ICMPv6 type 130 で残り 24 オクテット以上 | mldv2-query.wpg.yaml |
icmpv6 + mldv2_report | MLDv2 レポート | ICMPv6 type 143 | mldv2-report.wpg.yaml |
pim + pim_hello / pim_join_prune | PIM-SM v2 | IPv4 protocol 103 | pim-hello.wpg.yaml、pim-join-prune.wpg.yaml |
pim_register | PIM Register (単独定義) | ビルド時に選択 (デコードは pim) | pim-register.wpg.yaml |
IGMP と PIM は ICMPv6 と同じく「共通ヘッダ (type、チェックサム) + 本体」の 2 レイヤで、ヘッダの type は本体から Auto で決まります。MLD の本体は icmpv6 の上に積みます。
ipv4 / igmp / igmpv3_report
ipv6 / ipv6_hopopts / icmpv6 / mldv2_report
ipv4 / pim / pim_join_prune
ipv4 / pim_register / ipv4 / udp / payload
Auto になるフィールド
- IGMP / PIM ヘッダの
typeとchecksum。MLD のチェックサムはicmpv6が IPv6 疑似ヘッダ込みで計算します。 - 件数: IGMPv3 / MLDv2 クエリの
num_sources、レポートのnum_group_records/num_records、グループレコード内のnum_sources、PIM Join/Prune のnum_groups/num_joined/num_pruned。リストの要素を増減するだけで合います。 pim_register.checksum: PIM ヘッダ + Register フラグの 8 オクテットだけを対象に計算します (RFC 7761)。
制約と近似
- v2 と v3 のクエリは長さでしか区別できないため、残りの長さが IGMPv3 で 8 オクテット以上、MLDv2 で 24 オクテット以上なら v3 / v2 のクエリとしてデコードし、それより短ければ
igmpv2/mldとしてデコードします。 - PIM Register のチェックサムは内側のパケットを含まないため、PIM ヘッダを繰り返した単独定義
pim_registerになっています。IP protocol 103 はpimとしてデコードされるので、受信した Register の本体はrawになります。内側のパケットは先頭ニブルで IPv4 / IPv6 を判別します。 - PIM over IPv6 はチェックサムに IPv6 疑似ヘッダが必要ですが、チェックサムの種類を下位レイヤで切り替えられないため、
pimは IPv4 からのみ到達し、通常のインターネットチェックサムを使います。 - PIM のエンコード済みアドレスは IPv4 (アドレスファミリ 1) のみ型付けされています。
- IGMP / MLD はルータアラートオプションを必要とします。サンプルは
ipv4のoptions/ipv6_hopoptsに Router Alert を入れてあります。
自動生成リファレンス
このページのプロトコルのフィールドリファレンス (定義から自動生成):
ipv4 · ipv6_hopopts · icmpv6 · igmp · igmpv2 · igmpv3_query · igmpv3_report · mld · mldv2_query · mldv2_report · pim · pim_hello · pim_join_prune · pim_register · raw