// Decoding the Structure of IPv6 Addresses...
前回「IPの歴史、インターネットの歴史」で概要を説明しましたが、IPv6には以下の特徴があります。
約340澗通りのアドレス範囲は言わずもがな、ヘッダフォーマットに関しても最適化されているため、IPv4と比べて高速な処理ができるとされています。
●IPv4のヘッダフォーマット
●IPv6のヘッダフォーマット
また、IPv4にあったブロードキャストアドレスは廃止され、ユニキャストアドレス、マルチキャストアドレス、そして新たな概念であるエニーキャストアドレスの3つのアドレスが実装されています。
IPv6では、ひとえにユニキャストアドレスと言っても、スコープと呼ばれる異なる到達範囲によって違ったアドレス形態が存在します。
以下はIPv6のユニキャストアドレスのスコープ別解説です。
他にもサイトローカルアドレスがありましたが、RFC3879で廃止されてしまったためここでは扱いません。
また、IPv6アドレスは1つのインターフェースに複数設定することが出来るため、リンクローカル、ユニークローカル、グローバルの用途別アドレスを使い分けることが可能です。
マルチキャスト、エニーキャストアドレスの解説に入る前にIPv6の自動アドレス生成についても触れておきます。
この自動アドレス生成(SLAAC:StateLess Address AutoConfiguration)はデバイスがIPv6アドレスのインターフェースID部分を生成し、プレフィックスと組み合わせることで自動的にIPv6アドレスをインターフェースに設定するという仕組みです。
有名な生成の方式としては「EUI-64」と呼ばれるフォーマットを利用して、デバイスのMACアドレスからインターフェースIDを生成するというものがあります。
MACアドレスは我々のようなメーカによって世界中で重複が無いように (一応) 管理されているため、EUI-64のフォーマットに沿って生成すれば、理論上はグローバルで一意になります。なるはずです。 (少なくとも弊社では重複が無いようにMACアドレスを管理しています!)
MACアドレスは48ビットですが、EUI-64に基づいて変換すると64ビットのインターフェースIDとなります。そのため、64ビットのプレフィックスと64ビットのインターフェースIDを合わせてちょうど128ビットのIPv6アドレスとすることが出来るわけです。
一方で、EUI-64に基づいた変換は複雑な演算は必要ないため、機器のMACアドレスが外部に漏洩してしまった場合には、アドレスが割り出せてしまう可能性もあるため注意が必要です。
資格勉強などでこの自動アドレス生成について既にご存じの方もいるでしょうが、現在ではEUI-64での自動生成は前述のセキュリティに関する懸念から残念ながら非推奨になっています。
それでは自動アドレス生成が使えないから不便じゃないか!と思われたかもしれませんが、現在はMACアドレスと暗号を用いたインターフェースIDを生成する方式が用いられるようになってきているため、自動アドレスの安全性は高まってきていると言えます。
お次はマルチキャストについての解説です。
IPv4のマルチキャストで何となくしか分かってないのに、IPv6のなんてますます分からないよ!って方もいらっしゃるかもしれませんが、先ほども述べた通りブロードキャストは廃止されてしまったので、もうマルチキャストから逃げることはできません。
IPv6のマルチキャストアドレスは「FF00::/8」で表されます。つまり先頭8ビットがすべて1である場合はマルチキャストアドレスとして扱われます。
次に続く4ビットが「フラグ」、その次の4ビットが「スコープ」で、そのあとの112ビットを「グループID」と呼びます。
ユニキャストアドレスと同様でスコープには到達範囲という意味があり、ここに入る16進数によってマルチキャストの届く範囲を指定できます。
IPv4のマルチキャストアドレスにもスコープの概念が存在しますが、IPv6の方が若干分かり易い印象を受けます。
また、IANAによって確保されている「予約済みIPv6マルチキャストアドレス」もあり、例えば FF02::1 は同一リンク上の全てのノードに向けた通信、FF02::5 は同一リンク上の全てのOSPFv3が有効なルータに向けての通信であることを表します。
エニーキャストアドレスは複数のノードで一つのアドレスを共有し、エニーキャストアドレスに対して通信を行ったホストに最も近い(最小メトリックを持つ)ノードにだけに通信が届くという特殊なアドレスです。
「特殊なアドレス」と書きましたが、エニーキャスト特有のアドレス形態があるわけではなく、グローバルユニキャストアドレスを用いることが一般的とされています。
同じ役割を持ったノードで仮想化IPアドレスのようなものを共有して、通信元に一番近いノードだけが応答するイメージを持ってもらえれば分かり易いかもしれません。
皆さんが「FXCさん!!」と弊社の社員が複数いる場所に呼び掛けて、たまたま一番近くにいた私が「はーい!なんでしょう?」と応答する感じですね。
ここでひとつ衝撃の事実をお伝えしましょう。このエニーキャスト、実はユニキャストです。
ユニキャスト、マルチキャストと並べて紹介した手前、エニーキャストという独自のアドレス形態が定義されているように思われた方もいらっしゃるでしょうが、先ほどエニーキャストアドレスは「グローバルユニキャストアドレスを用いることが一般的」と書いたことから、実通信はユニキャストで行われており、ネットワーク設計によってエニーキャストを実現するという認識が正しいと言えます。つまり、エニーキャストアドレスとは概念なのです。
エニーキャストアドレスが複数の同じ役割を果たすノードに割り当てられている場合には、クライアントは個々のノードのアドレスを意識する必要はなく、DNSサーバならこのアドレスというように単一のアドレスを設定し、実際にはDNSサーバ群の中で最もレイテンシの低いサーバに転送されるということが実現できます。
この様にエニーキャストアドレスをうまく活用できれば、サーバの冗長化や負荷分散、さらにはセキュリティ強化などの様々なメリットを享受できるのです。
今回は技術解説がメインだったので、文字多めの退屈な内容になってしまいました。
ブラウザバックせずにここまで読んでいただき、ありがとうございます。
次回も引き続き技術解説になりますが、良ければお仕事の合間に読んでやってください
それではまたお会いしましょう!(→ 来月更新予定...)