第3回 L2アドレスを解決する近隣探索プロトコル:Windows管理者のためのIPv6入門(1/2 ページ)
イーサネットで通信する場合、相手のMACアドレスが分からないとパケットを送信できない。ARPに代わるIPv6の近隣探索機能とは?
前回までは、IPv6アドレスの基本と、IPv6パケットの構造について解説した。今回は、同一ネットワーク・セグメント上に接続されたIPv6ノード同士で、どうやってL2のアドレス(MACアドレスなど)を見つけるかについて見ていく。
IPv6アドレスを MACアドレスに変換するL2アドレス解決
IPv6で通信する場合、ユーザーやアプリケーションではIPv6アドレスを使って通信相手を識別・特定するが(*1)、実際のイーサネットなどのL2(OSI階層モデルでいう第2層のこと)メディアではL2アドレス(*2)を使って通信相手を識別している。そのため、IPv6でデータをほかのノードに送信するためには、そのノードが持つL2アドレスを何らかの方法で調べておき、そのL2アドレスをあて先としてイーサネット・パケットを送信しなければならない。このように、IPv6やIPv4のIPアドレス(L3アドレス)からL2アドレスを求める処理のことを「L2アドレス解決(L2 address resolution)」とか「MACアドレス解決(MAC address resolution)」という。
*1 名前を使う場合は、何らかの方法で名前からIPv6アドレスへ変換しておく必要がある。その方法については本連載の第6回と第7回を参照していただきたい。
*2 イーサネットなどでは「MACアドレス」と呼ばれている。ネットワーク・アダプタごとに割り当てられている6bytesのユニークな数値。
IPv4の場合は、「ARP(Address Resolution Protocol)」というプロトコルを使って通信相手のIPv4アドレスからそのノードのMACアドレスを求めていた(次の記事参照)。
参考のためにIPv4のARPの動作を簡単にまとめておくと、次のようになっている。
- あるノードPC1が、通信相手PC2のL2アドレス(MACアドレス)を知りたいとする。PC1は、PC2のL3アドレス(IPアドレス)をARPパケットに埋め込んで、ARP要求パケットをブロードキャスト送信する。
- ARPのブロードキャストを受信した各ノードは、自分自身のL3アドレスとARPパケット中の要求L3アドレスを比較し、一致していれば自分に対する要求であると判断し、自分自身のL2アドレスをARP応答パケットに埋め込んで、P1へ返信する。
- PC1は、受信したパケットからPC2のL2アドレスを取り出し、以後、それをあて先とする。
- 一度取得したL3アドレスとL2アドレスの情報は「ARPテーブル」に(デフォルトでは最大10分間)キャッシュしておき、以後は通信相手のL3アドレスをここから取得する。ARPテーブル中に見つからない場合は、上記1〜3の手順を繰り返す。
IPv6の場合もこのARPと似たような仕組みを使っているが、IPv4の場合と違って、IPv6ではICMPv6の「近隣探索(ND:Neighbor Discovery)」機能を使って実現している点が異なる(*3)。近隣探索とは、同一リンク(同一のネットワーク・セグメントのこと)上にあるIPv6のノードを見つけることだが、IPv4のARPやルータ発見、リダイレクトなど、ルーティング/L2アドレス解決に関する機能をまとめて整理している。今回は近隣探索のうち、IPv6ルータが存在しない、最もシンプルな形態のIPv6ネットワークにおける探索手順について詳しく見ていこう。IPv6ルータが存在するネットワークや、ドメイン名からIPv6への名前解決も同時に行うようなケースについては次回以降で取り上げる。
*3 「Neighbor Discovery」の訳語には近隣探索のほか、近隣者発見とか近隣発見などいくつかあるが、本連載ではWindows 7などでの用語に合わせている。
ICMPv6の近隣探索(ND)パケットの構造
まず近隣探索で利用されるICMPv6パケットの構造について見ておこう。ICMPv6にはいくつかのメッセージ・タイプ(コマンド)があるが、近隣探索では次のようなパケットが使われる。これはRFC 4861の「Neighbor Discovery for IP version 6 (IPv6)」で定義されている。
ICMPv6のNeighbor Solicitation/Neighbor Advertisementパケット
上はICMPv6のパケットの構造。ICMPv4の場合とほとんど同じである。メッセージ・ボディ部分に、メッセージ・タイプに応じたさまざまなデータをセットする。ICMP6にはいくつかの近隣探索(ND)関連のメッセージ・タイプ(コマンド)が定義されているが、これはそのうちの「Neighbor Solicitation」と「Neighbor Advertisement」パケットの例。IPv4におけるARP要求とARP応答に相当する。「ターゲット IPv6 アドレス」にIPv6アドレスを入れてマルチキャスト送信し、結果を受け取る。
近隣探索では次のようなタイプが定義されているが、今回は135と136の2つに注目する。
タイプ | 名前 | 意味 |
---|---|---|
133 | Router Solicitation(RS) | 同一リンク上におけるIPv6ルータの探索に使用される。ルータ情報の要求 |
134 | Router Advertisement(RA) | RSに対する応答。ルータは定期的にこのパケットを送信することにより、ほかのIPv6ノードに対してルータやIPv6アドレス情報などを通知する |
135 | Neighbor Solicitation(NS) | 同一リンク上におけるIPv6ノードのL2アドレス解決に使用される。IPv4におけるARP要求に相当 |
136 | Neighbor Advertisement(NA) | NSに対する応答。IPv4におけるARP応答に相当 |
137 | Redirect | より望ましいルーティング先情報の通知。IPv4におけるICMPリダイレクトに相当 |
近隣探索に利用される主なICMPv6メッセージ ICMPv6にはいくつかのサブコマンド(メッセージ・タイプ)があるが、リンク上でL2アドレス解決したり、ルータを見つけたりするために利用されるものとしては、これら5つがある。今回は135と136の2つに注目する。 |
IPv6における近隣探索
Neighbor SolicitationとNeighbor Advertisementを使った、IPv6におけるL2アドレス解決の様子を次に示す。
IPv6における近隣探索の動作
PC1からPC2に対してIPv6で通信を行おうとすると、通信に先立って、PC1はPC2のMACアドレスを入手する必要がある。これをL2アドレス解決という。IPv6では、ICMPv6の近隣探索機能を使ってこれを行う。
ここではPC1からPC2に対して、IPv6で通信を行おうとしているとする。PC1がPC2と通信するためには、PC2のMACアドレスが必要である。そこで、最初にPC2に対して近隣探索のNeighbor Solicitationパケットをマルチキャスト送信する。するとPC2はそれに対してNeighbor Advertisementパケット中に自分自身(PC2)のMACアドレスをセットしてユニキャスト通信で返す。これでPC1はPC2のL2アドレス情報を入手できる。
Copyright© Digital Advantage Corp. All Rights Reserved.