IPv6 ことはじめ

第3回 プラグ&プレイ

IIJ技術研究所
山本和彦
iij.news (October 1999 Vol.20)

マルチキャスト

まず前回お話しできなかった IPv6 マルチキャスト・アドレ スから始めます。以下に示す ように、IPv6 マルチキャスト・ アドレスは上位 1 バイト目が "ff" となっています。

multicast

上位 2 バイト目の上半分がフ ラグ、下半分がスコープです。 3 バイト目からずっと 0 が続 き、下位 4 バイトがグループ 識別子で埋められます。

フラグはあまり意味がないので、 ここは単に 0 だと思って頂い て結構です。スコープには、以 下が定義されています。

	1  ノードローカル・スコープ
	2  リンクローカル・スコープ
	5  サイトローカル・スコープ
	8  組織ローカル・スコープ
	e  グローバル・スコープ
サイトローカルと組織ローカル はどう違うのかという疑問を持 つ人がいるでしょう。しかし、 組織ローカルは何の経験もなく いいかげんに定義されたスコー プですので、おそらく IPv6 の 設計者にも答えられない問題だ と思います。:-p

グループ識別子は、0000:0000 〜 feff:ffff の値が使えます。現 在いくつかのグループ識別子が 定義されていますが、覚える必 要のあるのは、以下の 2 つで す。

	0000:0001	全ノード
	0000:0002	全ルータ
すなわち ff01::1 はノードロー カル全ノード・マルチキャスト・ アドレスを意味します。ほとん どループバック・アドレスと考 えて構いません。しかし正確に は、マルチキャストはグループ 通信ですから、1 つのノード内 で複数のプロセスが通信するた めのマルチキャスト・アドレス です。

ff01::2 はノードローカル全ルー タを意味し、あるノード内の経 路制御に関係するプロセスが参 加するマルチキャスト・アドレ スです。

ff02::1 はリンクローカル全ノー ドですから、いわゆるブロード キャストの代わりに使われます。

ff02::2 はリンクローカル全ルー タ、つまりあるリンク上のすべ てのルータが参加するマルチキャ スト・アドレスです。

ややこしいのですが歴史的な理 由により、上図の構造に従わ ないマルチキャスト・アドレス があります。その名を要請マル チキャスト・アドレスといい、 アドレス解決(いわゆる ARP)に 使われます。要請マルチキャス ト・アドレスを以下にに示しま す。

solicitation address

一見リンクローカル・マルチキャ スト・アドレスに見えますが、 下位 5 バイト目が 01 になっ ています。これは歴史的な理由 によります。更に下位 4 バイ ト目が必ず ff となります。グ ループ識別子が 0000:0000 〜 feff:ffff の範囲しか使えない のはこのためです。下位 3 バ イトは、MAC アドレスを調べた いユニキャスト・アドレスの下 位 3 バイトを入れます。

たとえば、 fe80::260:97ff:fe40:efab に 対する要請マルチキャスト・ア ドレスは、ff02::1:ff40:efab となります。

アドレス解決のメッセージは、 リンクローカル全ノード・マル チキャスト・アドレスではなく 要請マルチキャスト・アドレス に送られます。


プラグ&プレイ

プラグ&プレイはコンピュータ 機器の宣伝文句として定着した 感があります。一昔前の機器で は、ユーザにこまごまとした設 定を強いてきました。プラグ& プレイに対応した機器では、ユー ザがつないだ瞬間から、なんの 設定もなしに使い始められます。

以前はプラグ&プレイを唄った 機器もうまくつながらないこと が多く、Plug & Play (つない で遊べ)ではなく Plug & Pray (つないで祈れ)と冗談をいって いました。最近ではこの皮肉が 聞かれなくなるぐらい、安定性 を増して来ているように思いま す。

IPv6 の売りの 1 つはプラグ& プレイです。IPv4 でも DHCP を使って自動的に設定できると 反論されるかもしれません。し かし、IPv6 ではすべてのホス トが対応していること、そして DHCP サーバが不要であること が、IPv4 とは決定的に違いま す。

IPv6 のプラグ&プレイを説明 する際、よく「歯科医の憂鬱」 と「管理者の悪夢」というたと え話が引合に出されます。

歯科医は医師免許を取得してい る程高学歴ですが、コンピュー タやネットワークに関しては素 人です。いくつかのコンピュー タをオフィスに導入し、 Ethernet につなげば通信でき ると信じています。

ネットワークの管理者はよく悪 夢にうなされます。月曜に届く はずだった 100 台のコンピュー タが遅れて金曜日に届きました。 しかし会社の上司は、来週頭に はコンピュータを使ってインター ネットを利用し始められるよう にと命令しました。

IPv6 はこの 2 つの命題を解決 するように設計されています。 まず、歯科医の憂鬱から考えて いきましょう。

歯科医は当然 DHCP サーバなど 設定できません。そのため、オ フィスの Ethernet を通じてコ ンピュータが通信するには、 それぞれのコンピュータが IPv6 アドレスを自分で生成す る必要があります。

このアドレスは、世界全体で一 意である必要はありませんが、 少なくとも Ethernet 内では衝 突してはいけません。ここで、 前回お話ししたリンクローカル・ アドレスが登場します。これは fe80::/64 のプレフィックスに、 8 バイトのインターフェイス識 別子をくっつけた構造をしてい ました。

話を分かりやすくするために、 歯科医が購入したあるコンピュー タの Ethernet アドレスを 00:60:97:40:ef:ab としましょ う。このコンピュータに載って いる IPv6 対応 OS は、この 6 バイトの Ethernet アドレスを 8 バイトの EUI 64 アドレスに 変換します。

具体的には、3 バイトに分割し、 ff:fe を間に挟み、上位 1 バ イトに存在する universal/local ビットを反転 させます。この例では、 260:97ff:fe40:efab というイ ンターフェイス識別子ができあ がります。これに fe08::/64 を付けた、 fe80::260:97ff:fe40:efabが 「仮の」 IPv6 リンクローカル・ アドレスとなります。

世界で一意な Ethernet アドレ スから作ったアドレスですから、 これだけでもその Ethernet 内 で一意であると期待できます。 しかし衝突している可能性を完 全には否定できません。ですか ら、あくまで「仮」なのです。

この「仮」という修飾語を取り 除くために、このコンピュータ は Ethernet につながった瞬間 に近隣要請メッセージを要請マ ルチキャスト・アドレス ff02::1:ff40:efab に向けて発 行します。すなわち、「誰かこ の IPv6 アドレスを使っていま すか」と大声で叫ぶのです。

「使っているよ」と返事がなけ れば、仮の IPv6 アドレスから、 本当に自分自身のものになりま す。重複を検知した場合は、ディ スプレイに警告を出すなどして、 その IPv6 アドレスの使用をあ きらめます。

これまでの仕組みで歯科医の憂 鬱な気分は解消されました。次 は管理者の悪夢を断ち切る番で す。管理者に課せられた課題は、 インターネットを利用したコン ピュータ通信を可能にすること でした。

グローバル・アドレスと Ethrenet の出口のルータが分 かれば、この問題は解決されま す。IPv6 ではルータがそのリ ンクの上位 8 バイトのプレフィッ クスを指定したルータ通知メッ セージを ff02::1 に対し定期 的に発行しています。

これと 8 バイトのインターフェ イス識別子を連結すれば、グロー バル・アドレスが生成できます。 出口ルータには、そのプレフィッ クスを配ってくれたルータを指 定します。

定期的なルータ通知メッセージ を待切れない場合は、ff02::2 に対しルータ要請メッセージを 発行し、即座にルータ通知メッ セージを発行するよう要請でき ます。


おまけ

最後に IPv6 アドレスと Ethernet アドレスの対応関係 について、解説しておきます。

通常、Ethernet カードでは、 自分の Ethernet アドレスと Ethernet のブロードキャスト・ アドレス ff:ff:ff:ff:ff:ff に対し穴が空いています。よっ て、この 2 つのいずれかが終 点アドレスに指定されている Ethernet フレームを受け取れ ます。

IPv6 のマルチキャスト・アド レスに参加するには、それに対 応する Ethernet アドレスを生 成し、Ethernet カードに穴を 空ける必要があります。この変 換方式は、33:33 に IPv6 マル チキャスト・アドレスの下位 4 バイトを連結すると定められて います。

multicast mapping

たとえば、ff02::1 と ff02::1:ff40:efab 対応する Ethernet アドレスは、それぞ れ 33:33:00:00:01 と 33:33:ff40:efab になります。

前述した重複アドレス検知をも う一度見直してみましょう。 IPv6 対応 OS は、「仮」のア ドレス fe80::260:97ff:fe40:efab を 作成した後、対応する要請マル チキャスト・アドレス ff02::1:ff40:efab に参加しま す。さらに、リンクローカル・ 全ノード・アドレス ff02::1 にも参加します。

次に「仮」という修飾語をとる ために近隣要請メッセージを送 信するのは前述の通りです。こ の IPv6 パケットの終点は ff02::1:ff40:efab、始点は未 指定アドレス「::」、対象アド レスは fe80::260:97ff:fe40:efabとな ります。

この近隣要請メッセージを受け 取る可能性のあるのは、 33:33:ff:40:ef:ab に穴を空け ているEthernet カードを持つ コンピュータのみです。受け取っ たとしても、下 3 バイトが一 致しているだけであり、IPv6 アドレス全体が衝突していると は限りません。

そこで、全体として衝突してい ないか対象アドレスを調べます。 もし、衝突していたら同じ要請 マルチキャスト・アドレスを宛 先として近隣通知メッセージを 出し、「僕がすでに使っている よ」と告げるのです。

このように、IPv6 では重複ア ドレス検知の際、要請マルチキャ スト・アドレスを用いることで、 巻き込まれるコンピュータの数 を減らしています。アドレス解 決の際も同様です。


Email: kazu@iijlab.net
URL: http://www.mew.org/~kazu/