近隣探索プロトコル
IPv6で同じリンク上の機器と通信するために、アドレス解決、ルータ探索、近隣機器への到達性の確認などの手順を定めたプロトコルである。ICMPv6の5種類のメッセージを使って、問い合わせや応答、ネットワーク情報の通知などを行う。
イマシルちゃんの解説
IPv6で通信するときは、外へデータを渡すルーターを見つけたり、同じネットワークの相手と通信できるか確かめたりするよ。
こうした確認や情報交換の手順をまとめて定めたのが、近隣探索プロトコルなんだ。
実際のやり取りには、通信の通知や確認に使うICMPv6のメッセージを使うよ。
たとえば、機器が「ルーターはいますか」と問い合わせると、ルーターが自分の存在やネットワークの情報を知らせるの。
イーサネットで相手のMACアドレスを調べるときには、別の種類のメッセージを使うんだ。
目的に応じてメッセージを使い分け、データを渡す相手を見つけたり、その相手とまだ通信できるか確かめたりするんだよ。
この解説はわかりやすかったですか?
より深い解説
定義
近隣探索プロトコル(NDP:Neighbor Discovery Protocol)は、RFC 4861で定められた、IPv6のリンク(同じネットワーク)上の機器同士が互いを見つけ、情報を交換するための仕組みである。ICMPv6の5種類のメッセージを使って実現するプロトコルである。
使うメッセージ
| タイプ | メッセージ | 送る側 → 受ける側 |
|---|---|---|
| 133 | ルータ要請(RS:Router Solicitation) | ホスト → ルータ。「ルータはいますか」 |
| 134 | ルータ広告(RA:Router Advertisement) | ルータ → ホスト。プレフィックスなどを知らせる |
| 135 | 近隣要請(NS:Neighbor Solicitation) | 「このアドレスの人はいますか」 |
| 136 | 近隣広告(NA:Neighbor Advertisement) | 「それは私です。MACアドレスはこれです」 |
| 137 | リダイレクト | ルータ → ホスト。よりよい次の転送先を教える |
主な機能
| 機能 | 内容 |
|---|---|
| アドレス解決 | NSとNAで、IPv6アドレスからMACアドレスを求める。IPv4のARPに当たる |
| ルータ探索 | RSとRAで、デフォルトゲートウェイになるルータを見つける |
| プレフィックス探索 | RAで、そのネットワークのプレフィックスを知る。これをもとにアドレスを自動生成できる(SLAAC) |
| 重複アドレス検出(DAD) | NSで、使おうとしているアドレスがほかの機器と重複していないかを確かめる |
| 近隣到達不能検出(NUD) | 相手が今も通信できる状態かを確かめる |
| リダイレクト | よりよい経路をホストに知らせる |
ブロードキャストを使わない工夫
IPv4のARPはブロードキャストで全員に問い合わせるが、NDPのアドレス解決は要請ノードマルチキャストアドレス(ff02::1:ff00:0/104 に、問い合わせたいアドレスの下位24ビットを付けたもの)宛てに送る。下位24ビットが同じ機器だけが受け取るので、関係のない機器の負担が減る。
ルータ広告のフラグ
RAには、アドレスをどう設定するかを指示するフラグがある。
RAはDHCPv6を使うべきかどうかを知らせるだけで、DHCPv6サーバのアドレスそのものは、ホストがDHCPv6のメッセージをマルチキャストで送って見つける。
セキュリティ
NDPには認証の仕組みがないため、偽のRAを送ってデフォルトゲートウェイになりすます攻撃などが可能である。スイッチで不正なRAを遮断するRAガードなどの対策がある。