­

NTP时间同步

NTP 同步原理

NTP最典型的授时方式是Client/Server方式,如下图所示:

  • 客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳t1;
  • NTP请求报文到达NTP服务器,此时NTP服务器的时刻为t2。当服务端接收到该报文时,NTP服务器处理之后,于t3时刻发出NTP应答报文。该应答报文中携带报文离开NTP客户端时的时间戳t1、到达NTP服务器时的时间戳t2、离开NTP服务器时的时间戳t3;
  • 客户端在接收到响应报文时,记录报文返回的时间戳t4。
  • NTP报文从客户端到服务器的往返延迟delay。
  • 客户端与服务端之间的时间差offset。
    根据方程组:
    //download.huawei.com/mdl/image/download?uuid=a93af4e4ee98470cb6753b60d539c80e
    可以解得时间差为:

NTP 工作模式

客户/服务器模式

  • 客户模式:运行在客户模式的主机定期向服务器端发送报文,不管服务器端是否可达及服务器端的层数。运行在这种模式的主机可以依照对方的时钟进行同步,但不会修改对方的时钟。

  • 服务器模式:运行在服务器模式的主机接收并回应报文。运行在服务器模式的主机可以向客户端提供同步信息,但不会修改自己的时钟。

广播模式

  • 运行在广播模式下,周期性向IPv4格式的广播地址发送时钟同步报文,不管它的对等体是否可达或层数为多少。运行在广播模式的主机通向所有对等体提供同步信息,但不会修改自己的时钟。

  • 客户端侦听来自服务器的广播消息包。当接收到第一个广播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,之后恢复广播模式,继续侦听广播消息包的到来,根据到来的广播消息包对本地时钟再次进行同步。

广播模式应用在有多台工作站、不需要准确度很高的高速局域网。典型的情况是局域网中的一台或多台时间服务器定期向工作站发送广播报文,广播报文在毫秒级的延迟基础上确定时间。

在采用多台时间服务器的情况下,为了提高可靠性,需要改进时钟选择算法。

组播模式

  • 服务器端周期性向IPv4/IPv6格式的组播地址发送时钟同步报文。运行在组播模式的主机通常是局域网内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。

  • 客户端侦听来自服务器的组播消息包。当接收到第一个组播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息。客户端恢复组播模式后,继续侦听组播消息包的到来,根据到来的组播消息包对本地时钟进行同步。

多播模式

  • 多播模式下的客户端周期性地向IPv4/IPv6组播地址发送请求报文,寻找连接的最小数目。该过程采用如下方式进行:TTL(time-to-live)初始为1,每次累加1,直到达到最小连接数,或者TTL值达到上限。若TTL达到上限,而客户端调动的连接数仍不够,则客户端将停止一个超时周期的数据传输以清除所有连接,然后重复上述过程。若客户端调动的连接数达到了最小值,则每过一个超时周期,客户端都会传送一个报文,以保持连接。

  • TTL域内的多播服务器持续侦听报文。若某个服务器可以被同步,则服务器将使用客户端的单播地址返回报文(Mode字段设置为4)

多播模式适用于服务器分散分布在网络中的情况。客户端可以发现与之最近的多播服务器,并进行同步。多播模式适用于服务器不稳定的组网环境中,服务器的变动不会导致整网中的客户端重新进行配置。

NTP 报文格式

  • 数据报文

    |字段|长度|含义|
    |:—|:—😐:—|
    |LI(Leap Indicator)|2bit|表示在NTP时间标尺中将要插入的下一跳情况。
    00: 无告警。
    01: 最后一分钟包含61秒。
    10: 最后一分钟含59秒。
    11: 告警(时钟无法同步)。|
    |VN(Version Number)|3bit|NTP的版本号。|
    |Mode|3bit|NTP的工作模式。
    000: reserved,保留。
    001: symmetric active,主动对等体模式。
    010: symmetric passive,被动对等体模式。
    011:client,客户模式。
    100: server,服务器模式。
    101: broadcast,广播模式。
    110: reserved for NTP control messages,NTP控制报文。
    111: reserved for private use,内部使用预留。|
    |Stratum|8bit|时钟的层数,定义了时钟的准确度。层数为1的时钟准确度最高,从1到15依次递减,层数为16的时钟处于未同步状态,不能作为参考时钟。|
    |Poll|8bit|轮询时间,即发送报文的最小间隔时间。|
    |Precision|8bit|时钟的精度。|
    |Root Delay|32bit|到主参考时钟的总往返延迟时间。|
    |Root Dispersion|32bit|本地时钟相对于主参考时钟的最大误差。|
    |Reference Identifier|32bit|标识特定参考时钟。|
    |Reference Timestamp|64bit|本地时钟最后一次被设定或更新的时间。如果值为0表示本地时钟从未被同步过。|
    |Originate Timestamp|64bit|NTP报文离开源端时的本地时间。|
    |Receive Timestamp|64bit|NTP报文到达目的端的本地时间。|
    |Transmit Timestamp|64bit|目的端应答报文离开服务器端的本地时间。|
    |Authenticator|96bit|(可选)验证信息。|

  • 控制报文

    |字段|长度|含义|
    |:—|:—😐:—|
    |00|2bit|保留位。|
    |VN(Version Number)|3bit|NTP的版本号。|
    |6|3bit|NTP的工作模式,110表明是控制报文|
    |REM|3bit|R:0表示命令,1表示响应。
    E:0表示发送正常响应,1表示发送错误响应。
    M:0表示最后一个分片,1表示其他。|
    |Op|5bit|操作码,表明命令的类型。|
    |Sequence|16bit|发送或接受到报文的顺序号。|
    |Status|16bit|表明当前系统的状态。|
    |Association ID|16bit|连接标示。|
    |Offset|16bit|偏移量|
    |Count|16bit|数据域的长度|
    |Data|≤468bit|包括发送报文或接受报文中的数据信息。|
    |Padding|16bit|填充字段|
    |Authenticator|96bit|(可选)验证信息。|

参考:[1]//info.support.huawei.com/info-finder/encyclopedia/zh/NTP.html