13. Poll Process (轮询进程)
每个关联都支持一个轮询进程,该进程定期运行以在对称、客户端和广播服务器关联中构造和发送数据包。无论服务器是否可达,该进程都持续运行,以管理时钟过滤器和到达寄存器。
13.1. 轮询进程变量
| 名称 (Name) | 公式 (Formula) | 描述 (Description) |
|---|---|---|
| hpoll | hpoll | 主机轮询指数 (host poll exponent) |
| last | last | 上次轮询时间 (last poll time) |
| next | next | 下次轮询时间 (next poll time) |
| reach | reach | 到达寄存器 (reach register) |
| unreach | unreach | 不可达计数器 (unreach counter) |
关键参数:
- UNREACH = 24: 不可达限制
- BCOUNT = 8: 突发计数
- BURST: 突发使能标志
- IBURST: 初始突发使能标志
变量说明:
- hpoll: 以log2秒表示的轮询指数(有符号整数)
- last: 发送最近数据包时的秒计数器值
- next: 要发送下一个数据包时的秒计数器值
- reach: 8位整数移位寄存器,由对等体和轮询进程共享
- unreach: 表示服务器不可达的秒数
13.2. 轮询进程操作
主要流程
每秒调用一次时钟调整进程时,会依次为每个关联调用轮询例程:
- 时间检查: 如果下次轮询消息的时间大于秒计数器,则立即返回
- 数据包发送: 对称(模式1、2)、客户端(模式3)和广播服务器(模式5)关联定期发送数据包
- 广播客户端: 模式6关联运行例程以更新 reach 和 unreach 变量,但不发送数据包
突发模式 (Burst Mode)
初始突发(IBURST):
- 在关联首次初始化时启用
- 快速发送一系列数据包以快速建立同步
- 发送 BCOUNT(8)个数据包
突发(BURST):
- 在检测到服务器不可达时可能触发
- 用于快速重新同步
到达寄存器 (Reach Register)
- 8位移位寄存器,记录最近8次轮询的成功/失败
- 每次轮询时左移一位
- 如果收到有效响应,最低位设为1;否则设为0
- 用于评估服务器的可达性和可靠性
轮询间隔调整
动态调整机制:
- 轮询间隔根据网络条件和时钟稳定性动态调整
- 范围通常从几秒到几千秒(minpoll 到 maxpoll)
- 时钟稳定时,轮询间隔增加以减少网络负载
- 检测到问题时,轮询间隔减少以加快同步
调整策略:
- 基于时钟过滤器算法的输出
- 考虑抖动和偏移的变化率
- 平衡同步精度和网络效率
不可达处理
当服务器持续不可达时:
- unreach 计数器递增
- 达到 UNREACH 限制(24秒)后,可能触发特殊处理
- 可能启动突发模式尝试重新建立连接
- 更新关联状态以反映服务器健康状况
13.3. 实现要点
- 轮询进程与时钟调整进程紧密集成
- 必须正确管理 reach 寄存器以反映服务器可用性
- 突发模式的使用应谨慎,避免网络过载
- 轮询间隔的调整应平滑进行,避免突变
轮询进程是NTP协议中维持持续同步和管理网络资源的关键组件。