NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。
使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。
对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。
NTP工作原理
NTP的基本工作原理如图所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:
在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11:00:00am。
Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。
NTP报文在Device A和Device B之间单向传输所需要的时间为 X 秒。
系统时钟同步的工作过程如下:
1、Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。
2、当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
3、当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
4、当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
至此,Device A已经拥有足够的信息来计算两个重要的参数:
NTP报文的往返时延 Delay=(T4-T1)-(T3-T2)= 2 * X秒
。
Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/ 2= 1小时
。
这样,Device A就能够根据这些信息(时间差offset)来设定自己的时钟,使之与Device B的时钟同步。
即:Device A调整后的时间 = Device A 当前时间 + 时间差offset
推导过程
上面的公式是如何推算过程如下:
我们认为,一个链接创建后,他的网络延时是稳定,即发送和接收过程的延时 delay 一致。
Device A 要同步 Device B 的时间,则认为Device A是不准确的时间,Device B是准确,所以有如下公式:
1、DeviceA 发送请求到Device B 时
T1 + offset(时间差) + delay(网络延时) = T2
2、DeviceA 接收Device B 响应时
T3 + delay(网络延时) = T4 + offset(时间差)
把公式2加上公式1,整理运算得出公式 offset = ((T2-T1)+(T3-T4))/ 2
NTP的工作模式
- 客户端/服务器模式
- 对等体模式
- 广播模式
- 组播模式
详细不叙述,参考NTP的工作原理以及工作模式