日立製作所
マルチキャストにおいては、ルータは2種類のプロトコル、すなわち「ルータ−ホスト間プロトコル」と、「ルータ−ルータ間プロトコル」を用いて経路表を構築する。PART2では、この2つのプロトコルを詳細に説明する。
ルータ−ホスト間プロトコル
ルータ−ホスト間プロトコルは、先に述べたように、ルータがマルチキャストグループに参加している端末の存在を調査するためのプロトコルである。IPv6で用いられるルータ−ホスト間プロトコルは、Multicast Listener Discovery Protocol(MLD)である。
MLDv1
MLDには、SSM(Source-Specific-Multicast)未対応の「MLDv1」とSSM対応済みの「MLDv2」とがあるが、ここでは「MLDv1」について解説する。
MLDv1プロトコルには、表1に示すように、3種類のメッセージが定義されている。
[0]表1 MLDv1プロトコルのメッセージ
いずれのメッセージも、ICMPv6ヘッダの後ろに、問い合わせ対象のマルチキャストグループアドレスを付加した形になっている。
端末があるインターフェイスにおいてマルチキャストグループG1への参加を開始すると、端末はそのインターフェイスへG1についてのMLDv1 Reportメッセージを送信する。MLDv1 Reportメッセージには、Router-Alertオプションが付加されているため、ルータはその宛先(実際にはG1宛)にかかわらず、MLDv1 Reportメッセージを受信することが可能である。端末から送信されたMLDv1 Reportメッセージは、そのリンク上に存在するルータにおいて処理される。Reportメッセージを受信するとルータは、そこに含まれているマルチキャストアドレスG1へのグループ参加要求があったことを、ルータ−ルータ間プロトコルへ通知する。
ルータは、端末側でのマルチキャストグループ参加状況を調査するために、MLDv1 QueryメッセージをFF02::1(全ノード・リンクローカル・マルチキャストアドレス)宛に送信する(General Query)。General Queryを受信した端末は、自分がそのインターフェイスで受信しているすべてのマルチキャストアドレスを、MLDv1 Reportによって広告する。このような問い合わせを定期的に行なうことにより、ルータは端末側でのマルチキャストグループ参加状況を、リアルタイムにモニタリングすることができる。General Queryに対して一定時間応答がない場合には、ルータはそのインターフェイスにおけるマルチキャストグループ参加がなくなったものとみなし、その旨をルータ−ルータ間プロトコルへ通知する。なお、同じセグメントに複数ルータが存在する場合には、そのセグメントにおいて最小のリンクローカルアドレスを有するルータが、MLDv1 Queryの送信を行なう(Querier)。
端末がマルチキャストグループG1への参加を終了するときには、参加開始時と同様に、G1についてのMLDv1 Doneメッセージを送信する。ルータがMLDv1 Doneメッセージを受信すると、G1宛のMLDv1 Queryメッセージ(Group-Specific Query)を、MLDv1 Doneメッセージを受信したインターフェイスへ送信する。そのインターフェイスにおいて、G1に参加している端末が他に存在する場合には、Group-Specific Queryに対するMLDv1 Report応答がある。一定時間Group-Specific Queryに対するMLDv1 Report応答がない場合には、ルータはそのインターフェイスでのG1への参加者がいなくなったと判断する。そして、その旨をルータ−ルータ間プロトコルへ通知する(図8)。

図8 MLDv1 プロトコルハンドシェーク
MLD Snooping
通常、イーサネット上ではマルチキャストフレームは、そのイーサネット上に存在するすべての端末へ送信される。そのため、マルチキャストパケットを受信しない端末へも、無関係なマルチキャストフレームが流れてしまう。特に、非力な端末や無線LANのような低速なイーサネットにとって、こうした無関係なマルチキャストフレームは、大きな負荷となるため、望ましくないものである。
MLD Snoopingは、この問題を解決するために用いられる技術である。具体的には、スイッチにマルチキャストフレームが届いたとき、そのフレームを、受信を要するポートにのみ送信する。ここでは、MLDv1を用いたMLD Snoopingについて解説するが、後で紹介するMLDv2を用いた場合も、同様に実現される。
MLD Snoopingは、端末がルータへ向けて発行したMLD Reportを、中間にあるスイッチにおいて観測することにより実現される。図9の例で説明すると、ルータが発行するMLD Queryに対してPC1がG1へのMLD Reportを応答すると、MLD Snooping Switchは、MLD Reportをルータがつながっているポートへ流すと同時に、Port1に中継してよいマルチキャストアドレスは、G1のみであると記憶する。PC1がG1への参加を中止すると、MLD Snooping Switchは、G1宛のパケットをPort1へ中継するのを中止する。
[0]図9 MLD Snooping
ルータ−ルータ間プロトコル
ルータ−ルータ間プロトコルは、ルータがマルチキャスト経路表を構築するために用いられる。IPv6で用いられる代表的なルータ−ルータ間プロトコルは、Protocol Independent Multicast(PIM)である。PIMには、Sparse-Mode(疎なモード)と、Dense-Mode(密なモード)との2種類が存在するが、ここでは一般によく用いられる、Sparse-Mode(PIM-SM)について解説する。
PIM-SMにおけるマルチキャスト経路表構築
PIM-DMが、受信したマルチキャストパケットをとりあえず全インターフェイスに中継してから、中継不要なインターフェイスへの中継を無効にしていくのに対して、PIM-SMは、隣接したPIM-SM対応ルータの間でマルチキャスト経路情報を交換しあうことにより、マルチキャスト経路表を構築する。
PIM-SMは、PIM Helloパケットの交換により隣接するルータと隣接関係を確立した後、マルチキャストパケットの流量によりRP Tree、Register-Stop、Shortest-Path Treeの3種類のマルチキャスト経路表を構築する。
RP Tree
マルチキャストパケットが、いったんあるPIM-SMルータ(Rendezvous Point(RP))へユニキャストで中継され、その後RPから実際の受信者へ中継されるパターンである。
図10に示すように、PC2やPC3がマルチキャストグループG1へのMLDv1 Reportを送信すると、PC2やPC3を収容するルータであるRouter5は、G1のRP(=Router3)の方向にあるPIM-SMルータ(=Router4)へグループ参加要求(PIM Join)を送信する。同時に、Router4方向から来た任意の送信元発G1宛のパケットをPC2、PC3のインターフェイスへ中継するマルチキャスト経路表エントリを生成する。
[0]図10 RP Tree
Router4も同様にして、Router3へPIM Joinを送信し、Router3方向から来た任意の送信元発G1宛のパケットをPC1、Router5のインターフェイスへ中継するマルチキャスト経路表エントリを生成する。
Router3がRouter4からPIM Joinを受信すると、RPへ届いた任意の送信元発G1宛のパケットをRouter4方向へ中継するマルチキャスト経路表エントリを生成する。自分自身がRPなので、PIM JoinはRouter3より先のルータへは送信されない。
PC1がG1へパケットを送信すると、PC1を収容するルータRouter1は、そのマルチキャストパケットをRPであるRouter3へ中継する。しかしながら、Router5からのPIM JoinはRouter1へは届かないため、この時点では通常通りにマルチキャストパケット中継を行なうことができない。
そこで、Router1はマルチキャストパケットをPIM Registerパケットへカプセル化して、直接Router3へユニキャストで送信する。そしてRouter3は受信したPIM Registerパケットをほどき、中に含まれているマルチキャストパケットを、上で構築したマルチキャスト経路表に従い、Router4、Router5へ中継する。
Register-Stop
RP-Treeと似ているが、RPまでのデータ送信もカプセル化なしにマルチキャストで送信するパターンである。
PC1からG1へのパケット量が増え、RPルータであるRouter3へのPIM Registerパケット量が増えると、図11に示すようにRouter3は PC1ルータ方向の上流PIM-SMルータ(=Router2)へグループG1へのPIM Joinを送る。それと同時に、Router2から来たPC1発G1宛のパケットをRouter4方向へ送信するマルチキャスト経路表エントリを生成するRouter1やRouter2も同様にして、G1へのPIM Join送信とPC1発G1宛のマルチキャスト経路エントリ生成を行なう。すでに一度PC1からのマルチキャストパケットを中継しているため、RPはPC1がマルチキャストパケットの送信元であることを知っている。そのためRouter1やRouter2で構築されるマルチキャスト経路表には、PC1の送信元IPアドレスも指定される。
[0]図11 Register-Stop状態
この繰り返しにより、Router1からRouter3経由で受信者に至るマルチキャスト中継パスが確立される。このパスに従ってマルチキャストパケットが中継された瞬間、RPルータであるRouter3は、Router1へ対してPIM-Registerパケットによるトンネル化中止要求を、PIM Register-Stopメッセージにより送信する。
以上により、PC1からのマルチキャストパケットは、カプセル化されずに、Router3経由で中継されるようになる。
Shortest-Path Tree
送信者から受信者へ最短パスで、マルチキャスト送信するパターンである。
さらにPC1から送信されるマルチキャストパケット量が増え、Router3経由でのマルチキャストパケット受信量が増えると、図12に示すように、端末を収容するルータであるRouter5は、G1へのPIM JoinをPC1方向の上流PIM-SMルータ(Router1)へ送信する。Router1は、このPIM Joinを受信すると、PC1発G1宛のマルチキャストパケットをRouter2とRouter5の2方向へ送信するようになる。Router5がRouter1から直接マルチキャスト中継を行なっている状態で、RPルータ方向(Router4)からG1へのマルチキャストパケットを受信すると、Router5は、RPルータ方向へG1からの離脱要求(PIM Prune)を送信する。
このような送信元方向へのJoinとRP方向へのPruneにより、最短パスでマルチキャスト中継を行なうマルチキャスト経路表が構築される。
[0]図12 Shortest-Path Tree
PIM-SMプロトコル
これまでの説明においては、すべてのPIM-SMルータが
- RPや送信元方向の上流PIM-SMルータを算出できること(Reverse Path Forwarding=RPF)
- マルチキャストアドレスに対応するRPのアドレスを知っていること
RPF
通常、ユニキャスト経路表参照により実現される。すなわち、RPや送信元のIPv6アドレスに到達するためのNext-Hopアドレスをユニキャスト経路表から算出し、そのNext-Hopアドレスが上流PIM‐SMルータのアドレスであると見なす。
しかしながら、ネットワーク内のすべてのルータがPIM-SM対応していない場合は、ユニキャスト経路表を参照して見つけられるルータがPIM‐SMルータではない可能性がある。こうした問題を避けるために、ユニキャスト経路表以外に、RPF専用の経路表を参照してRPFを実現する実装も存在する。スタティックルーティングで静的に設定することが多いが、MBGPなどのRPF専用の経路制御プロトコルを用いて動的に設定することも可能である。
ユニキャスト経路変動やRPF経路表の設定変更などの理由により、RPFの結果が変動した場合には、PIM-SMルータは、新たにRPF算出された方向へPIM Joinを送信し直す。このようにパケット流量のみならず、ユニキャスト経路変動によってもプロトコル挙動が変化するために、PIM-SMの挙動は複雑となっている。
グループアドレスとRPルータのアドレスとの対応付け
すべてのルータに静的にグループアドレスとRPルータの対応付け設定を行なう(Static-RP)、もしくはすべてのルータでBootStrap Router(BSR)メカニズムを有効にして動的に対応付けを設定することにより実現される。以下、BSRメカニズムの動作原理について説明する。
BSRを用いるPIM-SMを動かすネットワークでは、ネットワーク内のPIM-SMルータのうち最低1台がBSRルータとして定義される。BSRルータは、隣接関係を確立したすべてのPIM-SMルータに対して、BSR情報(BSRルータのアドレス、RPルータのアドレスとグループアドレスの対応)を配布する(BSRメッセージ)。BSR情報を受信したPIM-SMルータは、その情報をすべての隣接ルータへ広告することを繰り返すことにより、すべてのPIM-SMルータにBSR情報が配布される。
RPルータは、このような要領によってBSR情報を受信すると、BSR情報に含まれるBSRルータのアドレスに対して、自らのRP情報(RPルータのアドレスとグループアドレスとの対応)をユニキャストで送信する(Cand-RPメッセージ)。これにより、BSRルータの所有するBSR情報が更新される。更新されたBSR情報をBSRルータが上記の要領で広告することにより、RPルータの情報がすべてのPIM-SMルータに伝わる。
MLD Proxy
MLD Proxyは、MLDメッセージのみに基づいたマルチキャスト中継方法である。PIM-SMとは異なり、上流・下流が一意に特定できる単純なトポロジーでしか動作しないものの、PIM-SMに比べるとプロトコルが単純である。そのため、特にSOHOルータに適したマルチキャスト中継方法であるといえる。ここではMLDv1を用いた例のみを説明するが、MLDv2でも同様に実現される。
MLD Proxyルータは、上流インターフェイスと下流インターフェイスとを有する。前者はマルチキャストパケットを受信するインターフェイスで、後者は端末を収容し端末からのMLD ReportやMLD Doneを受信するインターフェイスである。MLD Proxyのインターフェイスは、上流インターフェイスと下流インターフェイスとを同時に兼ねることはできない。
MLD Proxyルータは、上流インターフェイスではMLD Report/Doneを送信する端末として動作し、下流インターフェイスではMLD Queryを送信してMLD Report/Doneを受信するルータとして動作する。図13の例で説明すると、port1からG1,G3宛のMLD Reportを受信し、port2からG1,G2宛のMLD Reportを受信すると、MLD proxyルータはport0へG1,G2,G3宛のMLD Reportを送信する。同時にマルチキャスト経路エントリを生成し、上流からG1,G2,G3宛のマルチキャストパケットが届いたら該当するグループに関するMLD Reportを受信したポートへ中継するようにする。

図13 MLD Proxy
なお、MLD proxyルータが下流インターフェイスからマルチキャストパケットを受信した場合、そのパケットの中継先は、該当するグループへのMLD Reportを受信した下流インターフェイスと、上流インターフェイスである。
【参考文献】
●ルータ−ホスト間プロトコル:
[1]RFC2710 Multicast Listener Discovery(MLD)for IPv6
[2]RFC3590 Source Address Selection for the Multicast Listener Discovery(MLD)Protocol
[3]draft-ietf-magma-snoop-11.txt Considerations for IGMP and MLD Snooping Switches
●ルータ−ルータ間プロトコル:
[1]draft-ietf-pim-sm-v2-new-10.txt Protocol Independent Multicast - Sparse Mode(PIM-SM): Protocol Specification(Revised)
[2]draft-ietf-pim-sm-bsr-04.txt Bootstrap Router(BSR)Mechanism for PIM Sparse Mode
[3]draft-ietf-magma-igmp-proxy-06.txt IGMP/MLD-based Multicast Forwarding(IGMP/MLD Proxying)
この記事のトラックバックURL
http://www.ipv6style.jp/trackback/254