摘要

  • RFC 4429 引入 Optimistic 地址:DAD 尚未结束时即可有限使用,但源地址选择仍优先考虑其他合适地址。
  • 对 Neighbor Discovery 行为的限制,降低了临时地址覆盖合法节点邻居缓存的风险。
  • 发现冲突后地址必须取消配置;RFC 7527 只改进了对反射探测报文的判断。

在“不可用”和“已确认”之间

传统 DAD 中,Tentative 地址在检查期间不能进行普通通信。RFC 4429 增加了一个中间状态:地址已经配置到接口,可以开始受限通信,但链路上的唯一性仍未确定。进行源地址选择时,它应被视为类似 Deprecated 的地址;若检查顺利完成,便回到通常的 Preferred 或 Deprecated 生命周期。

这项设计没有把冲突变得无害。主机可以经由已经知道链路层地址的路由器发送流量,却不能假定自己已经拥有在本地链路上改写邻居状态的全部权力。

是否进入 Optimistic 状态本身也有前提:主机应当已经知道路由器的链路层地址,并且能够维持这条受限转发路径。若不能在不违反限制的情况下获得或使用这些信息,地址就应保持 Tentative,等待普通 DAD 完成。

不得使用的协议动作

Optimistic 地址不能作为 Neighbor Solicitation 的源地址。Router Solicitation 应使用非 Optimistic 或未指定源地址;若使用 Optimistic 源地址,就不能携带 Source Link-Layer Address 选项。针对该地址发送 Neighbor Advertisement 时,Override 标志必须清除。

如果主机不知道某个邻居的链路层地址,就不能从 Optimistic 地址发起地址解析。它可以经默认路由器转发并等待重定向,也可以等 DAD 完成。若路由器条件无法满足,地址必须保持 Tentative,优化退回普通 DAD。

冲突仍会撤销地址

若收到源自未指定地址、目标为正在测试地址的 Neighbor Solicitation,这就是冲突证据。节点不得回复,并且必须取消配置该地址。在证据出现前,报文可能已经被错误转发,连接也可能中断。因此 RFC 4429 只建议在标识符很可能唯一时使用该机制,不建议用于手工输入的地址。

反射的探测报文

RFC 7527 处理另一种误判:DAD 探测可能被网络回送给发送者,看起来像另一个节点的声明。增强 DAD 为每次探测生成并保存一个 nonce。若返回报文带有同一 nonce,节点可以把它识别为反射并继续探测,而不是自动认定存在重复地址。这个改进修正了证据分类,并不证明地址已经归属某个节点。

来源