Appendix I. Internet Group Management Protocol (インターネットグループ管理プロトコル)
Appendix I. Internet Group Management Protocol (インターネットグループ管理プロトコル)
Internet Group Management Protocol (インターネットグループ管理プロトコル, IGMP) は, IP ホストが直接隣接するマルチキャストルーターにホストグループメンバーシップを報告するために使用されます。IGMP は非対称プロトコルであり, マルチキャストルーターの観点ではなく, ホストの観点から規定されています。(IGMP は, マルチキャストルーター間でも対称的または非対称的に使用できます。そのような使用はここでは規定されていません。)
ICMP と同様に, IGMP は IP の不可欠な部分です。IP マルチキャスト仕様の level 2 に準拠するすべてのホストで実装する必要があります。IGMP メッセージは IP データグラムにカプセル化され, IP プロトコル番号は 2 です。ホストに関係するすべての IGMP メッセージは次の形式です:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Type | Unused | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version (バージョン)
このメモは IGMP バージョン 1 を規定します。バージョン 0 は RFC-988 で規定されており, 現在は廃止されています。
Type (タイプ)
ホストに関係する IGMP メッセージには2つのタイプがあります:
- 1 = Host Membership Query (ホストメンバーシップクエリ)
- 2 = Host Membership Report (ホストメンバーシップレポート)
Unused (未使用)
未使用フィールド, 送信時にゼロに設定され, 受信時に無視されます。
Checksum (チェックサム)
チェックサムは 8 オクテット IGMP メッセージの 1 の補数和の 16 ビット 1 の補数です。チェックサムを計算するために, チェックサムフィールドはゼロに設定されます。
Group Address (グループアドレス)
Host Membership Query メッセージでは, グループアドレスフィールドは送信時にゼロに設定され, 受信時に無視されます。
Host Membership Report メッセージでは, グループアドレスフィールドは報告されているグループの IP ホストグループアドレスを保持します。
非公式プロトコル説明
マルチキャストルーターは Host Membership Query メッセージ (以下 Queries) を送信して, 接続されたローカルネットワークにどのホストグループにメンバーがいるかを発見します。Queries は all-hosts グループ (アドレス 224.0.0.1) 宛に送信され, IP time-to-live は 1 です。
ホストは Host Membership Reports (以下 Reports) を生成することで Query に応答し, Query を受信したネットワークインターフェース上で属している各ホストグループを報告します。並行する Reports の「インプロージョン」を回避し, 送信される Reports の総数を減らすために, 2 つの技術が使用されます:
-
ホストが Query を受信すると, すぐに Reports を送信するのではなく, 着信 Query のネットワークインターフェース上の各グループメンバーシップに対してレポート遅延タイマーを開始します。各タイマーは, 0 から D 秒の間でランダムに選択された異なる値に設定されます。タイマーが期限切れになると, 対応するホストグループの Report が生成されます。したがって, Reports は一度にすべて発生するのではなく, D 秒間隔に分散されます。
-
Report は, 報告されるホストグループアドレスに等しい IP 宛先アドレスで送信され, IP time-to-live は 1 であるため, 同じネットワーク上の同じグループの他のメンバーが Report を傍受できます。ホストがそのネットワーク上で属しているグループの Report を傍受した場合, ホストはそのグループの自身のタイマーを停止し, そのグループの Report を生成しません。したがって, 通常の場合, ネットワーク上に存在する各グループに対して 1 つの Report のみが生成され, 遅延タイマーが最初に期限切れになるメンバーホストによって生成されます。マルチキャストルーターはすべての IP マルチキャストデータグラムを受信するため, 明示的にアドレス指定する必要はないことに注意してください。また, ルーターはどのホストがグループに属しているかを知る必要はなく, 特定のネットワーク上に少なくとも 1 つのホストがグループに属していることだけを知る必要があることに注意してください。
上記の動作には 2 つの例外があります。第一に, Query を受信したときにレポート遅延タイマーがすでにグループメンバーシップに対して実行されている場合, そのタイマーは新しいランダム値にリセットされず, 現在の値で実行を続けることが許可されます。第二に, all-hosts グループ (224.0.0.1) のホストのメンバーシップに対してレポート遅延タイマーが設定されることはなく, そのメンバーシップは報告されません。
ホストが疑似乱数ジェネレーターを使用してレポート遅延を計算する場合, 複数のホストが同じ遅延シーケンスを生成する可能性を減らすために, ホスト自身の個別 IP アドレスの 1 つをジェネレーターのシードの一部として使用する必要があります。
ホストは, 受信した Report の IP 宛先フィールドと IGMP グループアドレスフィールドに同じ IP ホストグループアドレスがあることを確認して, ホスト自身の Report が誤って受信した Report によってキャンセルされないようにする必要があります。ホストは, Host Membership Query または Host Membership Report 以外のタイプの IGMP メッセージを静かに破棄する必要があります。
マルチキャストルーターは定期的に Queries を送信して, 特定のネットワーク上に存在するメンバーシップの知識を更新します。いくつかの Queries の後に特定のグループの Reports を受信しない場合, ルーターはそのグループにローカルメンバーがおらず, そのグループのリモート発信のマルチキャストをローカルネットワークに転送する必要がないと想定します。Queries は通常, ホストとネットワークの IGMP オーバーヘッドを非常に低く保つために, 頻繁に送信されません (1 分に 1 回以下)。ただし, マルチキャストルーターが起動すると, ローカルメンバーシップの知識をすばやく構築するために, 間隔の短い複数の Queries を発行する場合があります。
ホストが新しいグループに参加すると, そのネットワーク上のそのグループの最初のメンバーである場合に備えて, Query を待つのではなく, そのグループの Report を直ちに送信する必要があります。初期 Report が失われたり破損したりする可能性をカバーするために, 短い遅延の後に 1 回または 2 回繰り返すことをお勧めします。(これを実現する簡単な方法は, そのグループに対してのみ Query を受信したかのように動作し, そのグループのランダムレポート遅延タイマーを設定することです。以下の状態遷移図はこのアプローチを示しています。)
マルチキャストルーターが存在しないネットワークでは, 唯一の IGMP トラフィックは, ホストが新しいグループに参加したときに送信される 1 つ以上の Reports であることに注意してください。
状態遷移図
任意の単一ネットワークインターフェース上の任意の単一 IP ホストグループに関して, IGMP 動作は状態遷移図によってより正式に規定されます。ホストは 3 つの可能な状態のいずれかになります:
-
Non-Member state (非メンバー状態): ホストがインターフェース上でグループに属していないとき。これはすべてのネットワークインターフェース上のすべてのメンバーシップの初期状態であり, ホストにストレージを必要としません。
-
Delaying Member state (遅延メンバー状態): ホストがインターフェース上でグループに属しており, そのメンバーシップに対してレポート遅延タイマーが実行されているとき。
-
Idle Member state (アイドルメンバー状態): ホストがインターフェース上でグループに属しているが, そのメンバーシップに対してレポート遅延タイマーが実行されていないとき。
IGMP 状態遷移を引き起こす可能性のある 5 つの重要なイベントがあります:
-
"join group" (グループに参加): ホストがインターフェース上でグループに参加することを決定したときに発生します。Non-Member state でのみ発生します。
-
"leave group" (グループから離脱): ホストがインターフェース上でグループから離脱することを決定したときに発生します。Delaying Member および Idle Member states でのみ発生します。
-
"query received" (クエリ受信): ホストが有効な IGMP Host Membership Query メッセージを受信したときに発生します。有効であるためには, Query メッセージは少なくとも 8 オクテットの長さで, 正しい IGMP チェックサムを持ち, 224.0.0.1 の IP 宛先アドレスを持っている必要があります。単一の Query は, Query を受信したインターフェース上のすべてのメンバーシップに適用されます。Non-Member または Delaying Member state のメンバーシップでは無視されます。
-
"report received" (レポート受信): ホストが有効な IGMP Host Membership Report メッセージを受信したときに発生します。有効であるためには, Report メッセージは少なくとも 8 オクテットの長さで, 正しい IGMP チェックサムを持ち, IP 宛先フィールドと IGMP グループアドレスフィールドに同じ IP ホストグループアドレスを含んでいる必要があります。Report は, Report を受信したインターフェース上の Report で識別されるグループのメンバーシップにのみ適用されます。Non-Member または Idle Member state のメンバーシップでは無視されます。
-
"timer expired" (タイマー期限切れ): インターフェース上のグループのレポート遅延タイマーが期限切れになったときに発生します。Delaying Member state でのみ発生します。
無効な IGMP メッセージの受信や Query または Report 以外の IGMP メッセージなど, その他すべてのイベントは, すべての状態で無視されます。
上記のイベントに応答して, 3 つの可能なアクションが実行される場合があります:
-
"send report" (レポート送信): インターフェース上のグループのレポートを送信します。
-
"start timer" (タイマー開始): インターフェース上のグループのタイマーを, 0 から D 秒の間のランダム遅延値を使用して開始します。
-
"stop timer" (タイマー停止): インターフェース上のグループのタイマーを停止します。
次の図では, 各状態遷移アークに遷移を引き起こすイベントと, (括弧内に) 遷移中に実行されるアクションがラベル付けされています。
________________
| |
| |
| |
| |
----->| Non-Member |<---------
| | | |
| | | |
| | | |
| |________________| |
| | |
| leave group | join group | leave group
| (stop timer) |(send report, |
| | start timer) |
________|________ | ________|________
| |<----- | |
| | | |
| |<---------------| |
| | query received | |
| Delaying Member | (start timer) | Idle Member |
| |----------------->| |
| | report received | |
| | (stop timer) | |
|_________________|----------------->|_________________|
timer expired
(send report)
all-hosts グループ (アドレス 224.0.0.1) は特殊なケースとして処理されます。ホストは各インターフェース上でそのグループの Idle Member state で開始し, 別の状態に遷移することはなく, そのグループのレポートを送信することもありません。
プロトコルパラメータ
最大レポート遅延 D は 10 秒です。