Skip to main content

附录D. IsRouter规则摘要

本附录总结了维护和使用邻居缓存条目中IsRouter标志的规则。

D.1. Overview (概述)

邻居缓存条目中的IsRouter标志指示邻居是否已知为路由器。此信息对于正确的数据包转发至关重要,并影响邻居发现行为的几个方面。

D.2. Setting the IsRouter Flag (设置IsRouter标志)

IsRouter标志在以下情况下设置为TRUE:

  1. 接收到路由器通告: 从邻居接收到路由器通告时,该邻居的IsRouter标志必须 (MUST) 设置为TRUE。

  2. 带有路由器标志的邻居通告: 接收到设置了路由器 (R) 标志的邻居通告时,IsRouter标志必须 (MUST) 设置为TRUE。

  3. 发送路由器请求: 发送路由器请求时,如果为目的地创建或已存在邻居缓存条目,实现可以 (MAY) 将IsRouter设置为TRUE(尽管通常路由器请求被发送到全路由器组播地址)。

D.3. Clearing the IsRouter Flag (清除IsRouter标志)

IsRouter标志在以下情况下设置为FALSE:

  1. 不带路由器标志的邻居通告: 接收到路由器 (R) 标志清除(设置为0)的邻居通告时,IsRouter标志必须 (MUST) 设置为FALSE。

  2. 路由器生命周期过期: 当默认路由器列表中路由器的路由器生命周期过期时,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 (路由器转换为主机)

当路由器转换为主机时:

  1. 路由器停止发送路由器通告
  2. 路由器发送R=0的邻居通告
  3. 主机接收NA,设置IsRouter=FALSE,从默认路由器列表中删除
  4. 主机上的路由器生命周期最终过期(如果尚未删除)

D.5.2. Host Transitioning to Router (主机转换为路由器)

当主机成为路由器时:

  1. 新路由器开始发送路由器通告
  2. 主机接收RA,设置IsRouter=TRUE
  3. 新路由器添加到默认路由器列表
  4. 路由器可以发送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(对于目标)目标成为首选路由器
路由器生命周期过期无变化从列表中删除