KDocsKDocs
首页
学习
笔记
首页
学习
笔记
  • NTP协议

NTP协议

2025/7/5


时间并非一个绝对的、客观的实体,而是相对于观察者和参考系的一种主观幻觉

NTP简介

NTP(Network Time Protocol): 是一种用于网络时间同步的协议。它旨在确保计算机和其他网络设备具有准确的时间,并通过与时间服务器进行通信来同步其时钟。NTP协议应用于分布式时间服务器和客户端之间,实现客户端和服务器的时间同步,从而使网络内所有设备的时钟基本保持一致。NTP协议是基于UDP进行传输的,使用端口号为123。

NTP服务器: 是提供时间服务的特定服务器,通过网络向客户端提供准确的时间信息,通常与原子钟或其他高精度时间源同步,以确保提供高度准确的时间。

SNTP(Simple Network Time Protocol): 是NTP的简化版本,旨在提供基本的时间同步功能。由于SNTP实现了一部分NTPv4功能,因此SNTPv4相关实现已经合入到NTPv4。与NTP相比,SNTP协议主要关注基本的时间同步功能,功能较少,易于理解和实现,不过时间同步精度较差。因此SNTP适合一些对时间精度和可靠性要求不是特别高的互联网或局域网。

发展历程

  • NTP v1:最早的NTP版本,于1985年发布。它是一个简单的协议,主要用于时间同步和基本的时钟校准。
  • NTP v2:于1988年发布,引入了一些改进,如更好的时钟校准算法和更准确的时间同步。
  • NTP v3:于1992年发布,是第一个广泛使用的NTP版本。它引入了一些重要的特性,包括对称性和客户端/服务器模式、更准确的时钟校准算法、更好的时钟选择算法以及更强大的安全性。
  • NTP v4:于2010年发布,是目前最新和最广泛使用的NTP版本。它引入了许多新特性和改进,包括更准确的时钟选择算法、更强大的安全性和认证机制、更好的时钟校准算法、更灵活的配置选项等。

NTP工作流程

image-20250705103750527

NTP分层结构

NTP服务一般采用分层结构实现,从Stratum 0到Stratum 15不等。,Stratum(层)指的是时间源的层级结构。每个时间源都被分配到一个特定的层级,以下是对Stratum分层结构示意图:

image-20250705104347916

  • Stratum:Stratum 0是最高层级,代表原子钟、GPS接收器或其他高精度的时间源。Stratum 1是直接与Stratum 0时间源相连的服务器,Stratum 2是与Stratum 1服务器相连的服务器,以此类推。
  • 分层的目的:分层结构有助于建立时间同步的可靠性和稳定性。通过分层,NTP协议可以避免时间环路和错误传播,确保时间同步的准确性和可靠性。
  • 分层时间精度:不同层级的时间源具有不同的精确度。Stratum 0时间源通常具有最高的精确度,因为它们直接从原子钟或卫星接收到高精度的时间信号。随着层级的增加,精确度可能会略微降低,但在整个NTP网络中,精确度通常仍然非常高。
  • 时间同步过程:较低层级的服务器会定期向较高层级的服务器发送时间请求。较高层级的服务器使用自己的时钟和与更高级别的时间源的同步信息来响应这些请求。通过这种方式,时间信息从更高级别的时间源传播到较低级别的服务器,实现整个网络中的时间同步。

注: 互联网主机通常会同步到Stratum 2或Stratum 3级别的时间服务器。这是因为Stratum 2和Stratum 3级别的时间服务器已经通过Stratum 1级别的时间服务器与高精度的时间源进行了同步,提供了足够准确的时间信息,满足大多数应用的需求。

时间计算

假设本地计算机和时间服务器通信时间如下:

image-20250705103827204

  • T1:时间同步请求时间
  • T2:时间服务器接收到请求时间
  • T3:时间服务器响应时间
  • T4: 时间同步请求响应时间

计算延迟时间Delay

Delay=[(T4−T1)−(T3–T2)]/2Delay = [(T4 - T1) - (T3 – T2)]/2 Delay=[(T4−T1)−(T3–T2)]/2

计算时间偏差Offset

T4+Offset=T3+DelayT4 + Offset = T3 + Delay T4+Offset=T3+Delay

Offset=T3+Delay−T4=[(T2−T1)+(T3–T4)]/2Offset = T3 + Delay - T4 = [(T2 - T1) + (T3 – T4)]/2 Offset=T3+Delay−T4=[(T2−T1)+(T3–T4)]/2

客户端时间校准

CurrentTime=T4+Offset=(T4+T3+T2−T1)CurrentTime = T4 + Offset = (T4 + T3 + T2 - T1) CurrentTime=T4+Offset=(T4+T3+T2−T1)

ntp服务信息

[root@VM-238-106-centos ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+169.x.x.79    100.y.y.196   2 u  266 1024  377    0.743    0.554   0.605
-169.x.x.80    100.y.y.196   2 u  171 1024  377    0.611    0.524   0.390
+169.x.x.81    100.y.y.196   2 u  292 1024  377    0.617   -0.094   0.208
*169.x.x.82    100.y.y.196   2 u  163 1024  377    0.844    0.296   0.268
+169.x.x.83    100.y.y.196   2 u  408 1024  377    0.689   -0.043   0.272
  1. remote:远程NTP服务器的IP地址或主机名。
  2. refid:远程NTP服务器所参考的时间源的IP地址或主机名。
  3. st:远程NTP服务器的时钟层级(stratum)。较低的数字表示更接近时间源的服务器。
  4. t:远程NTP服务器的时钟类型。u 表示未确定,s 表示本地挂钟,l 表示本地原子钟,f 表示外部参考源。
  5. when:自上次成功同步以来的时间(以秒为单位)。
  6. poll:NTP客户端向远程服务器发送时间请求的间隔(以秒为单位)。
  7. reach:表示最近8个时间请求中成功接收到响应的数量。每个时间请求成功接收到响应时,对应的位会被设置为1。
  8. delay:NTP客户端与远程服务器之间的往返延迟(以毫秒为单位)。
  9. offset:NTP客户端与远程服务器之间的时间偏差(以毫秒为单位)。正值表示客户端时间比服务器时间晚,负值表示客户端时间比服务器时间早。
  10. jitter:NTP客户端与远程服务器之间的时钟抖动(以毫秒为单位)。它表示时钟的不稳定性。

在上面列表中,每行表示一个远程NTP服务器的信息。前面的符号(+、-、)表示服务器的同步状态。+ 表示该服务器是当前所选的同步源,- 表示该服务器可用但不是首选同步源, 表示该服务器是当前所选的同步源并且具有较低的偏差和抖动。

NTP报文格式

0               7              15              23              31
+---------------------------------------------------------------+
|LI | VN  | Mode|   Stratum    | Poll Interval |   Precision    |
+---------------------------------------------------------------+
|                         Root Delay                            |
+---------------------------------------------------------------+
|                      Root Dispersion                          |
+---------------------------------------------------------------+
|                      Reference Identifier                     |
+---------------------------------------------------------------+ 
|                      Reference Timestamp                      |
+---------------------------------------------------------------+
|                      Originate Timestamp                      | 
+---------------------------------------------------------------+ 
|                      Receive Timestamp                        | 
+---------------------------------------------------------------+
|                      Transmit Timestamp                       |      
+---------------------------------------------------------------+
|                    Authenticator (optional)                   |
+---------------------------------------------------------------+
字段名长度bit含义
Leap Indicator2LI 闰秒标识器,表示在NTP时间标尺中将要插入的下一跳情况。值为“11”时表示告警状态,时钟不能被同步。
00 0 无预告
01 1 最近一分钟有61秒
10 2 最近一分钟有59秒
11 3 警告状态(时钟未同步)
VN(Version Number)3NTP的版本号。现在为4
Mode3NTP的工作模式。不同值表示的含义如下:
0:reserved,保留。
1:symmetric active,主动对等体模式。
2:symmetric passive,被动对等体模式。
3:client,客户模式。
4:server,服务器模式。
5:broadcast,广播模式。
6:reserved for NTP control messages,NTP控制报文。
7:reserved for private use,内部使用预留。
Stratum8时钟的层数,定义了时钟的准确度。层数为1的时钟准确度最高,从1到15依次递减。
Poll Interval8Poll 测试间隔:轮询时间,即发送报文的最小间隔时间。
Precision8时钟的精度。
Root Delay32参考时钟标识符:根时延:到主参考时钟的总往返延迟时间。
Root Dispersion32本地时钟相对于主参考时钟的最大误差。
Reference Identifier32标识特定参考时钟。
Reference Timestamp64本地时钟最后一次被设定或更新的时间。如果值为0表示本地时钟从未被同步过。
Originate Timestamp64NTP报文离开源端时的本地时间。
Receive Timestamp64NTP报文到达目的端的本地时间。
Transmit Timestamp64目的端应答报文离开服务器端的本地时间。
Authenticator96(可选)验证信息。

NTP控制报文格式

0               7              15              23              31
+---------------------------------------------------------------+
|00 | VN  | 6   |  REM |   Op  |           Sequence             |
+---------------------------------------------------------------+
|             Status           |        Association ID          |
+---------------------------------------------------------------+
|             Offset           |           Count                |
+---------------------------------------------------------------+
|                                                               |
+                               --------------------------------+
|                              |         Padding(zeros)         |
+---------------------------------------------------------------+
|                       Authenticator                           |
+---------------------------------------------------------------+
字段名长度bit含义
02保留位。NTP本身不做处理。
VN(Version Number)3NTP的版本号,目前值为3。
63表明是控制报文。
REM3R:0表示命令,1表示响应。E:0表示发送正常响应,1表示发送错误响应。
M:0表示最后一个分片,1表示其他。
Op5操作码,表明命令的类型。
Sequence16发送或接受到报文的顺序号。
Status16表明当前系统的状态。
Association ID16连接标示。
Offset16偏移量。
Count16数据域的长度。
Data468包括发送报文或接受报文中的数据信息。(最大468)
Padding16填充字段。
Authenticator96(可选)验证信息。

示例报文

NTP报文Broadcast

Frame 46: 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
...
Network Time Protocol
  Flags: 0xe5
    11.. .... = Leap Indicator: unknown (clock unsynchronized) (3)
    ..10 0... = Version nubmer: NTP Version 4 (4)
    .... .101 = Mode: broadcast (5)
  Peer Clock Stratum: secondary reference (15)
  Peer Polling Interval: 4 (16 sec)
  Peer Clock Precision: 0.031250 sec
  Root Delay:    0.0000 sec
  Root Dispersion:    0.0000 sec
  Reference ID: 0.0.0.0
  Reference Timestamp: Jan 1, 1970 00:00:00.000000000 UTC  
  Origin Timestamp: Jan 1, 1970 00:00:00.000000000 UTC
  Receive Timestamp: Jan 1, 1970 00:00:00.000000000 UTC
  Transmit Timestamp: Dec 17, 2014 10:45:57.924999000 UTC

NTP报文(client)

Frame 107: 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
...
Network Time Protocol
  Flags: 0x23
    00.. .... = Leap Indicator: no warning (0)
    ..10 0... = Version nubmer: NTP Version 4 (4)
    .... .011 = Mode: client (3)
  Peer Clock Stratum: unspecfied or invalid (0)
  Peer Polling Interval: invalid (0)
  Peer Clock Precision: 1.000000 sec
  Root Delay:    0.0000 sec
  Root Dispersion:    0.0000 sec
  Reference ID: NULL
  Reference Timestamp: Jan 1, 1970 00:00:00.000000000 UTC  
  Origin Timestamp: Jan 1, 1970 00:00:00.000000000 UTC
  Receive Timestamp: Jan 1, 1970 00:00:00.000000000 UTC
  Transmit Timestamp: Dec 17, 2014 18:46:07.979245000 UTC

NTP报文(server)

Frame 100: 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
...
Network Time Protocol
  Flags: 0x1c
    00.. .... = Leap Indicator: no warning (0)
    ..01 1... = Version nubmer: NTP Version 4 (4)
    .... .100 = Mode: server (4)
  Peer Clock Stratum:  primary reference (1)
  Peer Polling Interval: invalid (0)
  Peer Clock Precision: 0.015625 sec
  Root Delay:    0.0000 sec
  Root Dispersion:    10.3870 sec
  Reference ID: uncalibrated local clock
  Reference Timestamp: Dec 17, 2014 02:00:44.156124000 UTC
  Origin Timestamp: Dec 17, 2014 10:55:29.457999000 UTC
  Receive Timestamp: Dec 17, 2014 10:55:29.453125000 UTC
  Transmit Timestamp: Dec 17, 2014 10:55:29.453125000 UTC

时间同步协议

时间在计算机系统中至关重要的。它不仅仅是为了显示当前的日期和时间,而是为了确保系统的正常运行、安全性、一致性和性能。准确的时间信息对于计算机系统的各个方面都是必不可少的。

  • 同步和协调:时间提供一个共同参考点,确保计算机系统中的组件和进程按照正确的顺序执行,保持系统的稳定性和一致性。
  • 安全和认证:时间在计算机安全和认证中起着关键作用,用于验证和保护系统,包括数字证书的有效期限、身份验证令牌的时间同步和防止重放攻击等。
  • 记录和分析:时间戳在记录和日志中起着重要作用,帮助解事件发生的顺序,以及在任务调度和性能分析中确定任务优先级、执行时间和延迟等方面的应用。
  • 数据一致性和复制:在分布式系统中,时间对于确保数据一致性和复制的正确性非常重要。时间戳可以用于确定事件的顺序,从而确保数据在不同节点之间的正确复制和同步。

计算机的系统时间一般来自两部分:image-20250705102106856

  • 系统时钟:表示计算机的系统时间,由操作系统维护,定期进行更新和校准。
  • 本地更新:计算机一般内部都配置RTC硬件设备,当操作系统启动时会查询RTC并设置系统时钟。但RTC有个问题就是,会有误差,并且误差会累积,因此当时间拉长,系统时钟会越来越不准确,因此需要定期校准。
  • 校准:本地计算机通过时间同步协议定期同步远程时间服务器时间,并对本地系统时钟进行微调校准。
  • 时间同步协议:通过该协议对本地系统时钟进行校准
  • 时间服务器:通过更高精密的物理设备,提供高精度时间。时间源如:高精度原子钟,GPS卫星时间、其他时间服务器等

常见的时间同步协议如下:

时间同步协议名称优点缺点常用领域
NTPNetwork Time Protocol- 广泛应用于互联网和局域网环境 - 可扩展性和灵活性好-精度相对较低 - 受网络延迟和时钟漂移影响互联网、局域网
PTPPrecision Time Protocol- 高精度时间同步 - 微秒级或纳秒级精度需要专用硬件支持 - 配置部署复杂工业自动化、金融交易系统
GPSGlobal Positioning System- 提供高精度时间信息 - 全球范围可用接收GPS信号 - 受天气和地理影响科学研究、导航、定位

注:互联网中一般使用NTP协议进行计算机之间的时间同步。

本文参考博客园 warm3snow