4.10. PIM Timers (PIM 定时器)
PIM-SM 使用多个定时器来控制协议行为.本节汇总所有 PIM 定时器及其用途.
定时器分类
PIM 定时器可以分为几类:
1. Hello 相关定时器
| 定时器名称 | 用途 | 典型值 |
|---|---|---|
| Hello Timer (HT) | 触发发送 Hello 消息 | 30 秒 |
| Neighbor Liveness Timer (NLT) | 跟踪邻居活跃性 | 基于接收的 Holdtime |
2. Join/Prune 相关定时器
| 定时器名称 | 用途 | 典型值 |
|---|---|---|
| Join/Prune Timer (JT) | 周期性发送 Join/Prune | 60 秒 |
| Expiry Timer (ET) | Join/Prune 状态超时 | 基于接收的 Holdtime (210 秒) |
| Prune-Pending Timer (PPT) | LAN 上的 Prune 延迟 | J/P_Override_Interval |
| Override Timer (OT) | (S,G,rpt) 覆盖定时器 | 随机值 |
3. Register 相关定时器
| 定时器名称 | 用途 | 典型值 |
|---|---|---|
| Register-Stop Timer (RST) | 注册抑制时间 | 60 秒 |
4. Assert 相关定时器
| 定时器名称 | 用途 | 典型值 |
|---|---|---|
| Assert Timer (AT) | Assert 状态超时 | 180 秒 |
5. 其他定时器
| 定时器名称 | 用途 | 典型值 |
|---|---|---|
| Keepalive Timer (KAT) | 保持 (S,G) 状态活跃 | 210 秒 |
定时器启动和停止
定时器启动规则:
- 大多数定时器在状态创建时启动
- 某些定时器(如 AT)在特定事件触发时启动
定时器停止规则:
- 状态转换时可能停止定时器
- 接收到刷新消息时重置定时器
- 状态删除时停止所有相关定时器
定时器到期处理
每个定时器到期时都会触发特定操作:
Hello Timer 到期:
发送 Hello 消息
重启 Hello Timer
Join Timer 到期:
if (JoinDesired == TRUE) {
发送 Join 消息
重启 Join Timer
} else {
发送 Prune 消息
停止 Join Timer
}
Expiry Timer 到期:
删除对应的 Join/Prune 状态
重新计算出接口列表
可能触发上游状态变化
Assert Timer 到期:
转换到 NoInfo 状态
可能触发新的 Assert 选举
定时器精度和抖动
为了避免同步效应,某些定时器使用随机化:
随机化策略:
- Override Timer:
rand(0, Effective_Override_Interval) - Initial Join Delay: 随机延迟初始 Join
定时器精度要求:
- Hello Timer: ±10% 精度可接受
- Join Timer: ±10% 精度可接受
- Assert Timer: 应该精确
定时器交互
某些定时器之间存在依赖关系:
-
Join Timer 和 Expiry Timer:
- Join Timer 周期 < Expiry Timer 超时
- 确保状态在超时前被刷新
-
Hello Timer 和 Neighbor Timer:
- Hello Holdtime > Hello Period
- 通常 Holdtime = 3.5 × Hello Period
-
Register-Stop Timer 和 Keepalive Timer:
- 确保 RP 上的 (S,G) 状态不会过早超时
备注
关于每个定时器的详细行为,触发条件和到期处理,请参阅 RFC 7761 第 4.10 节和相关状态机定义.