IPv6: 基礎知識


IPV6の基礎知識

IPv6パケット
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |            Flow Label                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Payload Length          | Next Header |    Hop Limit    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Source Address                            |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Destination Address                          |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|    your data ....                                             |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

特徴は次の通り。


アドレス表記

128bitを16bitずつ16進数表記して':'でつないで表す。 16進数の最上位から続く0は省略できるが、全部消すと異なる意味になる。 0だけの16進数が続く場合は省略して '::'と記述できる。この省略は1箇所のみで可能。

以下のアドレスはすべて同じ意味となる。

  2001:0db8:0000:0000:1234:0000:0000:0abc
  2001:0db8:0000:0000:1234:0000:0000:abc
  2001:0db8::1234:0000:0000:abc
  2001:0db8:0000:0000:1234::abc
  2001:0db8:0000:0000:1234::ABC

128bitのうち、上位64bitがネットワークを、下位64bitがインターフェイスIDを表す。

ネットワークアドレスは "ipv6-address/prefix-length" の形式で表す。

(例) 2001:0db8:0000:000::/64

インターフェイスIDは下位64bitであり、all 0やall 1も使用可能である。

アドレスタイプ

Address Type IPv4 IPv6 説明
ユニキャスト 1対1の通信を行う
マルチキャスト 1対多の通信を行う
ブロードキャスト 廃止 1対多の通信を行う
エニーキャスト 標準ではない 1対「最も近いノード」との通信を行う

アドレス・プレフィックス

http://www.iana.org/assignments/ipv6-address-space
Prefix(hex) Prefix(bin) 割当状況 RFC 説明
2000::/3 001 Global Unicast Address RFC 4291 インターネットと通信可能。
FC00::/7 1111 110 Unique Local Unicast Address (注 FD00::/8と考えるべき) RFC 4193 プライベート・アドレス
FE80::/7 1111 1110 10 Link-Local Unicast Address RFC 4291 アドレス自動構成やルーティングプロトコルの隣接関係形式に用いる。通常のユーザの通信用ではない。
FF00::/8 1111 111 Multicast Address RFC 4291
RFC

ユニキャストアドレス

ユニキャストアドレスとして以下の3通りが定義されている。


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

                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Global Routing Prefix (2000::/3)                         |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |        Subnet ID              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                   Interface ID                                +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 1 1 1 1 1 0 L|         Global ID                             |
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |        Subnet ID              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                   Interface ID                                +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

「すべてグローバルアドレスを使えばよい」という意見もあったが、次のような理由により 「やはりプライベートアドレス相当のものが必要である」ことになった。

ULAのプレフィクスは FD00::/8 なので、ネットワーク部の下位56bitを自由に決定できる。 できるだけ他とかぶらない割り当て方として、 「グローバルID部分に乱数を用いる」方法がある。 56bitのうちの上位の40bitを乱数で決定し、 下位16bitはサブネットとして使うとよいだろう。 乱数で40bitを決定するには、 「現在時刻」と「唯一無二のラベル(Macアドレスなど)」を合成してから SHA-1ハッシュ値を計算しその下位40bitを切り出す方法が提案されている。

  1. Keyを作成する。
    1. NTPを用いて現在時刻を 8 byte (64bit) で取得する。
    2. 次のどれかを用いて2つめのKeyを作成する。
    3. Key1 と Key2 を合成して Key を作成する。
  2. Keyに対して SHA-1 で 160 bits のハッシュ値を計算する。
  3. 0xfd という8bitの後ろにハッシュ値の下位40bitをつないで48bitのビットパターンを生成し、 これを IPv6のUnique Local Unicast Address とする。

リンク・ローカルユニキャストアドレス

                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 1 1 1 1 1 1 0 1 0|          all 0                            |
+-+-+-+-+-+-+-+-+-+-+                                           +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                   Interface ID                                +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

マルチキャストアドレス

                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Prefix     | Flags | Scope |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+                                                               +
|                   Group ID                                    |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 Flags: 0RPT
         R: ランデブーポイント埋め込み(0=なし、1=あり)
          P: Prefix情報埋め込み(0=なし、1=あり)
           T: マルキキャストアドレス(0=Wellknown、1=一時的)
 Scope:
 0000 (0) 予約済み
 0001 (1) インターフェイス・ローカル・スコープ
 0010 (2) リンク・ローカル・スコープ
 0011 (3) 予約済み
 0100 (4) 管理ローカル・スコープ
 0101 (5) サイト・ローカル・スコープ
 1000 (8) 組織ローカル・スコープ
 1110 (E) グローバル・スコープ
 1111 (F) 予約済み
IPv6 Address マルチキャストグループ
ノード・ローカル・スコープ
FF01::1全ノード
FF01::2全ルータ
リンク・ローカル・スコープ
FF02::1同一リンク上の全ノード
FF02::2同一リンク上の全ルータ
FF02::5同一リンク上の全OSPFルータ
FF02::6同一リンク上の全OSPF DR
FF02::9RIP
FF02::AEIGRP
FF02::BMobile Agent
FF02::1:2DHCPサーバ/リレー・エージェント
FF02::DPIM
サイト・ローカル・スコープ
FF05::2サイト内の全ルータ
FF05::1:3サイト内の全DHCPサーバ
組織ローカル・スコープ
FF08::組織内でマルチキャストを使用するノード
グローバル・スコープ
FF0E::インターネット上でマルチキャストを使用するノード

特殊アドレス

Prefix 用途 インターネットへの配布 説明
::/0 Default Route - 経路が不明のパケットを送信するための経路
::/128 Unspecified Addresses x アドレスが付与されていないことを意味する。DHCPでIPの割当を要求するときに使用する。
::1/128 Loopback Addresses x 自分自身を意味するIPアドレス。
fe80::/10 Link-Local Unicast x
fc00::/7 Unique Local Unicast x プライベートアドレス。ffc0::/8はIANAに予約されているのでffd0::/8 として使うべき。
ff00::/8 Multicast o
2001:db8::/32 ドキュメント作成用 x ドキュメント作成時に利用する。
2002::/16 トンネルで利用する o 6to4
2001::/32 トンネルで利用する o Teredo
::ffff:0:0/96 IPv4-Mapped Address x

エニーキャスト用アドレス

下位7ビットを用いて127個のエニーキャストアドレスが利用できるが、 そのうちの 0x00, 0x7e, 0x7f はIANAが予約 している。

「最も近いノードと通信する」ことが可能になる。

関連RFCは以下の通り

アドレスプレフィックス

Prefix(hex) Prefix(bin) 割当状況 RFC 説明
0::/8 0000 0000 Reserved by IETF RFC 4291
100::/8 0000 0001 Reserved by IETF RFC 4291
200::/7 0000 001 Reserved by IETF RFC 4048
400::/6 0000 01 Reserved by IETF RFC 4291
800::/5 0000 1 Reserved by IETF RFC 4291
1000::/4 0001 Reserved by IETF RFC 4291
2000::/3 001 Global Unicast Addresses RFC 4291
4000::/3 010 Reserved by IETF RFC 4291
6000::/3 011 Reserved by IETF RFC 4291
8000::/3 100 Reserved by IETF RFC 4291
a000::/3 101 Reserved by IETF RFC 4291
c000::/3 110 Reserved by IETF RFC 4291
e000::/4 1110 Reserved by IETF RFC 4291
f000::/5 1111 0 Reserved by IETF RFC 4291
f800::/6 1111 10 Reserved by IETF RFC 4291
fc00::/7 1111 110 Unique Local Unicast Addresses RFC 4193
fe00::/9 1111 1110 0 Reserved by IETF RFC 4291
fe80::/7 1111 1110 10 Link-Local Unicast Addresses RFC 4291
fec0::/10 1111 1110 11 Reserved by IETF RFC 4291
ff80::/8 1111 1111 Multicast Addresses RFC 4291