跳到主要内容

1. 引言

本文档定义网络时间协议版本 4 (Network Time Protocol version 4, NTPv4), 该协议广泛用于在一组分布式时间服务器 (time server) 和客户端 (client) 之间同步系统时钟. 本文档描述其核心架构, 协议, 状态机, 数据结构和算法. NTPv4 在 [RFC1305] 所述的 NTPv3 基础上引入新功能, 并扩展了 [RFC4330] 所述的简单 NTP 版本 4 (Simple NTP version 4, SNTPv4) 功能 (SNTPv4 是 NTPv4 的一个子集). 本文档废止 [RFC1305] 和 [RFC4330]. 虽然某些协议头部字段做了少量改动, 但这些改动不影响 NTPv4 与先前版本 NTP 和 SNTP 之间的互操作性.

NTP 子网 (subnet) 模型包含若干广泛可访问的主时间服务器 (primary time server), 它们通过有线或无线方式同步到国家标准. NTP 协议的目的, 是通过私有网络和公共互联网, 将计时信息从这些主服务器传递给辅助时间服务器 (secondary time server) 和客户端. 经过精细调优的算法可以缓解网络中断, 服务器故障以及潜在恶意行为可能导致的错误. 服务器和客户端的配置使得各项值从位于根部的主服务器出发, 经由分支辅助服务器流向客户端.

NTPv4 的设计克服了 NTPv3 设计中的重大缺陷, 修正了若干错误, 并纳入了新特性. 特别是, 扩展后的 NTP 时间戳 (timestamp) 定义鼓励在整个实现中使用 double 浮点数据类型. 因此, 时间分辨率优于 1 纳秒, 频率分辨率小于每秒 1 纳秒. 其他改进包括一种新的时钟规训算法 (clock discipline algorithm), 它对系统时钟硬件频率波动的响应更灵敏. 使用现代机器的典型主服务器可以达到几十微秒以内的精度. 快速 LAN 上的典型辅助服务器和客户端, 在轮询间隔 (poll interval) 最高为 1024 秒时可达到几百微秒以内的精度, 这也是 NTPv3 的最大值. 使用 NTPv4 时, 服务器和客户端在轮询间隔最高为 36 小时时仍可达到几十毫秒以内的精度.

本文档正文描述符合规范的实现之间实现互操作所必需的核心协议和数据结构. 附录 A 以骨架程序形式给出一个功能完整的示例, 包括核心算法的数据结构和代码片段, 以及用于提高可靠性和准确性的缓解算法. 虽然该骨架程序和本文档中的其他说明适用于某个特定实现, 但它们并不意味着所需功能只能以这种方式实现. 附录 A 的内容是非规范性示例, 旨在说明协议的运行方式, 并不是符合规范的实现必须满足的要求. 本文档所述的 NTPv3 对称密钥认证方案沿用了 NTPv3 的机制, 而 NTPv4 新增的 Autokey 公钥认证方案见 [RFC5906].

NTP 协议包含第 2 节描述的运行模式, 并使用第 6 节描述的数据类型和第 7 节描述的数据结构. 第 5 节描述的实现模型基于线程化的多进程架构, 但也可以采用其他架构. 第 8 节描述的线上协议 (on-wire protocol) 基于可返回时间 (returnable-time) 设计, 它只依赖测得的时钟偏移量, 而不要求可靠的消息递送. TCP [RFC0793] 这类可靠消息递送实际上可能降低所递送 NTP 数据包的可靠性, 因为重试会增大延迟值并引入其他错误. 同步子网是一个自组织, 分层的主从网络, 同步路径由最短路径生成树和定义好的度量确定. 虽然可以存在多个主节点 (即主服务器), 但不要求使用选举协议.

本文档包含来自 [ref9] 的材料, 其中含有不适合 RFC 格式的流程图和方程. [ref7] 中还有大量补充信息, 包括对本文档中协议和算法的广泛技术分析与性能评估. 参考实现可从 www.ntp.org 获取.

本文档其余部分包含大量变量和数学表达式. 有些变量采用希腊字母形式, 并以区分大小写的完整名称拼写. 例如, DELTA 指大写希腊字母, 而 delta 指小写字母. 此外, 下标用 "_" 表示; 例如, theta_i 指带下标 i 的小写希腊字母 theta, 按读音也可读作 theta sub i. 本文档中, 所有时间值均以秒 (s) 为单位, 所有频率都指定为分数频率偏移 (fractional frequency offset, FFO) (纯数). 通常也可以方便地用百万分率 (parts per million, ppm) 表示这些 FFO.

1.1. 要求用语

本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 和 "OPTIONAL" 应按 [RFC2119] 中的说明解释.