IP version 4 (IPv4)の番号割り当てが、2011年2月に枯渇して、現在IP version 6 (IPv6)とIPv6を併用しつつIPv6へ移行している。 IPv4のアドレス4byteに対し、IPv6は16 byteで 枯渇しないサイズとして作られています。以下で比較をまとめてみました。
IPv4とは違い、IPv6にはブロードキャストアドレスは存在せず、マルチキャストアドレスが同様の役割を持つ。
IPアドレスからリンク層のアドレスを解決する場合にARPを使いましたが、ICMPv6 の近隣探索でこのマルチキャストが使われます。
この近隣探索(ND:Neighbor Discovery ネイバー デスカバリー)は、同一リンクに存在するルータやホストを発見するための機能で
NDP(Neighbor Discovery Protocol)によって行われる。
IPv4では、DHCPがない場合に、APIPA(Automatic Private IP Addressing)で設定されたリンクローカルのアドレスにより、同一ネットワーク内の通信が可能している。 IPv6ではこの機能に相当する考えが盛り込まれている。
IPv6にはエニーキャストアドレスと呼ばれるスコープがあり、複数のノードグループに同じアドレスを割り当て、その中の「一番近くにある」ひとつのノードと通信する。 エニーキャストアドレスはユニキャストアドレス空間から割り当てられるので、 この2つで表記上の区別をできない。
IPv6のユニキャスト割り当て方法では、DHCPの他にSLAAC(Stateless Address Auto Configuration)を使うことができ、、EUI-64かプライバシーエクステンションが使われる
IPv4のステートレスIPアドレス自動設定はAPIPA (Automatic Private IP Addressing:エー・ピー・アイ・ピー・エー)またはAutoIPと呼ばれる手法です。
これは次のように動作します。
(1)最初に自身のシステムに割り当てるIPアドレスを「169.254.1.0〜169.254.254.255」の範囲内からランダムに1つ選択する。
(2)ARP要求をネットワークにブロードキャストすることによって、そのIPアドレスがほかのシステムで利用されていないかどうかを確認する。
もしどこかのシステムからARPの応答が返ってくれば、そのIPアドレスは使用中であるとみなし、別のIPアドレスで再試行する。
このようにして未使用のIPアドレスを見つけ、それを自分のシステムに割り当てる。
以上によって、IPアドレスが重複しないことを保障します。この「169.254.*.*」というIPアドレスはリンク・ローカル・アドレスと呼ばれます。(RFC 5735で規定している)
このリンク・ローカル・アドレスは、一般的なプライベートIPアドレスと違い、どこの組織にも割り当てられていないことが保証され、APIPAでのみ有効な特別なIPアドレスと言えます。
近年のWindowsやMacintoshシステムなどでAPIPAは実装済みです。
これらのシステムでは、始めにDHCPなどでIPアドレスの取得を試みて、それが失敗するとAPIPAによってランダムなIPアドレスを割り当てるようになっています。
しかし、何らかのトラブルでDHCPによる割り当てが失敗した場合でも、APIPAでIPアドレスが割り当てられて、一見してネットワークが正常に機能しているようにみえて、
それがトラブルの原因となり、究明が難しくなることもあります。
対して、IPv6のステートレスIPアドレス自動設定は情報を管理せず(ステートレス)に、 ルータとノードのみでアドレスを設定することが可能です。
これはSLAAC (Stateless Address Auto Configuration)と呼ばれます。以下に手順を示します。
【ステップ1】IPv6のアドレスを設定したいホストは、 接続しているセグメントにルータが存在するかどうか、 もしあるのであればプリフィクス情報を送るようRS (Router Solicitation; ルータ要請)メッセージを、 すべてのルータ(全ルータにマルチキャスト(ff02::2))に対して送信します。
【ステップ2】RSメッセージを受け取ったルータは、 RA(Router Advertisement:ルータ広告)メッセージをすべてのホストに対してプリフィクスを送ります
(ff02::1のアドレスを使う全ホストへのマルチキャストを利用する)。
この時に使う送信元のIPアドレスは、MACアドレスをベースにしたリンク・ローカル・アドレスが使われる。
【ステップ3】ホストは応答されたRAの内容からプリフィクスを取得し、 ホストが生成するインタフェースIDを合わせてIPv6のアドレスを作って自身に設定します。
この時、ホストが生成するインタフェースIDには次の2通りの方法があります。
(1) プライバシ エクステンションをインタフェースIDに使う。
これは起動時にランダムに生成されるアドレスを使う方法でこのIPv6のアドレスは匿名アドレスと呼ばれます。
(2) EUI-64方式: 6bytes(48bit)のMACアドレスを前半と後半の3bytesずつに分け、その間に16進数の「ff:fe」を並べて、全部で8bytesの数値列にしてインタフェースIDに使う。
なお、DNS (Domain Name System)サーバや NTP (Network Time Protocol)サーバなども自動取得するためにはステートレスだけではできないので DHCP が必要になる。