メインコンテンツまでスキップ

3. Protocol Description (プロトコルの説明)

3. Protocol Description (プロトコルの説明)

タイマー値のデフォルトは、この文書の後半で説明されていることに注意してください。タイマーとカウンターの名前は角括弧内に表示されます。

「interface」 (インターフェース) という用語は、この文書では「接続されたネットワーク上のプライマリインターフェース」を意味するために使用されることがあります。ルーターが単一のネットワーク上に複数の物理インターフェースを持っている場合、このプロトコルはそのうちの 1 つだけで実行する必要があります。一方、ホストは、メンバーシップが関連付けられているすべてのインターフェースでアクションを実行する必要があります。

マルチキャストルーターは IGMP を使用して、接続された各物理ネットワーク上のどのグループにメンバーがいるかを知ります。マルチキャストルーターは、接続された各ネットワークのマルチキャストグループメンバーシップのリストと、各メンバーシップのタイマーを保持します。「マルチキャストグループメンバーシップ」とは、特定の接続されたネットワーク上に少なくとも 1 つのマルチキャストグループメンバーが存在することを意味し、すべてのメンバーのリストではありません。接続された各ネットワークに関して、マルチキャストルーターは 2 つの役割のいずれかを想定できます: Querier (クエリア) または Non-Querier (非クエリア)。通常、物理ネットワークごとに 1 つの Querier しかありません。すべてのマルチキャストルーターは、接続された各ネットワーク上で Querier として起動します。マルチキャストルーターがより低い IP アドレスを持つルーターからの Query メッセージを聞いた場合、そのネットワーク上で Non-Querier にならなければなりません (MUST)。ルーターが [Other Querier Present Interval] (他のクエリア存在間隔) の間、他のルーターからの Query メッセージを聞かなかった場合、Querier の役割を再開します。ルーターは定期的に [Query Interval] (クエリ間隔)、このルーターが Querier である接続された各ネットワーク上で General Query (一般クエリ) を送信し、メンバーシップ情報を求めます。起動時に、ルーターはメンバーシップ情報を迅速かつ確実に決定するために、[Startup Query Interval] (起動時クエリ間隔) で密接に間隔を空けた [Startup Query Count] (起動時クエリ数) の General Queries を送信すべきです (SHOULD)。General Query は全システムマルチキャストグループ (224.0.0.1) に宛てられ、Group Address (グループアドレス) フィールドは 0 で、Max Response Time (最大応答時間) は [Query Response Interval] (クエリ応答間隔) です。

ホストが General Query を受信すると、クエリを受信したインターフェース上でメンバーである各グループ (全システムグループを除く) に対して遅延タイマーを設定します。各タイマーは、ホストで使用可能な最高のクロック粒度を使用して、(0, Max Response Time] の範囲から選択された異なるランダムな値に設定されます。ここで、Max Response Time は Query パケットで指定されたものです。ホストが Group-Specific Query (グループ特定クエリ) を受信すると、クエリを受信したインターフェース上でクエリ対象のグループのメンバーである場合、上記のように (0, Max Response Time] の範囲から選択されたランダムな値に遅延タイマーを設定します。グループのタイマーがすでに実行中の場合、要求された Max Response Time が実行中のタイマーの残り値よりも小さい場合にのみ、ランダムな値にリセットされます。グループのタイマーが満了すると、ホストは IP TTL 1 でそのグループに Version 2 Membership Report (バージョン 2 メンバーシップレポート) をマルチキャストします。タイマーの実行中にホストが他のホストの Report (バージョン 1 または 2) を受信した場合、重複する Reports を抑制するために、指定されたグループのタイマーを停止し、Report を送信しません。

ルーターが Report を受信すると、Report を受信したネットワーク上のマルチキャストグループメンバーシップのリストに報告されたグループを追加し、メンバーシップのタイマーを [Group Membership Interval] (グループメンバーシップ間隔) に設定します。繰り返される Reports はタイマーを更新します。このタイマーが満了する前に特定のグループの Reports が受信されない場合、ルーターはそのグループにローカルメンバーがいないと想定し、リモート発信のマルチキャストをそのグループの接続されたネットワークに転送する必要はありません。

ホストがマルチキャストグループに参加するとき、ネットワーク上でそのグループの最初のメンバーである場合に備えて、そのグループの非要請 Version 2 Membership Report を直ちに送信すべきです。最初の Membership Report が失われたり破損したりする可能性をカバーするために、短い遅延 [Unsolicited Report Interval] (非要請レポート間隔) の後に 1 回か 2 回繰り返すことが推奨されます。(これを達成する簡単な方法は、最初の Version 2 Membership Report を送信し、その後、そのグループの Group-Specific Query が受信されたかのように振る舞い、タイマーを適切に設定することです)。

ホストがマルチキャストグループを脱退するとき、そのグループの Query に対して Membership Report で応答した最後のホストであった場合、全ルーターマルチキャストグループ (224.0.0.2) に Leave Group (グループ脱退) メッセージを送信すべきです (SHOULD)。Query に応答した最後のホストでなかった場合、サブネット上に別のメンバーがいるはずなので、何も送信しないかもしれません (MAY)。これはトラフィックを削減するための最適化です。応答した最後のホストであったかどうかを記憶するのに十分なストレージがないホストは、グループを脱退するときに常に Leave Group メッセージを送信してもよいです (MAY)。ルーターは、この標準の以前のバージョンの実装に対応するために、脱退するグループに宛てられた Leave Group メッセージを受け入れるべきです (SHOULD)。Leave Group メッセージは全ルーターグループに宛てられます。これは、他のグループメンバーがホストがグループを脱退したことを知る必要がないためですが、メッセージをグループに宛てることに害はありません。

Querier が受信インターフェース上にグループメンバーがいるグループの Leave Group メッセージを受信すると、脱退するグループに対して [Last Member Query Interval] (最終メンバークエリ間隔) ごとに [Last Member Query Count] (最終メンバークエリ数) の Group-Specific Queries を送信します。これらの Group-Specific Queries の Max Response time は [Last Member Query Interval] に設定されています。最後のクエリの応答時間が満了した後に Reports が受信されない場合、ルーターは上記のように、グループにローカルメンバーがいないと想定します。この間、Querier から non-Querier への遷移は無視されます。同じルーターが Group-Specific Queries を送信し続けます。

Non-Queriers は Leave Group メッセージを無視しなければならず (MUST)、Queriers は受信インターフェース上にグループメンバーがいない Leave Group メッセージを無視すべきです (SHOULD)。

non-Querier が Group-Specific Query メッセージを受信したとき、既存のグループメンバーシップタイマーがメッセージで指定された Max Response Time の [Last Member Query Count] 倍よりも大きい場合、グループメンバーシップタイマーをその値に設定します。