重複アドレス検出
IPv6で、自分が使おうとしているアドレスが、同じネットワークのほかの機器と重複していないかを使う前に確かめる仕組み。近隣探索プロトコルの機能の1つ。
イマシルちゃんの解説
新しく引っ越してきたら、表札を出す前に「この名前、ご近所に同じ人いませんか?」って確かめたくなるよね。
もし同じ名前の人がいたら、郵便物が混ざっちゃう!
IPv6の機器も、アドレスを使い始める前に「このアドレスを使ってる人はいませんか?」って聞いて回るんだ。
返事がなければ、晴れてそのアドレスを使えるよ!
より深い解説
定義
重複アドレス検出(DAD:Duplicate Address Detection)は、RFC 4862で定められた、IPv6アドレスの重複を確かめる手順である。近隣探索プロトコル(NDP)の近隣要請(NS)メッセージを使う。
自動生成したアドレスでも、手動で設定したアドレスでも、リンクローカルアドレスを含むすべてのユニキャストアドレスについて行う。
手順
- 使おうとするアドレスを「仮のアドレス」(tentative address)として扱い、まだ通信には使わない
- その仮のアドレスを問い合わせる近隣要請(NS)を送る
- 送信元アドレス:未指定アドレス(::)(まだ自分のアドレスを使えないため)
- 宛先アドレス:仮のアドレスの要請ノードマルチキャストアドレス
- 一定時間内に、そのアドレスについての近隣広告(NA)が返ってこなければ、重複なしと判断してアドレスを使い始める
- NAが返ってきたら、すでにほかの機器が使っているので、そのアドレスは使わない
重複が見つかったとき
重複が見つかったアドレスは使われない。特に、MACアドレスから作るリンクローカルアドレスが重複した場合は、MACアドレスの重複などハードウェアの問題が疑われるため、そのインタフェースでのIPv6の通信が止まることがある。
IPv4との比較
IPv4にも、ARPを使って同じことを行う仕組み(Gratuitous ARP、RFC 5227のアドレス競合検出)があるが、必須ではない。IPv6ではアドレスを自動生成すること(SLAAC)が前提なので、DADが標準の手順として組み込まれている。