マルチキャスト

ここでは、通信方法の一つであるマルチキャストについて説明をしたいと思います。 マルチキャストはインターネット初期から存在していました。 例えば、経路制御プロトコルであるOSPFでは経路情報を作成するためにマルチキャストを利用しています。 しかし、経路制御の方法が難しかったり、マルチキャスト対応機器が少なかったため、マルチキャストはあまり一般には普及はしていませんでした。 最近は、経路制御の方法が洗練され、ルータやスイッチの性能も向上したため、徐々にマルチキャストが利用されるようになってきました。

マルチキャスト概要

マルチキャストとは、「誰かがデータを送り、必要な人にだけデータが届けられる」という通信方法です。 マルチキャストの送信者はどこに居ても良いことになっており、受信者は複数存在するという状況が想定されています。 TCPなどによるユニキャストは1対1の通信と呼ばれますが、マルチキャストは多対多の通信と呼ばれます。 マルチキャスト受信者は、「マルチキャストグループ」と呼ばれるグループに「join」することにより、データを受け取れるようになります。 データを受け取る必要がなくなった受信者は、グループから「leave」すればデータは届かなくなります。 マルチキャスト送信者は、送信するマルチキャストグループに参加していなくてもデータの送信が可能です。 マルチキャスト送信者は、宛先を「マルチキャストアドレス」にすることによりマルチキャストグループに対してデータを送信します。

マルチキャストには2つの種類があります。 マルチキャストアドレスはレイヤ2、レイヤ3で異なります。 レイヤ2(リンクレイヤ)でのマルチキャストと、レイヤ3(ネットワークレイヤ)でのマルチキャストです。 ここでは、まず始めにレイヤ2でのマルチキャストを説明し、次にレイヤ3でのマルチキャストを説明します。

1. レイヤ2でのマルチキャスト

レイヤ2でのマルチキャストは、同一セグメント内でのマルチキャストです。 例えば同じHUBやスイッチに接続されていて同じサブネットに存在するPC同士は同一セグメントにいます。 同じHUBやスイッチに接続されていなくても、同じサブネットに存在していれば同一セグメントです。

レイヤ2のマルチキャストアドレスの決定方法は、IPレイヤに関連するので、説明は、IPマルチキャストのアドレスを説明した後に行います。

レイヤ2でのマルチキャストは非常に簡単です。 同一セグメントに接続された各ノードがそれぞれ自分にそれが必要かどうかを考えるだけです。 レイヤ2では、マルチキャストパケットもブロードキャストパケットと同様に全てのノードに送信されます。 (最近では、マルチキャストに関してもスイッチングしてくれるスイッチがあるので、必ずしもこうなるとは限りませんが、価格の低い廉価版のスイッチであればマルチキャストもブロードキャスト同様に全ノードに対して送信されます。) 各機器は、自分が必要なマルチキャストパケットだけを拾い上げ、必要の無いものは手元で破棄します(図1)。

図1. レイヤ2でのマルチキャスト

2. レイヤ3でのマルチキャスト

レイヤ3でのマルチキャストは複雑になります。 レイヤ3では、経路制御が派生します。 ユニキャストでは、特定の宛先に対する経路(Next hop)は一つに定まりますが、マルチキャストでは複数箇所にコピーして送信しなくてはならないので、複数のNext Hopが存在する事があります。 また、マルチキャスト受信者が動的にマルチキャストグループに入ったり抜けたりするため、一般的な経路制御とは異なり、頻繁にNext Hopが変わります。

IPv4(IP version 4、現在のインターネットはIPv4です)でのマルチキャストアドレスは、32ビットのIPアドレスの上位4ビットが「1110」になります。 すなわち、224.0.0.0〜239.255.255.255のIPアドレスは、マルチキャストアドレスになります。 そのうち、224.0.0.0/24は同一セグメント限定のマルチキャスト用に予約されています。 RFCにより規定されているマルチキャストアドレスを以下に示します。

224.0.0.0 予約
224.0.0.1 同一サブネット上の全ノード
224.0.0.2 同一サブネット上の全ルータ
224.0.0.4 DVMRPルータ
224.0.0.5 OSPF
224.0.0.6 OSPF version 2
224.0.0.9 RIP version 2

次世代IPプロトコルであるIPv6では、マルチキャストアドレスは128ビットのIPアドレスの上位8ビットが「11111111」になります。 IPv6のマルチキャストの詳細に関しては後半で記述します。

IPv4でのマック(MAC)レイヤのマルチキャストアドレスは、01-00-5E-00-00-00 〜 01-00-5E-7F-FF-FF になります。 IPマルチキャストアドレスの下位 23 ビットをマック レイヤマルチキャストアドレスの下位 23ビットに直接マッピングします。 IPマルチキャストアドレスの上位4ビットは、「1110」に決まっているので、IPマルチキャストアドレスのうち、MAC レイヤマルチキャストアドレスにマッピングされないビットが5ビット発生します。 そのため、ホストが所属先以外のグループを宛先とするマック レイヤマルチキャストパケットを受信する可能性がありますが、IPレイヤにおいて宛先IPアドレスが判別された時にパケットは破棄されるため、問題は発生しません。 たとえば、マルチキャスト アドレス 239.128.0.1 は、01-00-5E-00-00-01 となります。下位 23 ビットを使用するために、最初のオクテットは使用されず、2番目のオクテットの最後の 7 ビットだけが使用されます。3番目と4番目のオクテットは、16 進数に直接マッピングされます。 2番目のオクテット128は、2進数で 10000000 となります。 最上位ビットをドロップすると、このオクテットは2進数で 0000000、16 進数で 0x00 となります。 3番目のオクテット0は、16進数で 0x00 となります。 4 番目のオクテット 1 は、16 進数で0x01 となります。 したがって、239.128.0.1 に対応するマックアドレスは、01-00-5E-00-00-01 になります。

IPv6でのマックレイヤのマルチキャストアドレスは、33-33-00-00-00-00 〜 33-33-FF-FF-FF-FF になります。 IPv6マルチキャストアドレスの下位24ビットをマックアドレスの下位24ビットに直接マッピングします。 そのため、例えば、ff02::ab:cd:ef は、33-33-AB-CD-EFになります。

3. マルチキャストルーティング