Skip to main content

13. Poll Process (轮询进程)

每个关联都支持一个轮询进程,该进程定期运行以在对称、客户端和广播服务器关联中构造和发送数据包。无论服务器是否可达,该进程都持续运行,以管理时钟过滤器和到达寄存器。

13.1. 轮询进程变量

名称 (Name)公式 (Formula)描述 (Description)
hpollhpoll主机轮询指数 (host poll exponent)
lastlast上次轮询时间 (last poll time)
nextnext下次轮询时间 (next poll time)
reachreach到达寄存器 (reach register)
unreachunreach不可达计数器 (unreach counter)

关键参数:

  • UNREACH = 24: 不可达限制
  • BCOUNT = 8: 突发计数
  • BURST: 突发使能标志
  • IBURST: 初始突发使能标志

变量说明:

  • hpoll: 以log2秒表示的轮询指数(有符号整数)
  • last: 发送最近数据包时的秒计数器值
  • next: 要发送下一个数据包时的秒计数器值
  • reach: 8位整数移位寄存器,由对等体和轮询进程共享
  • unreach: 表示服务器不可达的秒数

13.2. 轮询进程操作

主要流程

每秒调用一次时钟调整进程时,会依次为每个关联调用轮询例程:

  1. 时间检查: 如果下次轮询消息的时间大于秒计数器,则立即返回
  2. 数据包发送: 对称(模式1、2)、客户端(模式3)和广播服务器(模式5)关联定期发送数据包
  3. 广播客户端: 模式6关联运行例程以更新 reach 和 unreach 变量,但不发送数据包

突发模式 (Burst Mode)

初始突发(IBURST):

  • 在关联首次初始化时启用
  • 快速发送一系列数据包以快速建立同步
  • 发送 BCOUNT(8)个数据包

突发(BURST):

  • 在检测到服务器不可达时可能触发
  • 用于快速重新同步

到达寄存器 (Reach Register)

  • 8位移位寄存器,记录最近8次轮询的成功/失败
  • 每次轮询时左移一位
  • 如果收到有效响应,最低位设为1;否则设为0
  • 用于评估服务器的可达性和可靠性

轮询间隔调整

动态调整机制:

  • 轮询间隔根据网络条件和时钟稳定性动态调整
  • 范围通常从几秒到几千秒(minpoll 到 maxpoll)
  • 时钟稳定时,轮询间隔增加以减少网络负载
  • 检测到问题时,轮询间隔减少以加快同步

调整策略:

  • 基于时钟过滤器算法的输出
  • 考虑抖动和偏移的变化率
  • 平衡同步精度和网络效率

不可达处理

当服务器持续不可达时:

  • unreach 计数器递增
  • 达到 UNREACH 限制(24秒)后,可能触发特殊处理
  • 可能启动突发模式尝试重新建立连接
  • 更新关联状态以反映服务器健康状况

13.3. 实现要点

  • 轮询进程与时钟调整进程紧密集成
  • 必须正确管理 reach 寄存器以反映服务器可用性
  • 突发模式的使用应谨慎,避免网络过载
  • 轮询间隔的调整应平滑进行,避免突变

轮询进程是NTP协议中维持持续同步和管理网络资源的关键组件。