Skip to main content

9. 可扩展性 - 选项处理

邻居发现协议被设计为可通过添加新选项进行扩展。本节描述节点如何处理接收的邻居发现消息中的选项, 以确保未来的扩展可以与当前实现共存。

9.1. General Principles (一般原则)

为了确保向后兼容性和向前可扩展性:

  • 无法识别的选项: 所有节点必须 (MUST) 静默忽略它们在接收的邻居发现数据包中无法识别的任何选项, 并继续处理数据包。这允许将来定义新选项而不会破坏现有实现。

  • 多个选项: 选项可能在同一消息中多次出现。节点必须 (MUST) 准备好适当地处理这种情况。

  • 选项顺序: 选项在消息中出现的顺序通常不重要, 除非明确为特定选项类型指定。

  • 填充: 必要时应填充选项, 以确保它们在自然的64位边界上结束。

9.2. Processing Rules (处理规则)

处理包含选项的邻居发现消息时:

  1. 解析所有选项: 节点必须 (MUST) 解析消息中的所有选项, 即使某些选项无法识别。

  2. 忽略未知选项: 如果选项无法识别 (基于其Type字段), 节点必须 (MUST) 忽略它并继续处理后续选项和消息本身。

  3. 验证已知选项: 对于识别的选项, 节点必须 (MUST) 根据为该选项类型指定的规则验证选项。如果选项验证失败 (例如, 长度不正确、字段值无效), 则行为取决于特定的选项类型和消息类型。

  4. 继续处理: 即使一个或多个选项无效或无法识别, 节点应该 (SHOULD) 继续处理消息和任何剩余的有效选项, 除非特定消息类型或选项的规范另有要求。

9.3. Option Format Requirements (选项格式要求)

为邻居发现定义的所有新选项必须 (MUST) 遵循第4.6节中指定的通用选项格式, 具有Type和Length字段。Length字段以8个八位字节为单位指定。

在定义新选项时, 协议设计者应该 (SHOULD):

  • 确保不实现该选项的节点可以安全地忽略该选项, 而不会导致操作问题。
  • 考虑对消息大小和链路MTU的影响。
  • 为选项指定清晰的验证规则。

9.4. Future Extensions (未来扩展)

邻居发现协议的未来向后兼容更改可能:

  • 定义新的选项类型
  • 指定在消息格式中使用当前保留的字段
  • 在现有消息中定义新的标志位 (理解无法识别的标志被忽略)

向后不兼容的更改需要定义新的消息类型 (使用不同的ICMP Type或Code值) 或定义协议的新版本。

9.5. Implementation Considerations (实现考虑)

实现应该 (SHOULD):

  • 被设计为易于适应新选项类型, 而无需进行重大代码更改。
  • 记录或提供有关无法识别的选项的诊断信息, 以帮助调试和未来的协议部署。
  • 在处理选项时考虑安全影响, 特别是那些可能影响路由决策或缓存条目的选项。

9.6. Security and Extensibility (安全性和可扩展性)

可扩展性机制本身不提供安全性。如果不仔细设计, 新选项可能会引入新的安全漏洞。定义新选项的协议设计者应该 (SHOULD):

  • 考虑选项如何与安全邻居发现 (SEND) [RFC3971] 交互。
  • 分析可能利用新选项的潜在攻击。
  • 记录特定于新选项的安全考虑。

实现应该 (SHOULD) 提供机制, 根据本地安全策略选择性地启用或禁用对特定选项类型的支持。