IPv6アドレス解決に利用するメッセージ

IPv4アドレスのアドレス解決はARPを利用します。IPv6ではARPによるアドレス解決は行いません。IPv6アドレスのアドレス解決のためにICMPv6を利用します。IPv6アドレスのアドレス解決を行うために、以下のICMPv6のメッセージを利用します。

  • NS(Neighbor Solicitation)
    ICMPv6メッセージタイプ135
  • NA(Neighbor Advertisement)
    ICMPv6メッセージタイプ136

NSメッセージは、ARPリクエストに相当しMACアドレスを問い合わせるためのメッセージです。そして、NAメッセージは問い合わされたMACアドレスを応えるARPリプライに相当します。

IPv6アドレス解決の仕組み

NS/NAメッセージによるIPv6アドレスのアドレス解決の仕組みについて見ていきましょう。まず、前提としてIPv6インタフェースはユニキャストアドレスに応じた要請ノードマルチキャストのメンバーとなっています。たとえば、次の図のようにホストのインタフェースに設定されているリンクローカルユニキャストアドレス、グローバルユニキャストアドレスからFF02::1FF11:1111という要請ノードマルチキャストアドレスのメンバーになっています。

ipv6_address_resolution01.png
図 要請ノードマルチキャストアドレスのメンバー

ARPのようにブロードキャストではなく、要請ノードマルチキャストを利用して効率のよいアドレス解決を行います。アドレス解決の動作として、次の3ステップで考えます。

  1. NSメッセージでMACアドレスを問い合わる
    IPv6アドレスに対するMACアドレスを解決するときに、NSメッセージを送信します。NSメッセージの送信先IPv6アドレスは、解決したいIPv6アドレスに対応する要請ノードマルチキャストアドレスです。要請ノードマルチキャストアドレスを利用することで、アドレス解決をしたいIPv6アドレスを持つホストのみがNSメッセージを受信します。IPv4ではARPリクエストをブロードキャストするので、アドレス解決の対象ホスト以外もARPリクエストを受信してしまいます。一方、IPv6のNSメッセージは原則として、アドレス解決の対象ホストのみ受信することになります。
  2. NAメッセージでNSメッセージの返事をする
    NSメッセージを受信したホストは、その返事としてNAメッセージを送信してMACアドレスを通知します。
  3. ネイバーディスカバリーキャッシュを更新
    解決したMACアドレスをネイバーディスカバリーキャッシュに保存します。これは、ARPキャッシュに相当するものです。ネイバーディスカバリーキャッシュはアドレス解決の対象と問い合わせ元の両方で保持されることになります。

IPv6アドレス解決の例

次の図でホスト1からホスト2にIPv6パケットを送信するときのNS/NAメッセージによるアドレス解決を見ていきます。

ipv6_address_resolution02.png
図 IPv6アドレスのアドレス解決

まず、この図のようにIPv6アドレスが設定されているとホスト1、ホスト2は自動的にそれぞれのIPv6アドレスに応じた要請ノードマルチキャストアドレスのメンバーとなっています。

ホスト1-FF02::1:FF11:1111
ホスト2-FF02::1:FF22:2222

リンクローカルアドレスとグローバルユニキャストアドレスのインタフェースIDが同じなので参加している要請ノードマルチキャストアドレスは1つだけです。ですが、リンクローカルアドレスとグローバルユニキャストアドレスのインタフェースIDが異なっていれば、それぞれのインタフェースIDを反映した要請ノードマルチキャストアドレスのメンバーとなります。
そして、ホスト1からホスト2の2001:1:1:1::2222:2222のアドレスにIPv6パケットを送信するときには、ホスト1から2001:1:1:1::2222:2222のMACアドレスを問い合わせるためのNSメッセージを送信します。ホスト1から送信されるNSメッセージのアドレス情報は次のようになります。

NSメッセージのアドレス情報

  • 送信先MACアドレス:33:33:FF:22:22:22
    (要請ノードマルチキャストアドレスに対応するMACアドレス)
  • 送信元MACアドレス:A
  • 送信先IPv6アドレス:FF02::1:FF22:2222
    (アドレス解決対象のIPv6アドレス 2001:1:1:1::2222:2222に対応する要請ノードマルチキャストアドレス)
  • 送信元IPv6アドレス:2001:1:1:1::1111:1111

ipv6_address_resolution03.png
図 NSメッセージの送信

NSメッセージを受信したホスト2は、その返事としてNAメッセージを送信します。ホスト2のNAメッセージのアドレス情報は、次のようになります。

NAメッセージのアドレス情報

  • 送信先MACアドレス:A
  • 送信元MACアドレス:B
  • 送信先IPv6アドレス:2001:1:1:1::1111:1111
  • 送信元IPv6アドレス:2001:1:1:1::2222:2222

ipv6_address_resolution04.png
図 NAメッセージの送信

ホスト1はNAメッセージで2001:1:1:1:2222:2222のMACアドレスはBであることがわかります。こうして解決したIPv6アドレスとMACアドレスの対応をネイバーディスカバリーキャッシュに保存します。ネイバーディスカバリーキャッシュは、ホスト1、ホスト2ともに作成されます。

ipv6_address_resolution05.png
図 ネイバーディスカバリーキャッシュの更新

なお、詳細には触れませんが、IPv6のアクセスリストの設定には注意が必要です。上記のようにアドレス解決のためにICMPv6のNS/NAメッセージを利用しています。アクセスリストでICMPv6 NS/NAメッセージを拒否してしまうと、アドレス解決ができなくなり、通信自体できなくなってしまいます。そのため、IPv6のアクセスリストにはICMPv6のNS/NAメッセージをpermitする暗黙のpermit条件があります。