地球分为东西十二个区域,共计 24 个时区,以格林威治作为全球标准时间(即GMT 时间,0时区),东部时区以格林威治时区进行加法,而西时区则以格林威治时间作减法。但地球的轨道并非正圆,在加上自转速度逐年递减,时间会有误差。在计算时间的时,最准确是使用“原子震荡周期”所计算的物理时钟。这种时钟被称为标准时间,即UTC时间(Coordinated Universal Time)。UTC 的准确性毋庸置疑,美国的 NIST F-1 原子钟 2000 年才将产生 1 秒误差。
实际生产生活中,使用原子时钟这种准确的计时似乎缺少必要性,我们更多关注的是参与活动的各个个体在相同的时间环境下对话。例如,当我们说明天早上8:00开会的时候,我们并不在乎原子时钟真实的计时情况,只要参会的所有个体对“明天早上8:00”这个时间具有相同的认知即可。这里时间同步是个非常重要的概念,如果某位同仁手表慢了半小时,那它对“早上8:00”的理解就比其他人要慢半小时,最终会导致ta开会迟到。同样的道理,我们在影视剧中经常能看到特种作战小组在执行特别任务前一般都要先完成组员之间的时间同步,避免组员之间在时间上的认知差异给任务带来不必要的麻烦,甚至危及生命。
NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用于分布式设备(比如电脑、手机、智能手表等)进行时间同步,避免人工校时的繁琐和由此引入的误差,方便快捷地实现多设备时间同步。NTP校时服务基于UDP传输协议进行报文传输,工作端口默认为123/udp。
1. NTP的工作原理
NTP的实现过程如图所示,假如设备A和设备B本地时间存在差异(设备A早上10点,设备B早上11点),现在设备A欲通过NTP和设备B在时间上保持同步:
- 设备A向设备B发送NTP报文,报文包含发出时设备A本地时间,记为;
- 设备B受到NTP报文向其中添加接收到报文时设备B的本地时间,记为;
- 设备B响应NTP请求并向A发送NTP授时报文,报文包含报文从设备B发出时设备B的本地时间,记为;
- 设备A收到设备B的响应后根据报文内容修正本地时间,我们将报文到达A时A的本地时间记为.
这样可以轻松计算出来:
设备B响应时长
网络传输延时(双向)
现假设设备A和设备B之间的时间差位,易得:
通过上式计算出.
设备A就能根据调整本地时间,实现和设备B的时间同步。
2. NTP 网络结构
NTP的目的是在一个同步子网中,通过NTP协议将主时间服务器的时钟信息传送到其他二级时间服务器,实现二级时间服务器和主时间服务器的时钟同步。这些服务器按层级关系连接,每一级称为一个层数(stratum),如主时间服务器层数为 stratum 1,二级时间服务器层数为 stratum 2,以此类推。时钟层数越大,准确性越低。
注意:准确性指相对于主时间服务器而言。
在NTP网络结构中,有以下几个概念:
- 同步子网: 如上图,由主时间服务器、二级时间服务和客户端组成的互连网络。
- 主时间服务器:指直接通过线缆或无线电同步到标准参考时钟的设备,标准参考时钟通常指RadioClock或卫星定位系统或原子时钟。
- 二级时间服务器:通过主时间服务器或子网中其他二级服务器获得时钟同步,并向外提供时钟同步服务的设备。二级时间服务器通过 NTP 将时间信息传送到局域网内部的其它主机。
- 客户端:从主时间服务器或二级服务器获得时钟同步,但不提供时钟同步服务,比如手机和普通家用电脑中的网络校时程序。
- 层数: 层数是对时钟同步的一个分级标准,取值范围1~16,代表了时钟的精确度,数值越小说明在拓扑结构上离主时间同步服务器越近,精度越高。1表示最高精度,16表示未同步。
在正常情况下,同步子网中的主时间服务器和二级时间服务器呈现出一种分层主从结构。在这种分层结构中,主时间服务器位于根部,二级时间服务器向叶子节点靠近,层数递增,准确性递减,降低的程度取决于网络路径和本地时钟的稳定性。
3. NTP 报文格式
NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文。控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的,这里不做介绍。
时钟同步报文封装在UDP报文中,其格式如图所示:
各主要字段解释如下:
- LI (Leap Indicator) : 长度为2比特,值为“11”时表示告警状态,时钟未被同步。为其他值时NTP本身不做处理。
- VN (Version Number): 长度为3比特,表示NTP的版本号.
- Mode:长度为3比特,表示NTP的工作模式。不同的值所表示的含义分别是:0未定义、1表示主动对等体模式、2表示被动对等体模式、3表示客户模式、4表示服务器模式、5表示广播模式或组播模式、6表示此报文为NTP控制报文、7预留给内部使用。
- Stratum:系统时钟的层数,取值范围为1~16,它定义了时钟的准确度。层数为1的时钟准确度最高,准确度从1到16依次递减,层数为16的时钟处于未同步状态,不能作为参考时钟。
- Poll:轮询时间,即两个连续NTP报文之间的时间间隔。
- Precision:系统时钟的精度。
- Root Delay:本地到主参考时钟源的往返时间。
- Root Dispersion:系统时钟相对于主参考时钟的最大误差。
- Reference Identifier:参考时钟源的标识。
- Reference Timestamp:系统时钟最后一次被设定或更新的时间。
- Originate Timestamp:NTP请求报文离开发送端时发送端的本地时间。
- Receive Timestamp:NTP请求报文到达接收端时接收端的本地时间。
- Transmit Timestamp:应答报文离开应答者时应答者的本地时间。
- Authenticator:验证信息。
其中,NTP发送和接收的报文数据包类似,通常只需要前48个字节就能进行授时和校时服务。下面分别是抓包获取的NTP请求数据包和回复数据包示例(仅前48个字节):
- 请求数据包:
1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ------------头部
D0 AF 5F F5 23 D7 08 00---------------Originate Timestamp ()出发时间戳有效位为8 bytes
- 回复数据包:
1C 02 00 EC 00 00 06 EA 00 00 0C A2 C0 A8 33 CA----数据包头部,共16 bytes
D0 AF 5E A3 F5 BD 72 BC---------------Reference Timestamp
D0 AF 5F F5 23 D7 08 00---------------Originate Timestamp ()
D0 AF 61 D7 CD 2E F9 11---------------Receive Timestamp ()
D0 AF 61 D7 CD 2F F4 BA---------------Transmit Timestamp ()
收到数据包后,接收端本地再产生一个时间戳()。
这里,每个返回数据前4字节为秒的整数部分,后4字节为秒的小数部分。
4. NTP工作模式
设备可以采用多种NTP工作模式进行时间同步:
- 单播C/S模式
- 对等体模式
- 广播模式
- 组播模式
- 多播模式
4.1 单播C/S模式
单播C/S模式运行在同步子网层数较高的层级上,客户端需要预先知道时间服务器IP或域名并定期向服务器发送时间同步请求报文,报文中的 Mode字段设置为 3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。客户端不管服务器端是否可达,也不管服务器端所在的层数。在这种模式下,客户端会同步到服务器,但不会修改服务器的时钟。服务器则在客户端发送请求之间无需保留任何状态信息。客户端根据本地情况自由管理发送报文的时间间隔。
4.2 对等体模式
对等体模式运行在同步子网较低层级上,主动对等体和被动对等体实现时钟相互同步。这里有两个概念:主动对等体和被动对等体。
- 主动对等体:指对等体模式下,同步报文主动发起方。
-
被动对等体:指对等体模式下,同步报文被动回应方。
如上图所示,对等体模式工作步骤如下:
1.主动对等体和被动对等体首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文,这一步主要是获得通信时延。
- 主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体)。不考虑被动对等体是否可达以及对等体的层数。
- 被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。
- 经过报文的交互,对等体模式建立起来。
主动对等体和被动对等体可以互相同步。如果双方的时钟都已经同步,则以层数小的时钟为准。
注意:对等体模式不需要用户手动设置,设备依据收到的NTP报文自动建立连接并设置状态变量。
4.3 广播模式
广播模式应用在多台工作站和不需要很高精度的高速网络中。主要工作流程如图所示:
- 服务器端周期性地向广播地址
255.255.255.255
发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。它不需要考虑其他设备是否可以到达以及层数多少。 - 设备侦听来自服务器的广播报文。当设备接收到第一个广播报文后,自动进入客户端模式并与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。
- 之后,客户端进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文将系统时钟与服务器进行同步。
注意:在广播模式下,服务端只负责向外广播时钟信息,自身时钟不受客户端影响。
4.4 组播模式
组播模式适用于有大量客户端分布在网络中的情况。通过在网络中使用 NTP 组播模式, NTP 服务器发送的组播消息包可以到达网络中所有的客户端,从而降低由于 NTP 报文过多而给网络造成的压力。主要工作流程如下:
- 服务器端周期性地向用户指定的组播地址(若用户没有配置组播地址,则使用默认的NTP组播地址
224.0.1.1
)发送时钟同步报文,报文中的Mode字段设置为5(组播模式)。它不需要考虑其他设备是否可以到达以及层数多少。 - 设备侦听来自服务器的组播报文。当设备接收到第一个组播报文后,自动进入客户端模式并与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。
- 之后,客户端进入组播客户端模式,继续侦听组播报文的到来,根据到来的组播报文将系统时钟与服务器进行同步。
注意:组播模式和广播模式类似,只是它是向特定的组播地址发送时钟同步广播报文。在组播模式下,服务端只负责向外广播时钟信息,自身时钟不受客户端影响。
4.5 多播模式
多播模式适用于服务器分布分散的网络中。客户端可以发现与之最近的多播服务器,并进行同步。多播模式适用于服务器不稳定的组网环境中,服务器的变动不会导致整网中的客户端重新进行配置。其工作流程如下:
- 客户端周期性地向IPv4/IPv6组播地址发送时钟同步报文,报文中的Mode字段设置为3(客户端模式)。它不需要考虑时间服务器是否可以到达以及层数多少。
- 服务器持续侦听组播报文。当设备接收到第一个组播报文后,自动进入服务器模式并返回Mode字段为4(服务器模式)的NTP报文。
- 客户端接受到来自多个时钟服务器的应答报文,经过时钟过滤和选择同步到优选始终服务器。
注意:为了防止多播模式下,客户端不断的向多播服务器发送 NTP 请求报文增加设备的负担,协议规定了最小连接数的概念。多播模式下,客户端每次和服务器时钟同步后,都会记录下此次同步过中建立的连接数,将调用最少连接的数量被称为最小连接数。以后当客户端调动的连接数达到了最小连接数且完成了同步,客户端就认为同步完成;同步完成后每过一个超时周期,客户端都会传送一个报文,用于保持连接。同时,为了防止客户端无法同步到服务器,协议规定客户端每发送一个 NTP 报文,都会将报文的生存时间 TTL(Time To Live)进行累加(初始为 1),直到达到最小连接数,或者 TTL 值达到上限(上限值为 255)。若 TTL 达到上限,或者达到最小连接数,而客户端调动的连接数仍不能完成同步过程,则客户端将停止一个超时周期的数据传输以清除所有连接,然后重复上述过程。
5. NTP时钟服务器
下面补充一些常用的NTP时钟服务器:
名称 | 地址 |
---|---|
北斗授时服务 | 114.255.121.193 |
清华TUNA协会 | ntp.tuna.tsinghua.edu.cn |
国家NTP授时 | ntp.ntsc.ac.cn |
中国NTP快速授时 | cn.ntp.org.cn |
教育网NTP授时 | edu.ntp.org.cn |
更多NTP授时服务器请查看:
- NTP授时服务器池
- dns.iui.im
- www.ntppool.org
6. 主流操作系统客户端使用NTP同步时间
假设你比较喜欢清华的服务并打算将ntp.tuna.tsinghua.edu.cn
作为你的授时服务器。下面将简单介绍不同的操作系统该如何操作使得设备能够使用此服务器同步时间。
Windows客户端
本部分以主流Windows 10 系统为例演示如何使用NTP服务同步系统时间。
方案一
在“控制面板 > 时钟、语言和区域 > 日期和时间 > Internet时间 > 更改设置”中勾选“与 Internet 时间服务器同步”,在“服务器”一栏填入ntp.tuna.tsinghua.edu.cn
。方案二
通过在命令提示符中使用
w32tm /config /manualpeerlist:ntp.tuna.tsinghua.edu.cn /syncfromflags:manual /update
来将此服务器设置为个人选择的时间服务器。
Linux客户端
Linux发行版有两个主流程序支持ntp协议:ntpd和chrony。
具体使用和配置参考各自文档:ntpd doc 和 chrony doc
MAC客户端
在“系统配置 > 日期与时间 > 自动设置日期与时间”一栏,填入 ntp.tuna.tsinghua.edu.cn
。
7. #TODO
- 自建NTP授时服务器
参考资料:
- 通过网络NTP协议进行时间同步
- NTP报文格式
- NTP时钟同步技术详解
- NTP授时方式
- 实验九:NTP 服务的实现