IGMPパケットフォーマット
IGMPのパケットを見ると、IGMPの仕組みがより詳しく理解出来ます。
本項では、IGMPのパケットフォーマットについて説明します。
IGMPパケット
IGMPは、「パケット」で説明したパケットヘッダー構造をしています。
IGMPのプロトコル番号は2です。又、TCP/IPなので、フレームタイプはEthernetII形式です。
宛先MACアドレスは、01:00:5Eに続いてIPアドレスの下位23ビットを16進数に変換して使われます。例えば、IPアドレスが239.255.0.10の場合、255の内7ビットを使って7F、0は00、10は0Aとなり、結果として01:00:5E:7F:00:0Aが使われます。
データ部分に、以降に示すバージョン毎の情報が入ります。
IGMPv1のフォーマット
以下に、IGMPv1のフォーマットを示します。
項目 | 英語 | バイト | 説明 |
---|---|---|---|
バージョンとタイプ | Version & Type | 1 | 1〜4bit:バージョン(1) 5〜8bit:Membership Queryは1、Membership Reportは2です。 |
未使用 | Unused | 1 | 0固定。 |
チェックサム | Checksum | 2 | データの誤り検出。 |
グループアドレス | Group Address | 4 | Membership Query時は0.0.0.0、Membership Report時は参加しているマルチキャストアドレスです。 |
Membership Queryは、動画配信が必要か確認するためルーター等から定期送信されます。Membership Reportは、パソコン等が配信して欲しいマルチキャストアドレスを指定して送信します。
IGMPv2のフォーマット
以下に、IGMPv2のフォーマットを示します。
項目 | 英語 | バイト | 説明 |
---|---|---|---|
タイプ | Type | 1 | Membership Queryは11、Membership Reportは16、Leave Groupは17です。 |
最大応答時間 | Max Resp Time | 1 | Membership Queryで使います。この時間内にメンバーはMembership Reportで応答する必要があります。単位は1/10秒です(例:100=10秒)。 |
チェックサム | Checksum | 2 | データの誤り検出。 |
グループアドレス | Group Address | 4 | 定期送信するMembership Query(General Query)の時は0.0.0.0です。Membership Report、Leave Group等では参加しているマルチキャストアドレスです。 |
- ・タイプの補足
- タイプを12で受信した場合、IGMPv1のMembership Reportと判断します。IGMPv1のVersion & Type部分が、Membership Reportでは12のためです。
- ・最大応答時間の補足
- Membership Queryを受信したメンバーは、最大応答時間をMAXとしてランダムにMembership Reportを送信します。これは、Membership Reportを同時に多数送信しないようにするためです。
- ・グループアドレスの補足
- グループアドレスは、Group-Specific Queryでもマルチキャストアドレスが使えます。Group-Specific Queryは、Leave Groupを受信した時に使うMembership Queryです。
- この場合、指定したマルチキャストアドレスに参加中のパソコンだけがMembership Reportで応答します。
IGMPv3のフォーマット
IGMPv3は、Membership QueryとMembership Reportでフォーマットが異なります。最初に、Membership Queryのフォーマットを示します。
項目 | 英語 | バイト | 説明 |
---|---|---|---|
タイプ | Type | 1 | 11固定。 |
最大応答時間 | Max Resp Code | 1 | この時間内にメンバーはMembership Reportで応答する必要があります。値が128未満の時の単位は1/10秒です。128以上の時は浮動小数点となり、指数と仮数を示します。※v2の最大応答時間の補足参照。 |
チェックサム | Checksum | 2 | データの誤り検出。 |
グループアドレス | Group Address | 4 | 定期送信するMembership Query(General Query)の時は0.0.0.0、Group-Specific Query時はマルチキャストアドレスです。※v2のグループアドレスの補足参照。 |
予約やフラグ等 | Reserved等 | 2 | 予約やフラグ等が入ります。 |
送信元アドレスの数 | Number of Sources | 2 | 送信元アドレス(マルチキャストを送信するサーバ)の数です。 |
送信元アドレス | Source Address | 可変 | マルチキャストを送信するサーバのIPアドレスです。Number of Sourcesの数だけ繰り返します。 |
Membership Queryで送信元アドレスを指定すると、パソコン側ではその中から1つのアドレスを指定し、そのアドレスからだけデータを受信出来ます。
次にMembership Reportのフォーマットを示します。
項目 | 英語 | バイト | 説明 |
---|---|---|---|
タイプ | Type | 1 | 22固定。 |
予約 | Reserved | 1 | 将来の予約で0です。 |
チェックサム | Checksum | 2 | データの誤り検出。 |
予約 | Reserved | 2 | 将来の予約で0です。 |
グループレコード数 | Number of Group Records | 2 | グループレコード(受信するマルチキャストアドレス)の数です。 |
グループレコード | Group Record | 可変 | マルチキャストアドレス、送信元アドレス、レコードタイプ等が含まれます。 |
例えば、1つの動画をマルチキャストで参照している場合、グループレコード数は1で、グループレコードの中ではそのマルチキャストアドレスが使われます。同時に3つのグループに参加していると、グループレコード数が3でグループレコードは3つある事になります。
グループレコードでは送信元アドレスを指定でき、レコードタイプでINCLUDEかEXCLUDEモードを指定出来ます。これにより、グループへの参加(Join Group)、脱退(Leave Group)も指定する事が出来ます。
送信先IPアドレス
送信先IPアドレスは、バージョンやタイプによって異なります。以下に、一覧を示します。
バージョン | タイプ | 送信先IPアドレス |
---|---|---|
IGMPv1 | Membership Query | 224.0.0.1 |
Membership Report | グループアドレス | |
IGMPv2 | General Query | 224.0.0.1 |
Group-Specific Query | グループアドレス | |
Membership Report | グループアドレス | |
IGMPv3 | General Query | 224.0.0.1 |
Group-Specific Query | グループアドレス | |
Membership Report | 224.0.0.22 |
224.0.0.1は、サブネット上の全てのマルチキャスト対応機器が受信します。224.0.0.22はIGMPv3対応のルーターが受信します。
尚、送信元IPアドレスは、送信元のユニキャストIPアドレスが使われます。