要約

  • RFC 1112 はローカルな Query と Report でマルチキャスト参加を知らせたが、ランダムな応答タイマーにより、一台の報告がグループを代表し、参加者を列挙しない仕組みだった。
  • IGMPv1 に Leave メッセージはなく、最後の受信者が去ったことは、報告が止まりメンバー状態のタイマーが切れて初めて分かった。RFC 2236 は後に、より速い離脱通知を加えた。

グループアドレスは名簿ではない

IP マルチキャストアドレスは、メンバーが一人もいなくても恒久的に割り当てられることがある。ホストはグループに参加せずに、その宛先へデータグラムを送ることもできる。RFC 1112 の Stephen Deering は、この違いを保った。宛先アドレスはグループを示し、参加状態はホストとネットワークインターフェースごとに管理する。上位アプリケーションは IP に参加・離脱を要求する。隣接するルーターに必要なのは、接続されたネットワークに受信希望者がまだいるかどうかだった。

この標準はホスト機能を二段階に分けた。Level 1 はマルチキャストを送信できるが、グループ参加も IGMP 実装もしない。Level 2 は参加・離脱に加え、隣接マルチキャストルーターへ状態を知らせる IGMP を備える。つまりグループアドレスだけでは受信者は分からず、ローカルセグメントから新しい信号を得る必要があった。

最初の報告を一斉に送らない

ルーターは全ホストアドレス 224.0.0.1 へ Host Membership Query を送る。Level 2 ホストはそのインターフェース上の参加グループを調べる。全員が即座に応答すれば、同じ制御パケットが一斉に流れる。RFC 1112 は各参加状態にランダムな報告遅延を与えた。自分のタイマーが切れる前に、同じグループへの有効な報告を聞くと、ホストは送信予定の報告を取り消す。これで一件の応答が「少なくとも一人は残っている」とルーターに伝わる。

これは意図的な情報圧縮だった。ルーターは人数、端末一覧、各アプリケーションが受信準備済みであるという証明を受け取らない。受け取るのは、そのローカルネットワークにグループ参加者がいるという情報だけだ。転送判断に不要な詳細を捨てる代わりに、重複した制御通信を減らした。

新しいグループへ参加したホストは、タイマーを待たずにすぐ報告する。ネットワークで最初の参加者かもしれないからだ。最初の報告が失われる可能性を考え、短い間隔で一、二回再送することも勧められた。それでもマルチキャストは通常の IP ユニキャストと同じベストエフォートであり、全メンバーへの完全な到着や同じ順序は保証しない。参加信号はルーターへ知らせても配送までは保証しなかった。

最後の受信者が去った後の沈黙

IGMPv1 は Query と Report を定めたが、Leave Group メッセージを持たなかった。ホストが離脱すると、ローカル IP モジュールはその参加状態を終える。しかしルーターはすぐに通知されない。定期 Query が状態を更新し、誰も報告しなくなれば、メンバータイマーがいずれ切れる。制御を簡潔にした代わりに、最後の受信者が去った後も状態がしばらく残る。

それは永続的な誤認ではなく、Query とメンバータイマーが定める遅延である。だが高帯域グループや参加者の入れ替わりが多いネットワークでは、受信者がいないセグメントへタイムアウトまで転送が続く可能性がある。

RFC 2236 は IGMPv2 に Leave Group を加え、離脱をより早く知らせた。Query を担当するルーターはその後グループ固有の Query を送り、応答を待ってからセグメントが空かを判断する。沈黙を確実性に変えたのではない。不確実な時間を縮め、別の受信者が残っていないか再確認した。

1989 年の選択は明快だ。IGMPv1 はグループ参加を「誰かがいるか」という問いに縮め、制御通信を減らした。一台の報告が他の応答を抑えながら、ルーターには転送を続けるための情報を残す。しかしその報告の背後に何人いたか、最後の一人がいつ去ったかは分からなかった。

出典