IPv6アドレスのアドレス解決

IPv6パケットをネットワーク上に送り出すためには、イーサネットなど物理的なインタフェースで利用するデータリンク層プロトコルでカプセル化しなければいけません。IPv6アドレスに対するデータリンク層アドレスのマッピングが必要です。

IPv4では、IPv4アドレスに対するMACアドレスの対応付けのためにARPを利用しています。IPv6ではARPの代わりにICMPv6でIPv6アドレスに対応するMACアドレスを求められるようにしています。

図  IPv6アドレスのアドレス解決の概要
図  IPv6アドレスのアドレス解決の概要

IPv6アドレスのアドレス解決のためにICMPv6の次のメッセージを利用します。

  • NS(Neighbor Solicitation) タイプ135
  • NA(Neighbor Advertisement) タイプ136

NSはARPリクエストに相当し、NAはARPリプライに相当します。NS/NAを利用したアドレス解決は、IPv4におけるブロードキャストを利用するARPとは異なり、マルチキャストを利用します。IPv6ホストは、ユニキャストアドレスのインタフェースIDに応じて要請ノード(Solicited-node)マルチキャストグループに自動的に参加します。

要請ノードマルチキャストアドレス
FF02:0:0:0:0:1:FF00:0000~FF02:0:0:0:0:1:FFFF:FFFF

要請ノードマルチキャストアドレスの下位24ビットは、ユニキャストアドレスの下位24ビットをマッピングします。たとえば、2001:1:2:3::1のユニキャストアドレスに対する要請ノードマルチキャストアドレスは、FF02::1:FF00: 1です。

同一ネットワーク上にインタフェースIDの下位24ビットが重複しているホストが複数存在することはまずないでしょう。そのため、要請ノードマルチキャストグループに含まれるホストは、ほとんどの場合1台だけです。

図 要請ノードマルチキャストグループへの参加
図 要請ノードマルチキャストグループへの参加

こうした要請ノードマルチキャストを利用することで、アドレス解決をしたいホスト以外には余計な負荷をかけずにすみます。

IPv6アドレス解決の動作

アドレス解決を行うトリガーは、IPv4でのARPのときと同様です。IPv6アドレスを指定して、IPv6パケットをネットワークに送り出そうとするときに自動的に行われます。IPv6アドレスに対するアドレス解決の動作の流れは次の通りです。

  1. NSを送信
  2. NAでNSに応答
  3. ネイバーキャッシュを更新

指定したIPv6アドレスに対応するMACアドレスを求めるためにICMPv6 NSを送信します。このときの宛先IPv6アドレスは解決したいIPv6アドレスに対応する要請ノードマルチキャストアドレスです。また、送信元IPv6アドレスはリンクローカルアドレスです。

ICMPv6 NSはマルチキャストなので、同一ネットワーク内でフラッディングされます。アドレス解決の対象でなければ、宛先の要請ノードマルチキャストグループに参加していないので、NSは破棄されます。つまり、アドレス解決対象のホストのみがNSを受信することになります。

NSに対する返事として、ICMPv6 NAを返します。NAはユニキャストで返すことになります。

NAが返ってくると、ARPキャッシュに相当するネイバーキャッシュを更新します。ネイバーキャッシュにエントリが存在すれば、キャッシュ内の情報を利用するようになります。

図 IPv6アドレス解決の動作
図 IPv6アドレス解決の動作

宛先になるMACアドレスがわかったら、送信したいIPv6パケットにイーサネットヘッダをカプセル化して、ネットワーク上に送り出すことができます。

ここでは詳しく触れませんが、IPv6 ACLにはICMPv6 NS/NAを許可するための暗黙のpermit条件が追加されるようになっています。NS/NAがdenyされてしまうとアドレス解決ができずに、IPv6パケットをネットワーク上に送り出すことができなくなってしまうことを防ぐためです。

関連記事