NTP协议分析
一.NTP协议原理
2.1 NTP协议概述
网络时间协议(Network Time Protocol,简称NTP)最早是由美国Delaware 大学Mills教授设计实现的,它是用来使计算机时间同步化的一种协议,可以使计算机对其服务器或时钟源(如原子钟、GPS卫星等国际标准时间)做同步化,能够提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上误差几十毫秒),它由时间协议、ICMP时间戳消息及IP时间戳选项发展而来,是OSI 参考模型的高层协议,它使用UTC作为时间标准,是基于无连接的IP 协议和UDP协议的应用层协议,使用层次式时间分布模型,所能取得的准确度依赖于本地时钟硬件的精确度和对设备及进程延迟的严格控制。在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性。实际应用中,又有确保秒级精度的简单的网络时间协议(Simple Network Time Protocol,SNTP)。NTP拥有专用源端口和目标端口123。
NTP适用于网络环境下,可以在一个无序的网络环境下提供精确和健壮的时间服务,NTP是TCP/IP标准协议族的一员,从最初的V1版本到现在的V4版本已经变的越发稳定,它定义在IEEE802.3af,支持的RFC有RFC958、RFC1119、RFC1165及RFC1305。
NTP 的设计带来了三种产品——时钟偏移、时间延迟及差量,它们都与指定参考时钟相关联。时钟偏移表示调整本地时钟与参考时钟相一致而产生的偏差数;时间延迟表示在指定时间内发送消息到达参考时钟的延时时间;差量表示了相对于参考时钟本地时钟的最大偏差错误。因为大多数主机时间服务器通过其它对等时间服务器达到同步,所以这三种产品中的每一种都有两个组成部分:其一是由对等决定的部分,这部分是相对于原始标准时间的参考来源而言;其二是由主机衡量的部分,这部分是相对于对等而言。每一部分在协议中都是独立维持的,从而可以使错误控制和子网本身的管理操作变得容易。它们不仅提供了偏移和延迟的精密测量,而且提供了明确的最大错误范围,这样用户接口不但可以决定时间,而且可以决定时间的准确度。
NTP 源于时间协议和ICMP 时间标志消息,但其设计更强调精确度和健壮性两个方面,即使是在有多路网关、延迟差量及不可靠网络上使用时。
下图是对NTP协议报文的解析:
图1:UDP分组中的NTP信息
●LI(2bit):跳跃指示器,警告在当月最后一天的最终时刻插入的迫近闺
秒(闺秒)。值为11时表示告警状态,时钟未被同步,01表示最后一分
钟61秒,10表示最后一分钟有59秒。一般情况为00。
●VN(3bit):NTP协议版本号。最新版本为V4,1-4可选
●Mode(3bit):模式。该字段包括以下值:0-预留;1-主动对等体模式;
2-被动对等体模式;3-客户机;4-服务器;5-广播;6-NTP 控制信
息
●Stratum(1字节):对本地时钟级别的整体识别。定义了时钟的准确度,
从1到16依次递减,为1时时钟准确度最高,为16处于未同步状态。
0表示不指定。
●Poll(1字节):有符号整数表示两个连续的NTP报文之间的时间间隔。
2^poll秒
●Precision(1字节):有符号整数表示本地时钟精确度。表示本机时钟精
度为2^ precision秒。precision通常为负数。
●Root Delay(4字节):有符号固定点序号表示主要参考源的总延迟,它
是有16位小数部分的符号定点小数。本地到主参考时钟源的往返时间。
2^16表示一秒。(参见Rfc1305,p41)
●Root Dispersion(4字节):它是有16位小数部分的无符号定点小数,系
统时钟相对于主参考时钟的最大误差。表示一次到达主参考源的标准误
差。2^16表示一秒
●Reference Identifier(4字节):识别特殊参考源。可以设为请求服务器
的IP地址,也可设为0.
●Reference Timestamp(8字节):系统时钟最后一次被设定或更新的时间。
●Originate Timestamp(8字节):请求报文离开发送端时发送端的本地时
间,采用64位标(Timestamp)格式。(32位为秒部分,32位为微秒部
分)
●Receive Timestamp(8字节):请求报文到达接收端时接收端的的本地时
间,采用64位时标(Timestamp)格式。
●Transmit Timestamp(8字节):应答报文离开接收端时接收端的本地时
间,采用64位时标(Timestamp)格式。
●Authenticator(Optional):当实现了NTP 认证模式,主要标识符和信息
数字域就包括已定义的信息认证代码(MAC)信息。
2.2 NTP协议工作原理
图2:NTP服务过程示意图
影响NTP 协议精确度最关键的原因在于由网络延迟的随机性而引起的时钟延迟计算的不准确。由于延迟不准确,所以无法依靠从时间服务器到客户机的单边传输来传递精确的时间信息。为了解决这个问题,在NTP协议中使用时间服务器和客户机之间的双向信息交换和时间戳(timestamp)的概念。图3显示了用这种方法确定延迟和偏移的基本原理。
图3:延迟和偏移的方法确定原理图
如图所示,T1,T2,T3,T4为A、B主机之间最近的4个时间戳的值。假设:
a=T2-T1;b= T3- T4。那么A、B主机之间的往返传输延迟δi和B相对于A 在Ti时刻的时间偏移量θi应该为:δi=a-b;θi=(a+b)/2 。
由于在网络传输中分组传输的流量不确定,可能时大时小,而且通常是以突发的方式到达客户机,所以传输延迟不是一个稳态随机过程。但是,我们可以通过对传输延迟的测量来对完成偏差的修正。在图3中,B相对于A的真实时间偏移是θ。假设用x表示从A到B的真实传输延迟,那么有:x+θ=T2–T1=a。由于x必须为正,即有x=a–θ≥0,所以θ≤a。同理,我们可得出b≤θ,所以有b≤θ≤a,即:b=(a+b)/2-(a-b)/2≤θ≤(a+b)/2+(a-b)/2=a。相当于:θi -(δi)/2≤θ≤θi +(δi)/2。
这意味着,真实的时钟偏差值是以测量所得的偏差值为中心的,而其可能的变化范围则等长于测量所得的延迟。每一条NTP消息都包含最新的3个时间戳,第4个时间戳则由应答消息的到达请求端的时刻确定。因此,服务器和客户机都可以单独确定时间偏移。这种对称的连续采样的时间传输方法的优点是对发送和接受的消息的顺序没有要求,因此不需要可靠的传输途径。很显然,最终的准确度将取决于发送和接受路径的统计特性。