前言
本文的撰写基于RFC5905.NTP 是时间网络控制协议,V4版本相交V3版本,修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型,这样使得NTP能够更好的支持1ns的场景,轮询间隔也从上一代的最多1024s拓展到了36小时。
NTP 协议的变体
NTP协议的具体表现方式分为三种:一种是对称模式,一种是C/S模式,一种是广播模式,每种模式对应的packet mode如下:
C/S
比如在C/S模式下,客户发一个mode4的报文,然后等待服务器发送一个mode3的报文,服务器可以向多个客户端提供授时信息,这个服务器一般就是具有授时功能的GPS接收机或者电话调制解调器服务。
对等模式
在对等模式下,整个系统里的每一个实体同时是服务器和客户端,每一个实体都可以接受和发送同步报文(mode 2)
广播模式
在广播模式下,广播服务器周期性地向广播地址255.255.255.255发送NTP时间同步报文。广播客户端侦听来自广播服务器的广播报文,根据接收的广播报文将设备的时间与广播服务器的时间进行同步。
动态服务探索
这里有两个特殊的联系,选播服务器和选播客户端,二者提供了动态探索服务器的功能。这里有两种类型的客户端关联:永久和暂时关联。永久关联的客户端给设指定的IPV4或者IPV6(广播或多播群组)发送的报文是mode3。指定的任播服务器在TTL允许的范围内监听这些地址里面的报文头。如果一个服务器可以拿来同步,他会返回一个mode4的数据包,收到这个数据包以后,客户端移动到临时客户端模式(mode 3).
一个任播服务器继续发送数据包来搜索最小数量连接的模式。TTL从1开始,达到最大值以后失效。如果TTL达到最大值而没有调动足够多的联系,客户端会在一段时间内停止传送并且清楚现有的所有的连接,然后重新开始搜索。
如果动员了数量最少的协会,这时客户端就会开始则客户端开始在每个超时时段发送一个分组以保持关联。字段约束从1到255,但是对于一些具有特殊需求的应用可以单独定制。
数据格式
NTP的时间格式有三种,128位,64位和32位。128位的数据格式用来存储足够多的数据格式。这包括了64位带符号的秒字段,可以跨越5840亿年。为了方便映射,秒字段可以被划分为32位的Era number字段和32位的Era offset字段。Era不能直接由NTP产生,也没有这个必要,有专用的文件系统来产生这个。
64位的时间戳格式用在数据包头或者其他需要限制字节大小的地方。它包括一个跨越136年的32位无符号秒字段和一个分辨率为32皮秒的32位分数字段。在延迟和色散中使用32位短格式。标头字段中的完整分辨率和范围。格式是不合理的。它包括一个16位无符号秒。字段和16位分数字段。
以日期和时间戳来表示格式的协调世界时UTC,在1970年1月1日时所有的比特位都被设置为0,严格来说,在这之前都是没有协调世界时这个说法的。但是为了方便可以假设它一直在。