マルチキャストを使った通信を実現するには,アドレッシング,IGMP,マルチキャストルーティングプロトコルに関する知識が必要です。その中でIGMPは,ルーターがネットワーク内にどこにマルチキャストを利用しているホストが存在するかを知る上で欠かせない「マルチキャストグループ」を確認するために使います。今回はIGMPを学びましょう。

マルチキャストグループ

 マルチキャストを使った通信では,マルチキャストを送受信するホストはマルチキャストグループに所属します。このことを「マルチキャストグループのメンバである」と言います。ホストはIGMP(internet group management protocol)を使ってマルチキャストグループに参加し,メンバになります。

 ホストはIGMPを使ってマルチキャストグループへの参加を通知しますが,その通知を受け取って管理するのはルータです。ルータは自分が接続しているネットワークに対し,「どのマルチキャストグループのメンバが存在するのか」を知る必要があります。ルータはそれにより,マルチキャストで送信されたパケットをルーティングできるようになります(図1)。

 図1 IGMPとマルチキャストルーティング

 マルチキャストグループは,IPアドレスで識別・管理されます。これが,マルチキャストアドレスです。例えば,239.0.0.1をあて先とするマルチキャストは,マルチキャストグループ239.0.0.1として扱われます。

 マルチキャストグループは,IGMPによりルータに登録されます。ルータのどのインタフェースの先にどのマルチキャストグループのホストが存在しているかは,showコマンドによって確認できます(図2)。

  • #show ip igmp group

 図2 show ip igmp group
MACアドレスの構造

IGMPでグループの参加や離脱を伝える

 IGMPはレイヤ3プロトコルです。バージョン1,2,3という三つのバージョンがあり,それぞれIGMPv1,IGMPv2,IGMPv3と記述されます。上位のバージョンは下位バージョンに対し下位互換性を持ちます。

 現在,ルータでどのバージョンが使われているかを調べるには,show ip igmp interfaceコマンドを使います(図3)。

  • #show ip igmp interface インタフェース

 図3 show ip igmp interface
show ip igmp interface

 IGMPは,「グループへの参加」,「グループの問い合わせ」,「グループの維持」,「グループからの離脱」という4つの機能を持っています。加えてIGMPv3では,「送信元のフィルタ」という機能を持っています。

 IGMPの基本的な動作は,「グループへの参加」と「グループの問い合わせ」です。これはクエリとメンバーシップレポートからなります。ルータはあて先として224.0.0.1(全マルチキャストグループ)あてのクエリを送信します。クエリを送信するルータを「クエリア」と呼びます。メンバはそれに対しメンバーシップレポートを送り返します。メンバーシップレポートには自分が所属しているマルチキャストグループのアドレスを入れて応答することにより,ルータはそのネットワークにマルチキャストグループのメンバがいることを確認します(図4)。

 図4 IGMPクエリとメンバーシップレポート

 「グループの維持」は,クエリを定期的に実行することで実現されます。クエリはデフォルトでは60秒ごとに送信されます。これによりネットワーク内にグループが存在しつづけていることを確認できます。またデフォルトでは120秒応答がなかった場合,そのグループを削除します。

 また,マルチキャストグループに参加したメンバはクエリがなくともメンバーシップレポートを送ります。それにより,クエリとクエリの合間に参加したメンバがあった場合でもルータはマルチキャストグループを確認できます。

 クエリとメンバーシップレポートは,IGMPのすべてのバージョンで使われる基本動作です。バージョンで違いがあるとすれば,IGMPv2以降では「クエリアの選択」機能を実行するようになっています(図5)。

 図5 クエリアの選択

 「グループからの離脱」は,IGMPv1とIGMPv2/IGMPv3では異なります。IGMPv1ではグループからメンバが離脱する場合,何もアクションを起こしません。そのため,離脱したホストがグループ最後のメンバだった場合,定期的なクエリによる問い合わせが行われるまでクエリアはグループのメンバがなくなったことに気がつきません。それにより,必要のないマルチキャストトラフィックがネットワーク内に流れることになります。

 これに対してIGMPv2以降では,「リーブメッセージ」が追加されました。グループから離脱するメンバはリーブメッセージをクエリアに送ることにより離脱を通知します。それに対しクエリアはグループスペシフィックメッセージを使って,マルチキャストグループのメンバがネットワークに残っているかどうか確認します(図6)。

 図6 グループからの離脱

 IGMPv3から新しく追加された機能が,「送信元のフィルタ」機能です。これはマルチキャストグループには参加するが,特定のマルチキャストサーバからのマルチキャストトラフィックは受信したくないというケースで使われます。