9. 可扩展性 - 选项处理
邻居发现协议被设计为可通过添加新选项进行扩展。本节描述节点如何处理接收的邻居发现消息中的选项, 以确保未来的扩展可以与当前实现共存。
9.1. General Principles (一般原则)
为了确保向后兼容性和向前可扩展性:
-
无法识别的选项: 所有节点必须 (MUST) 静默忽略它们在接收的邻居发现数据包中无法识别的任何选项, 并继续处理数据包。这允许将来定义新选项而不会破坏现有实现。
-
多个选项: 选项可能在同一消息中多次出现。节点必须 (MUST) 准备好适当地处理这种情况。
-
选项顺序: 选项在消息中出现的顺序通常不重要, 除非明确为特定选项类型指定。
-
填充: 必要时应填充选项, 以确保它们在自然的64位边界上结束。
9.2. Processing Rules (处理规则)
处理包含选项的邻居发现消息时:
-
解析所有选项: 节点必须 (MUST) 解析消息中的所有选项, 即使某些选项无法识别。
-
忽略未知选项: 如果选项无法识别 (基于其Type字段), 节点必须 (MUST) 忽略它并继续处理后续选项和消息本身。
-
验证已知选项: 对于识别的选项, 节点必须 (MUST) 根据为该选项类型指定的规则验证选项。如果选项验证失败 (例如, 长度不正确、字段值无效), 则行为取决于特定的选项类型和消息类型。
-
继续处理: 即使一个或多个选项无效或无法识别, 节点应该 (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) 提供机制, 根据本地安全策略选择性地启用或禁用对特定选项类型的支持。