IPv6アドレス

IPv6アドレスとは、IPv6コンピュータネットワークにおいてコンピュータ等のノードのネットワークインタフェースを判別するための番号である。

IPアドレスは、ホストの個々のネットワークインタフェースを特定し、ホスト間でIPパケットのルーティングを行うために使用される。IPアドレスはパケットのヘッダに記載され、そのパケットの送信元と送信先を示している。

IPv6は、インターネットにおいて最初に使用されたIPv4を継承している。IPv4が32ビットのIPアドレスを使用するのに対し、IPv6は128ビットのIPアドレスを使用する。このため、IPv6はIPv4と比べて非常に大きなIPアドレス空間を持っている。

1. IPv6アドレスの種類
--------------

IPv6アドレスは、以下の3種類に分類される。

ユニキャストアドレス - 単一のインタフェースのための識別子。インターネットプロトコルは、ユニキャストアドレスに送られたパケットを、そのアドレスによって識別されるインタフェースに配送する。
エニーキャストアドレス - インタフェース集合のための識別子。エニーキャストアドレスに送られたパケットは、そのアドレスで識別されるインタフェースの内で、ルーティングプロトコルの距離の定義に従って「最も近く」にあるただ1つのインタフェースに配送される。エニーキャストアドレスはユニキャストアドレスと同じフォーマットのため、表記上は区別がつかない。ただ、同じアドレスが複数のインタフェースに設定されるかどうかの違いしかない。
マルチキャストアドレス - エニーキャストと同様にインタフェース集合のための識別子であるが、マルチキャストアドレスに送られたパケットは、そのアドレスを持つすべてのインタフェースに配送される。IPv6にはブロードキャストアドレスは存在せず、その機能はマルチキャストアドレスが果たす。

2. アドレス形式
---------

IPv6アドレスは128ビットのアドレス幅を持っている。アドレスは、アドレス指定とルーティングの方法により、ユニキャストアドレス、マルチキャストアドレス、エニーキャストアドレスに分類される。これらのそれぞれに、論理的に128のアドレス・ビットをビット・グループに分け、これらのビット・グループの値を特別なアドレス指定機能と結びつけることによって、様々なアドレス・フォーマットが存在する

2.1. ユニキャストアドレス・エニーキャストアドレスのフォーマット
----------------------------------

ユニキャストアドレスとエニーキャストアドレスは、通常2つの部分に分けられる。前半の64ビットはルーティングに使用され、後半の64ビットはサブネット内での個別のインタフェースを指し示す。

{| class="wikitable" style="width: 750px"|+ 一般的なユニキャストアドレスのフォーマット |- ! style="width:0;"|bits |style="text-align: center; width: 37.5%;"| 48 |style="text-align: center; width: 12.5%;"| 16 |style="text-align: center; width: 50%;"| 64 |- ! style="width:0;"|field |style="text-align: center;"| //ルーティングプリフィックス// |style="text-align: center;"| //サブネットID// |style="text-align: center;"| //インタフェース識別子// |} ネットワークプリフィックスは、アドレスの中の上位64ビットである。ルーティングプリフィックスのサイズは可変である。プリフィックスのサイズが大きくなると、その分だけサブネットIDのサイズが小さくなる。サブネットIDのビットのフィールドは、ネットワーク管理者が与えられたネットワーク内でサブネットを定義するのに使用することができる。64ビットの「インタフェース識別子」は、インタフェースのMACアドレスからmodified EUI-64group="注釈"）（6to4はHistoricalとなった 7526}})

2.1.1. 特別用途のアドレス
----------------

IANAは'Sub-TLA ID'と呼ばれるアドレスブロックを特別な用途のために予約している。それは、 2001:0000::/29 から 2001:01f8::/29 までの範囲の64のネットワークプリフィックスである。その内の3つは以下のものである。
2001::/32 — teredoに用いられる。
2001:2::/48 — Benchmarking Methodology Working Group に割り当てられており、IPv6のベンチマークに使用されている。IPv4でベンチマークに使用されている 198.18.0.0/15 に相当する。プリフィックス 2001:0200::/48 は 4773}} ではなく 5180}} で定義されている。
2001:20::/28 — ORCHIDv2 に割り当てられている。これらはCryptographic Hash Identifiersに使うルーティングされないIPv6アドレスである。

2.1.2. 文書記述用アドレスプレフィックス
-----------------------

2001:db8::/32 — このプリフィックスは、文書記述用に使用される。このアドレスは、マニュアルや設定サンプル等に例示としてIPv6アドレスを使用する場合に使用される。このアドレスは実際の通信には使用してはならない。IPv4では 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 がこの目的で使用されていた。

2.1.3. 破棄
---------

0100::/64 — このプリフィックスは、破棄するトラフィックに使用される。

2.1.4. 非推奨とされ廃止されたアドレス
----------------------

2.2. マルチキャストアドレス
----------------

マルチキャストアドレス ff0X::は予約されており、いかなるマルチキャストグループにも割り当ててはならない。Internet Assigned Numbers Authorityがアドレスの予約を管理している。

ff0X::のIPv6マルチキャストアドレスは、以下の物に割り当てられている。

{| class="wikitable"! アドレス ! 割り当て ! 有効なスコープ |- | ff0X::1 | 全てのノードアドレス | 1 , 2 :

ff01::1 → All nodes in the インタフェースローカル
ff02::1 → All nodes in the リンクローカル|- | ff0X::2 | 全てのルータ | 1 , 2 , 5 :

ff01::2 → インタフェースローカルの全てのルータ
ff02::2 → リンクローカルの全てのルータ
ff05::2 → サイトローカルの全てのルータ|- | ff02::5 | OSPFIGP | 2  |- | ff02::6 | OSPFIGP指定ルータ | 2  |- | ff02::9 | RIPルータ | 2  |- | ff02::a | EIGRPルータ | 2  |- | ff02::d | 全てのPIMルータ | 2  |- | ff02::1a | 全てのRPLルータ | 2  |- | ff0X::fb | mDNSv6 | 全てのスコープで有効 |- | ff0X::101 | 全てのNTPサーバ | 全てのスコープで有効 |- | ff02::1:1 | Link Name | 2  |- | ff02::1:2 | 全てのDHCPエージェント | 2  |- | ff02::1:3 | Link-local Multicast Name Resolution | 2  |- | ff05::1:3 | 全てのDHCPサーバ | 5  |- | ff02::1:ff00:0/104 | 要請ノードマルチキャストアドレス。下記を参照。 | 2  |- | ff02::2:ff00:0/104 | Node Information Queries | 2  |}

2.2.1. 要請ノードマルチキャストアドレス
-----------------------

要請ノードマルチキャストアドレスのグループIDの下位24ビットは、インタフェースのユニキャストアドレスまたはエニーキャストアドレスの下位24ビットである。このアドレスは、ローカル・ネットワーク上の全てのノードを妨げずに、近隣探索プロトコルによるリンク層アドレス解決をすることができる。ホストは、設定されたユニキャストアドレスまたはエニーキャストアドレスの要請ノードマルチキャストグループに参加しなければならない。

3. ステートレスアドレス自動設定
-----------------

システムの起動時、ノードは、それぞれのIPv6が利用可能なインタフェースについてリンクローカルアドレスを自動的に生成する。グローバルにルーティングできるアドレスが、手動で設定されるか、後述する「設定プロトコル」から得られる場合でも同様である。 それは、近隣探索プロトコルの機能を使用したステートレスアドレス自動設定によって、独立して、そして、事前設定なしで動作する。このアドレスはプリフィックス fe80::/64 の中から選択される。

IPv4に「設定プロトコル」はDHCPやPPPを含む。DHCPv6もあるが、IPv6のホストはグローバルにルーティング可能なユニキャストアドレスを作るのに近隣探索プロトコルを用いる。ホストはルータ要請を送信し、IPv6ルーターは割り当てられたプリフィックスとともに応答を返す。

アドレスの下位64ビットは、64ビットのmodified EUI-64フォーマットによるインタフェース識別子である。この識別子は、通常そのインタフェースの全ての自動的に構成されたアドレスによって共有される。その利点は、1つのマルチキャスト・グループだけが近隣探索のために参加する必要があることである。このためには、ネットワークプリフィックス ff02::1:ff00:0/104 とアドレスの下位24ビットからなるマルチキャストアドレスが用いられる。

3.1. Modified EUI-64
--------------------

64ビットのインタフェース識別子は、48ビットのMACアドレスから生成するのが最も一般的である。MACアドレス 00:0C:29:0C:47:D5 は、真ん中に FF:FE を入れることで64ビットのEUI-64 00:0C:29:FF:FE:0C:47:D5 に変換される。このEUI-64をIPv6アドレスの中で使うとき、次のように変形される。 //Universal/Local//ビットを反転する。ネットワークプリフィックス 2001:db8:1:2::/64 と上記のMACアドレスを用いてIPv6アドレスを生成すると、 2001:db8:1:2:020c:29ff:fe0c:47d5 となる。ここで、下線部は//Universal/Local//ビットが1に反転された箇所である。1は//Universal//、0は//Local//を意味する。

グローバルユニキャストアドレスのインタフェースIDには、MACアドレス等から生成されるModified EUI-64フォーマットが使用されることが多いが、プライバシー上の懸念があるため、一意性およびプライバシーの双方を満たす仕様への変更が推奨されている。

3.2. 重複アドレス検出
-------------

インタフェースにユニキャストIPv6アドレスを割り当てた後、//Neighbor Solicitation//と//Neighbor Advertisement//メッセージを使ってそのアドレスが唯一のものであるかの確認を行う。確認を行っている間、そのアドレスは「仮」の状態にある。

ノードは仮のアドレスの要請ノードマルチキャストグループに参加し、仮アドレスを宛先、未指定アドレスを送信元として//Neighbor Solicitation//メッセージを送信する。ノードは、//Neighbor Advertisement//が受信できるようにするために全ホストマルチキャストアドレス ff02::1 にも参加する。

ノードが自身の仮アドレスを宛先とする//Neighbor Solicitation//を受信した場合、そのアドレスはユニークではない。ノードが、仮アドレスを送信元とする//Neighbor Advertisement//を受信した場合も同様である。アドレスがユニークであると確認できた時だけ、そのアドレスが割り当てられ、インタフェースによって使用される。

この仕組みを重複アドレス検出という。

3.3. アドレスの有効期限
--------------

インタフェースに割り当てられたIPv6アドレスは固定された有効期限を持つ。より短い期間に設定されない限り、有効期限は無制限である。アドレスには、//preferred lifetime//と//valid lifetime//の2つの有効期限がある。有効期限は、ルーターで設定されて自動設定によって値が提供されるか、インタフェースに手動で設定する。

アドレスがインタフェースに割り当てられたとき、そのアドレスは"preferred"の状態にあり、preferred-lifetimeの間それが継続する。preferred-lifetimeが経過すると"deprecated"の状態になり、そのアドレスを使って新しい接続はできなくなる。valid-lifetimeが経過すると"invalid"の状態になり、そのアドレスはインタフェースから除かれ、インターネットから新しいアドレスの割り当てを受ける。

注意: ほとんどの場合、新しい//Router Advertisement//を受信することで有効期限のタイマーが元に戻るので、有効期限は期限切れになることはない。しかし、RAが受信できない場合、preferred-lifetimeが経過してアドレスは"deprecated"状態になる。

3.4. 一時アドレス
-----------

ステートレスアドレス自動設定でインタフェース識別子を生成するのに、グローバルにユニークな固定のMACアドレスを使用している。そのため、時間がたってIPv6ネットワークプリフィックスが変わったとしても、MACアドレスによってネットワーク機器を、そしてユーザを追跡することができる。IPv6アドレスの一部とユーザが永久に結びつく危険性を減らすため、ノードは「一時アドレス」を作ることができる。一時アドレスは、時間によりランダムに変化するビット列に基づいたインタフェース識別子を使用し、有効期限を比較的短くすることで短い時間で新しいアドレスに置き替えられる。

外部ホストがDNS問い合わせのできるパブリックアドレスを使っている場合、接続を始めるための送信元アドレスとして、一時的なアドレスを使用することができる。

Mac OS X Lion以降のmacOS、Windows Vista・Windows Server 2008以降のマイクロソフトのOSでは、IPv6のネットワークインタフェースの設定で、デフォルトで一時アドレスを使用する設定になっている。

実際には、ISPから配布されるプレフィックスが契約ごとに固定されている運用が多く、プレフィックスと他の情報を組み合わせて使用してユーザを追跡することができるため、プライバシー保護の観点からは、限定的な効果しかない。

4. デフォルトアドレスの選択
---------------

IPv6利用可能なネットワークインタフェースは、通常2つ以上のIPv6アドレスを持っている。例えばリンクローカルとグローバルアドレス、恒久アドレスと一時アドレスなどである。

IPv6はアドレススコープと選択優先性の概念を導入している。選択優先性は、他のホストと接続するときに送信元と宛先のアドレスを選択するために複数の選択を与える。

優先選択アルゴリズムは、特定の宛先の中で通信において最も適切なアドレスを選択するアルゴリズムであり、各々のルーティングプリフィックスを優先順位レベルと結びつけるカスタマイズ可能な選択テーブルに基づいている。デフォルトのテーブルは以下の通りである。

{| class="wikitable"|- ! プリフィックス ! align="right" | 優先度 ! align="right" | ラベル ! align="right" | 用途 |- | ::1/128 | align="right" | 50 | align="right" | 0 | | Localhost |- | ::/0 | align="right" | 40 | align="right" | 1 | | デフォルトユニキャスト |- | ::ffff:0:0/96 | align="right" | 35 | align="right" | 4 | | IPv4射影IPv6アドレス |- | 2002::/16 | align="right" | 30 | align="right" | 2 | | 6to4  |- | 2001::/32 | align="right" | 5 | align="right" | 5 | | Teredoトンネリング |- | fc00::/7 | align="right" | 3 | align="right" | 13 | | ユニークローカルアドレス |- | ::/96 | align="right" | 1 | align="right" | 3 | | IPv4互換アドレス |- | fec0::/10 | align="right" | 1 | align="right" | 11 | | サイトローカルアドレス |- | 3ffe::/16 | align="right" | 1 | align="right" | 12 | | 6bone |}

デフォルト設定は、IPv4よりもIPv6を優先し、できるだけ小さなスコープの宛先を優先する。そのため、他の条件が同じならば、グローバルにルーティングされた経路よりもリンクローカルの通信の方が優先される。プリフィックスポリシーテーブルはルーティングテーブルに似ている。すなわち、優先順位の値がルーティングテーブルにおける接続コストの役割として働き、より高い優先度はより大きい値として表される。

送信元アドレスは宛先アドレスと同じラベルの値により評価される。アドレスはビット列の最上位からの最長一致によってプリフィックスと比較される。候補の送信元アドレスはオペレーティングシステムから取得し、候補の宛先アドレスはDNS問合せによって取得する。

5. リンクローカルアドレスとゾーンインデックス
------------------------

ホストの全てのリンクローカルアドレスは共通のプリフィックスを持つので、リンクローカルの宛先にパケットを送信するとき、出て行くインタフェースを選ぶのに通常のルーティング手順を用いることができない。そこで、ゾーンインデックスと呼ばれる特別な識別子を用いて付加的なルーティングの情報を提供する。

アドレスが文字で書かれているとき、ゾーンインデックスはアドレスの後にパーセント記号で区切って付加する。ゾーンインデックスの実際の構文は、OSに依存する。

Microsoft Windowsは、数値のゾーンインデックスを使用する。インデックスは、インタフェース番号で決定される。
多くのUnix系OSは、インタフェース名をゾーンインデックスに使用する。
BSD系のOSでは、数値のゾーンインデックスを2番目の16ビットフィールドに入れることでも表現できる。ゾーンインデックスの表記は、Uniform Resource Identifierの中で使用する時に文法的に競合するため、パーセント記号"%"をパーセントエンコーディングによって回避しなければならない。例 http://[fe80::3%25eth0]

6. DNSにおけるIPv6アドレス
------------------

Domain Name Systemでは、//AAAA//リソースレコードによってホスト名をIPv6アドレスに対応づけしている。DNS逆引きのために、IETFはドメイン名ip6.arpaを維持しており、その名前空間は、後述するようにIPv6アドレスを4ビット単位で1桁ずつの十六進数に分けた物になっている。この仕組みは 3596}} で定義されている。

IPv4と同様、DNSではそれぞれのホストは2つのDNSレコード、アドレスレコードと逆引きポインターレコードによって表現される。例えば、//derrick//という名前のホストコンピュータが//example.com//ドメインにあり、ユニークローカルアドレス fdda:5cc1:23:4::1f を持っているとする。そのAAAAアドレスレコードは derrick.example.com. IN AAAA fdda:5cc1:23:4::1f となり、IPv6逆引きポインターレコードは f.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.0.3.2.0.0.1.c.c.5.a.d.d.f.ip6.arpa. IN PTR derrick.example.com. となる。 このポインターレコードは、d.f.ip6.arpaゾーンの権限の委任のチェーンに従って、いくつかのゾーンで定義される。

DNSプロトコルはトランスポート層プロトコルから独立している。要求されるデータのアドレスファミリに関係なく、DNSの問合せと応答はIPv6とIPv4のどちらによってでも送信される。



6.1. 移行への挑戦
-----------

2009年現在、多くの家庭内ネットワークのNAT装置やルータのDNSリゾルバは、未だにAAAAレコードを不適切に取り扱う。これらのいくつかは、適切な否定のDNS応答をきちんと返さずに、単にそのようなレコードのDNS要求を破棄する。要求が破棄されるので、要求を送信しているホストはタイムアウトを待たなければならない。クライアント・ソフトウェアがIPv6接続が失敗するのを待ってからIPv4接続を行うため、デュアルスタックIPv6/IPv4ホストに接続しようとするときに、しばしば減速を引き起こす。 クライアント・ソフトウェアがHappy Eyeballsアルゴリズムを使用することで、この問題は軽減される。このアルゴリズムは、IPv6とIPv4の接続を同時に開始し、先に接続が完了した方を使用するという物である。

7. 歴史的な注釈
---------

7.1. 非推奨とされ廃止されたアドレス
--------------------

サイトローカルプリフィックス fec0::/10 は、組織内のサイトネットワーク内でのみ有効であると特定されたアドレスである。これは、1995年12月に定められた最初のアドレス体系の一部であったが、2004年9月に廃止された。これは、「サイト」という用語の定義が曖昧だったことにより、ルーティングのルールに混乱を生じていたためである。新しいネットワークはサイトローカルアドレスに対応してはならない。2005年10月、新しい仕様により、サイトローカルアドレスはユニークローカルアドレスに置き替えられた。
アドレスブロック 0200::/7 は、1996年8月にOSI NSAP-mapped プリフィックスとして定義されたが、2004年12月に廃止された。
96ビットの0のプリフィックス ::/96は「IPv4互換アドレス」として知られ、1995年に初めて言及され、1998年に初めて記述された。IPv4互換アドレスは、IPv6移行技術の中でIPv4アドレスを表現するのに使用された。IPv4互換アドレスは、最初の96ビットを0とし、残りの32ビットでIPv4アドレスを表現する。2006年2月、Internet Engineering Task ForceはIPv4互換アドレスの使用を非推奨とし廃止された。IPv6アドレスを格納することのできる固定長のメンバーを持つテーブルやデータベースで、IPv4互換アドレスはIPv4アドレスを意味することになっている。
アドレスブロック 3ffe::/16 は、1998年12月に6boneネットワークの試験目的に割り当てられた。それ以前には、アドレスブロック 5F00::/8 がこの目的のために使用されていた。両方のアドレスブロックは2006年6月にアドレスプールに返還された。

7.2. その他
--------

IPv6アドレスのDomain Name Systemの逆引き用のレコードは、intトップレベルドメインの下のip6ゾーンに登録されていた。2000年、インターネットアーキテクチャ委員会はarpaトップレベルドメインを廃止する意向を示したが、2001年にarpaトップレベルドメインがその本来の機能を維持しなければならないと決めた。ip6.intドメインはip6.arpaに移された。ip6.intゾーンは正式に2006年6月6日に除去された。
2011年3月、IETFは、エンドサイトへのアドレスブロックの配分の推奨を変更した。/48, /64, /128を割り当てる代わりに、インターネット・サービス・プロバイダは、より小さなブロックをエンドユーザに割り当てることを考えなければならない。地域レジストリARIN, RIPE, APNICの方針は、必要に応じて/56の割り当てを促す。

8. 脚注
-----

8.1. 注釈
-------

group="注釈"}}

8.2. 出典
-------

9. 参考文献
-------

10. 関連項目
--------

IPアドレス枯渇問題
IPv6
IPアドレス

11. 外部リンク
---------

[1]