Network Time Protocol(NTP)是互联网上最古老且最广泛使用的协议之一,用于在分布式网络中同步计算机时钟。它由 David L. Mills 教授于 1985 年设计,目前的规范基于 RFC 5905(NTPv4,2010 年发布)。NTP 的目标是提供高精度的时间同步,在广域网(WAN)上可达毫秒级,在局域网(LAN)上可达亚毫秒级。
NTP的目标是将所有参与计算机的协调世界时(UTC)时间同步到几毫秒的误差内。它使用Marzullo算法的修改版来选择准确的时间服务器,其设计旨在减轻可变网络延迟造成的影响。NTP通常可以在公共互联网保持几十毫秒的误差,并且在理想的局域网环境中可以实现超过1毫秒的精度。不对称路由和拥塞控制可能导致100毫秒(或更高)的误差。
| 网络环境 | 典型精度 |
|---|---|
| 公网 | 10–100 ms |
| 局域网 | 1–10 ms |
| 高质量网络 | <1 ms |
NTP 被广泛应用于服务器与数据中心、操作系统(Linux / Windows / macOS)、网络设备(路由器、交换机)、分布式系统、金融、日志、监控系统。NTP 是互联网的“时间基准系统”。
在实际工程中,不准确的系统时间会导致严重问题,如日志时间错乱,无法排查问题、分布式系统事件顺序错误、证书校验失败(TLS / HTTPS)、定时任务异常、金融交易时间不一致等,因此,时间同步是基础设施级能力。
1979年,网络时间同步技术在纽约的国家计算机会议上于运行在跨大西洋卫星网络的互联网服务上公开演示,这可能是该技术的首次公开演示。该技术后在1981年互联网工程笔记(IEN)173中描述,并根据RFC 778文档开发为一个公开协议。该技术首先被部署在一个本地网络,作为Hello路由协议的一部分,并在Fuzzball(一个用于网络原型的实验操作系统,已运行多年)中实现。
现在还有其他的相关网络工具。这包括Daytime和Time协议用以记录事件时间,以及互联网控制消息协议和IP时间戳选项(RFC 781)。更多完整的同步系统,虽然缺乏NTP的数据分析和时钟规律算法,包括Unix守护进程timed在内的软件其使用选举算法为所有客户端指定服务器。以及数字时间同步服务(Digital Time Synchronization Service,DTSS)使用类似构NTP阶层模型的服务器层次结构。
1985年,NTPv0被实现于Fuzzball和Unix,文档化于RFC 958的NTP数据包头、和往返延迟和偏移计算都被留存至NTPv4。尽管当时可用的计算机和网络相对较慢,但在跨大西洋链路上也取得了优于100毫秒的精度,在以太网网络上准确度为几十毫秒。
1988年,一个更完整的NTPv1协议规范及相关的算法发表在RFC 1059。它利用了RFC 956的文献中的实验结果和时钟滤波算法,并是第一个描述客户端-服务器和對等網路模型的版本。1991年,NTPv1架构、协议和算法通过大衛·米爾斯在IEEE通信汇刊发布的一篇文章得到了工程学界的更广泛关注。
1989年,RFC 1119发布通过有限状态机定义的NTPv2,使用伪代码来描述其操作。它引入了一个管理协议和加密认证方案,它们留存至NTPv4。社区批评NTP的设计缺乏形式正确性原则。他们的替代设计包括Marzullo算法,其修改版本已及时添加到NTP。这个时代的大多数算法也大部分留存至NTPv4。
1992年,RFC 1305定义了NTPv3。该RFC包括一个对所有错误来源的分析,从参考时钟至最终客户端,这使帮助度量和选择最佳服务器成为可能(在其中几个候选者反对的情况下)。广播模式被引入。
在接下来的几年里,随着新特性的添加和算法的改进,显然还需要一个新的协议版本。[6]2010年,RFC 5905发布了一个对NTPv4的建议规范,但该协议自那时以来已经显著改变,截至2014年,更新的RFC尚未发布。在Mills从特拉华大学退休后,该参考实现目前由Harlan Stenn保持为一个开放源代码项目。
| 版本 | 时间 | 协议号 | 描述 |
|---|---|---|---|
| NTPv0 | 1981 | RFC 958 | NTP的名称首次出现在RFC 958之中,该版本也被称为NTPv0。该版本对于如本地时钟的误差估算、精密度等基本运算、参考时钟的特性等进行了描述。 |
| NTPv1 | 1988 | RFC 1059 | NTPv1首次提出了完整的NTP规则以及算法。这个版本采用了Client-Server模式以及对称操作。 |
| NTPv2 | 1989 | RFC 1119 | NTPv2在NTPv1的基础上支持认证和控制消息。v |
| NTPv3 | 1992 | RFC 1305 | NTPv3正式引入了校正原则,并改进了时钟选择和时钟过滤算法,而且还引入了时间消息发送的广播模式。NTPV3目前应用较为广泛。 |
| NTPv4 | 2010 | RFC 5905 | NTPv3仅支持IPv4网络。NTPv4是对NTPv3的扩展,同时支持IPv4和IPv6网络,并兼容NTPv3。NTPv4提供了一套完整的加密认证体系,安全性上相对NTPv3有了很大的提高。 |
NTP 使用一种分层的架构来传播时间,这种层级被称为 Stratum。层级越低,表示精度越高,离标准时间源越近。
Stratum 0 (原子钟/GPS): 这是最高精度的计时设备,如原子钟、GPS 接收器或无线电时钟。它们不直接连接网络,而是通过串口等方式连接到 Stratum 1 服务器。
Stratum 1 (主时间服务器): 这些计算机直接连接到 Stratum 0 设备。它们是网络上的主要时间标准,通常误差在微秒级。
Stratum 2 (二级服务器): 这些计算机会通过网络向 Stratum 1 服务器请求时间。它们既是客户端(从 S1 获取时间),也是服务器(向 S3 提供时间)。
Stratum 3 ... 15: 依此类推,层层向下同步。
Stratum 16: 表示设备未同步或不可达(无效层级)。
阶层的上限为15;阶层16被用于标识设备未同步。每台计算机上的NTP算法相互构造一个贝尔曼-福特算法最短路径生成树,以最小化所有客户端到阶层1服务器的累积往返延迟。
注意: 普通的企业或家庭用户通常处于 Stratum 2 或 Stratum 3,这对于日常应用来说精度已经绰绰有余。
NTP 的核心是通过测量网络往返延迟(RTT)来估算时钟偏移(offset)和漂移(drift)。
客户端与服务器交换报文,记录四个时间戳:
计算公式:
假设网络路径对称,这个偏移即为客户端与服务器的时间差。NTP 会从多个服务器采集样本,使用 Marzullo 算法或类似聚类算法选择最佳源(最低根分散、延迟)。
NTP 报文基于 UDP(端口 123),基本报文长度 48 字节,使用 64 位时间戳格式(32 位秒 + 32 位分数秒,自 1900 年 1 月 1 日起算)。
关键字段:
| 字段 | 位数 | 说明 |
|---|---|---|
| LI (Leap Indicator) | 2 | 闰秒指示 |
| VN (Version Number) | 3 | 协议版本(当前 4) |
| Mode | 3 | 工作模式(1: 对称主动, 2: 对称被动, 3: 客户端, 4: 服务器, 5: 广播, 6: 控制, 7: 保留)。 |
| Stratum | 8 | 层级 |
| Poll | 8 | 轮询间隔(2^n 秒)。 |
| Precision | 8 | 本地精度 |
| Root Delay | 32 | 到参考源延迟 |
| Root Dispersion | 32 | 累计误差 |
| Reference ID | 32 | 时间源标识(如 "GPS " 或上游 IP) |
| T1–T4 | 64×4 | 时间戳(Reference, Originate, Receive, Transmit。) |
可选扩展字段(Extension Fields)和认证字段(MAC)。
网络抖动是 NTP 最大的噪声来源。
NTP 会维护最近 8 次时间样本:
(offset, delay)
原理假设:
最小延迟 ≈ 最接近真实时间路径
一个 NTP 客户端通常会连接多个 Server:
Server A
Server B
Server C
NTP 使用 Marzullo 算法 选择可信时间区间:
这一步是 NTP 抗攻击 / 抗故障的核心
NTP 不直接跳变时钟(除非误差 > 128 ms),而是通过 PLL(Phase-Locked Loop)和 FLL(Frequency-Locked Loop)渐进调整:
ntpd 守护进程维护一个反馈环路,包括:
这确保时钟平滑调整,避免应用层时间跳变。
NTP 支持多种工作模式,以适应不同的网络环境:
| 模式 | 描述 | 适用场景 |
|---|---|---|
| Client/Server | 最常用的模式。客户端向服务器请求时间,服务器响应。 | 绝大多数终端设备、PC、服务器。 |
| Symmetric (Peer) | 两台服务器互为时间源,互相协商。 | 核心层的时间服务器互备,确保高可用性。 |
| Broadcast/Multicast | 服务器向局域网广播时间信息,客户端被动接收。 | 局域网内大量对精度要求不高的设备(避免大量并发请求)。 |
传统 NTP 易受 spoofing 和 amplification 攻击。常见的安全风险包括NTP 放大攻击、伪造时间源、中间人攻击等。
安全扩展包括:
NTS 使用 NTS-KE(Key Exchange)协议在 TCP 123 端口协商密钥,然后 NTP over UDP 使用加密扩展字段。
常见NTP 服务软件
| 软件 | 特点 |
|---|---|
| ntpd | 传统 NTP 实现 |
| chrony | 现代 Linux 推荐 |
| OpenNTPD | 简洁、安全 |
| systemd-timesyncd | 轻量级 |
公共 NTP 网络时间服务器:
| 服务器名称 | 域名/IP地址 | 备注 |
|---|---|---|
| 国家授时中心 NTP 服务器 | ntp.ntsc.ac.cn 114.118.7.161 114.118.7.163 |
|
| 中国 NTP 快速授时服务 | cn.ntp.org.cn 2001:da8:9000::81 223.113.97.98 114.67.103.73 119.29.26.206 120.25.115.20 |
|
| 教育网 | edu.ntp.org.cn 2001:da8:9000::130 2001:250:380A:5::10 202.118.1.130 202.118.1.81 116.13.10.10 |
|
| 香港 | hk.ntp.org.cn 149.129.123.30 |
|
| 台湾 | tw.ntp.org.cn | |
| 日本 | jp.ntp.org.cn 133.100.11.8 |
|
| 韩国 | kr.ntp.org.cn 211.233.40.78 |
|
| 新加坡 | sgp.ntp.org.cn 218.186.3.36 |
|
| 美国 | us.ntp.org.cn 158.69.48.97 |
|
| 德国 | de.ntp.org.cn 131.188.3.223 |
|
| 印度尼西亚 | ina.ntp.org.cn 203.114.74.17 |
|
| 中国计量科学研究院 NIM 授时服务 | ntp1.nim.ac.cn ntp2.nim.ac.cn 111.203.6.13 |
|
| 国际 NTP 快速授时服务 | cn.pool.ntp.org 120.25.115.20 111.230.189.174 119.28.183.184 |
|
| 阿里云公共 NTP 服务器 | ntp.aliyun.com ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com ntp5.aliyun.com ntp6.aliyun.com ntp7.aliyun.com |
|
| 腾讯云公共 NTP 服务器 | ntp.tencent.com ntp1.tencent.com ntp2.tencent.com ntp3.tencent.com ntp4.tencent.com ntp5.tencent.com |
|
| 高通中国提供 NTP 服务 | time.izatcloud.net time.gpsonextra.net |
|
| 海康威视公共 NTP 服务器 | hik-time.ys7.com time.ys7.com |
|
| 香港天文台公共 NTP 服务器 | stdtime.gov.hk 223.255.185.2 223.255.185.3 118.143.17.82 118.143.17.83 time.hko.hk |
|
| 澳门地球气象局公共 NTP 服务器 | time.smg.gov.mo | |
| 国际 NTP 快速授时服务 | pool.ntp.org 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org asia.pool.ntp.org |
|
| 谷歌公共 NTP 服务器 | time1.google.com time2.google.com time3.google.com time4.google.com |
|
| 苹果公司公共 NTP 服务器 | time1.apple.com time2.apple.com time3.apple.com time4.apple.com time5.apple.com time6.apple.com time7.apple.com |
|
| Cloudflare NTP 服务器 | time.cloudflare.com 162.159.200.1 162.159.200.123 |
|
| 微软 Windows NTP 服务器 | time.windows.com 20.189.79.72 52.148.114.188 40.119.6.228 51.137.137.111 |
|
| 美国标准技术研究院 NTP 服务器 | time.nist.gov time-nw.nist.gov time-a.nist.gov time-b.nist.gov 128.138.141.172 132.163.96.1 132.163.96.2 132.163.97.1 132.163.97.2 |
|
| Facebook NTP 服务器 | time.facebook.com time1.facebook.com time2.facebook.com time3.facebook.com time4.facebook.com time5.facebook.com |
|
| 韩国标准科学研究院 | time.kriss.re.kr time2.kriss.re.kr |
|
| 日本国家信息通信技术研究所 | ntp.nict.jp |
NTP 是一个稳定、成熟、低成本的时间同步协议,是现代计算系统不可或缺的基础组件。NTP 是分布式系统时间同步的基石,其算法设计巧妙地处理网络不确定性。在分布式系统和高可靠场景中,准确的时间同步往往决定系统是否可靠。