IGMPの概要
IGMPはReceiverがルーター(ラストホップルーター)に対して,マルチキャストグループへの参加,維持,離脱を宣言するためのプロトコルです.IGMPによってマルチキャストルーターはLAN上のマルチキャストグループに所属する(したい)ホストの所在をつかむことができます.
Receiverがマルチキャストグループへの参加を通知すると,ラストホップルーターはReceiverの存在を認識し,マルチキャストルーティングプロトコルと連携してマルチキャストパケットの転送を実現します.
レシーバがマルチキャストデータを必要とするとき,IGMPを使用します.IGMPはRFC1112, RFC2236, RFC3376などで定義される.IGMPはバージョン1からバージョン3まで定義されている.
レシーバはルーターにマルチキャストグループへの参加要求メッセージをIGMPメンバシップレポートで送る.これを”マルチキャストグループにジョインする“といいます.
ルータはIGMPを受け取ることでローカルなサブネット上のどのホストがマルチキャストグループアドレスに参加しているのかを知ることができます.以降,ルーターは定期的に(60秒ごと)クエリを送信してサブネット上でアクティブまたは非アクティブになっているグループを検出します.このようにレシーバがダイナミックにジョインする手順の他に,ルーター側でスタティックにマルチキャストグループを定義することも可能です.
同じネットワーク上に複数のルーターが存在する場合,代表して1台のルータがクエリを送信します.このルーターのことをIGMPクエリアと呼びます.インタフェースのIPアドレスが最も小さなルーターがIGMPクエリアとして選出されます.
JUNOSでマルチキャストルーティングプロトコル(PIM or DVRMP)を動作させた場合,自動的にIGMPが有効になります.デフォルトではIGMPv2が選択されるが,IGMPv1,IGMPv3もサポートしています.
IGMPv1
IGMPはIPカプセル化されています.IPプロトコル番号は2です.
フォーマット
Field | bits | description |
---|---|---|
Version | 4 | IGMPのバージョン(0x1) |
Type | 4 | メンバシップクエリー(0x1),メンバシップレポート(0x2) |
NoUse | 8 | 送信時に0に設定,受信時には無視される |
Check sum | 16 | パケットの完全性を確認するために使用 |
Group address | 32 | メンバシップクエリーの場合(0),メンバシップレポートの場合はマルチキャストグループアドレス |
マルチキャストグループへの参加
Receiverがマルチキャストグループに参加するとき,ReceiverはIGMPメンバシップレポートによりルータにマルチキャストグループの参加を通知します.このパケットはIGMP Joinメッセージとも言われます.
Receiverからメンバシップレポートを受信したルータはIGMPテーブルにその情報を登録します.そのマルチキャストグループの情報はマルチキャストルーティングテーブルにも反映されます.
マルチキャストグループの維持
ラストホップルータはReceiverの存在を確認するために,一定間隔でIGMPメンバシップクエリーを送出します.メンバシップクエリーは224.0.0.1宛に送られます.(ciscoルータではデフォルトで60秒).
ReceiverはIGMPメンバシップレポートで応答します.この応答は,一つのマルチキャストグループにつきいずれか一つのホストが応答すれば,ルーターは該当するマルチキャストパケットをフラッディングします.
マルチキャストグループからの離脱
IGMPv1ではグループからの離脱を特に宣言することはありません.ルーターは前述のメンバシップクエリーを送出し,3回以内に返事が返ってこなければメンバが離脱したとみなします.グループからメンバが離脱すると,ルーターはIGMPエントリを削除します.
IGMPv2
フォーマット
Field | bits | description |
---|---|---|
Type | 8 | メンバシップクエリー(0x11), v1メンバシップレポート(0x12), v2メンバシップレポート(0x16), リーブグループ(0x17) |
最大応答時間 | 8 | クエリ受診後,レポートを返すまでの最大応答時間 |
Check sum | 16 | パケットの完全性を確認するために使用 |
Group address | 32 | ジェネラルクエリーは(0.0.0.0), グループスペシフィッククエリではv1/v2レポートではマルチキャストアドレス |
IGMPv1との違い
IGMPv2はIGMPv1と互換性を保っており,さらに以下の4つの機能が追加されました.
- クエリインターバルの最大応答時間
- クエリア選択の概念
- リーブグループメッセージの定義
- グループスペシフィッククエリの定義
マルチキャストグループへの参加
Receiverはマルチキャストグループへの参加時,IGMPメンバシップレポート(Type:0x12/0x16)を発信して参加を表明します.この基本的な動作はIGMPv1と変わりありません.
マルチキャストグループの維持
ルーターは定期的に(60秒ごと)IGMPメンバシップクエリー(ジェネラルクエリー)を送出する.メンバシップクエリーを受信したReceiverはIGMPメンバシップレポートで応答します.IGMPv1と同様で,グループのうち一つのホストが答えればいいです.
IGMPv1との違いは,IGMPメンバシップクエリーを受信してから10秒以内に返答しなければならないです.このクエリの最大応答時間を設定することも可能です.
また,もう一つの違いはクエリアの選択概念があることです.同一サブネット上で一番IPアドレスを持つルーターがIGMPクエリアとなります.クエリアルーターは自分より小さいIPアドレスからのクエリを受信した時はクエリアとしての動作を停止します.
マルチキャストグループからの離脱
IGMPv2ではグループから離脱する際にReceiverがルータに離脱することを通知します(IGMPリーブグループメッセージ).離脱したいReceiverは全てのマルチキャストルーター(224.0.0.2)宛にIGMPリーブグループメッセージを送ります.これによって離脱遅延は短くなり,無意味なマルチキャストパケットの転送時間が短くなります.
さらにIGMPv1との違いはグループスペシフィッククエリーの定義が追加されたことです.これによって全てのマルチキャストグループではなく,特定のマルチキャストグループにメンバシップクエリーを送信できるようになりました.IGMPリーブグループメッセージを受信したあと,そのグループの他のReceiverが存在するか確認するためにグループスペシフィッククエリーを用います.グループスペシフィッククエリーの再送回数は最大2回までと定義されています.最大応答時間内にReceiverからの応答がなければ,ルーターはIGMPテーブルのエントリを削除します.
IGMPv3
フォーマット
IGMPv3ではこれまでのIGMPとは違って,メンバシップクエリーとメンバシップレポートでフォーマットが異なります.
IGMPメンバシップクエリー
Field | bits | description |
---|---|---|
Type | 8 | メンバシップクエリー(0x11) |
最大応答時間 | 8 | クエリー受信時にレポートを返すまでの最大応答時間(100=10s) |
Check sum | 16 | パケットの完全性を確認するために使用. |
Group address | 32 | ジェネラルクエリーは(0.0.0.0).グループスペシフィッククエリーとグループソーススペシフィッククエリーはマルチキャストアドレス. |
Resv | 4 | 送信時に0がセットされ,受信時は無視される. |
S | 1 | クエリーメッセージの受信時に通常のタイマー更新を実行しない(0). |
QRV | 3 | Querier Robustness Value.タイマーと再試行の回数に影響を及ぼす. |
QQIC | 4 | Qurier’s Query Interval Code.クエリアが使用するクエリインターバルを指定する. |
送信元の数 | 16 | クエリー内の送信元IPアドレスの数. |
送信元アドレス | 32 | 送信元IPアドレス. |
IGMPメンバシップレポート
Field | bits | description |
---|---|---|
Type | 8 | メンバシップクエリー(0x22) |
Resv | 8 | 送信時に0がセットされ,受信時は無視される. |
Check sum | 16 | パケットの完全性を確認するために使用. |
Resv | 16 | 送信時に0がセットされ,受信時は無視される. |
グループレコードの数 | 16 | クエリー内のグループレコードの数. |
グループレコード | – | マルチキャストグループの送信元のメンバーシップに関する情報. |
Field | bits | description |
---|---|---|
レコードタイプ | 8 | メンバーシップレポート(0x22) |
補助データ長 | 8 | 送信時に0にセットされ,受信時は無視される. |
送信元の数 | 16 | グループレコードに含まれる送信元の数. |
マルチキャストアドレス | 32 | グループレコードに関するマルチキャストアドレス. |
送信元IPアドレス | – | 送信元のIPアドレス. |
補助データ | – | グループレコードに関連する追加のデータ. |
マルチキャストグループへの参加
IGMPv3ではJoinメッセージを送信するときにマルチキャストグループだけでなく,送信元アドレスも指定することができます.これによって,不正なSenderからの通信を防ぐことができます.
ソースフィルタ
IGMPv3では送信元IPアドレスを指定した受信フィルタの設定が可能となっています.ソースフィルタには以下の2つの種類があります.
Filter mode | description |
---|---|
INCLUDEモード | 指定した送信元IPアドレスから送信されるマルチキャストパケットのみを受信. |
EXCLUDEモード | 指定した送信元IPアドレス以外から送信されるマルチキャストパケットのみを受信. |
IGMP-Snooping
IGMPスヌーピングは,IGMP Joinメッセージを盗み見ることによって各ポートの先にマルチキャストグループに所属するReceiverがいるかを識別する機能です.この機能により,無駄なマルチキャストトラフィックの発生を防ぐことができます.
フラッディングするL2スイッチ

L2スイッチはデフォルトでマルチキャストフレームをフラッディング動作をします.この場合,宛先マルチキャストグループに属するReceiverがいないポートにもマルチキャストフレームが転送されてしまい,無駄なトラフィックが発生してしまいます.
IGMPスヌーピングによる制御

IGMPスヌーピング機能を利用すると,ReceiverからのIGMP Joinメッセージの中身をみてReceiverの所属するマルチキャストグループアドレス(01-00-5Eで始まる)をMACアドレステーブルに追加します.該当するマルチキャストフレームが到着した場合は,Receiverが存在するポートにのみマルチキャストフレームを転送します.
コメント