IGMPその1
目次
マルチキャストをどこに転送すればいい?
ルータがマルチキャストのパケットを転送するためには、どのインタフェースの先にどのグループのメンバー(Receiver)がいるのかを知っておかなければいけません。スイッチのようにマルチキャストをすべてフラッディングしてしまっては、ネットワークに余計なトラフィックを流してしまうことになってしまいます。
ルータとホストの間でマルチキャストグループの管理
ルータがマルチキャストグループを管理するためのプロトコルが、IGMP(Internet Group Management Protocol)です。
ホストはIGMPを使って、ルータに受信したいマルチキャストグループを通知します。ルータは、IGMPによって得た情報により、マルチキャストグループが存在するインタフェースにだけ該当のパケットを転送するようになります。
IGMPには、現在、v1、v2、v3と3つのバージョンがありますが、まずは最も基本的なIGMPv1について解説します。
IGMPv1はRFC1112に定義されています。IGMPのメッセージは次の2つの種類があります。
- メンバーシップクエリー
ルータが、「マルチキャストのメンバーの人いますか~?」と問い合わせるメッセージです。ルータは定期的(デフォルトでは60秒ごと)にこのメンバーシップクエリーを送信して、マルチキャストグループのメンバーの存在を確認しています。 - メンバーシップレポート
ルータからのメンバーシップクエリーに対する返事として、メンバーシップレポートを送信します。クエリーに対する返事としてだけではなく、あるホストが「マルチキャストグループに入りたい!」というときの意思表明としても使います。グループに入るときをとくにJoinメッセージと呼びます。
IGMPv1のパケットフォーマット
IGMPv1のパケットフォーマットは次のようになります。これは、IPパケットで運ばれることになります。
バージョン
IGMPのバージョンを表しています。
タイプ
IGMPのメッセージのタイプを表します。
0x01 ホストメンバーシップクエリー
0x02 ホストメンバーシップレポート
未使用
v1ではここの部分は無視します。
チェックサム
IGMPメッセージのエラーチェックを行います。
グループアドレス
ホストが所属するマルチキャストグループアドレスが入ります。
以上のIGMPv1のメッセージを利用して、ルータとマルチキャストホスト間で、
- マルチキャストグループへの参加
- マルチキャストグループの維持
- マルチキャストグループからの脱退
を制御します。