网络协议:NTP:1:网络时间协议基础
接触到NTP时间同步有很多场景,当前常见场景在于纯局域网内部的计算机集群的时间同步和纠偏,或者以其中一台可以链接外部互联网的计算机作为枢纽,连接标准的NTP服务器进行时间同步和纠偏。这篇文章介绍一下NTP协议的基础知识。

什么是NTP

NTP是网络时间协议(Network Time Protocol)的缩写,它是用来同步网络上的各台计算机的时间的协议。它是美国David L. Mills博士设计实现的.
网络协议:NTP:1:网络时间协议基础
它是由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。现在最新的标准化文档为RFC 5905.

为什么需要NTP

为什么需要NTP服务,主要原因有两个

  • 网络上的各台计算机上的时间不同步
    不同步的原因有很多,比如手动修改了操作系统的时间,比如CMOS电池重置导致的时间复位等等。
  • 网络上的各台计算机时间不精确
    我们所使用的钟表,精度有一定的误差,一般较高的精度平均每年也会达到一分钟左右的误差,虽然对日常使用基本不造成影响,但是在计算机的世界这已经会造成问题。

什么是准确的

  • 目前最为准确的装备是什么呢?

原子钟是目前世界上最准确的计时工具,它在20世纪50年代出现,利用院子袖手或释放能量是发射出的电磁波来计时,非常稳定,再加上一些列精密仪器的控制,可以达到2000万年才误差1秒,这个精确度基本能够实现目前所有的需求。

为什么不能直接使用格林威治时间

格林威治时间是以地球自转为基础的,而由于地球自转本身就不规则,而且在缓慢加速。因为格林威治时间计时的基础都存在偏差,所以格林威治时间已经不再作为标准时间使用。

什么是新的标准时间

缩写为UTC(Universal Time Coordinated)的世界协调时是准确的标准时间,UTC正式使用原子钟进行报时的国际标准时间。

获取的方式

而获取的方式也多种,可以通过卫星,比如GPS或者北斗。也可以直接从网络上的NTP服务器进行获取。关于使用ntpdate进行时间同步的相关说明,可以参看如下文章:

时间同步的详细

在RFC 5905中,对于时间同步进行了详细的说明,其实也并不复杂:
网络协议:NTP:1:网络时间协议基础

  • 计算方法
    简单的来说,服务器的时间加上传输的延时的纠正即为要设定的时间。
    网络协议:NTP:1:网络时间协议基础

简化说明

为了更加容易地理解,对于上述RFC的实际实现进行如下更为简单的说明:

NTP客户端NTP服务器T1: 客户端发送NTP请求的时间戳(客户端时间)客户端NTP请求T2: 服务器收到NTP请求的时间戳(服务器时间)T3: 服务器回复NTP请求的时间戳(服务器时间)客户端NTP请求T4: 客户端收到NTP回复的时间戳(客户端时间)NTP客户端NTP服务器
  • 4个时间
时间 说明 备注
T1 客户端发送NTP请求的时间戳 客户端时间
T2 服务器收到NTP请求的时间戳 服务器时间
T3 服务器回复NTP请求的时间戳 服务器时间
T4 客户端收到NTP回复的时间戳 客户端时间
  • 两个延时
时间 说明
d1 客户端发送NTP请求到服务器端收到时间
d2 服务器回复NTP请求到客户端收到时间
  • 关系
    假定带求解的NTP服务器和NTP客户端需要调整的时间为变量t,则关联关系计算公式为:

T2 = T1 + t + d1
T4 = T3 - t + d2

  • 假定(延时对称性)

假定:d1 == d2
说明:考虑到客户端向服务器发送与服务器向客户端回复是一个NTP包的往返,假定两者的延时时间d1与d2相等。NTP的精度在一定程度上取决于往返回路的延时对称性。

  • 求解
    在此假定基础上进行求解,可以轻松地算出:

需要调整的时间: t = ((T2-T1) - (T4-T3) )/2

整体延时: d1 + d2 = (T2 - T1) + (T4 - T3)

分层模型

NTP中是分层(stratum)的,ntpd方式下stratum最多可以设定15个层级。stratum 0 是没有偏移offset的起点(比如原子钟),在网络上不能直接使用,另外stratum 16被认为是无未被同步的。
网络协议:NTP:1:网络时间协议基础

NTP服务器的架设

在CentOS上使用NTPD和Chrony进行NTP服务器的架设,在后续的文章中将进行进一步的说明。

参考内容

https://tools.ietf.org/html/rfc5905

相关文章: