連載
» 2012年05月24日 00時00分 UPDATE

Windows管理者のためのIPv6入門:第3回 L2アドレスを解決する近隣探索プロトコル (1/2)

イーサネットで通信する場合、相手のMACアドレスが分からないとパケットを送信できない。ARPに代わるIPv6の近隣探索機能とは?

[打越浩幸,デジタルアドバンテージ]
Windows管理者のためのIPv6入門
Windows Server Insider


「Windows管理者のための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の動作を簡単にまとめておくと、次のようになっている。

  1. あるノードPC1が、通信相手PC2のL2アドレス(MACアドレス)を知りたいとする。PC1は、PC2のL3アドレス(IPアドレス)をARPパケットに埋め込んで、ARP要求パケットをブロードキャスト送信する。
  2. ARPのブロードキャストを受信した各ノードは、自分自身のL3アドレスとARPパケット中の要求L3アドレスを比較し、一致していれば自分に対する要求であると判断し、自分自身のL2アドレスをARP応答パケットに埋め込んで、P1へ返信する。
  3. PC1は、受信したパケットからPC2のL2アドレスを取り出し、以後、それをあて先とする。
  4. 一度取得した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)」で定義されている。

wi-icmp01.gif 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アドレス解決の様子を次に示す。

wi-fig01.gif 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アドレス情報を入手できる。


       1|2 次のページへ

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。