NTP基本原理
如图4-1所示,NTP客户端和NTP服务器相连,它们都有自己独立的系统时钟,现在通过NTP实现系统时钟自动同步。
设定参数及同步方式如下:
在NTP客户端和NTP服务器的系统时钟同步之前,NTP客户端的时钟设定为Ta,NTP服务器的时钟设定为Tb。
NTP服务器作为NTP时间服务器,NTP客户端的时钟要与NTP服务器的时钟进行同步。
这里描述的原理是在NTP客户端和NTP服务器的系统时钟精度为0,即完全精确的场景下进行的。
系统时钟的同步流程如下:
NTP客户端在T1时刻发送一个NTP请求报文给NTP服务器,该请求报文携带离开NTP客户端时的时间戳T1。
NTP请求报文到达NTP服务器,此时NTP服务器的时刻为T2。NTP服务器处理之后,于T3时刻发出NTP应答报文。该应答报文中携带离开NTP客户端时的时间戳T1、到达NTP服务器时的时间戳T2、离开NTP服务器时的时间戳T3。
NTP客户端在T4时刻接收到该应答报文。
通过上面的NTP报文交互,NTP客户端获得4个时间参数,分别为T1、T2、T3、T4。由于NTP客户端和NTP服务器的时钟完全精确,我们可以通过以下公式计算出NTP客户端与NTP服务器之间的时间差,也就是NTP客户端需要调整的时间。
计算NTP报文从NTP客户端发送到NTP服务器所需要的时间Delay。
Delay = [ ( T4 - T1 ) - ( T3 – T2 ) ] / 2
计算NTP客户端与NTP服务器之间的时间差Offset。
以T4时刻为例,在这个时刻点,NTP服务器发送过来的报文被NTP客户端接收到时,服务器的时刻已经为T3 + Delay。那么时间差Offset可由以下公式进行计算:
T4 + Offset = T3 + Delay
公式整理之后,Offset = T3 + Delay – T4 = T3 + [ ( T4 - T1 ) - ( T3 – T2 ) ] / 2 – T4 = [ ( T2- T1 ) + ( T3 – T4 ) ] / 2。
NTP客户端根据计算得到Offset来调整自己的时钟,实现与NTP服务器的时钟同步。
以上是NTP工作原理的简略描述,未考虑时钟的精度,但是实际场景中NTP服务器和客户端的时钟精度可能存在差异,所以RFC1305为NTP定义了复杂的算法来确保时钟同步的精确性。
对于有管理口的设备,在对offset有要求时建议不要使用管理口而是使用业务口。
NTP服务器的时间需在1900年-2036年范围内,超出该范围,客户端将无法同步时间。