跳到主要内容

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/Prune60 秒
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: 应该精确

定时器交互

某些定时器之间存在依赖关系:

  1. Join Timer 和 Expiry Timer:

    • Join Timer 周期 < Expiry Timer 超时
    • 确保状态在超时前被刷新
  2. Hello Timer 和 Neighbor Timer:

    • Hello Holdtime > Hello Period
    • 通常 Holdtime = 3.5 × Hello Period
  3. Register-Stop Timer 和 Keepalive Timer:

    • 确保 RP 上的 (S,G) 状态不会过早超时
备注

关于每个定时器的详细行为,触发条件和到期处理,请参阅 RFC 7761 第 4.10 节和相关状态机定义.