30 Minutes NetWorking
No.SW23

30Minutes NetWorking

BCMSN

第23回マルチキャスト(3) IGMPv2

■ IGMPv2への拡張

スーパーインター博士

前回はIGMPv1だったわけだが。

ハイパーネット助手

いんたーねっとぐるーぷまねじめんとぷろとこる、ネットワーク間グループ管理プロトコルですね。

スーパーインター博士

うむ。複数サブネットにわかれたマルチキャストグループを各サブネット単位で管理するためのプロトコル、そのバージョン1だったわけだ。

ハイパーネット助手

今回は、バージョン2?

スーパーインター博士

そうだ。IGMPv1で見つかったいくつかのポイントを修正するために作られたのが、IGMPv2なわけだな。
変更点はいくつかあるが、特にIGMPv1の2つの問題点を修正している。

ハイパーネット助手

2つ? なんか問題点ありましたっけ?

スーパーインター博士

前回、最後で参加遅延の話をしたな。

ハイパーネット助手

参加遅延? クエリとクエリの間に参加しちゃうと、次のクエリまで参加をクエリアに教える方法がないって奴ですか? なのでクエリがなくてもレポートを送るって事ですよね。

スーパーインター博士

そう、それだ。確かにIGMPv1でも参加遅延を解消する手段はとられている。
だが、離脱遅延への対処がない。

[FigureSW23-01:離脱遅延]

ハイパーネット助手

ありゃ〜、参加遅延のちょうど反対が起きるんですね。

スーパーインター博士

そういう事だ。
何故こんなことが起きる?

ハイパーネット助手

え〜、え〜っと。IGMPv1では離脱を能動的に行わないから、じゃないでしょうか。

スーパーインター博士

…。

ハイパーネット助手

あれ? 違いました?

スーパーインター博士

…あってる。奇跡ってのは起きるもんだな

ハイパーネット助手

博士、奇跡ってのは起きるものじゃくて、起こすものですよ。
いや〜、僕かっこいいっ!!

スーパーインター博士

…。
そして、もう1つはIGMPv1ではこういう事が起こりえる。

ハイパーネット助手

あ、あぅ〜。僕のカッコイイ科白スルーですか?

[FigureSW23-02:複数のクエリア]

ハイパーネット助手

ありゃりゃ。こりゃまた随分…。

スーパーインター博士

無駄じゃないか?、だろ?

ハイパーネット助手

です。
って、もともとそれは博士の科白ですよ。

スーパーインター博士

まぁ、実際は、マルチキャストルーティングプロトコルの方で最適パスの選択が行われるから、これが起き得ない場合もある。
だが、仕様上起きてもおかしくはない。原因は何かね? ネット君。

ハイパーネット助手

え、え〜〜〜〜。
……なんだろう?

スーパーインター博士

うむ。奇跡は起こすものではないと証明されたわけだが。
クエリア同士が互いを知ろうとしないことが原因なわけだ。

ハイパーネット助手

そう、ですね。確かに他にクエリアがいることを知ってるならば、どちらかが役目を果たせばいいわけですから。

スーパーインター博士

そういうことだ。

ハイパーネット助手

じゃ、これらのことがIGMPv2では対処されているんですね?

■ IGMPv2

スーパーインター博士

もちろんだ。そうでなければわざわざ説明しない。
まず、パケットフォーマットからしてIGMPv1とv2は異なる。

フィールド名ビット数説明
Type8メッセージタイプ(後述)
MaxResp.Time8最大応答時間。クエリの時のデフォルトは100(0.1秒なので10秒)
それ以外では0
CheckSum16チェックサム
GroupAddress32グループアドレス(後述)

[TableSW23-01:IGMPv2メッセージフォーマット]

ハイパーネット助手

あれ? IGMPv1って、バージョンがなかったでしたっけ? IGMPv2にはバージョンがない?
なんか変じゃないですか?

スーパーインター博士

IGMPv1は確かに先頭4ビットはバージョン、次の4ビットがタイプだった。
だが、IGMPv2はIGMPv1とフォーマットは異なるが、下位互換だ。

ハイパーネット助手

じゃ、ますますおかしくないですか? こういうのって、先頭にあるバージョンを見て判断するってのがパターンでしょ?

スーパーインター博士

問題ない。IGMPv2のタイプは以下の4種類だ。

  • 0x11 メンバーシップクエリ … IGMPv1のクエリと同じ役割の一般クエリとメンバーシップスペシフィッククエリ
  • 0x12 v1メンバーシップリポート … 下位互換用リポート。v1対応ホスト用
  • 0x16 v2メンバーシップリポート … v2用リポート
  • 0x17 リーブレポート … 離脱レポート
スーパーインター博士

このように、タイプの値は必ず0x1から始まる。なのでIGMPv1しか理解できないホストがいても問題ない
ともかく、下位互換用v1メンバーシップリポートを含めて4種類だ。

ハイパーネット助手

…メンバーシップクエリが2つにわかれるんですか? 一般と、すぺしふぃっく?

スーパーインター博士

うむ、スペシフィック[specific]、意味は「特定の」「限定の」だな。役割的には一般クエリに対して、「限定」クエリとでも訳すのがいいだろう。

ハイパーネット助手

は〜、限定くえり。なにが限定なんですか?

スーパーインター博士

ま、それは後述するとして、IGMPv1と同様IGMPv2でも「参加」「問い合わせ」「維持」「離脱」の4つがある。
まず、「参加」と「維持」は基本的にIGMPv1と変わらない。

ハイパーネット助手

なんだ、そうなんですか?

スーパーインター博士

うむ。違いがあるとすれば、クエリに使うMaxResp.Timeだな。
MaxResp.Time時間以内にレポートを返さなければならない、という制限がついている。

ハイパーネット助手

へ〜。
動作の点でIGMPv1とv2の明確な違いってないんですか?

■ IGMPv2による拡張

スーパーインター博士

もちろんある。さっきのIGMPv1での問題点の解決の話だな。
まず、離脱遅延。これはリーブレポートにより、解消される。

ハイパーネット助手

離脱レポート? つまり、離脱することを通知するんですね?

スーパーインター博士

そうだ。参加遅延のように、離脱したいホストはすぐにリーブレポートを出して離脱を通知する。

ハイパーネット助手

確かに、そうすれば離脱遅延は解消されますね。

スーパーインター博士

ただし、リーブレポートを受け取ったクエリアは、参加しているホストが残っているか確認しないといけない。ホストが残っているのにグループがないと判断してしまうと困るからな。

[FigureSW23-03:グループの確認]

スーパーインター博士

覚えておくのは、スペシフィックリポートと一般レポートの違いだ。
スペシフィックは特定のグループのみ一般は全グループを対象とする。

ハイパーネット助手

んん? なんで一般じゃいけないんです?

スーパーインター博士

この離脱の確認の場合は、リーブメッセージが来たグループだけを確認したいわけだろう?
わざわざ全グループに聞く必要はないじゃないか?

ハイパーネット助手

一般クエリで全グループに聞くと、全グループからレポートが返ってくる…。

スーパーインター博士

帯域と処理の無駄って奴だな、それは。

ハイパーネット助手

なるほど。

スーパーインター博士

さてもう1つ、複数のクエリアが存在する場合の解決法だが。
他のクエリアからのクエリを受け取ったクエリアは、その他のクエリアのIPアドレスを確認し

ハイパーネット助手

確認し?

スーパーインター博士

もし、自分のIPアドレスよりも低いIPアドレスだった場合、クエリアとして動作しない

ハイパーネット助手

へ〜、なんかOSPFのDRやSTPのルートブリッジの選出みたいなことするんですね。

■ CGMP

スーパーインター博士

さて、マルチキャストトラフィックをやりとりするのはホストとルータだが、その間には普通はスイッチ(L2)が入るな。

ハイパーネット助手

それはそうでしょうね。ルータとホスト直結なんて普通やらないですし。

スーパーインター博士

さて、スイッチはマルチキャストをどう処理するんだね?

ハイパーネット助手

え、え〜っと。マルチとブロードはフラッディングですよね?

スーパーインター博士

そうだ。だが、ブロードキャストはともかく、マルチキャストは宛先が特定できないこともないんだから、制御したいとは思わないかね?

ハイパーネット助手

まぁ、そう言われればしたいかな。

スーパーインター博士

うむ、どうするかといえば、CAMにマルチキャストのMACアドレスを載せてしまえばいいわけだ。

ハイパーネット助手

CAMって、MACアドレステーブルですよね。
これにマルチキャストMACアドレスが載ると、そのポートにマルチキャストが転送されるようになる…。

スーパーインター博士

そういうことだな。さて、その方法だが、まずCGMPというものがある。
これはCiscoの独自規格だな。

ハイパーネット助手

きましたね、独自規格。
しすこぐるーぷまねじめんとぷろとこる、ですか。

スーパーインター博士

これは、ルータがIGMPで得た情報をスイッチへ送るためのプロトコルだ。ルータがCGMPサーバ、スイッチがCGMPクライアントとして動作する。まず、参加はこう。

[FigureSW23-04:CGMP Join]

ハイパーネット助手

へ〜、つまりCAMに追加するよう要求を送る、って感じですね。

スーパーインター博士

ま、そうだな。
なお、CAMテーブルのマルチキャストエントリはリフレッシュされない。

ハイパーネット助手

なんでです?

スーパーインター博士

消えると困るだろう? IGMPレポートは参加する時は全ホストが必ず出すが、それ以外はクエリに対して1台しか応答しないんだぞ? 参加後、マルチキャストのやりとりがしばらくなかったら消えて戻らなくなってしまう。

ハイパーネット助手

ん〜〜〜、あ、そうか。
CAMにエントリされるにはIGMPレポートが必要だけど、参加後は出さないホストもいるかもしれないからですね。

スーパーインター博士

そういうことだ。
次は、離脱時だな。ちょっとややこしい。

[FigureSW23-05:CGMP Leave]

ハイパーネット助手

IGMPv2に対応して、CGMPv2なんてのがあるんですね。

スーパーインター博士

そうだな、離脱動作が大きく違うからな。

ハイパーネット助手

で、スイッチがIGMPを使う形になるんですね。IGMPリーブを受け取ったり、IGMPスペシフィッククエリを送信したり。

スーパーインター博士

そうなる。ちなみにIGMPv2に対応したこの機能をCGMP Fast-Leaveと呼ぶ。

ハイパーネット助手

ふぁすとりーぶ。
早く離脱できるからですね。

■ IGMPスヌーピング

スーパーインター博士

もう1つ、スイッチにマルチキャストトラフィックを制御させる方法として、IGMPスヌーピングがある。

ハイパーネット助手

すぬーぴんぐ?

スーパーインター博士

「snoop」+「ing」だな。「かぎまわる」とか「盗み見する」とかいう意味だ。

ハイパーネット助手

IGMPをかぎまわる?

スーパーインター博士

スイッチが「IGMPを盗み見する」だ。

ハイパーネット助手

IGMPを盗み見てどうしようというんです?

スーパーインター博士

先ほどのCGMP Fast-Leaveに近い。IGMPのレポートやリーブを見て、CAMを変更するのだ。

[FigureSW23-06:IGMPスヌーピング・参加]

ハイパーネット助手

へ〜、随分CGMPよりスマートですね。

スーパーインター博士

確かに。CGMPはいったんルータにIGMPレポートが送られて、そこからCGMPジョインによって追加、だからな。こっちは直接IGMPレポートを読み取りするから手早く感じるだろう。

ハイパーネット助手

ですよね。
で、参加はわかりましたけど、離脱は?

スーパーインター博士

あぁ。離脱はCGMP Fast-Leaveと同じだ。

ハイパーネット助手

ということは、リーブメッセージを受け取ったらCAMから削除。
最後のホストの時にだけ、ルータへ通知?

スーパーインター博士

そうなる。ただし、IGMPスヌーピングはIGMPを直接見る処理をスイッチで行うためスイッチの負荷が高い
スヌーピングの処理がちゃんとできるスイッチでないとあまりするべきではない、ということになる。

ハイパーネット助手

結構IGMPって頻繁にやりとりしそうですしねぇ。

スーパーインター博士

さて、今回でIGMPの話は終わりだ。
次回もマルチキャストの話だな。

ハイパーネット助手

まだあるんですか?

スーパーインター博士

前回でただろう? マルチキャストを転送するには?

ハイパーネット助手

「マルチキャストグループがあるかどうか」と「マルチキャストグループがあるルータへのパス」が必要…。

スーパーインター博士

その「マルチキャストグループがあるルータへのパス」を説明する。

ハイパーネット助手

まるちきゃすとるーてぃんぐぷろとこる?

スーパーインター博士

そういうことだ。ではまた次回。

ハイパーネット助手

了解です。
30分間ネットワーキングでした〜♪

問題ない
IGMPv2のクエリは0x11、ビットで00010001。IGMPv1しか理解できないホストの場合、先頭4ビットがバージョン、次の4ビットがタイプとして認識するので、バージョン1、タイプ1でIGMPv1クエリとして認識できる。
フラッディング
[Flooding]
受け取ったフレームをすべてのポートから送信すること。
フレームが氾濫[Flood]することから。
CGMP
[Cisco Group Management Protocol]
IGMPスヌーピング
[IGMP Snooping]
[Snoop]は「盗み見する」「スパイ活動をする」。
ハイパーネット助手ハイパーネット君の今日のポイント
  • IGMPv1で非対応の離脱遅延と複数のクエリアに対応するのがIGMPv2。
    • リーブレポートにより離脱遅延を防ぐ。
    • クエリアの中で最も小さいIPアドレスのクエリアだけがマルチキャストを有効にする。
  • スイッチでマルチキャストを制御することもできる。
    • ルータとスイッチ間でマルチキャスト情報をやりとりするCGMP。
    • IGMPをスイッチで確認するIGMPスヌーピング。

30 Minutes NetWorking No.SW23

管理人:aji-ssz(at)selene.is.dream.jp