4. メッセージフォーマット
4. メッセージフォーマット
IGMPメッセージはIPv4データグラムにカプセル化され、IPプロトコル番号は2です。このドキュメントで説明されているすべてのIGMPメッセージは、IP Time-to-Liveを1、IP PrecedenceをInternetwork Control(例:Type of Service 0xc0)として送信され、IPヘッダーにIP Router Alertオプション[RFC-2113]を含みます。IGMPメッセージタイプは[RFC-3228]で説明されているようにIANA [IANA-REG]によって登録されます。
このドキュメントで説明されているIGMPv3プロトコルに関係する2つのIGMPメッセージタイプがあります:
| Type Number (hex) | Message Name |
|---|---|
| 0x11 | Membership Query |
| 0x22 | Version 3 Membership Report |
IGMPv3の実装は、以前のバージョンのIGMPとの相互運用のために、以下の3つのメッセージタイプもサポートする必要があります(セクション7を参照):
| Type Number (hex) | Message Name | Reference |
|---|---|---|
| 0x12 | Version 1 Membership Report | [RFC-1112] |
| 0x16 | Version 2 Membership Report | [RFC-2236] |
| 0x17 | Version 2 Leave Group | [RFC-2236] |
認識されないメッセージタイプは無視される必要があります。他のメッセージタイプは、IGMPの新しいバージョンや拡張、マルチキャストルーティングプロトコル、またはその他の用途で使用される場合があります。
このドキュメントでは、特に限定されない限り、大文字の"Query"と"Report"は、それぞれIGMP Membership QueriesとIGMP Version 3 Membership Reportsを指します。
4.1. Membership Queryメッセージ
Membership QueriesはIPマルチキャストルーターによって送信され、隣接インターフェースのマルチキャスト受信状態を照会します。Queriesは以下のフォーマットを持ちます:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x11 | Max Resp Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resv |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- . -+
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4.1.1. Max Resp Code
Max Resp Codeフィールドは、応答レポートを送信する前に許可される最大時間を指定します。実際に許可される時間(Max Resp Time)は1/10秒単位で表され、Max Resp Codeから次のように導出されます:
Max Resp Code < 128の場合、Max Resp Time = Max Resp Code
Max Resp Code >= 128の場合、Max Resp Codeは次のように浮動小数点値を表します:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+
Max Resp Time = (mant | 0x10) << (exp + 3)
Max Resp Timeの小さい値により、IGMPv3ルーターは"leave latency"(最後のホストがグループを離れた瞬間から、ルーティングプロトコルがメンバーがいなくなったことを通知される瞬間までの時間)を調整できます。より大きい値、特に指数範囲の値により、ネットワーク上のIGMPトラフィックのバースト性を調整できます。
4.1.2. Checksum
Checksumは、IGMPメッセージ全体(IP payload全体)の1の補数の和の16ビット1の補数です。チェックサムを計算する際、Checksumフィールドはゼロに設定されます。パケットを受信する際、パケットを処理する前にチェックサムを検証する必要があります。[RFC-1071]
4.1.3. Group Address
Group AddressフィールドはGeneral Queryを送信するときにゼロに設定され、Group-Specific QueryまたはGroup-and-Source-Specific Queryを送信するときに照会されるIPマルチキャストアドレスに設定されます(以下のセクション4.1.9を参照)。
4.1.4. Resv (Reserved)
Resvフィールドは送信時にゼロに設定され、受信時に無視されます。
4.1.5. S Flag (Suppress Router-Side Processing)
1に設定すると、S Flagは、受信するすべてのマルチキャストルーターに対し、Queryを聞いたときに実行する通常のタイマー更新を抑制するよう指示します。ただし、querierの選出や、ルーターがグループメンバーであることの結果として実行する必要がある通常の"ホスト側"のQueryの処理は抑制しません。
4.1.6. QRV (Querier's Robustness Variable)
ゼロでない場合、QRVフィールドには、querier(Queryの送信者)が使用する[Robustness Variable]値が含まれます。querierの[Robustness Variable]がQRVフィールドの最大値7を超える場合、QRVはゼロに設定されます。ルーターは、最後に受信したQueryのQRV値を自身の[Robustness Variable]値として採用しますが、最後に受信したQRVがゼロの場合、受信者はセクション8.1で指定されたデフォルトの[Robustness Variable]値または静的に構成された値を使用します。
4.1.7. QQIC (Querier's Query Interval Code)
Querier's Query Interval Codeフィールドは、querierが使用する[Query Interval]を指定します。実際の間隔(Querier's Query Interval、QQI)は秒単位で表され、Querier's Query Interval Codeから次のように導出されます:
QQIC < 128の場合、QQI = QQIC
QQIC >= 128の場合、QQICは次のように浮動小数点値を表します:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+
QQI = (mant | 0x10) << (exp + 3)
現在のquerierではないマルチキャストルーターは、最後に受信したQueryのQQI値を自身の[Query Interval]値として採用しますが、最後に受信したQQIがゼロの場合、受信ルーターはセクション8.2で指定されたデフォルトの[Query Interval]値を使用します。
4.1.8. Number of Sources (N)
Number of Sources (N)フィールドは、Queryに存在するソースアドレスの数を指定します。この数は、General QueryまたはGroup-Specific Queryではゼロであり、Group-and-Source-Specific Queryではゼロ以外です。この数は、Queryが送信されるネットワークのMTUによって制限されます。たとえば、MTUが1500オクテットのイーサネットでは、Router Alertオプションを含むIPヘッダーが24オクテットを消費し、Number of Sources (N)フィールドまでのIGMPフィールドが12オクテットを消費するため、ソースアドレス用に1464オクテットが残り、ソースアドレスの数は366 (1464/4)に制限されます。
4.1.9. Source Address [i]
Source Address [i]フィールドは、n個のIPユニキャストアドレスのベクトルであり、nはNumber of Sources (N)フィールドの値です。
4.1.10. Additional Data
受信したQueryのIPヘッダーのPacket Lengthフィールドが、ここで説明されているフィールドを超えて追加のデータオクテットが存在することを示している場合、IGMPv3実装は、受信したIGMP Checksumを検証する計算にそれらのオクテットを含める必要がありますが、それ以外の場合はそれらの追加オクテットを無視する必要があります。Queryを送信する際、IGMPv3実装は、ここで説明されているフィールドを超えて追加のオクテットを含めてはなりません。
4.1.11. Queryのバリエーション
Queryメッセージには3つのバリエーションがあります:
-
"General Query"は、隣接インターフェースの完全なマルチキャスト受信状態を知るためにマルチキャストルーターによって送信されます(つまり、Queryが送信されるネットワークに接続されているインターフェース)。General Queryでは、Group AddressフィールドとNumber of Sources (N)フィールドの両方がゼロです。
-
"Group-Specific Query"は、隣接インターフェースの単一のマルチキャストアドレスに関する受信状態を知るためにマルチキャストルーターによって送信されます。Group-Specific Queryでは、Group Addressフィールドに対象のマルチキャストアドレスが含まれ、Number of Sources (N)フィールドにはゼロが含まれます。
-
"Group-and-Source-Specific Query"は、隣接インターフェースが、指定されたマルチキャストアドレスに送信されるパケットを指定されたソースのリストのいずれかから受信したいかどうかを知るためにマルチキャストルーターによって送信されます。Group-and-Source-Specific Queryでは、Group Addressフィールドに対象のマルチキャストアドレスが含まれ、Source Address [i]フィールドに対象のソースアドレスが含まれます。
4.1.12. QueriesのIP宛先アドレス
IGMPv3では、General QueriesはIP宛先アドレス224.0.0.1(all-systemsマルチキャストアドレス)で送信されます。Group-SpecificおよびGroup-and-Source-Specific Queriesは、対象のマルチキャストアドレスに等しいIP宛先アドレスで送信されます。ただし、システムは、IP Destination Addressフィールドに、Queryが到着するインターフェースに割り当てられたアドレス(ユニキャストまたはマルチキャスト)のいずれかを含むQueryを受け入れて処理する必要があります。
4.2. Version 3 Membership Reportメッセージ
Version 3 Membership ReportsはIPシステムによって送信され、(隣接ルーターに)インターフェースの現在のマルチキャスト受信状態、またはマルチキャスト受信状態の変化を報告します。Reportsは以下のフォーマットを持ちます:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x22 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Number of Group Records (M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [1] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [2] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
. . .
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [M] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
各Group Recordは次の内部フォーマットを持ちます:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Multicast Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- -+
. . .
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4.2.1. Reserved
Reservedフィールドは送信時にゼロに設定され、受信時に無視されます。
4.2.2. Checksum
Checksumは、IGMPメッセージ全体(IP payload全体)の1の補数の和の16ビット1の補数です。チェックサムを計算する際、Checksumフィールドはゼロに設定されます。パケットを受信する際、メッセージを処理する前にチェックサムを検証する必要があります。
4.2.3. Number of Group Records (M)
Number of Group Records (M)フィールドは、このReportに存在するGroup Recordsの数を指定します。
4.2.4. Group Record
各Group Recordは、Reportが送信されるインターフェース上の単一のマルチキャストグループへの送信者のメンバーシップに関する情報を含むフィールドのブロックです。
4.2.5. Record Type
以下のセクション4.2.12を参照してください。
4.2.6. Aux Data Len
Aux Data Lenフィールドには、このGroup Record内のAuxiliary Dataフィールドの長さが32ビットワード単位で含まれます。補助データがないことを示すためにゼロを含めることができます。
4.2.7. Number of Sources (N)
Number of Sources (N)フィールドは、このGroup Recordに存在するソースアドレスの数を指定します。
4.2.8. Multicast Address
Multicast Addressフィールドには、このGroup Recordが関係するIPマルチキャストアドレスが含まれます。
4.2.9. Source Address [i]
Source Address [i]フィールドは、n個のIPユニキャストアドレスのベクトルであり、nはこのレコードのNumber of Sources (N)フィールドの値です。
4.2.10. Auxiliary Data
Auxiliary Dataフィールドは、存在する場合、このGroup Recordに関する追加情報を含みます。このドキュメントで指定されているプロトコルIGMPv3は、補助データを定義していません。したがって、IGMPv3の実装は、送信されるGroup Recordに補助データを含めてはならず(つまり、Aux Data Lenフィールドをゼロに設定する必要があります)、受信されたGroup Recordに存在する補助データを無視する必要があります。Auxiliary Dataフィールドのセマンティクスと内部エンコーディングは、このフィールドを使用するIGMPの将来のバージョンまたは拡張によって定義される必要があります。
4.2.11. Additional Data
受信したReportのIPヘッダーのPacket Lengthフィールドが、最後のGroup Recordを超えて追加のデータオクテットが存在することを示している場合、IGMPv3実装は、受信したIGMP Checksumを検証する計算にそれらのオクテットを含める必要がありますが、それ以外の場合はそれらの追加オクテットを無視する必要があります。Reportを送信する際、IGMPv3実装は、最後のGroup Recordを超えて追加のオクテットを含めてはなりません。
4.2.12. Group Recordタイプ
Reportメッセージに含めることができる異なるタイプのGroup Recordsがいくつかあります:
-
"Current-State Record"は、インターフェースで受信したQueryに応答してシステムによって送信されます。単一のマルチキャストアドレスに関するそのインターフェースの現在の受信状態を報告します。Current-State RecordのRecord Typeは、次の2つの値のいずれかです:
Value Name and Meaning 1 MODE_IS_INCLUDE - 指定されたマルチキャストアドレスに対してインターフェースがINCLUDEフィルターモードを持っていることを示します。このGroup Record内のSource Address [i]フィールドには、指定されたマルチキャストアドレスのインターフェースのソースリストが含まれます(空でない場合)。 2 MODE_IS_EXCLUDE - 指定されたマルチキャストアドレスに対してインターフェースがEXCLUDEフィルターモードを持っていることを示します。このGroup Record内のSource Address [i]フィールドには、指定されたマルチキャストアドレスのインターフェースのソースリストが含まれます(空でない場合)。 -
"Filter-Mode-Change Record"は、IPMulticastListenのローカル呼び出しが特定のマルチキャストアドレスのインターフェースレベル状態エントリのフィルターモードの変更(つまり、INCLUDEからEXCLUDE、またはEXCLUDEからINCLUDEへの変更)を引き起こすたびにシステムによって送信されます。Recordは、変更が発生したインターフェースから送信されるReportに含まれます。Filter-Mode-Change RecordのRecord Typeは、次の2つの値のいずれかです:
Value Name and Meaning 3 CHANGE_TO_INCLUDE_MODE - 指定されたマルチキャストアドレスに対してインターフェースがINCLUDEフィルターモードに変更されたことを示します。このGroup Record内のSource Address [i]フィールドには、指定されたマルチキャストアドレスのインターフェースの新しいソースリストが含まれます(空でない場合)。 4 CHANGE_TO_EXCLUDE_MODE - 指定されたマルチキャストアドレスに対してインターフェースがEXCLUDEフィルターモードに変更されたことを示します。このGroup Record内のSource Address [i]フィールドには、指定されたマルチキャストアドレスのインターフェースの新しいソースリストが含まれます(空でない場合)。 -
"Source-List-Change Record"は、IPMulticastListenのローカル呼び出しが特定のマルチキャストアドレスのインターフェースレベル状態エントリのフィルターモードの変更と一致しないソースリストの変更を引き起こすたびにシステムによって送信されます。Recordは、変更が発生したインターフェースから送信されるReportに含まれます。Source-List-Change RecordのRecord Typeは、次の2つの値のいずれかです:
Value Name and Meaning 5 ALLOW_NEW_SOURCES - このGroup Record内のSource Address [i]フィールドに、指定されたマルチキャストアドレスに送信されるパケットに対してシステムが受信したい追加のソースのリストが含まれていることを示します。変更がINCLUDEソースリストに対するものであった場合、これらはリストに追加されたアドレスです。変更がEXCLUDEソースリストに対するものであった場合、これらはリストから削除されたアドレスです。 6 BLOCK_OLD_SOURCES - このGroup Record内のSource Address [i]フィールドに、指定されたマルチキャストアドレスに送信されるパケットに対してシステムが受信したくないソースのリストが含まれていることを示します。変更がINCLUDEソースリストに対するものであった場合、これらはリストから削除されたアドレスです。変更がEXCLUDEソースリストに対するものであった場合、これらはリストに追加されたアドレスです。
ソースリストの変更が新しいソースの許可と古いソースのブロックの両方をもたらす場合、同じマルチキャストアドレスに対して2つのGroup Recordsが送信されます。1つはALLOW_NEW_SOURCESタイプで、もう1つはBLOCK_OLD_SOURCESタイプです。
"State-Change Record"という用語は、Filter-Mode-Change RecordまたはSource-List-Change Recordを指すために使用します。
認識されないRecord Type値は無視される必要があります。
4.2.13. ReportsのIPソースアドレス
IGMPレポートは、宛先サブネットの有効なIPソースアドレスで送信されます。まだIPアドレスを取得していないシステムは、ソースアドレス0.0.0.0を使用できます。ソースアドレス0.0.0.0は、LAN上の複数のシステムによって同時に使用される場合があることに注意してください。ルーターは、ソースアドレスが0.0.0.0のレポートを受け入れる必要があります。
4.2.14. ReportsのIP宛先アドレス
Version 3 ReportsはIP宛先アドレス224.0.0.22で送信され、すべてのIGMPv3対応マルチキャストルーターがこれをリッスンします。バージョン1またはバージョン2互換モードで動作しているシステムは、ReportのGroup Addressフィールドで指定されたマルチキャストグループにバージョン1またはバージョン2のReportsを送信します。さらに、システムは、IP Destination Addressフィールドに、Reportが到着するインターフェースに割り当てられたアドレス(ユニキャストまたはマルチキャスト)のいずれかを含むバージョン1またはバージョン2のReportを受け入れて処理する必要があります。
4.2.15. Group Recordsの表記法
このドキュメントの残りの部分では、特定のマルチキャストアドレスに関するGroup Recordの内容を記述するために次の表記法を使用します:
IS_IN ( x ) - Type MODE_IS_INCLUDE, source addresses x
IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x
TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x
TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x
ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x
BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x
ここで、xは次のいずれかです:
-
ソースアドレスのセットを表す大文字(例:"A")、または
-
セット式(例:"A+B")。ここで、"A+B"はセットAとBの和集合を意味し、"A*B"はセットAとBの積集合を意味し、"A-B"はセットAからセットBのすべての要素を削除することを意味します。
4.2.16. Membership Reportのサイズ
Reportに必要なGroup Recordsのセットが単一のReportメッセージのサイズ制限内に収まらない場合(送信されるネットワークのMTUによって決定されます)、セット全体を報告するために必要な数のReportメッセージでGroup Recordsが送信されます。
単一のGroup Recordに非常に多くのソースアドレスが含まれており、単一のReportメッセージのサイズ制限内に収まらない場合、そのTypeがMODE_IS_EXCLUDEまたはCHANGE_TO_EXCLUDE_MODEでない場合、それは複数のGroup Recordsに分割され、それぞれが異なるソースアドレスのサブセットを含み、それぞれが別のReportメッセージで送信されます。そのTypeがMODE_IS_EXCLUDEまたはCHANGE_TO_EXCLUDE_MODEの場合、収まるだけのソースアドレスを含む単一のGroup Recordが送信され、残りのソースアドレスは報告されません。どのソースを報告するかの選択は任意ですが、毎回異なるソースを報告するのではなく、各後続のレポートで同じソースのセットを報告することが望ましいです。