概要
IPv6 のための近隣者発見 (Neighbor Discovery) の方法 (プロトコル) の最新のドラフト標準 RFC 4861 は 2007 年 9 月に発行されたものである. IPv4 においては近隣者発見のために ARP (Address Resolution Protocol) という専用のプロトコルが使用されたが,IPv6 においてはそのために ICMPv6 (Internet Control Message Protocol for IPv6, IPv6 のためのインターネット制御メッセージ・プロトコル) が使用される. ARP は下位 (2 層) のプロトコルに依存していたが,近隣者発見はマルチキャストを使用することによって 2 層から独立しているところに特徴がある.
近隣者発見の機能
この方法によってつぎのような機能が実現される.
- ルータ発見 (Router Discovery)
- ホスト・コンピュータがそれと同一リンク上にあるルータの位置を特定する.
- プレフィクス発見 (Prefix Discovery)
- ホスト・コンピュータが接続されたリンクのアドレス・プレフィクスをみつける.
- パラメタ発見 (Parameter Discovery)
- リンク MTU や外向きパケットのホップ・リミットのようなインターネット・パラメータを学習する.
- アドレス自動設定 (Address Autoconfiguration)
- インタフェースに自動的にアドレスを設定する.
- アドレス解決 (Address Resolution)
- 宛先 IP アドレスだけを知っているときにリンク上の宛先 (たとえば近隣者) のリンク層アドレスを決定する.
- 次転送先決定 (Next-hop Determination)
- 宛先 IP アドレスをそのパケットを送るべき近隣者の IP アドレスにマップする.
- 近隣者到達不可能性検出 (NUD, Neighbor Unreachability Detection)
- 近隣者にもはや連絡可能ではないことを知る.
- 重複アドレス検出 (DAD, Duplicate Address Detection)
- 使おうとしたアドレスを他のノードが使用していないかどうかを知る.
- リダイレクト (Redirect)
- 特定の宛先に届けるためによりよい次転送先ノードがあるとルータがホストに知らせる.
プロトコル・メッセージ
上記の機能を実現するため,つぎのような 5 種類の ICMPv6 パケットが使用される.
- ルータ要請 (Router Solicitation)
- インタフェースが使用可能になったとき,ホストがルータにルータ要請を送ることによって,次の予定されたルータ広告の前にすぐにルータ広告を受信することができる.
メッセージ形式はつぎのとおりである.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options ... +-+-+-+-+-+-+-+-+-+-+-+-
- ルータ広告 (Router Advertisement)
- ルータが周期的またはルータ要請メッセージにこたえて,ルータの存在と種々なリンクとインターネット・パラメータを広告する.
メッセージ形式はつぎのとおりである.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cur Hop Limit |M|O| Reserved | Router Lifetime | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reachable Time | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Retrans Timer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options ... +-+-+-+-+-+-+-+-+-+-+-+-
- 近隣者要請 (Neighbor Solicitation)
- 近隣者のリンク層アドレスを決定するか,キャッシュされたリンク層アドレスで近隣者にまだ到達可能であるかを確かめるためにノードから送信される.
メッセージ形式はつぎのとおりである.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Target Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options ... +-+-+-+-+-+-+-+-+-+-+-+-
- 近隣者広告 (Neighbor Advertisement)
- 近隣者要請メッセージに対する応答.
または,ノードがリンク層アドレスの変更を通知するために要請されていない近隣者広告を送信することもある.
メッセージ形式はつぎのとおりである.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |R|S|O| Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Target Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options ... +-+-+-+-+-+-+-+-+-+-+-+-
- リダイレクト (Redirect)
- もっとよい次転送先をルータがホストに知らせるために使用される.
メッセージ形式はつぎのとおりである.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Target Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options ... +-+-+-+-+-+-+-+-+-+-+-+-
近隣者発見に関する問題点
近隣者発見に関する問題点については 「IPv6 のセキュリティ上の問題」 においてのべている.
参考文献
- この項目の記述にあたっては Wikipedia の Neighbor Discovery Protocol の項目 (http://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol)を参照した.
- 「近隣者発見」 という訳語については 「Neighbor discovery の訳語 ― 近隣者発見 (?!)」 (http://www.kanadas.com/weblog/2007/11/neighbor_discovery.html) を参照.