0 引言
Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。
一般的计算机和嵌入式设备在时钟度方面没有明确的指标要求, 时钟只有10-4~10-5,每天可能误差达十几秒或更多,如果不及时校正,其累积时间误差不可忽视。许多工业控制过程需要高准确度时间,如:电力系统内众多的计算机监控系统、保护装置、故障录波器等时间同步要在ms级以内。
联网计算机同步时钟简便的方法是网络授时。网络授时分为广域网授时和局域网授时。Windows内置NTP服务,在局域网内其授时也只能达10 ms级。因此,提高局域网NTP授时成为一个迫切需要解决的问题。
1 网络时间协议简介
网络时间协议NTP(Network Time Protocol)的主要开发者是美国特拉华大学的MILLS David L.[1]教授设计实现的,由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。NTP用于将计算机客户或服务器的时间与另一服务器同步,使用层次式时间分布模型。
NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而
可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
实际应用中,还有确保秒级的简单的网络时间协议SNTP(Simple Network Time Protocol)。SNTP是NTP的一个子集,主要用于那些不需要NTP的以较高实现复杂性的网络时间同步客户机。SNTP协议已减少了网络延时对校对准确的影响,但没有冗余服务器和校正时钟频率误差功能。
除了符字段在SNTP中一般被忽略外,SNTP的报文格式与RFC-1305中所描述的NTP格式是一致的。NTP/SNTP服务端使用固定的UDP端口号是123。表1是NTP/SNTP报文格式的描述。
2 NTP授时原理
NTP典型的授时方式是Client/Server方式。如图1所示,客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T1,当服务器接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T4。
T1为客户发送NTP请求时间戳(以客户时间为参照);T2为服务器收到NTP请求时间戳(以服务器时间为参照);T3为服务器回复NTP请求时间戳(以服务器时间为参照);T4为客户收到NTP回复包时间戳(以客户时间为参照);d1为NTP请求包传送延时,d2为NTP回复包传送延时;t为服务器和客户端之间的时间偏差,d为NTP包的往返时间。
NTP授时与NTP服务器与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度,往返路由的延时不对称值不超过网络延时。
假定局域网内NTP延时小于1 ms,理论上授时误差小于0.5 ms,但对于Windows操作系统内置的NTP客户和NTP服务,并不能达到此。Windows NTP时钟分辨率因操作系统和硬件不同而有所不同,时钟分辨率通常为10 ms或15 ms。基于Windows操作系统内置的NTP授时不超过10 ms。
4 基于NTP减少计算机时钟偏差
4.1 计算机时钟偏差分析
通用PC机自带两类时钟源:硬件时钟和软件时钟(或称为系统时钟)。不论是硬件时钟还是软件时钟,都是由石英晶体振荡器驱动的,通过累计石英晶体振荡器输出脉冲数,换算出时间。所以计算机时钟的准确度取决于晶振频率准确度。
由于工艺和材料的原因,同一生产线上标称频率相同的石英晶体,其实际频率是不同的,实际频率与标称频率偏差率从10-4量级到10-9量级不等。以10-4量级为例,时钟每天至少误差8.64 s。
4.2 基于NTP减少计算机时钟频率偏差
时钟频率偏差是时钟长期计时累积误差的主要原因,要提高时钟长期计时,必须补偿时钟频率偏差。联网的计算机可采用NTP方式,可非常方便地校准时钟频率偏差[2],其原理如图2所示。以NTP服务器时钟为标准时间,在某一时刻设置NTP客户机时间为NTP服务器当前时间T0,经过一段时间后,NTP服务器时间为T0+tsn,NTP客户端时间为T0+tcn。
5 采用高分辨率时钟提高授时 局域网内100 B以太网帧在百兆网络物理层单向延时理论值约8 μs,要测量NTP包网络延时,提高授时,时间分辨率必须达到或高于μs级。Windows系统常用的多个与时间有关的API,其时间分辨率只能达到ms级。其中,time、gmtime、localtime的时间值到s级;函数GetTickCount返回值时间到10 ms或15 ms。 Windows计算机系统内部有一个高性能定时器。函数QueryPerformanceFrequency可得到这个定时器的频率。函数QueryPerformanceCounter可得到定时器的当前值。 Intel Pentium及以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64 bit无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数,提供了1条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳。但实际执行约需200个时钟周期,对于1 GHz处理器实用分辨率约0.2 μs。 有了μs级计时器,并不表示基于Windows系统的NTP授时实际达μs级。因为时间戳一般都在应用层加盖,包含了计算机处理和协议封装(解封)开销等不可具体量化的时延,数值大多在几百μs到几十μs间,具有随机性,无法准确预知,从而造成NTP无法进一步提高。百兆交换式局域网实际授时约±250 μs。 6 高局域网授时实现 在Windows计算机网络中,采用高分辨率定时器可有效提高局域网NTP授时,减少时钟与标准时间的偏差。校正时钟频率偏差系数,可减少长期计时累积误差及提高时钟准确度。 6.1 计算机网络组成 为使测试结果反映实际应用的环境,测试是在正常运行信息业务的真实网络环境下进行的。参加测试的计算机和网络设备正常处理日常业务。计算机网络由100多台计算机和十几台48/24口、10 M/100 M自适应交换机级联而成。 作为NTP服务器的是一台P4/2.8G/512 MB内存,操作系统为Windows XP台式计算机。NTP客户端的计算机是一些PⅢ/866/256 MB内存Windows XP计算机。Windows XP默认已打开UDP 123端口,为了不与Windows内置的NTP服务发生冲突,根据上述提高NTP授时高算法编写的客户端和服务器端测试程序,采用其他空闲的UDP端口,如UDP 1000端口。 6.2 实验评估 测试时间持续10天,客户机每分钟向服务器发出1个NTP请求进行测试: (1)根据NTP返回包计算出时钟频率偏差系数k和NTP包延时d。各NTP客户机所得的测试结果类似,图3是其中1台NTP,客户机每分钟向服务器发出1个NTP请求包,计算出客户机时钟频率偏差系数组成的曲线图。时钟频率偏差系数是某一数值附近波动变化的,主要受温度的影响。所以校正时钟频率偏差系数后,时钟长期计时误差可轻易地达到10天少于1 s。
任何晶振实际工作频率都是不稳定的,只是程度不同而已。即使温度补偿的晶振,在常温范围内(摄氏10℃~35℃)也有大约5×10-7~2×10-6的误差。
图4所示为测试过程中每次NTP包在客户机和服务器间往返的延时情况,在10天中99 %的NTP包延时小于500 μs;延时在1 ms~2 ms的NTP包24个,占0.17 %;延时在2 ms~10 ms的NTP包10个,占0.069 %;延时10 ms以上只有2个,占0.013 9 %。大延时NTP包在测试过程中上随机出现的情况将仅占1 %,延时500 μs及以的NTP包滤除后,局域网NTP授时延时小于500 μs,授时偏差不超过±250 μs。
7 进一步提高NTP授时的方法
局域网络延相对较大的原因在于时间戳一般都是在应用层加盖。为减少操作系统内核处理延时的影响提高NTP授时,发/收NTP包时间戳应尽量接近主机真实发/收包时刻。这种方法在局域网中可大幅提高NTP授时至μs级。
时钟频率偏差和时钟分辨率低是局域网NTP授时不高的主要原因。本文提出了基于通用Windows PC 软硬件架构消除这两种误差的低成本且实施方便的高方法。随着自动化的通信技术发展日新月异,以太网技术不断渗透到工业控制现场总线应用领域,许多工业控制需要的时间,如变电站顺序事件记录SOE需达ms级,本文方法可为工业以太网的高同步时钟应用作参考。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。