APP下载

基于NTP协议的一种校时实现及相关算法

2011-04-23王圣东方建勇刘新友

指挥控制与仿真 2011年1期
关键词:客户机三元组数据包

王圣东,方建勇,刘新友

(中国船舶重工集团公司江苏自动化研究所,江苏 连云港 222006)

在作战指挥系统中,时间同步一直是一个热点和难点,特别对于大型系统,具有台位多、集成关系复杂等特点,不便给所有台位安装时钟硬件或与精确时间源互通,因此在软件层面上提高时间同步的校时精度显得尤为重要。一般系统中大都配备少数时钟硬件,通过其给系统中某几个时间服务器校时,再利用该服务器给系统内其它主机校时。NTP协议是目前可用于系统内校时的一种较好选择,在局域网中能达到1ms左右的精度,能满足系统的性能要求。

网络时间协议[1](NTP,Network Time Protocol)是用于互联网中时间同步的标准互联网协议,NTP提供的机制严格、实用、有效,其产生的网络开销甚少,并具有保证网络安全的应对措施。这些措施的采用使NTP可以在互联网上获取可靠和精确的时间同步。

本文提出一种在局域网上利用NTP校时的具体实现和相关算法,在Windows操作系统下亦能达到1~2ms左右的精度。

1 一种NTP对时架构

1.1 NTP协议的组成和用途

NTP是一个跨越广域网或局域网的复杂的同步时间协议,它除了可以估算数据包在网络上的往返延迟外,还可独立地估算计算机时钟的偏差,从而实现在网络上的高精准度计算机校时,该协议的组成如图1所示[2]。

图1 NTP协议的字段组成

协议中描述的字段分别为闰秒标识器、版本号、模式、层、测试间隔、精度、根时延、根离散、参考时钟标识符、参考时间戳、原始时间戳、接收时间戳、传送时间戳、传送时间戳和认证符。

1.2 NTP基本的对时架构

图2描述了一种经典的NTP对时架构,包括四个层次的时钟,顶层为精确时间源;第二层为一级时间服务器,对第三层的服务器和NTP客户端进行校时;第三层既包括时间服务器和NTP客户机,第四层全为NTP客户机,处于下一层的NTP客户机可以通过NTP数据包交换选择上一层的时间服务器,下一层的时间服务器对下层提供时间服务,同时选择上一层服务器作为自己的时间服务器。

1.3 一种改进的NTP处理流程

在传统的NTP处理流程中,客户端在进行一次本地时钟校正过程中对所有认识的服务器进行交互和数据过滤,以判断出当前信任的最佳时间服务器,而在实际的处理过程中,一次选定的时间服务器是有代表性的,在较长的时间范围内都是值得信任的(硬件决定),不需要在每次本地校正时都对所有时间服务器进行数据处理和选主,只有在判断本服务器的有效时间发生跳变时,才重新执行选主过程,改进后的NTP处理流程如图3所示。

图2 NTP对时基本架构

图3 改进的NTP处理流程

2 本地主机高精度时间获取

在NTP的对时架构中,服务器和客户端都需要不断获取本主机的系统时间,NTP协议中的几个关键时间戳是客户端计算网络传输时延和与服务器时间偏差的关键参数,时间戳本身的精度对提升客户端的校时精度具有至关重要的意义。目前某些大型电子信息系统采用的操作系统为Windows、Solaris和VxWorks,系统本身提供的获取时间函数精度一般为 10ms左右(视硬件时钟频率)且在 ms级时间不连续,这对计算传输时间和时间偏差来说是一个较大的数值。我们可以通过结合硬件计数的方式将系统时间的获取精度精确到1ms及以下。

以Windows操作系统为例,获取系统时间最高精度的函数为 GetSystemTime,获取的精度虽然能达到ms级,但实际上受限于实际时钟更新频率,精度大概为 16ms左右(与硬件有关)。我们可以采用系统函数

QueryPerformanceFrequency、QueryPerformanceCounter、GetSystemTimeAsFileTime和FileTimeToSystemTime结合的方式,构造一个精度在1ms左右的时间供应器,持续提供当前系统时间,图4描述了一个框架性的时间供应器流程,具体同步和时间片控制等细节问题不再赘述。

图4 高精度时间供应器实现的基本流程

通过在Windows上的测试,上述时间供应器提供的时间为1ms及以下[3],可满足高精度校时的要求。

3 NTP服务器构建和处理

根据上述对时架构,信息系统进行校时的前提是外界有稳定精确的时间源,并且与系统中一台或多台性能稳定的主机互通。这些主机可以用来构建NTP服务器,这不需要软件实现,只需要硬件集成时,根据需要选择一台还是多台主机,一般选择性能较高的服务器。

NTP服务器接收外部时间源的精确时间,并根据需要对本主机进行校时,保证自己为一台合格的时间服务器(在本文中不作详述)。这一般为独立的进程或线程处理。另一方面,NTP服务器需要部署 NTP服务进程与系统中的所有客户机进行交互,应答NTP客户端的时间戳和各种参数请求。

NTP服务器在与客户机进行交互的过程中,以守护进程的形式等待NTP客户端的发送请求,收到请求后将NTP服务器的地址和NTP工作的相关参数发送到客户机,客户机收到地址应答后将其作为服务器之一(学习的过程)并开始和其实时交互。NTP服务器在实现过程中,主要根据客户端发送的NTP包填充接收时间和再发送时间及更改的参数,并将NTP包返回到客户端。

4 NTP客户端的一种实现

4.1 NTP客户端数据传输的实现

NTP客户端需要实时发送NTP数据包到NTP服务器,并接收NTP服务器返回的NTP数据包,要提高客户端的校时精度,必须处理好对时间精度消耗的各种因素,其中因素之一就是进程/线程时间片切换的时间和线程的权限控制,为保证客户端在同一个进程(未开线程)实现实时的发送和接收处理,需要将进程的优先级设为最高,一般为REALTIME_PRIORITY_CLASS权限,同时使用select函数和时钟中断处理的方式实现 NTP客户端的数据异步传输,其基本的流程实现如图5所示:

图5 NTP客户端数据传输实现流程

4.2 传输时延、时间偏差和离差的计算

NTP数据报文交互过程可以采用三种模式[4~5]:多播模式、客户机/服务器模式以及对称模式。本实现采用客户机/服务器模式进行 NTP数据包交互:客户机每发送一个查询数据包,服务器接收后回送一个应答数据包。数据包交互时序图如图63所示。

图6 NTP数据包交互时序图

我们用δ表示传输迟延,则δ1=T2−T1,δ2=T4−T3,我们用θ代表客户端与服务器之间的时间偏差,通过计算可得出:θ=T3+δ−T4=[(T2−T1) +(T3−T4)]/2

定义离差ε为描述客户端和服务器至最近一次传输由于测量引起的错误累积,该参数在时间过滤处理时实时更新,并作为时钟选择算法的一个衡量因子。离差ε在NTP包交互时计算如下:

ε=(1<<sys.precision)+ϕ(T4-T1)

其中,ϕ表示任何原因下的最大时间偏差率,由于ε是作为时钟选择算法的一个衡量因子,因此在只有单个时间源服务器时,不需要进行计算和处理。

4.3 时间数据过滤处理的实现

时间过滤处理完成一次校时周期内对某个固定时间服务器的时间样本获取和最佳样本计算,在接收到NTP数据包时进行处理。客户端向服务器发送一份查询报文Pi,在收到服务器的应答报文之后,客户端利用该报文计算出传输时延、时间偏差及离差三元组(δi,θi,εi),存储在描述服务器的寄存器中,下标从 0开始,用以时间数据过滤处理,初始化为(0,0,NTP.MAXDISPERSE),寄存器中最多存放八(NTP.SHIFT)个三元组,下一个三元组计算出时将所有三元组的存储位置从左端往右移动一位,最新的三元组存放到0位置,丢弃生存时间最长的一个三元组(δNTP.SHIFT−1,θNTP.SHIFT−1,εNTP.SHIFT−1)。εi在处理中根据误差积累进行更新,对每个εi增加ϕ*τ(τ=sys.clock-peer.update,τ描述了服务器自上一次更新的时间间隔),定义λ为同步间隔,以λi=εi+|δi|/2构造一个滤波权值临时列表[λ,index],index为描述λi对应位置的索引列表,长度亦为NTP.SHIFT,对该临时列表进行升序排列,用以最终确定权值最小的参数的位置。

4.4 NTP服务器选主处理

NTP选主处理(时钟选择算法)在多个时钟源的情况下(时间服务器),在对所有的时钟源完成一次时间过滤处理得到有效的结果后,对所有的时钟源进行处理得到最佳的时钟源。

时钟选择算法由两个算法组成:交集算法和聚类算法,交集算法构造一个符合条件的候选时钟源列表,用以时间同步。聚类算法根据时钟源所在的层和同步间隔对候选时钟源进行排序,并根据时钟选择离差重复剔除最大偏离的时钟源,直至剩余最后一个或几个最精确、准确和稳定的时钟源。

4.5 本地时钟校正处理

在上述各算法中,得到了本地时钟与标准时间的时间偏差θ(时钟选择计算的结果θadj,包括正值、0和负值),下一步根据时间差对本地时钟进行调整即可完成一个周期内的本地时钟校正。在本地时钟进行调整的过程中,一般有两种方式:一是将本地时钟数值+θ直接设置为当前时钟,即时间信号的相位同步;还有一种是采用调整时钟频率的方式来逐步调整本地时钟,即时间信号的频率同步。

Unix、Windows和VxWorks等操作系统一般都提供上述两种调时方式的系统调用,如Unix的settimeofday和 adjtime系统函数;Windows的 SetSystemTime和SetSystemTimeAdjustment系统函数等。

由于settimeofday和SetSystemTime等函数对本地时钟进行及时相位调整,如果θ数值较大,则对应用软件将产生较大的影响。因为时间发生了跳变;而采用adjtime和SetSystemTimeAdjustment等函数时采用调整频率以达调相目的时,会持续相当长的时间,如在Linux上调整一分钟需要数小时之多(根据θ、时钟固有频率和每秒最大调整量计算)。因此在具体实施时需将两种方式结合使用。

以下给出一种使用建议(其中m、n和r的数值根据需要自定义):

1)|θ| > m*100s:判定有效服务器发生了时间跳变,重新执行时钟选主处理;

2)m*100s≥|θ|≥ n*100ms:采用跳变方式调整本地时钟,本机时间设置为有效服务器时间;

3)n*100ms≥|θ|≥ r*10ms,采用调频方式调整本地时钟,本机时间逐步逼近有效服务器时间;

4)r*10ms > |θ|,如果六次时间过滤处理结果都为同一符号,则采用调频调整本地时钟,使本机时间逐步逼近有效时间服务器;否则,不调整本地时钟。

5 结束语

本文介绍了一种NTP协议和运行机制以及算法,并对某些具体问题给出实现或改进,在大型电子信息系统环境中,系统的校时精度能够达到 ms级,可满足系统的校时性能指标。在实际运用中受外界干扰、温度变化以及晶体振荡器老化等因素引起频率漂移,精度在长时间片内可能在几 ms内进行抖动,在后期研究中,需对高稳定性和更高精度作进一步研究,也可根据时间运用环境,对上述流程和算法进行简化。

[1]Mills D.L.Network Time Protocol(Version 3)Specification,Implementation and Analysis.DARPA Network Working Group Report RFC-1305[S].University of Delaware,March,1992:112-113.

[2]Mills D.L.Simple Network Time Protocol Specification,RFC-1769[S].University of Delaware,March,1992:79-81.

[3]黎文伟,张大方,谢高岗,等.基于通用 PC 架构的高精度网络时延测量方法[J].Journal of Software,2006(2).

[4]卢光辉,等.基于组播的网络延迟测试[J].软件学报,2001,12(11).

[5]王俊峰,等.单向延迟测量中的时钟动态性检测算法.[J]软件学报,2004,15(4).

猜你喜欢

客户机三元组数据包
二维隐蔽时间信道构建的研究*
特征标三元组的本原诱导子
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
关于余挠三元组的periodic-模
一个时态RDF存储系统的设计与实现
C#串口高效可靠的接收方案设计
隔山亦能打牛,本本巧变远控利器
三元组辐射场的建模与仿真
升腾瘦客户机借神码翱翔“云端”
基于Web数据提高访问速度的方法