一、NTP协议简介
NTP是Network Time Protocol,SNTP是Simple Network Time Protocol。SNTP是NTP的一个子集,比NTP协议简单,可确保秒级精度,没有冗余服务端和校正时钟频率误差功能。NTP可以利用冗余服务端和多条网络路径来提高获得时间的准确性和可靠性。
网络授时分为广域网授时和局域网授时。因为每次经过的路由器路径可能不同,所以广域网授时精度通常能达50ms级(但有时会超过500ms),现在还没有更好的办法将这种不同路径延迟的时间误差完全消除。局域网授时不存在路由器路径延迟问题,因而授时精度理论上可以提到亚毫秒级。
二、NTP授时原理
NTP最典型的授时方式是Client/Server方式。如下图所示:
客户端首先向服务端发送一个NTP 包,其中包含了该包离开客户端的时间戳T1,当服务端接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户端。客户端在接收到响应包时,记录包返回的时间戳T4。客户端用上述4个时间参数就能够计算出2个关键参数:
· NTP包的往返延迟d;
· 客户端与服务端之间的时钟偏差t;
之后,客户端就可以使用时钟偏差t来调整本地时钟,以使其时间与服务端时间一致。具体方法如下,设:
· T1为客户发送NTP请求时间戳(以客户时间为参照);
· T2为服务端收到NTP请求时间戳(以服务端时间为参照);
· T3为服务端回复NTP请求时间戳(以服务端时间为参照);
· T4为客户收到NTP回复包时间戳(以客户时间为参照);
· d1为NTP请求包传送延时,d2为NTP回复包传送延时;
· t为服务端和客户端之间的时间偏差,d为NTP包的往返时间;
则问题转换为已知T1、T2、T3、T4,求得t即可调整客户端时钟。列方程组如下:
假设NPT请求和回复包传送延时相等,即d1=d2,则可解得:
可以看出,t、d只与T2、T1差值及T3、T4差值相关,而与T2、T3差值无关,即最终的结果与服务端处理请求所需的时间无关。
三、NTP授时精度分析
NTP授时精度与NTP服务端与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度,往返路由的延时不对称值最大不超过网络延时。
根据第一个方程组的第一个等式:
t也可表示为:
我们此前都假设NTP请求和回复包在网上传送延时相等,即d1=d2=d/2,而d1、d2的取值范围在(0…d)间,因此由上式可以得出最大授时误差是±d/2。一般广域网的网络延时在10-500ms之间,局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1ms。假定局域网内NTP延时小于1ms,理论上授时误差小于0.5ms,但对于Windows操作系统内置的NTP客户和NTP服务而言并不能达到此精度。Windows NTP时钟分辨率因操作系统和硬件不同而有所不同,时钟分辨率通常为10ms或15ms。基于Windows操作系统内置的NTP授时精度最高不超过10ms。
四、基于NTP时钟偏差的原因
时钟频率偏差和时钟分辨率低是局域网NTP授时精度不高的主要原因。
通用存在两类时钟源,即硬件时钟和软件时。不论是硬件时钟还是软件时钟,都是由石英晶体振荡器驱动的,通过累计石英晶体振荡器输出脉冲数换算出时间。受温度变化、电压、芯片老化等因素影响,晶振频率会发生小幅度波动,其中温度对晶振频影响最大。由于工艺和材料的原因,同一生产线上标称频率相同的石英晶体,其实际频率也是不同的。时钟频率偏差是时钟长期计时累积误差的主要原因,要提高时钟长期计时精度,必须补偿时钟频率偏差。任何晶振实际工作频率都是不稳定的,只是程度不同而已。此外,操作系统应用层加盖、操作系统内核处理延时的不确定也会影响NTP时钟的计算。
参考文献
1、https://www.vfe.ac.cn/NewsDetail-2332.aspx