重複アドレス検出(DAD)

 SLAACを使用する場合、RAメッセージからの64ビットのIPv6サブネット情報を用いて残りの64ビットのインターフェイスIDを生成します。

インターフェイスIDを生成する方法には、下表のように2つあります。

ランダム方式64ビットのインターフェイスIDをランダムに生成します。Windowsでは、ランダムに生成する方法がデフォルトですが、ユーザがEUI-64形式を使用する方法に変更することもできます。
EUI-64方式 ホストは、48ビットのMACアドレスを使用してインターフェイスIDを作成します。MACアドレスの上位3バイトと下位3バイトの間の中央に16進値「fffe」を挿入します。
詳細は「IPv6(インターフェイスID)」を参照してください。
 この方法は、OSによっては、プライバシー上の問題により、EUI-64方式ではなく、ランダム方式を採用しています。これは、EUI-64方式では、ホストのイーサネットMACアドレスアドレスから、ホストを特定できるため匿名性がないためです。

 上表の2つのプロセスにより、ホストは、IPv6アドレスを作成できますが、問題点があります。それは、生成されるアドレスがネットワーク上で一意である保証がないということです。

 一意でない可能性は、極めて低くなりますが、64ビットのインターフェイスIDは、264、すなわち、1/1,800京の確率で重複する可能性があります。

 そこで、SLAACには、IPv6アドレスが管理されないステートレスなプロセスであるため、ホストに生成されたIPv6アドレスを使用する前に一意であることを確認する仕組みが用意されています。

 その仕組みは、重複アドレス検出 (DAD:Duplicate Address Detection)という仕組みです。ホストは、生成したIPv6 GUA が一意であることをDADを使用して確認できます。

 生成されるIPv6アドレスが、重複する確率が非常に低いため、DADは必須ではありませんが、Internet Engineering Task Force(IETF)では、使用することを推奨しています。

 DADは、ICMPv6を使用します。ホストは ICMPv6 ネイバー要請(NS:Neighbor Solicitation)メッセージを、要請ノードマルチキャストアドレスというマルチキャストアドレスで送信します。

 このマルチキャストアドレスは、ホストのIPv6アドレスの最後の24ビットを複製して生成されます。

 ネットワーク上の他のデバイスが、NA(Neighbor Advertisement)メッセージで応答しない場合、アドレスは一意であることが事実上保証され、ホストが使用することができます。

 ホストがNAを受信した場合、アドレスは重複するため、一意ではありません。OSは新しいインターフェイスIDを再度、生成します。

 このように、生成されるIPv6アドレスが重複する可能性は、ほとんどありませんが、DADというメカニズムが用意されており、ほとんどのOSでは、この仕組みを利用して、IPv6アドレスが重複することを回避しています。