IGMPその2
目次
IGMPによるマルチキャストグループの管理とは?
IGMPによって、マルチキャストグループの管理を行います。管理するとは、具体的に
- マルチキャストグループへの加入
- マルチキャストグループの維持
- マルチキャストグループからの脱退
を制御することです。
IGMPv1によるマルチキャストグループへの加入
あるコンピュータがマルチキャストのアプリケーションでマルチキャストを受信したいと設定したとします。つまり、マルチキャストグループに入りたいという設定を行うと、コンピュータはIGMPメンバーシップレポートを送信します。このマルチキャストグループへ入りたいというタイミングで送信するIGMPメッセージをIGMP Joinメッセージと呼びます。
IGMP JoinメッセージのIPヘッダの送信先IPアドレスは加入したいグループアドレスを指定します。IGMPが有効になっているルータは、Joinメッセージを受け取ると、受け取ったインタフェースの先にマルチキャストグループのメンバーがいるということがわかりり、該当のマルチキャストグループへのパケットを転送するようになります。IGMP Joinメッセージによって、「マルチキャストグループに入りたいんです!」ということをルータに知らせています。
たとえば、あるコンピュータAが224.10.10.10のグループに加入したいときは、次の図のようになります。
IGMPv1によるマルチキャストグループの維持
ルータは、さらにインタフェースの先にマルチキャストグループが存在しているかどうかを確認しなくてはいけません。そのために、定期的な問い合わせ、クエリーを行います。
デフォルトの設定では、60秒に1度、ルータはジェネラルクエリーを送信します。ジェネラルクエリーの送信先IPアドレスは224.0.0.1です。この224.0.0.1というアドレスはWell-knownのマルチキャストグループであり、ネットワーク上のすべてのマルチキャストホストを示しています。ジェネラルクエリーを送信することによって、ルータは「マルチキャストグループのメンバーの人いますか~?」と問い合わせをしているんですね。
問い合わせを受けたマルチキャストグループのメンバーは、返事を返します。でも、返事を返すのはひとりだけです。ルータはひとりでもグループのメンバーがいれば、マルチキャストを中継するので何人も返事を返す必要はありません。
返事を返すメンバーを決める仕組みは、ジェネラルクエリーを受け取ると、受け取ったメンバーはタイマーをスタートさせます。タイマーの初期値は10秒以内のランダムな値です。このタイマーが最初に0になったメンバーがルータに返事を返します。返事の内容は、Joinのときと同じメンバーシップレポートとなっています。
IGMPv1によるマルチキャストグループからの脱退
あるコンピュータが「もうマルチキャストを受け取りたくない!」というとき、IGMPv1では何もしません。IGMPv1は、グループから抜けるときには黙って抜けていきます。
ルータは、マルチキャストグループのメンバーがいないところへいつまでもパケットを転送しても仕方がないですね。ルータが送信するジェネラルクエリーに対する返事(レポート)が一定時間内に返ってこないと、グループのメンバーがいなくなったと判断して、そのインタフェースへマルチキャストを転送しなくなります。
IGMPv1によるマルチキャストグループの管理のまとめ
以上のように、
- マルチキャストグループへの加入
ホストからルータへのメンバーシップクエリー(Joinメッセージ) - マルチキャストグループの維持
ルータからの定期的なジェネラルクエリーに対して、ホストがレポートを返す - マルチキャストグループの脱退
ホストは何もしない。ルータはクエリーの返事が返ってこないとメンバーがいなくなったと判断
によって、マルチキャストグループの管理を行っています。