跳到主要内容

附录 E. 实现问题

本附录讨论若干实现问题, 并为 Neighbor Discovery 实现者提供指导.

E.1. 链路层地址变化

当节点的链路层地址发生变化时, 会出现若干问题:

问题: 其他节点上的缓存条目变为无效 解决方案: 发送非请求 Neighbor Advertisement, 以更新邻居的缓存

问题: 更新时机可能导致分组丢失 解决方案: 发送多次非请求 NA (最多 MAX_NEIGHBOR_ADVERTISEMENT 次)

E.2. Duplicate Address Detection 定时

问题: DAD 期间的竞争条件

  • 两个节点可能同时对同一地址执行 DAD
  • 两者都可能得出该地址可用的结论

解决方案:

  • 在开始 DAD 前使用随机延迟 (最多 MAX_RTR_SOLICITATION_DELAY)
  • 正确处理 DAD 失败, 并使用不同地址重试

E.3. Router Advertisement 定时

问题: 协调多个路由器之间的 RA 传输 解决方案:

  • 在 RA 间隔中使用随机抖动
  • 以随机延迟 (0 到 MAX_RA_DELAY_TIME) 响应 RS

E.4. Neighbor Cache 大小

问题: Neighbor Cache 条目的内存有限 解决方案:

  • 实现垃圾回收 (先移除 STALE 条目)
  • 优先保留 REACHABLE 条目
  • 使用 Least Recently Used (LRU) 驱逐策略

E.5. Destination Cache 管理

问题: Destination Cache 可能增长得非常大 解决方案:

  • 实现老化和大小限制
  • 优先移除 PMTU 信息已到期的条目
  • 与 Neighbor Cache 清理集成

E.6. 多播组管理

问题: 管理 solicited-node 多播组 解决方案:

  • 随地址添加或移除而加入或离开组
  • 处理多个地址映射到同一 solicited-node 组的情况

E.7. 性能优化

并发地址解析:

  • 并行处理多个地址解析
  • 在解析期间对分组排队

快速路径处理:

  • 针对 REACHABLE 邻居优化 (最常见情况)
  • 缓存频繁使用的 Destination Cache 条目

E.8. 安全实现

SEND 集成:

  • 平滑处理 SEND 与非 SEND 混合环境
  • 为安全策略提供配置选项

速率限制:

  • 防止 ND 消息泛洪
  • 限制 Neighbor Cache 条目创建速率