10. 协议常量
本节定义 Neighbor Discovery 使用的协议常量. 这些常量规定计时值, 重试限制以及其他控制协议行为的参数. 除非协议规范中另有明确规定, 实现必须使用这些值.
10.1. 主机常量
主机在执行路由器发现和地址配置时使用以下常量:
| Constant | Value | Description |
|---|---|---|
| MAX_RTR_SOLICITATION_DELAY | 1 second | 发送第一条 Router Solicitation 消息前的最大延迟. 用于在多个主机同时启动时防止同步. |
| RTR_SOLICITATION_INTERVAL | 4 seconds | Router Solicitation 消息重传之间的时间间隔. |
| MAX_RTR_SOLICITATIONS | 3 transmissions | 主机在认定不存在路由器之前发送的 Router Solicitation 消息最大数量. |
使用说明
-
MAX_RTR_SOLICITATION_DELAY: 当主机接口变为启用状态时, 在发送第一条 Router Solicitation 之前, 它应该等待 0 到 MAX_RTR_SOLICITATION_DELAY 之间的随机时间. 这可以防止许多主机同时上电时造成网络拥塞.
-
RTR_SOLICITATION_INTERVAL: 如果主机没有收到对其 Router Solicitation 的 Router Advertisement 响应, 它会在此间隔后重传.
-
MAX_RTR_SOLICITATIONS: 在发送这么多次 solicitation 仍未收到响应后, 主机得出链路上没有可用路由器的结论, 并可以继续使用其他地址配置机制 (例如 DHCPv6).
10.2. 路由器常量
以下常量控制路由器发送 Router Advertisements 时的行为:
| Constant | Value | Description |
|---|---|---|
| MAX_INITIAL_RTR_ADVERT_INTERVAL | 16 seconds | 当接口成为 advertising interface 时, 从该接口发送初始 unsolicited Router Advertisements 之间的最大时间间隔. |
| MAX_INITIAL_RTR_ADVERTISEMENTS | 3 transmissions | 当路由器接口成为 advertising interface 时发送的初始 unsolicited Router Advertisements 数量. |
| MAX_FINAL_RTR_ADVERTISEMENTS | 3 transmissions | 当路由器接口不再是 advertising interface 时发送的最终 Router Advertisements 数量. |
| MIN_DELAY_BETWEEN_RAS | 3 seconds | 从接口发送 unsolicited multicast Router Advertisements 之间的最小时间间隔. |
| MAX_RA_DELAY_TIME | 0.5 seconds | 使用 Router Advertisement 响应 Router Solicitation 之前的最大延迟. |
使用说明
-
MAX_INITIAL_RTR_ADVERT_INTERVAL: 当路由器开始在某个接口上通告时, 它会以较高频率发送若干初始通告, 以便快速通知主机其存在.
-
MAX_INITIAL_RTR_ADVERTISEMENTS: 这种快速初始通告有助于新连接的主机快速完成配置.
-
MAX_FINAL_RTR_ADVERTISEMENTS: 当路由器即将停止通告时 (例如正常关闭), 它会发送 Router Lifetime 为零的最终通告, 通知主机不应再使用该路由器.
-
MIN_DELAY_BETWEEN_RAS: 这可以防止路由器用 Router Advertisements 淹没链路, 即使多个主机同时发起 solicitation.
-
MAX_RA_DELAY_TIME: 响应 Router Solicitation 时, 路由器会将响应延迟不超过该值的随机时间, 以避免多个路由器同步响应.
10.3. 节点常量
以下常量适用于所有 IPv6 节点 (主机和路由器), 用于地址解析和邻居不可达检测:
| Constant | Value | Description |
|---|---|---|
| MAX_MULTICAST_SOLICIT | 3 transmissions | 为地址解析或可达性确认发送的 multicast Neighbor Solicitation 消息最大数量. |
| MAX_UNICAST_SOLICIT | 3 transmissions | 为探测邻居可达性而发送的 unicast Neighbor Solicitation 消息最大数量. |
| MAX_ANYCAST_DELAY_TIME | 1 second | 对 anycast 地址的 Neighbor Solicitation 作出响应前的最大延迟. |
| MAX_NEIGHBOR_ADVERTISEMENT | 3 transmissions | 当节点的链路层地址发生变化时发送的 unsolicited Neighbor Advertisement 消息最大数量. |
| REACHABLE_TIME | 30,000 milliseconds | 用于计算随机 ReachableTime 的基准值. 通常会被 Router Advertisements 中收到的值覆盖. |
| RETRANS_TIMER | 1,000 milliseconds | Neighbor Solicitation 消息重传之间时间的基准值. 通常会被 Router Advertisements 中收到的值覆盖. |
| DELAY_FIRST_PROBE_TIME | 5 seconds | 当邻居变得可疑时, 发送第一个 unicast Neighbor Solicitation 探测前的延迟. |
| MIN_RANDOM_FACTOR | 0.5 | 计算 RandomReachableTime 时使用的随机因子的最小值. |
| MAX_RANDOM_FACTOR | 1.5 | 计算 RandomReachableTime 时使用的随机因子的最大值. |
使用说明
-
MAX_MULTICAST_SOLICIT: 当节点需要确定邻居的链路层地址时, 在地址解析期间使用. 达到这么多次尝试后, 节点得出该邻居不可达的结论.
-
MAX_UNICAST_SOLICIT: 在 Neighbor Unreachability Detection 期间使用, 用于探测已经变得可疑的邻居.
-
MAX_ANYCAST_DELAY_TIME: 当多个节点共享一个 anycast 地址时, 它们以随机延迟响应 Neighbor Solicitations, 以减少冲突. 延迟最短的节点作出响应, 其他节点抑制其响应.
-
MAX_NEIGHBOR_ADVERTISEMENT: 当节点的链路层地址发生变化时, 它会 multicast unsolicited Neighbor Advertisements, 以更新所有邻居的缓存.
-
REACHABLE_TIME 和 RETRANS_TIMER: 这些常量提供默认值, 但在可用时, 节点应该使用路由器通告的值.
-
DELAY_FIRST_PROBE_TIME: 当在 DELAY 状态下检测到某个邻居有正向进展时, 节点会等待这么长时间, 然后进行探测以确认可达性.
-
MIN_RANDOM_FACTOR 和 MAX_RANDOM_FACTOR: 用于计算随机 ReachableTime 值, 以避免多个节点之间的 Neighbor Unreachability Detection 活动同步发生.
10.4. 实现考虑
实现这些常量时:
-
调优: 虽然这些值已经针对一般 Internet 使用场景进行了仔细选择, 网络管理员可以需要针对特定环境 (例如高丢包率的无线网络) 调整它们.
-
Router Advertisement 覆盖: 若干节点常量 (REACHABLE_TIME, RETRANS_TIMER) 可以被 Router Advertisements 中收到的值覆盖. 实现必须遵守这些收到的值.
-
随机化: 若干操作需要随机化 (例如 MAX_RTR_SOLICITATION_DELAY, MAX_RA_DELAY_TIME) 以防止同步. 实现应该使用高质量的随机数生成器.
-
网络特征: 对于具有非典型特征的网络 (非常高的延迟, 高丢包率或非常大量的节点), 这些常量可能需要调整. 任何此类调整应该记录在案, 并基于仔细分析.