跳到主要内容

附录 D. 与先前版本的差异

本附录总结 NTP Version 3 与先前版本 (Version 2 和 Version 1) 之间的差异. 这些变更用于提高准确性、稳定性和可靠性, 并澄清规范中的歧义. 大多数变更是细化和增强, 不影响与先前版本的互操作性.

Version 3 相对于 Version 2 的变化

1. 本地时钟算法

本地时钟算法已完全重新设计, 以提高稳定性和准确性. 新算法使用带自适应带宽控制的锁相环 (PLL) 设计. 关键变化包括:

  • 改进的频率补偿, 可更准确地跟踪振荡器漂移
  • 自适应时间常数, 根据网络条件自动调整
  • 增强的 step/slew 阈值逻辑, 更好地处理大校正
  • 看门狗计时器, 防止陈旧 offset 数据影响时钟

新算法在第 5 节和附录 G 中详细描述. 强烈鼓励实现采用新算法, 但旧算法仍保持兼容.

2. 时钟组合算法

新增一个用于组合来自多个 peer 的 offset 的可选算法 (附录 F). 该算法:

  • 使用基于同步距离的加权平均
  • 在有多个 peer 可用时提高准确性
  • 降低离群值和非对称路径的影响
  • 基于国家标准实验室使用的技术

时钟组合算法是可选的, 不影响互操作性.

3. 误差预算细化

delay、offset 和 dispersion 的计算方式已被细化:

  • Dispersion 计算 现在包括所有误差分量 (测量误差、偏斜累积、filter dispersion)
  • Delay 计算 通过将误差项移至 dispersion 而简化
  • Synchronization distance 现在正确计入所有误差源
  • 误差边界 可在声明的假设下形式化证明 (见附录 H)

这些变化为正确性断言提供了更严格的基础, 但不会显著影响正常操作.

4. 时钟选择算法

时钟选择过程已修改以提高可靠性:

  • 采用来自 Digital Time Service (DTS) 的 intersection algorithm, 取代先前排序步骤
  • Clustering algorithm 被细化, 以更好处理多个候选
  • 使用 Marzullo 算法改进 falseticker 检测
  • Survivor selection 现在同时考虑 stratum 和 synchronization distance

新算法在检测和拒绝故障时钟方面更稳健, 同时保持与先前版本兼容.

5. 时钟过滤算法

对时钟过滤算法的小幅细化:

  • 改进 filter dispersion 计算, 更好表示样本方差
  • 细化 shift register 管理, 提升性能
  • Dispersion aging 现在正确计入自上次更新以来的时间
  • Maximum dispersion 限幅可防止数值溢出

6. 闰秒处理

闰秒管理改进:

  • Leap indicator bits 现在可在同步子网中正确传播
  • Local-clock procedure 增强, 可正确处理 61 秒和 59 秒的分钟
  • 新增 minimum step interval, 防止闰秒事件期间过早 step 变化
  • Leap second tables 可在不修改代码的情况下更新

7. 轮询间隔管理

轮询间隔管理已被细化:

  • 基于本地时钟合规性和稳定性的 adaptive polling
  • Minimum and maximum 轮询间隔现在可配置
  • 对所选同步源进行 poll interval clamping
  • Hysteresis 防止轮询间隔快速变化

8. 状态变量变化

新增或修改了若干状态变量:

  • 新增 peer.valid 计数器, 用于跟踪有效样本
  • 新增 peer.update 时间戳, 用于 dispersion aging
  • 新增 sys.poll, 用于控制全系统轮询行为
  • Various parameters 已重命名或重新组织, 以提高清晰度

9. 包格式

包格式与 Version 2 相同, 但有一个例外:

  • 澄清 Reference Identifier field 对 stratum 0 和 1 的解释
  • 细化 Precision field 的解释
  • Poll interval field 现在一致地解释为 2 的幂

10. 认证

认证机制与 Version 2 保持不变, 但:

  • 澄清 Key management 过程
  • 记录 Performance considerations
  • 更精确地指定与时钟过程的交互

Version 2 相对于 Version 1 的变化

为完整起见, 以下总结 Version 1 到 Version 2 的主要变化:

1. 包格式

  • Stratum field 从 2 位扩展到 8 位
  • 新增 Precision field 以表示时钟精度
  • 新增 Root delay and root dispersion 字段
  • 修改 Reference identifier 字段, 以支持 ASCII 字符串

2. 同步算法

  • Peer selection 算法细化为使用 stratum 和 synchronization distance
  • 新增 Reachability 机制以检测连接失败
  • 新增 Clock filter 算法以平滑样本

3. 本地时钟

  • 新增 Compliance register 用于跟踪本地时钟稳定性
  • 增强 Frequency compensation
  • 细化 Gradual phase adjustments

4. 操作模式

  • 新增 Broadcast mode 用于 LAN 环境
  • 澄清 Client/server 模式区别
  • 细化 Symmetric modes

5. 控制消息

  • 新增可选 control message 设施 (附录 B)

互操作性考虑

NTP Version 3 设计为可与先前版本互操作:

  • Version 2 和 Version 3 实现可以不受限制地互操作
  • Version 1 实现 可以互操作, 但可能无法达到相同准确性
  • 混合网络 将正确运行, Version 3 实现可获得新算法带来的收益

兼容性指南

  1. Version field 在发送消息中应设置为 3
  2. Version 2 消息 应被接受并正常处理
  3. Version 1 消息 应以功能受限方式接受
  4. Control messages 只应发送给已知支持它们的 peer

升级路径

组织可以逐步升级到 Version 3:

  1. Primary servers 应首先升级, 以利用改进算法
  2. Secondary servers 可在方便时升级
  3. Clients 可最后升级, 因为它们会从改进的服务器准确性中受益
  4. 混合版本 可以无限期共存而不出现问题

实现说明

实现应:

  • 尽可能 采用新算法 以提升性能
  • 保持兼容性 与先前版本互操作
  • 记录扩展 到标准协议的部分
  • 提供配置选项 以启用/禁用可选特性
  • 测试互操作性 与现有实现配合

Version 3 中的变更代表多年 Internet 运行经验的积累. 它们在保持完全向后兼容的同时, 显著提高了准确性、稳定性和可靠性.