■ マルチキャストの転送
さてさて、前回からIPマルチキャストの話をしているな。
任意の複数宛のデータ転送ですね。
うむ。前回はクラスDのマルチキャストアドレスと、マルチキャストMACアドレスの生成の話をしたわけだ。
0100.5eなんとか、でしたね。
うむうむ。
さて、実際にマルチキャストを送るとなると、どうなるかという話をまずしたい。
実際に送るって、こうバーっとマルチキャスト宛にバババッーっと送るんじゃないんですか?
素晴らしい。なんとも直感的に理解できる説明だ。
でしょ?
まぁ、日本語が不自由なネット君は置いておくとして、ちゃんと説明しよう。
同一サブネット内ならば、確かにネット君が言うとおり、マルチキャスト宛のパケットを流してしまえば事は済む。
[FigureSW22-01:同一サブネット内のマルチキャスト]
もともとイーサネットはブロードキャスト型ですしね。あとは受け取った側が処理するかしないか決めるだけじゃないですか。
ほらほら〜、バーっとバババッーっと送るんじゃないですか。
擬音で物事を説明するな。
あぅ。
問題はルータが間に入った場合、別のサブネットに送信する場合だ。
[FigureSW22-02:複数サブネットでのマルチキャスト]
マルチキャストグループがあるルータへのパスと、マルチキャストグループがあるかどうかを知らなきゃいけない?
そうだ。でなければ結局ブロードキャストと同じになってしまうからな。
そうですねぇ、ブロードキャストの負荷を減らすのがマルチキャストですのにねぇ。
うむ。で、ムービーでは説明が逆になってしまったが、まず、各ルータは自分が接続しているサブネットにマルチキャストグループが存在しているかを確認する。
そのルータがマルチキャストを必要としているか、ですね。
そうだ。この時使うプロトコルが、今回説明するIGMPだ。
あいじーえむぴー。いんたーねっとぐるーぷまねじめんとぷろとこる?
ネットワーク間グループ管理プロトコル、かな?
うむ、その訳は正しいと思われる。
もう1つ、ルータはマルチキャストグループへのパスを作成しなければならない。ネット君、ルータがパスを作成するには?
パスを作る? え? ルーティングプロトコル?
よしよし。マルチキャストルーティングプロトコルが必要、ということだな。
これについては先の回で説明する。
IGMPとマルチキャストルーティングプロトコルがマルチキャストには必要ってことですね。
■ IGMP
さて、今回の話のメインはここから。IGMPだ。
いんたーねっとぐるーぷまねじめんとぷろとこる。ネットワーク間グループ管理プロトコルですよね。
うむ。IGMPには最初に作られたIGMP、つまりIGMPバージョン1と、後になって拡張されたIGMPバージョン2がある。 ▼ link
v1とv2ッスね。RIPみたいですね。
IGMPは先ほど説明したように、ルータが接続されているサブネットにマルチキャストグループが存在するかどうか確かめるプロトコルだ。これを逆の立場から言うと?
逆の立場? ルータの逆?
ホストが自身が所属しているマルチキャストグループをルータに通知するプロトコルでもある、ということだ。
あ〜、そういう意味で逆ね。はいはいはい。
何が言いたいか、というと。ホスト側もIGMPに対応してなければダメだ、ということだな。
なるほどです。
さて、IGMPで使う用語を説明しよう。ホストに対しマルチキャストグループに参加しているかどうかを確認するデバイスのことをクエリアと呼ぶ。
くえりあ? 「クエリ + er」ですね。
「問い合わせる者」かな?
そうだな。つまりはルータのことだ。
そして、使われるIGMPで使われるメッセージは、IPを直接利用する、IGMPメッセージってやつだな。これには2種類ある。
- クエリメッセージ … クエリアから送信される、ホストがどのマルチキャストグループに所属するかの問い合わせ
- レポートメッセージ … ホストからクエリアに送信される、クエリメッセージの応答
くえりと、れぽーとですね。
そうだ。では、まずバージョン1から説明していこう。
はいはい。
■ IGMPv1
IGMPは先ほども言ったように、IPを直接使用する。
IGMPv1メッセージのフォーマットは以下の通り。
フィールド名 | ビット数 | 説明 |
---|---|---|
Ver | 4 | IGMPのバージョンを示す |
Type | 4 | 1…クエリメッセージ、2…レポートメッセージ |
Unused | 8 | 未使用(0を入れる) |
CheckSum | 16 | チェックサム |
GroupAddress | 32 | グループアドレス(後述) |
[TableSW22-01:IGMPv1メッセージフォーマット
全体で8バイトのメッセージになる。各クエリアはIGMPv1メッセージをIPのTTLを1で送信する。
TTLを1で? TTLが1ってことは、違うルータに届いた時点で破棄されますよ?
確かに。だから、そのサブネットにしかIGMPメッセージは届かない、ということになるな。
他のサブネットにIGMPメッセージが転送されないからな。
なるほど。そういう使い方でTTLを1にするんだ。
さて、IGMPが何をするかというと。簡単言えばマルチキャストグループを管理するわけだ。
サブネットにマルチキャストグループのメンバがいるか調べたり、だな。
クエリアがクエリメッセージを使って問い合わせる?
まぁ、そうだ。
マルチキャストグループの管理でIGMPが行うことは以下の4つ。
- 参加 … ホストがマルチキャストグループのメンバになることを通知する
- 問い合わせ … クエリアがサブネット内にメンバを探す
- 維持 … 定期的に問い合わせを行う
- (離脱 … メンバがマルチキャストグループから離脱する)
4つ…。なんで最後の離脱はカッコ書きなんですか?
うむ、IGMPv1では能動的に離脱を行わない。
んんん? 能動的に行わない? じゃ受動的ですか?
受動的、というか。
問い合わせに対して応答しないことにより離脱するわけだな。
あ〜、そういう意味で「能動的にしない」ってことですか。
「いますか〜」って返事に黙っていればいないことになりますからね。
■ IGMPv1の動作
さて、実際IGMPv1の動作について説明しよう。
[FigureSW22-03:IGMPv1の動作]
クエリをクエリアが送信し、レポートをホストが送り返す。
それによりルータはマルチキャストグループがあることを知る…。
そういうことだ。
う〜ん。でもなんか変というか。
わざわざカウントなんてして、1台だけが応答するんですね。全部が応答してしまえばいいのに。
マルチキャストグループの1台だけ応答すれば用が足りるだろう?
ルータが知りたいのは「メンバが何台いるか」ではなく「マルチキャストグループがあるかないか」なのだから。
いやまぁ、そうですけど。
この1台だけが応答する仕組みにして、帯域を節約したり、他のホストの処理量を減らしているんだよ。
この仕組みを応答抑制という。
なるほど。
注意するポイントを。
まず、レポートは各マルチキャストグループのうち1台が応答する、サブネットで1台ではない。
[FigureSW22-04:グループごとのレポート]
グループの中で、カウンタがはやく0になったメンバ1台が応答するんですね。
そういうことだ。また、クエリメッセージは60秒に1回がデフォルトだ。
そのため、こういうことをする。
[FigureSW22-05:マルチキャストグループへの参加]
は〜、クエリの合間に来た場合、クエリがなくてもレポート出すんですね。
なんていうのかな、GratuitousARP?
あ〜、シブイところを持ってきたな。確かにGratuitousARPもそうだな。
ともかく、これがIGMPv1の参加、問い合わせ、維持の3つの動作なわけだ。
で、離脱は問い合わせに応答がなくなったら、そのマルチキャストグループは存在しない、って形ですね?
そういうことだ。では、今回はこのぐらいにしておこう。
はいな。
次回はIGMPv2の話をする。
了解です。
30分間ネットワーキングでした〜♪
- IGMP
- [Internet Group Management Protocol]
- マルチキャストルーティングプロトコル
-
[MultiCasting Routing Protocol]
DVMRP、MOSPF、PIMなど。後述。
- IGMPバージョン1
-
IGMPv1と略される。
RFC1112の「Host Extensions for IP Multicasting」で定義。
- IGMPバージョン2
-
IGMPv2と略される。
RFC2236で定義。
- クエリア
- [querier]
- 応答抑制
- [Response Suppression]
- ハイパーネット君の今日のポイント
-
- マルチキャストを実行するには、以下の2つが必要。
- ルータは自分が接続しているサブネットにマルチキャストグループが存在しているかを知る。
- ルータはマルチキャストグループへのパスを作成しなければならない。
- マルチキャストグループの存在を確認するためのプロトコルがIGMP。
- IGMPはIPを直接利用する。
- IGMPはバージョン1と2が存在する。
- IGMPメッセージにはクエリとレポートがある。
- クエリア(ルータ)はクエリメッセージで問い合わせる。
- ホストは自分が所属するグループをレポートで通知する。
- マルチキャストを実行するには、以下の2つが必要。