附录 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 条目创建速率