マルチキャスト通信では,IGMPを使ってマルチキャスト・メンバの登録・離脱をルータへ通知します。ただし,クライアント・マシンはレイヤ2スイッチに接続しているのが一般的なため,実際にはレイヤ2スイッチでもマルチキャストの制御が必要になります。今回はレイヤ2スイッチが搭載するマルチキャスト機能であるCGMP(Cisco Group Management Protocol)とIGMPスヌーピングを説明します。

マルチキャストとレイヤ2スイッチ

 マルチキャストでは,IGMPを使ってマルチキャストのメンバの登録や離脱が行われます。それにより,マルチキャスト・パケットがメンバのいないネットワークにルーティングされるという無駄を省くことができます。

 しかし,サブネット内ではマルチキャスト・トラフィックはレイヤ2スイッチによってフラッディングされるため,トラフィックが制御されているとは言えません(図1)。

 図1 マルチキャストとレイヤ2スイッチ

 この問題を解決するために,IGMPと連動してレイヤ2スイッチのアドレステーブルを書き換える技術があります。それがCGMPとIGMPスヌーピングです。

CGMP

 CGMP(Cisco Group Management Protocol)は,ルータがIGMPで得た情報をレイヤ2スイッチに送るためのプロトコルです。ルータはIGMPJoinを送信してきたメンバの送信元MACアドレスと,マルチキャストMACアドレスの対応をレイヤ2スイッチに送信します。それによりマルチキャストMACアドレスがレイヤ2スイッチのアドレステーブルに記載されることになります(図2)。

 図2 CGMP Join

 CGMPではこのように,レイヤ2スイッチのアドレステーブルを書き換えます。この書き換えはリフレッシュされずに残ります。

 一方,メンバがマルチキャストグループから離脱する際には,アドレステーブルから対応するエントリを削除する必要があります。メンバのマルチキャストからの離脱はIGMPv1とIGMPv2では動作が異なりますので,それぞれのバージョンによりCGMPのアドレステーブルからのエントリ削除も動作が異なります(図3)。

 図3 CGMP Leave

 CGMPを使用することにより,IGMPと連動してレイヤ2スイッチのアドレステーブルを書き換えることが可能になり,トラフィックの制御が行えます。

IGMPスヌーピング

 CGMPを使うには,ルータとスイッチの双方がCGMPに対応している必要があります。どちらかが対応していない場合は,IGMPスヌーピングを使います。

 IGMPスヌーピングは本来レイヤ3パケットであるためレイヤ2スイッチでは確認しないIGMPパケットをスヌーピング(覗き見)する機能です。CGMPのようにルータがスイッチに通知する形でなく,スイッチが直接IGMPパケットを確認するため,よりダイレクトにアドレステーブルが書き換わります(図4)。

 図4 IGMPスヌーピング

 図4のようにIGMPパケットを直接読み取ることになります。なお,離脱の場合の動作はCGMPと同様にリーブメッセージを受信したらアドレステーブルから削除し,最終的にIGMPリーブメッセージをルータに送るという動作になります。

 IGMPスヌーピングはCGMPよりも優れていますが,IGMPスヌーピングではマルチキャストパケットを全て確認する必要があるため(IGMPかマルチキャストトラフィックかの区別ができないため),その分スイッチのCPUに負担がかかります。IGMPスヌーピングを行うことのできるASICを持ったスイッチ以外での使用は推奨されません。