無限の広さのアドレス空間-IPv6

 皆さんはIPアドレスがなくなりそうだということを聞いたことがありませんか?IPアドレスの枯渇などと呼ばれてインターネット上では大問題となっています。このIPアドレスはIPv4と呼ばれるversion4のIPアドレスです。

 残り少ないIPv4アドレスを大切に使う方法としてサブネットマスクプライベートアドレス(インターネットへ接続するにはNATが必要)などの方法があります。しかし、この2つは一時しのぎの方法に過ぎません。もう限界にきています。

 IPv4アドレスの枯渇問題を根本的に解決する手段として期待されているのが、IPversion6です(以後IPv6と略記)。




 

1 IPv6アドレスとは

 IPv4アドレスはご存じのように32ビット幅の2進数ですので、2^32のアドレス空間を持っています。2^8=256ですから、256^4となります。計算すると、4294967296≒43億個となります。インターネットで電話を掛けようとか(VoIP=Voice over IP)、冷蔵庫等の家電をインターネットにつなごうなどということになると、これでは余りにも少なすぎます。世界の人口が60億人を超えています。1人で10個くらい使うと考えると、1000億位は最低でも欲しい所です。

 IPv6は128ビットというアドレス幅を採用しました。2^128ですから、その大きさはまったく見当もつきません。2^10=1024ですので、仮にこれを1000として、概算を出してみましょう。1000^4で1兆となりますので、(2^10)^4で大体1兆ということになります。したがって、2^80で1兆の1兆倍ということになります。2^120で1兆の1兆倍の1兆倍です。まだ、2^8が残っていますので、結局256の1兆倍の1兆倍のさらに1兆倍ということになります。うーんどれ位なのかさっぱりイメージがわきません。2^48の1兆倍の1兆倍ということですね。これは少しわかりやすいかもしれません。2^48はMACアドレス空間と同じですから、MACアドレス空間の1兆倍の1兆倍ということですね。MACアドレス空間は2^48=281,474,976,710,656となります。約281兆個です。2015年の国連の統計で世界人口は71億人となっています。国連の予測では2050年に97億人になるということですので、区切りのいいところで100億人としてみましょう。MACアドレスを100億で割ってみると、大体281475となります。世界の1人一人が28万個のMACアドレスを使えることになりますが、IPv6ではこの1兆倍の1兆倍使えるということになります。

 一体こんなにたくさんのIPアドレスをどうしようというのでしょうか。ユビキタスネットワークだといっても多すぎじゃありませんか。この宇宙の知的生命体がIPv6で通信をするということでも想定しているのでしょうか。

 でもとりあえず分かることはどんなに無駄遣いしてもIPv6アドレスがなくなってしまうことはなさそうだということです。前置きはこの位にして話を進めましょう。



2 IPv6アドレスの種類(通信方式)

 IPv4アドレスはコンピュータやプリンタなどのノードではなく、ノードに装着されているインターフェースに割り当てられます。1つのインターフェースに複数のIPv6アドレスが割り当てられることもありますし、複数のインターフェースに単一のIPv6アドレスが割り当てられることもあります。

 IPv4ではユニキャスト、マルチキャスト、ブロードキャストが使われましたが、IPv6で使われる通信の方式は、ユニキャスト、エニーキャスト、マルチキャストです。

 IPv6ではブロードキャストは使われず、マルチキャストが同様に役割を果たします。エニーキャストアドレスはユニキャストアドレス空間から割り当てられます。特別にこれがエニーキャストアドレスだというものではありません。エニーキャストアドレスはインターフェースの集合体の識別番号で、複数の別々のノード(のインターフェース)に割り当てられます。エニーキャストアドレス宛のパケットは、そのアドレスを持つ複数ノードのうちで「一番近くにある」ノードのインターフェースに配送されます。




3 IPv6アドレスの表記法(短縮表現)

 IPv4では32ビットを8ビットずつに分けて、10進表示にして、それを"."でつなぐという方式を採用しています。これをドットつなぎ10表示とか、ドットつき10進表記などといいます。IPv6は長いので16進表記を使っています。128ビットを16ビットずつ8分割し、各ブロックを16進表記したものを、コロン(":")でつなぎます。

IPv6アドレスの例) 3FFE:0200:0000:010A:0000:0000:0000:0001

 IPv6アドレスは長いので短縮表現(最適化)が工夫されています。短縮表現の規則は次の通りです。8つに分割した各ブロックをセクションということにします。

短縮表現の規則
各セクションの先頭から続く0は省略可能 0123→123、0012→12、0000→0
"0000"のセクションが続く場合は、二重のコロンに置き換えることができる。ただし、この規則の使用は1回のみに限定 8000:123:4567:0:89AB
IPv4アドレスをIPv6アドレスに変換することも可能 192.168.2.2→::192.168.2.2

 プレフィックスの表記法はIPv4とまったく同じで、[IPv6アドレス]/[プレフィックス長]となります。プレフィックス長はネットワークを表す部分で、ルータはこの値を参照しながらルーティングを行います。プレフィックスからはみ出した部分はホストの識別子でインターフェースIDとなります。



4 IPv6アドレスの型

 IPv6アドレスは上位ビットにより、未指定アドレス、ループバックアドレス、マルチキャストアドレス、リンクローカルユニキャストアドレス、グローバルユニキャストに分かれます。

アドレスの型 プレフィックス IPv6表記
未指定(Unspecified) 00:00・・・(128ビット) ::/128
ループバック 00:00・・・1(128ビット) ::1128
マルチキャスト 1111 1111 ff00::/8
リンクローカルユニキャスト 1111 1110 10 fe80::/10
ユニークローカルユニキャスト  1111 1100
1111 1101 
fc00::/8
fd00::/8 
グローバルユニキャスト 上記以外


5 ユニキャストアドレス

 IPv6ユニキャストアドレスには、グローバルユニキャストアドレス、リンクローカルユニキャストアドレス、ユニークローカルユニキャストアドレス、IPv4アドレス埋め込みのIPv6アドレスなどがあります。従来サイトローカルアドレスが定義されていましたが、現在は利用停止になり、それに変わってユニークローカルユニキャストアドレスが定義されました。

 ユニキャストアドレスの基本構造は次の通りです。

 ←   nビット   →  ← (128-n)ビット →
サブネットプレフィックス インターフェース識別子

 前半のサブネットプレフィックスがネットワークの位置を表し、後半のインターフェース識別子がサブネット内でのホストの位置を表します。ユニキャストアドレスが"000"以外で始まる場合は、インターフェース識別子が64ビット長で、改訂EUI-64(Modified EUI-64)フォーマットに従うとされています。

 改訂EUIー64フォーマットは、EUI-64フォーマットを改訂したものです。EUI-64フォーマットは、EUI-48ビットアドレスの上位24ビット(OUI、製造業者識別ID)と下位24ビット(製造業者管理の識別番号)の間にFFFEという16ビットを挟んで64ビットアドレスを作るというものですが、改訂EUI-64ビットでは、EUI-64の上位7ビット目(niversal/localビットと呼ばれる)を反転させています。

MACアドレス(48ビット) 00 00 4C B7 FC AF
7ビット目
反転
FF追加
FE追加
改訂EUI-64(64ビット) 02 00 4C FF FE B7 FC AF

 IPv4はサブネットマスクという概念を導入した後はネットワークを識別する部分とホストを識別する部分の境目は可変となっていました。このためサブネットを設計する際にはそのサブネットの部署が今度どのように発展し、ホストをどれくらい必要とするかを予め予測しなくてはなりませんでした。一度運用を始めた後、予想を超えてある部署が発展したり、縮小したりしたとしても、後からサブネットを現状に合わせるのは困難です。これに対して、IPv6ではネットワークとホストのアドレス境界を固定化しました。そのため、ネットワークの設計が極めて簡単になりました。アドレス空間は多少無駄使いすることになるのですが、IPv6の広大なアドレス空間ではなんら問題になりません。


5.1 インターフェース識別子

 ユニキャストアドレスのインターフェース識別子はリンク上でそのインターフェースを識別するために利用されます。インターフェースの設定方法としては、手動で行う場合、自動で改訂EUI-64に従って行う場合、匿名アドレスを使う場合などがあります。IPv6ではさまざまな目的で多数のIPアドレスが割り当てられます。1台のコンピュータに対して、インターフェース毎のリンクローカルアドレスや、ループバックアドレス、グローバルアドレス、複数のマルチキャストアドレスなど多数のアドレスを持つことが想定されていますので、自動で設定するのが基本です。特に非コンピュータを対象にした大規模ネットワークサービスを実現するには自動設定機能は必須です。しかし、自動で改訂EUI-64の手法で設定すると、IPv6アドレスのインターフェースIDの部分にMACアドレスが現れるのでセキュリティ上問題があると考えられる場合もあります(MACアドレス偽装など)。セキュリティ上問題があるという場合、あるいはルータのシリアルインターフェースや、通常のパソコンからダイアルアップした場合のPPP接続のように、MACアドレスがないという場合などがありますので、全部自動でというわけにもいきません。このような場合には匿名アドレスや手動での設定を行います。匿名アドレスはランダムにインターフェースを自動識別する仕組みで、ランダムに生成したアドレスを一定期間で使い捨てていきます(RFC4941:プライバシー拡張)。


5.2 リンクローカルアドレス

 リンクローカルアドレスは同一リンクでのみ有効です。IPv6のノードは少なくとも1つのリンクローカルアドレスを持つことが規定されているので、何の設定もなしに、リンクに接続しても、同一リンク上の他のノードと通信することができます。リンクローカルアドレスはアドレスの自動設定(DHCP)や近隣探索プロセス(IPv4のARPに該当)などで利用されます。

10 54 64
1111 1110 10 000...000 インターフェースID

5.3 ユニークローカルユニキャストアドレス

 RFC1918では、サイトローカルアドレスというIPv4のプライベートアドレスに該当するアドレスを定義していました。しかし、サイトローカルアドレスでは、プライベートアドレスと同じ問題をもとことが懸念されたため、RFC3879では将来的に廃止するということになりました。

※IPv4のプライベートアドレスでは、ローカルでは重複しないように設定されていますが、世界的なレベルで見るとアドレスの重複が許されます。そのため会社の合併やVPN(Virtual Private Network)などでプライベートアドレス空間を接続する場合にIPアドレスの重複という問題が発生します。

 サイトローカルアドレスの代わりに定義されたのがユニークローカルユニキャストアドレスです(ULA、RFC4193)。ユニークローカルユニキャストアドレスのフォーマットは次の通りです。

7 1 40 16 64
1111 110 L グローバル識別子 サブネット識別子 インターフェース識別子
ユニークローカルユニキャストアドレス

先頭の7ビットはFC00::/7で、8ビット目は0あるいは1、0の場合は将来の定義のために残されている。1の場合は、独自割り当て領域

 グローバル識別子は40ビットのランダムな値なので、完全な一意性が保障されているわけではないが、異なる組織間で重複したアドレスをつけてしまうという可能性は低くなっています。





5.4 グローバルユニキャストアドレス

48 16 64
グローバル
ルーティング
プレフィックス
サブネット インターフェースID
ISPから割り当て
(先頭3ビットは001)
組織で割り当 ホスト用

 グローバルユニキャストアドレスは、IPv4と同じくIANAが管理しているアドレスで、現在IANAが開放しているグローバルユニキャストアドレスは、先頭3ビットが「001」で始まります。グローバルルーティングプレフィックスはインターネットへの経路を与えるためのもので、ISPからそれぞれのサイトに割り当てられます。サブネットはサイト内で割り当てるアドレス部分です。インターフェースIDは既に何度か説明しましたが、"000"以外で始まるアドレスの場合は、64ビットのIDが使われます。

5.5 文書記述用アドレスプレフィックス

 IPv6では、マニュアルや設定サンプルへの応用を想定して、文書記述用のアドレスプレフィックスを用意しています。それが、2001:DB8::/32です。この空間は自由に利用することを許されていますが、通信には使えません。



6 エニーキャスト

 エニーキャストとは、複数のインターフェースで同一のアドレスを共有し、そのエニーキャストアドレス宛のパケットを送信元に一番近いノードが受け取るというものです。一番近いというのはどういう意味でしょうか。2つの意味が考えられます。1つは、近隣探索により一番近いノードを決める方法です。エニーキャストアドレス宛のパケットを送信するノードは、通信を始める前に近隣探索によりアドレス解決を行い、最初に答えたインターフェースを一番近いものとします(ラウンドトリップ時間が最も短いノードを最も近いと判断する)。2つ目は、論理的にランドトリップ時間が最も短いと考えられるノードです。これはルータのルーティングテーブルのメトリックを計算して、メトリック値の合計が最も小さいノードです。

 エニーキャストは同一アドレスをもつ複数のうち一番近いノードが応答しますので、結果としてはユニキャストとなります。また、アドレスもユニキャストアドレス空間から選びますので、構造的にはエニーキャストかユニキャストか分かりません。しかし、エニーキャストを設定されたノードはそれがエニーキャストであると認識していなくてはなりませんので、エニーキャストアドレスを割り当てる場合には、明示的にエニーキャストアドレスであることを示さなくてはなりません。

 現在エニーキャストアドレスであると明確に定義されているアドレスは、サブネットルータ・エニーキャストアドレスとサブネット・エニーキャストアドレスです。

 サブネットルータ・エニーキャストアドレスは前半の64ビットはユニキャストプレフィックスで、後半の64ビットは全部0です。従って、2001:DB8:500:1::/64というサブネット上のルータは、2001:DB8:500:1::というサブネットルータ・エニーキャストアドレスを自分のアドレスとして認識します。このサブネットルータ・エニーキャストアドレス宛のパケットは送信元ノードから考えて2001:DB8:500:1::/64上の最も近いルータに送信されます。

 サブネット・エニーキャストアドレスは、前半64ビットがサブネットのプレフィックスで、次の57ビットが1111110111...111で、最後の7ビットがAnycast IDとなります。Anycast IDによって具体的な用途が定まります。例えば、Anycast IDが1111110(16進で7E)の場合は、モバイルIP(Mobile IP)で「ホームエージェント」と呼ばれる役割を果たすルータのアドレスを発見するために使われます。

 その他に考えられる利用方法としては、クライアントにエニーキャストアドレスを指定させてサービスを提供しているサーバにアクセスさせる方法、たとえばDNSサーバにエニーキャストを適用する方法(冗長構成、負荷分散)など、あるいはISPのルータ群のアドレスをエニーキャストアドレスで指定する方法などがあります。エニーキャストアドレスの利用方法は現在は発展段階にありますので、今後様々な利用方法が提案されてくるかもしれません。




7 マルチキャスト

 マルチキャストアドレスは複数のノードのグループに対応した識別子です。IPv6ではマルチキャストアドレスはIPv4の場合と同じ方法で処理されます。IPv6のノードは同時に複数のマルチキャストアドレスで待ち受けることが出来ます。また、ノードは随時マルチキャストグループを結合したり、分離したりすることが出来ます。

 IPv6マルチキャストアドレスのフォーマットは次の通りです。

8 4 4 112
1111 1111 フラグ スコープ グループ識別子

 先頭の8ビットは"1111 1111"で始まります(16進数ではFF00:/8)。

 フラグフィールドでは、マルチキャストアドレスが恒久的に与えられたものか、一時的に与えられたものかを示すフラグや、組織の保有するユニキャストプレフィックスを利用したマルチキャストアドレスであるかを示すフラグなどが使われます(RFC3306)。RFC3515までに定義されたフラグは一時フラグ(Tフラグ)のみです。Tフラグが"0"の場合は、IANAによって恒久的に割り当てられたことを示し、"1"の場合は、IANAによって割り当てられたのではない一時使用のマルチキャストアドレスであることを示します。

 IPv6マルチキャストアドレスには「スコープ」という概念があります。スコープフィールドの値でそのマルチキャストアドレスグループの有効範囲を表します。スコープフィールドのもっとも一般的な値は1のインターフェースローカルスコープ、2のリンクローカルスコープ、5のサイトローカルスコープです。ルータはマルチキャストルーティングプロトコルによって提示される情報と、マルチキャストスコープを使用して、マルチキャストトラフィックを転送できるかどうか判断します。

 インターフェースローカルとは、単一のインターフェースの範囲という意味になります。リンクローカルは物理セグメント内を意味します。リンクローカルマルチキャストは同一セグメント上のノードと通信する場合に使用するアドレスです。サイトローカルスコープは組織内のネットワークの意味です。

フラグ スコープ 
0=永続的
or
1=一時的
番号 説明
0 予約
1 インターフェースローカル
2 リンクローカル
3 予約
4 管理ローカル
5 サイトローカル 
6 未指定
7 未指定
8 組織ローカル
9~D 未指定
E グローバル
F 予約

 リンクローカル全ノード宛のマルチキャストアドレスは、先頭8ビットが"1111 1111"で、フラグが"0000"、スコープが"0010"となりますので、"1111 1111 0000 0010"となり、16進表示で、プレフィックスはFF02::/8となります。FF02::2のトラフィックはリンクローカルスコープを持ちますので、IPv6ルータはこのパケットをリンクスコープより先に転送しません。

 次は、ノード上でIPv6を設定した場合のグループ識別子です。自動的に次の3つのマルチキャストグループに参加します。

IPv6マルチキャストアドレス 対象 フラグ スコープ
FF02::1 同じリンク上の全てのノード 0 2
FF02::2 同じリンク上の全てのノード 0 2
FF02::1:FFxx:xxxx 要請ノードマルチキャストアドレス 0 2

 IPv6が有効なホストのインターフェースは、「FF02::1」、「FF02::1:FFxx:xxxx」に自動的に参加します。要請ノードマルチキャストアドレスはFF02::1:FF00:0000~FF02::1:FFFF:FFFFの範囲です。
 
 IPv4ではMACアドレスを知るためにARPを使用しますが、IPv6ではICMP(Type 135)メッセージ(Neighbor Solicitation Message)を使います。知らない相手に対してICMPメッセージを出すのですから、ブロードキャストと言いたいところですが、IPv6ではブロードキャストの代わりにマルチキャストアドレスを使います。この時使うのが要請ノードマルチキャストアドレスです。要請ノードマルチキャストアドレスの下位24ビットの"xx:xxxx"の部分はインターフェースIDの下位24ビットから自動的に生成されます。インターフェースに割り当てられたIPv6ユニキャストアドレスが仮に「2001:DB8::1:800:200D:8C6C」だとすると、IPv6要請マルチキャストアドレスは「FF02::1:FF0D:8C6C」となります。IPv6要請マルチキャストアドレスのフォーマットは次の通りです。

IPv6要請マルチキャストアドレス
16 64 16 8 24
FF02 0 0001 FF IFの下位24ビット
 

 下位3バイトはそのまま"0D:8C6C"でその上位の3バイトは"0001""FF"となりますので、全体で「FF02::1:FF0D:8C6C」となります。





更新履歴

2016/02/20 作成








































 ページの先頭