附录 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 实现可获得新算法带来的收益
兼容性指南
- Version field 在发送消息中应设置为 3
- Version 2 消息 应被接受并正常处理
- Version 1 消息 应以功能受限方式接受
- Control messages 只应发送给已知支持它们的 peer
升级路径
组织可以逐步升级到 Version 3:
- Primary servers 应首先升级, 以利用改进算法
- Secondary servers 可在方便时升级
- Clients 可最后升级, 因为它们会从改进的服务器准确性中受益
- 混合版本 可以无限期共存而不出现问题
实现说明
实现应:
- 尽可能 采用新算法 以提升性能
- 保持兼容性 与先前版本互操作
- 记录扩展 到标准协议的部分
- 提供配置选项 以启用/禁用可选特性
- 测试互操作性 与现有实现配合
Version 3 中的变更代表多年 Internet 运行经验的积累. 它们在保持完全向后兼容的同时, 显著提高了准确性、稳定性和可靠性.