Skip to main content

1. Introduction (简介)

本文档定义了网络时间协议版本4 (Network Time Protocol version 4, NTPv4), 该协议被广泛用于在一组分布式时间服务器和客户端之间同步系统时钟. 它描述了核心架构 (architecture)、协议 (protocol)、状态机 (state machines)、数据结构 (data structures) 和算法 (algorithms). NTPv4引入了对NTPv3的新功能, 如 [RFC1305] 中所述, 并扩展了 [RFC4330] 中描述的简单NTP版本4 (Simple NTP version 4, SNTPv4) 的功能 (SNTPv4是NTPv4的一个子集). 本文档废弃了 [RFC1305] 和 [RFC4330]. 虽然在某些协议头部字段中进行了某些微小更改, 但这些更改不会影响NTPv4与先前版本的NTP和SNTP之间的互操作性.

NTP子网模型包括许多可广泛访问的主时间服务器 (primary time servers), 这些服务器通过有线或无线电与国家标准同步. NTP协议的目的是通过私有网络和公共互联网, 将这些主服务器的计时信息传递给次级时间服务器 (secondary time servers) 和客户端. 精确调整的算法可以缓解由网络中断、服务器故障和可能的恶意行为导致的错误. 服务器和客户端的配置使得值从根部的主服务器通过分支的次级服务器流向客户端.

NTPv4设计克服了NTPv3设计中的重大缺陷, 修正了某些错误, 并整合了新功能. 特别是, 扩展的NTP时间戳 (timestamp) 定义鼓励在整个实现中使用浮点双精度 (floating double) 数据类型. 因此, 时间分辨率 (time resolution) 优于1纳秒, 频率分辨率 (frequency resolution) 小于每秒1纳秒. 其他改进包括一个新的时钟调控算法 (clock discipline algorithm), 该算法对系统时钟硬件频率波动的响应更快. 使用现代机器的典型主服务器精度在数十微秒内. 快速局域网上的典型次级服务器和客户端在轮询间隔 (poll intervals) 高达1024秒时精度在数百微秒内, 这是NTPv3的最大值. 使用NTPv4, 服务器和客户端在轮询间隔高达36小时时精度在数十毫秒内.

本文档的主体描述了在符合性实现之间进行互操作所需的核心协议和数据结构. 附录A包含一个功能完整的示例, 以骨架程序 (skeleton program) 的形式呈现, 包括核心算法的数据结构和代码段, 以及用于增强可靠性和准确性的缓解算法 (mitigation algorithms). 虽然骨架程序和本文档中的其他描述适用于特定实现, 但它们并不旨在作为实现所需功能的唯一方式. 附录A的内容是非规范性示例, 旨在说明协议的操作, 并不是符合性实现的要求. 虽然本文档中描述的NTPv3对称密钥认证方案 (symmetric key authentication scheme) 是从NTPv3继承而来的, 但NTPv4新增的Autokey公钥认证方案 (public key authentication scheme) 在 [RFC5906] 中描述.

NTP协议包括第2节中描述的操作模式 (modes of operation), 使用第6节中描述的数据类型 (data types) 和第7节中描述的数据结构 (data structures). 第5节中描述的实现模型 (implementation model) 基于线程化、多进程架构 (threaded, multi-process architecture), 尽管也可以使用其他架构. 第8节中描述的线上协议 (on-wire protocol) 基于可返回时间 (returnable-time) 设计, 该设计仅依赖于测量的时钟偏移 (clock offsets), 但不需要可靠的消息传递. 可靠的消息传递 (例如TCP [RFC0793]) 实际上可能使传递的NTP数据包不太可靠, 因为重试会增加延迟值和其他错误. 同步子网 (synchronization subnet) 是一个自组织的、分层的、主从网络 (hierarchical, master-slave network), 其同步路径由最短路径生成树 (shortest-path spanning tree) 和定义的度量 (metric) 确定. 虽然可能存在多个主控 (primary servers), 但不需要选举协议 (election protocol).

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

本文档的其余部分包含大量变量和数学表达式. 一些变量采用希腊字符的形式, 这些字符由其完整的区分大小写的名称拼写出来. 例如, DELTA指的是大写希腊字符, 而delta指的是小写字符. 此外, 下标用 '_' 表示; 例如, theta_i指的是带有下标i的小写希腊字符theta, 或音标theta sub i. 在本文档中, 所有时间值均以秒 (s) 为单位, 所有频率将被指定为分数频率偏移 (Fractional Frequency Offsets, FFOs) (纯数字). 通常方便地将这些FFO表示为百万分之一 (parts per million, ppm).

1.1. Requirements Notation (需求表示法)

本文档中的关键词 "MUST" (必须)、"MUST NOT" (禁止)、"REQUIRED" (必需)、"SHALL" (应)、"SHALL NOT" (不应)、"SHOULD" (应该)、"SHOULD NOT" (不应该)、"RECOMMENDED" (推荐)、"MAY" (可以) 和 "OPTIONAL" (可选) 应按照 [RFC2119] 中的描述进行解释.