(NTP协议简介)
一. datec dates分析
1. 同步流程
服务端:开启监听 。。。。。。 客户端N:应用层发出同步请求 客户端N:链路层发出同步请求 服务端:链路层接收同步请求 服务端:应用层接受同步请求,并发出服务端当前时间 服务端:链路层发出同步包 客户端N:链路层接收同步包 客户端N:应用层接受同步包,并设置系统时间 。。。。。。
2. 缺陷
从服务端从应用层发出同步包开始,至客户端接收同步包为止,其中产生的传输延时均未被考虑。
二. NTP(Network Time Protocol)
1. NTP概述 [1、2、3、7]
NTP 协议用于在(网络延迟可变的)网络之中通过分组交换进行时钟同步,由时间协议、ICMP时间戳消息及IP时间戳选项发展而来,使用层次式时间分布模型(第n+1层的机器向第n层的机器请求同步,第0层的机器与高精度计时设备相连)。在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性,即使客户机在长时间无法与某一时间服务器相联系的情况下,仍可提供高准确度时间。
2. NTP的时钟同步原理与授时精度分析 [3、1、10]
NTP的时钟同步原理
NTP最典型的授时方式是Client/Server方式。
客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T1,当服务器接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T4。
客户机用上述4个时间参数就能够计算出2个关键参数:NTP包的往返延迟d和客户机与服务器之间的时钟偏差t。客户机使用时钟偏差来调整本地时钟,以使其时间与服务器时间一致。
图1 Client/Server方式下NTP授时原理
图1中T1、T2、T3、T4已知,t为客户机与服务器之间的时钟偏差未知,d1、d2为NTP包的往返延迟未知。目标是求出t、d:
式1
假设NTP请求和回复包传送延时相等,即d1=d2,则可解得:
式2
可以看出最终的结果与服务器处理请求所需的时间无关(t、d与T2、T3差值无关)。因此,客户端可通过T1、T2、T3、T4计算出时差t去调整本地时钟。
实际应用中,客户端通过估算的时间偏移去调整时钟频率、逐渐减小偏移,即一次同步过程可包含多次通信和调整。
NTP的授时精度分析
-
对往返路由延时对称 的假设
-
由于式(2)是在假设NTP请求和回复包在网上传送延时相等,即d1=d2=d/2的情况下得出的,因而NTP授时精度与NTP服务器与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度。
由于往返路由的延时不对称值最大不超过网络延时,从而d1、d2的取值范围在(0…d)间,根据式(1),t也可表示为:t=(T2-T1)+d1=(T2-T1)+d/2, 可以得出最大授时误差是±d/2。一般广域网的网络延时在10 ms~500ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1ms。
-
为何实际的往返路由时延是不同 [10]
这主要是因为那些排队。路由器中有队列,交换机中有队列,甚至终端设备的网络堆栈中也有队列。尽管消息通常在队列中花费最少的时间,但有时它们在等待交换机结束与同一端口上的其他消息的通信,或者等待操作系统完成正在执行的操作,以便获取时间戳。在某些情况下,等待造成的延迟可能非常长,如几十微秒,甚至毫秒。很明显,如果这些都发生在一个方向上的传输,而非另一方向上,将造成很大的延时不对称。
-
-
对客户端与服务器间的时钟偏差 t不变 的假设
以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进行校正,才能保证计时精度。
3. NTP中其它的提高授时精度的措施[1、6]
-
发送和接收时间戳使用UDP,而非TCP
避免流量控制的影响
-
一个客户端配置多台服务器,并使用Marzullo算法的修改版来选择准确的时间服务器
避免单个服务器的时钟出现错误、跳变
……
参考资料
三. 对NTP改进以获得更高的授时精度的措施
改进的思路:
-
减少时延中的不确定部分
-
对时钟频率的校准
-
减少延时不对称带来的误差
-
使用多个时间服务器以提高授时精度
……
1. PTP(Precision Time Protocol)[8、9、10]
-
硬件时间戳[10]
当消息离开或到达网络端口时,专用硬件从本地时钟生成时间戳(通常在数据链路层(MAC)和物理层(PHY)之间的媒体独立接口中)。这消除了操作系统和其他软件不可预测的缓慢响应(链路层与应用层之间的时延)。转发PTP的特殊的交换机和路由器也会生成时间戳,或用来更新PTP消息、或直接把该时间戳发给客户端。
-
NTP未被PTP取代的理由[8]
-
实现难度
- 大多数个人电脑、服务器、交换机已经集成了免费的NTP客户端程序;
- 网上可以找到免费的NTP程序,以及免费的NTP服务器地址
-
价格
- NTP客户端程序是免费的
- NTP不需要专用的硬件
-
鲁棒性
-
PTP客户机和一个主服务器进行时间同步,仅在主服务器失效时访问其它的服务器;
而NTP总是会访问多个服务器,并排除其中的异常时间值。
-
-
参考资料
2. NTP中的数据过滤算法[11]
(同一个服务器选择最佳数据) 数据过滤算法主要负责过滤这个模块接收到的服务器信息,然后根据数理统计方法从具体服务器提供的一组数据中,选出最能体现服务器性质的信息。在网络时间协议中,本算法按照相应的规则从指定服务器提供的8对数据报文中,选出质量最优的一组数据。实际上,可以对这种规则做相应的改进,以便改善数据滤波算法效率,因此,这种滤波规则就至关重要。
在网络时间协议第三版中,这种选取规则就是最小时延准则。最小时延准则就是在所有的数据中选取网络传输时延最小的偏移量数据。该算法的功能是确认数据包的有效性和从某个给定的时间参考源的时间样本中选取最佳的样本。它可以分成健全性校验和滤波两个部分。健全性主要是指数据是否具有唯一性、相关通信参数是否合理等。滤波主要是指根据当前的四个时间戳计算出当前的时间偏移、路径延迟和离差,并更新寄存器数组,计算滤波离差、同步距离等以降低偏移的均方误差。
3. 时钟选择算法[11]
(多时间服务器提高精度下,使用intersection算法选择可靠服务器,使用clustering算法对可靠性进行排序) 时钟选择算法主要用在网络时间协议的系统处理模块的时钟选择部分,本算法检查所有时间服务器的相关变量,排除质量不好的时间服务器留下几个质量最好的时间服务器。为了保证系统时间同步的可靠性,设计两台或多台NTP授时服务器,通过时钟选择算法确定所采用的时间服务器。
本算法具体包括Intersection算法和Clustering算法。其中Intersection算法构造一个符合成为同步源条件的候选时钟列表,分别为每个时钟计算置信区间,并淘汰错误的时钟。Clustering算法则是通过对时间服务器的质量信息进行排序,选出质量最好的一组服务器。
3.1 Intersection算法
NTP用一张时间参考源的表格来记录可供访问的所有时间参考源。这些参考源中最为优秀的才能作为候选者进入参考源的优选目录。聚类算法根据前面数据滤波算法,针对每一个服务器得出其最佳的偏移量θ,而通过以上同步原理的分析,准确的时钟偏移量一定在误差区间内。通过这一结论如果现行候选者真正的偏移量存在于正确时间服务器区间的交集中则留用,反过来,也可以通过这一结论来淘汰错误的服务器,所以Intersection算法主要是抛弃错误信息的服务器。算法示意图如图2.1所示:
Intersection算法示意图
其中A、B、C表示正确时钟,其交集表示包含正确时钟的最大交集,D表示错误时钟。
3.2 Clustering算法
Clustering算法是通过对时间服务器的相关参数进行排序,选出质量最好的一组服务器。一般来说,最高的可靠性通常与最小的层和同步离差有关系,最高的准确度通常与最小的层和同步距离有关系。从Intersection算法得出正确服务器后,Clustering算法先按层(Stratum)排序再按离差排序。
4. 合并算法[11]
(NTP协议误差的一大来源是往返路由时延的不对称,使用合并算法可一定程度上减少这一部分的误差) 时钟选择算法工作在网络时间协议中,利用加权平均算法分析所有提供时间服务的主机产生一个合并的估计值,得到一组精度最好的服务器,候选服务器列表中包含的对等点的偏移量是统计相等的,所以它们中的任一个都可以被用来调整本地时钟。聚合算法得到的列表中保存了精度最高的m个时钟源(10≥m≥1),并在系统变量Source中存放了m个时钟源中间性能最好的一个时钟的ID。若合并算法没有执行,ID号等于Source的时钟源作为主同步时钟源,客户机和它通讯得到的时间偏差将成为本地时钟校正的最终数据。但是在时间同步网络中,经常出现由于NTP报文发送和接收的路径不对称导致的时间偏差值的系统误差。误差的范围在微秒级到秒级之间。
实验证明,多个时间源的时间偏差值的合并结果可以大大抵消不对称系统误差。这也是合并算法产生的主要目的。虽然只有一个时钟被挑选为主同步时钟源,本地时钟的最终修正值还是受所有通过了聚合算法的时钟源影响。
5. 时钟调节算法[11]
(这一部分我不是很明白。。。) 本算法主要负责对系统时钟进行校正,在很大程度上影响着本地时钟调整的精度,本算法并不是简单的将前面三种算法得到的时钟偏移量补偿到本地系统时钟,而是采用现行相位调整和非线性相位调整两种方式来调整时钟。线性调整是指渐进地对时钟进行调整,实现“微调”的效果,使系统时钟单调增加。
线性调整通过把本地时钟偏移量划分成多个微小的偏移量来调整系统时钟,这样的渐进调整方法,在时钟偏移量比较小的时候,效果要优于一次性调整,这也说明了校正本地时钟偏移量是一个需要很长时间的过程。而非线性调整就是直接把各种算法计算出的时间偏移量直接补偿到系统时钟上,这种方式比较适合时钟偏移量较大的情况使用。时钟校正是实现网络时间同步的重要环节,影响时间同步精度的因素还有网络响应能力变化产生的抖动和振荡器频率稳定度产生的漂移。可以使用锁相环路和锁频环路来补偿固有频率误差。锁相环路能够消除抖动但调节偏移的效果不好,锁频环路则正好相反。客户机启动时通常会有较大的时间偏差,适合直接在客户端软件主界面中选择立即同步函数一次同步到位,即采用非线性调整方式调整时钟。
当系统逐渐运行稳定后,采用线性调整方式调整系统时钟,通常它由两个循环组成:外循环和内循环。外循环每隔校正周期m时间对系统时钟进行修改,内循环每隔微量调整间隔n对时钟进行微调。如果时间偏差的预测值远大于期望的精度,则m取值过大,振荡器的稳定度不能维持该精度的要求,不用增加调整的次数,只需通过减少m值来满足精度间偏差的预测值达到所需精度水平;如果预测值远小于测量值,则校正周期值明显偏小,晶振的稳定度能维持该精度,应增加m的值来减少系统开销。
参考资料
四. socketAPI vs NTP(SNTP) vs PTP
-
精度:
API:秒级、分钟级 NTP:毫秒级 PTP:微秒级
-
耗费
API:无专属硬件 NTP:无专属硬件 PTP:有专属硬件
-
更新
API:软件级 NTP:软件级 PTP:硬件级