附录D. IsRouter规则摘要
本附录总结了维护和使用邻居缓存条目中IsRouter标志的规则。
D.1. Overview (概述)
邻居缓存条目中的IsRouter标志指示邻居是否已知为路由器。此信息对于正确的数据包转发至关重要,并影响邻居发现行为的几个方面。
D.2. Setting the IsRouter Flag (设置IsRouter标志)
IsRouter标志在以下情况下设置为TRUE:
-
接收到路由器通告: 从邻居接收到路由器通告时,该邻居的IsRouter标志必须 (MUST) 设置为TRUE。
-
带有路由器标志的邻居通告: 接收到设置了路由器 (R) 标志的邻居通告时,IsRouter标志必须 (MUST) 设置为TRUE。
-
发送路由器请求: 发送路由器请求时,如果为目的地创建或已存在邻居缓存条目,实现可以 (MAY) 将IsRouter设置为TRUE(尽管通常路由器请求被发送到全路由器组播地址)。
D.3. Clearing the IsRouter Flag (清除IsRouter标志)
IsRouter标志在以下情况下设置为FALSE:
-
不带路由器标志的邻居通告: 接收到路由器 (R) 标志清除(设置为0)的邻居通告时,IsRouter标志必须 (MUST) 设置为FALSE。
-
路由器生命周期过期: 当默认路由器列表中路由器的路由器生命周期过期时,IsRouter标志保持TRUE,但路由器从默认路由器列表中删除。
D.4. Using the IsRouter Flag (使用IsRouter标志)
IsRouter标志以几种方式影响行为:
D.4.1. Default Router List Management (默认路由器列表管理)
- 只有IsRouter = TRUE的邻居可以添加到默认路由器列表
- 当IsRouter从TRUE更改为FALSE时,邻居必须 (MUST) 从默认路由器列表中删除
D.4.2. Redirect Message Processing (重定向消息处理)
处理重定向消息时:
- 如果重定向的目标与目的地不同,则目标被指示为更好的第一跳路由器
- 重定向目标的IsRouter标志应该 (SHOULD) 设置为TRUE
D.4.3. Neighbor Advertisement Processing (邻居通告处理)
从IsRouter=TRUE的邻居接收到R=0的邻居通告时:
- 将IsRouter设置为FALSE
- 从默认路由器列表中删除邻居
- 这通常表明邻居已不再是路由器
D.5. Race Conditions and Special Cases (竞态条件和特殊情况)
D.5.1. Router Transitioning to Host (路由器转换为主机)
当路由器转换为主机时:
- 路由器停止发送路由器通告
- 路由器发送R=0的邻居通告
- 主机接收NA,设置IsRouter=FALSE,从默认路由器列表中删除
- 主机上的路由器生命周期最终过期(如果尚未删除)
D.5.2. Host Transitioning to Router (主机转换为路由器)
当主机成为路由器时:
- 新路由器开始发送路由器通告
- 主机接收RA,设置IsRouter=TRUE
- 新路由器添加到默认路由器列表
- 路由器可以发送R=1的邻居通告以加快进程
D.5.3. Simultaneous Messages (同时消息)
如果路由器通告和邻居通告 (R=0) 几乎同时接收:
- 按接收顺序处理消息
- 最后处理的消息确定最终的IsRouter状态
- 路由器通告总是设置IsRouter=TRUE
- R=0的邻居通告总是设置IsRouter=FALSE
D.6. Implementation Guidelines (实现指南)
D.6.1. Initialization (初始化)
创建新的邻居缓存条目时:
- IsRouter的默认值应该 (SHOULD) 为FALSE
- 仅在接收到的消息确认时设置为TRUE
D.6.2. Consistency Checks (一致性检查)
实现应该 (SHOULD) 确保一致性:
- 如果IsRouter=TRUE且不存在默认路由器列表条目,这是可接受的(邻居是路由器但不是默认路由器)
- 如果默认路由器列表条目存在但IsRouter=FALSE,这是必须 (MUST) 通过从列表中删除路由器来纠正的错误条件
D.6.3. Logging and Debugging (日志和调试)
实现应该 (SHOULD) 记录IsRouter标志的转换以进行调试:
- 当IsRouter从FALSE更改为TRUE时
- 当IsRouter从TRUE更改为FALSE时
- 当由于IsRouter变为FALSE而从默认路由器列表中删除路由器时
D.7. Security Considerations (安全考虑)
IsRouter标志可能被攻击者操纵:
攻击: 带有R=0的恶意邻居通告
- 攻击者为合法路由器发送R=0的NA
- 主机从其默认路由器列表中删除路由器
- 流量中断
缓解:
- 使用SEND (RFC 3971) 验证邻居发现消息
- 对IsRouter标志更改实施合理的速率限制
- 监控可疑模式(频繁的IsRouter转换)
D.8. Example State Transitions (示例状态转换)
示例1: 正常路由器发现
初始状态: 无邻居缓存条目
操作: 从fe80::1接收路由器通告
结果: 创建条目,IsRouter=TRUE,添加到默认路由器列表
示例2: 路由器变为不可用
初始状态: IsRouter=TRUE,路由器在默认路由器列表中
操作: 接收R=0的邻居通告
结果: IsRouter=FALSE,从默认路由器列表中删除
示例3: 重定向到路由器
初始状态: fe80::2无邻居缓存条目
操作: 接收指示fe80::2为更好路由器的重定向消息
结果: 创建条目,IsRouter=TRUE(由重定向目标暗示)
D.9. Summary Table (摘要表)
| 事件 | 对IsRouter的操作 | 对默认路由器列表的影响 |
|---|---|---|
| 接收RA | 设置TRUE | 添加到列表(如果不存在) |
| 接收R=1的NA | 设置TRUE | 无直接影响 |
| 接收R=0的NA | 设置FALSE | 从列表中删除 |
| 接收重定向 | 设置TRUE(对于目标) | 目标成为首选路由器 |
| 路由器生命周期过期 | 无变化 | 从列表中删除 |