概述
NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务器,利用NTP服务器提供的对时功能,可以使我们的设备时钟系统能够正确运行。
注意
小编所有文章均是自己亲手编写验证,由于文件太多,小编就不在公众号后台一一回复列举了,若需要小编的工程代码,请关注公众号,后台回复需要的工程文件,小编看到后会第一时间回复。
发展
NTP是由美国Delaware大学David L .Mills教授设计的,是最早用于网络中时钟同步的标准之一。NTP是从时间协议和ICMP时间戳报文演变而来,NTP的版本演进如下所示。
报文
NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文。控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的,这里不做介绍。
关于各字段说明如下:
原理
NTP最典型的授时方式是Client/Server方式。
客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T0,当服务器接收到该包时,依次填入包到达的时间戳T1、包离开的时间戳T2,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T3。
假设Server相对于Client时间偏移位offset,数据在网络中传输时间为delay(这里假设网络上的传输延迟相等,即T0传输到T1=T2传输到T3的时间),则:
得到
offset = ((T1-T0)+(T2-T3))/2
delay = ((T1-T0)+(T3-T2))/2
精度分析
对往返路由延时对称的假设
由于以上公司是在假设NTP请求和回复包在网上传送延时相等,即均为delay的情况下得出的,因而NTP授时精度与NTP服务器与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度。
由于往返路由的延时不对称值最大不超过网络延时,从而delay1、delay2的取值范围在(0…delay1+delay2)间,根据式(1),t也可表示为:t=(T1-T0)+delay1=(T1-T0)+(delay1+delay2)/2, 可以得出最大授时误差是±(delay1+delay2)/2。一般广域网的网络延时在10 ms~500ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小1ms。
为何实际的往返路由时延是不同?这主要是因为那些排队。路由器中有队列,交换机中有队列,甚至终端设备的网络堆栈中也有队列。尽管消息通常在队列中花费最少的时间,但有时它们在等待交换机结束与同一端口上的其他消息的通信,或者等待操作系统完成正在执行的操作,以便获取时间戳。在某些情况下,等待造成的延迟可能非常长,如几十微秒,甚至毫秒。很明显,如果这些都发生在一个方向上的传输,而非另一方向上,将造成很大的延时不对称。
对客户端与服务器间的时钟偏差offset不变的假设
以NTP服务器时钟为标准时间,在某一时刻设置NTP客户机时间为NTP服务器当前时间T0,经过一段时间后,NTP服务器时间为T0+tsn,NTP客户端时间为T0+tcn。
因为存在时钟频率偏差,tsn与tcn并不相等。NTP客户端时间tcn需乘以时钟频率偏差系数k才等于tsn,即tsn=k×tcn,所以k=tsn/tcn。
任何晶振实际工作频率都是不稳定的,只是程度不同,晶振实际频率是受外界多种因素(温度、电压、老化等)影响而改变的。因此,时钟频率偏差系数k并非恒定不变的。每隔一定时间,NTP客户机要对时钟频率偏差系数k进行校正,才能保证计时精度。
往期 · 推荐
关注
更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要获得更多内容教程请关注公众号:不只会拍照的程序猿。