要約

  • RFC 4861 の基本的な NUD では、設定回数のプローブに応答がないと Neighbor Cache Entry を削除した。
  • RFC 7048 は UNREACHABLE を導入し、代替隣接者を優先しながら、リンク層アドレスをマルチキャスト探索と指数バックオフの下で保持できるようにした。

短い失敗判定の裏側

NUD は、学習済みの隣接者を常時検査する仕組みではない。上位層が示す転送の進展や、Neighbor Solicitation に対する solicited Neighbor Advertisement が、正の到達性確認になる。使用中のエントリーは通常 REACHABLE、STALE、DELAY、PROBE の順に進み、PROBE ではキャッシュ済みリンク層アドレスへユニキャストの Neighbor Solicitation を送る。

RFC 4861 の概念モデルでは、応答のない再送が上限に達するとエントリーを削除した。RFC 7048 が示す一般的な既定値は、1秒間隔の3回である。別のデフォルトルーターがある場合や、Redirect で作られた選択を捨てて次ホップ選択をやり直す場合には、この速さは合理的だった。

しかし代替がなければ、削除しても新しい経路は生まれない。次の通信はアドレス解決をやり直し、リンク層の一時障害中にマルチキャスト要求を増やす可能性がある。

記録は残し、選好は取り消す

RFC 7048 は削除の位置で UNREACHABLE へ移行する。再送タイムアウトを延ばし、マルチキャストの Neighbor Solicitation を送る。通常のエントリーはリンク層アドレスを保持し、その宛先への IPv6 パケット送信も可能だが、「到達可能と確認済み」の隣接者としては扱われない。そのため次ホップ選択では代替を優先できる。

Redirect 由来のエントリーは例外的に扱われる。削除してもよく、UNREACHABLE の間は転送に使うべきではない。また、保持は永続的なメモリー所有を意味しない。実装は UNREACHABLE エントリーをガベージコレクションの候補にできる。

広く尋ね、ゆっくり続ける

最初の再送から60秒以内には、初期探索がユニキャストであってもマルチキャストへ切り替えなければならない。これにより、リンク層アドレスを変更した隣接者が応答できる。初期上限を越える再送には指数バックオフを使い、例えば60秒程度の妥当な上限で間隔を抑える。エントリーを使う通信がなければ、再利用または回収まで再送を止める。

RFC 7048 の例示タイマーはアルゴリズムを説明するもので、全実装に共通する必須スケジュールではない。RFC 6583 は、未割り当てアドレスを大量に解決すると Neighbor Discovery のキューやキャッシュを圧迫し得ることを示す運用上の背景であり、UNREACHABLE 遷移そのものを定める文書ではない。

RFC 7048 の変更は、到達性の喪失を「優先しない」と「記録を破棄する」に分解した点にある。

出典