曾庆华
测量和控制工程正在越来越多地使用网络通讯、本地化计算、分布式设备等分布式系统技术。在这个分布式系统中,分布式设备来自多个不同的厂商,如果没有一个标准的协议用来同步那些分布式设备中的时钟,整个系统将不可能很好地工作。在兼顾精度和低成本方面,现存的时钟同步协议,如NTP/SNTP,GPS并不能很好地满足这些系统的要求。在此背景下,IEEE Std 1588TM —2002《网络测量和控制系统的精确时钟同步协议》(简称IEEE 1588 协议) 已于2002以标准形式年发布[1]。2004年,IEC也发布了相应的IEC 61588 标准。IEEE Std 1588TM —2008作为IEEE Std 1588TM —2002的修订版于2008年发布。IEEE 1588以其低成本高精度的特点,使其在短短的几年内,获得了广泛的应用和推广。 IEEE 1588 协议又称精确时间协议(PTP),IEEE Std 1588TM —2008也叫做PTPv2,它最初是由Agilent Laboratories(安捷伦实验室)开发用于测量和控制系统的。它利用以太网或其他支持多播技术的网络使终端设备同步,最高精度可以达到亚微秒级。同时, IEEE 1588 协议对资源要求非常低,易于高中低端设备之间的兼容。但是, IEEE 1588协议为了保证高精度,需要硬件支持,这对于兼容性很高的以太网来说,制约了IEEE 1588 协议的应用与发展。
本文首先针对IEEE 1588协议的以太网应用,对协议进行了分析,介绍了IEEE 1588协议的优点和核心算法,然后介绍了支持IEEE 1588的网络设备,在不同时钟模式下应该如何工作。
IEEE 1588PTP协议借鉴了NTP技术,具有容易配置、快速收敛以及对网络带宽和资源消耗少等特点。IEEE1588标准的全称是“网络测量和控制系统的精密时钟同步协议标准(IEEE 1588 Precision Clock Synchronization Protocol)”,简称PTP(Precision Timing Protocol),它的主要原理,是通过一个同步信号周期性的对网络中所有节点的时钟进行校正同步,可以使基于以太网的分布式系统达到精确同步,IEEE 1588PTP时钟同步技术也可以应用于任何组播网络中。
IEEE 1588将整个网络内的时钟分为两种,即普通时钟(Ordinary Clock,OC)和边界时钟(Boundary Clock,BC),只有一个PTP通信端口的时钟是普通时钟,有一个以上PTP通信端口的时钟是边界时钟,每个PTP端口提供独立的PTP通信。其中,边界时钟通常用在确定性较差的网络设备(如交换机和路由器)上。从通信关系上又可把时钟分为主时钟和从时钟,在理论上,任何时钟都能实现主时钟和从时钟的功能,但一个 PTP通信子网内只能有一个主时钟。整个系统中,最优时钟为最高级时钟GMC(Grandmaster Clock),有着最好的稳定性、精确性、确定性等。根据各节点上时钟的精度和级别以及 UTC(通用协调时间)的可追溯性等特性,由最佳主时钟算法(Best Master Clock)来自动选择各子网内的主时钟;在只有一个子网的系统中,主时钟就是最高级时钟GMC。每个系统只有一个GMC,且每个子网内只有一个主时钟,从时钟与主时钟保持同步。是一个简单的主时钟、从时钟关系示意,如图1所示:
图1 简单主时钟,从时钟关系示意
同步的基本原理,包括时间发出和接收时间信息的记录,并且对每一条信息增加一个“时间戳”。有了时间记录,接收端就可以计算出信息在网络中的时钟误差和延时。为了管理这些信息,PTP协议定义了4种多点传送的报文类型和管理报文,包括同步报文(Sync)、跟随报文(Follow_up)、延迟请求报文(Delay_Req)、延迟应答报文(Delay_Resp)。同步报文是由主时钟周期性发出的(一般为每两秒一次),它包含了主时钟算法所需的时钟属性。总的来说,同步报文包含了一个时间戳,精确地描述了数据包发出的预计时间。
由于同步报文包含的是预计的发出时间,而不是真实的发出时间,所以Sync报文的真实发出时间被测量后在随后的Follow_Up报文中发出。Sync报文的接收方记录下真实的接收时间。使用Follow_Up报文中的真实发出时间和接收方的真实接收时间,可以计算出从时钟与主时钟之间的时差,并据此更正从时钟的时间。但是此时计算出的时差包含了网络传输造成的延时,所以使用Delay_Req报文来测量网络的传输延时。
Delay_Req报文在Sync报文收到后由从时钟发出。与Sync报文一样,发送方从时钟记录准确的发送时间,接收方主时钟记录准确的接收时间。主时钟在接收到Delay_Req报文后生成Delay_Resp报文,并将Delay_Req报文的准确的接收时间包含在Delay_Resp报文中,然后将Delay_Resp报文发往从时钟。从时钟在收到Delay_Resp报文后就可以计算出网络延时和时钟误差。
精确时钟同步过程,分为漂移测量阶段与延迟测量阶段。
第一阶段修正主时钟与从时钟之间的时间偏差,称为漂移测量,如图2所示:
图2 漂移测量
在修正漂移量的过程中,主时钟按照定义的间隔时间(缺省是 2s)周期性地向从时钟发出同步报文。这个同步报文包括该报文离开主时钟的时间估计值。主时钟测量发送的准确时间t10,从时钟测量接收的准确时间t20。之后主时钟发出第二条报文——跟随报文(Follow_up Message),此报文与同步报文相关联,且包含同步报文被发送到到 PTP通信路径上的更为精确的时间值。从时钟根据同步报文和跟随报文中的时间信息来计算偏移量,然后按照这个偏移量来修正从时钟的时间,如果在传输路径中没有延迟,那么主从时钟就可以达到同步。
为了提高修正精度,必须把主时钟到从时钟的报文传输延迟时间考虑进来,即延迟测量,这是同步过程的第二个阶段——延迟测量,如图3所示:
图3 延迟测量
从时钟向主时钟发出一个“延迟请求”数据报文,并记录下该报文传递准确时间t3。主时钟对接收数据包打上一个接收时间戳t4,然后在“延迟响应”数据包中,把接收时间戳t4送回到从时钟。根据传递时间戳t3和主时钟提供的接收时间戳t4,从时钟计算与主时钟之间的延迟时间。
IEEE 1588定义了两种工作模式,一步模式和两步模式。上述用跟随报文传送同步报文的发送时间戳的方式即为两步模式。如果作为 Master时钟的设备有能力把同步报文的发送时间戳精确的打在同步报文中,那么就可以省去跟随报文的发送了。这就是一步模式。
IEEE 1588目前的版本是 v2.2,主要应用于相对本地化、网络化的系统,内部组件相对稳定,其优点是标准非常具有代表性,并且是开放式的。由于它的开放性,特别适合于以太网的网络环境。与其他常用于Ethernet TCP/IP网络的同步协议如SNTP或NTP相比,主要区别是PTP是针对更稳定和更安全的网络环境设计的,所以更为简单,占用的网络和计算资源也更少。PTP定义的网络结构可以使自身达到很高的精度,与SNTP和NTP相反,时间戳更容易在硬件上实现,并且不局限于应用层,这使得 PTP可以达到微秒以内的精度。此外,PTP模块化的设计也使它很容易适应低端设备。
IEEE1588标准所定义的精确网络同步协议,实现了网络中的高度同步,使得在分配控制工作时,无需再进行专门的同步通信,从而达到了通信时间模式与应用程序执行时间模式分开的效果。
在现实的网络环境中,主时钟设备和从时钟设备之间往往会存在许多的各种路由器,交换机。在这些设备中,会因为网络流量的变化或是设备自身的性能,而使得 IEEE 1588报文在网络上的传播时延产生抖动。这就会造成时钟同步的精确度下降。为了能够更好的测量报文在网络上的时延,IEEE 1588定义了另外一种类型的时钟:透传时钟。透传时钟在网络中的位置,就在主时钟设备和从时钟设备之间,如图4所示:
图4 透传时钟工作示意图
透传时钟的工作,就是把1588报文在该透传时钟设备上的停留时间,精确的记录下来,然后把这个停留时间加到报文中去。这样从时钟在计算网路延迟时就可以得到更精确的值了。
IEEE 1588的实现有3种方式:纯软件的实现、软件与硬件相结合的实现、纯硬件实现。
纯软件实现的IEEE 1588,是指时钟同步过程中的频率差的计算,线路延迟的计算以及时间同步报文的接收和发送时间戳的产生,都由软件来负责完成。这样的实现,性能难于达到设计的性能目标。主要原因,是IEEE 1588报文,在协议栈和存储转发过程中,受到不确定因素的影响太多,从而使得同步的结果产生较大的抖动。不确定因素包括:软件系统的繁忙程度、网络的拥塞状况等等。
纯硬件实现的IEEE 1588,是指时钟同步过程中的频率差的计算、线路延迟的计算以及时间同步报文的接收和发送时间戳的产生,都由硬件来负责完成。纯硬件实现,虽然可以提高精确度,使得得到的同步结果,更接近于理想的结果,但纯硬件实现,会带来成本大幅提高的问题,这不利于IEEE 1588的推广使用。同时,硬件实现,还存在缺乏灵活性的问题,不利于IEEE 1588设备的升级和换代。
为了实现IEEE 1588的高精确性,同时也为了控制成本,理想的实现方式就是软硬件结合。即由硬件来负责打时间戳和获取时间戳的工作,然后由软件来负责进行必要的计算。最后软件将计算的结果设置到相应的时钟上去。其实现结构,如图5所示:
图5 软件加硬件结合实现结构图
在报文中打时间戳的时间点相当重要,因为这关系到精确性。一般的实现方法,是在各种物理端口的PHY层,这个最靠近物理线路的模块来实现打时间戳的功能。
3.1.1 请求响应机制普通时钟的实现
请求响应机制普通时钟分两种角色:master时钟和slave时钟。两种时钟的硬件在收到IEEE1588消息后记录下消息到达时间,然后将消息送往CPU交由软件做处理。硬件在发送 IEEE1588消息前,会修改消息的内容、填写IEEE1588消息的发送时间和校正域。软件在收到IEEE1588消息后,先对收到的消息的正确性做出判断。对于不正确的消息,直接丢弃。对于正确的消息,软件会读取硬件为该消息保存的接收时间信息。对于slave时钟,软件会计算出本地时钟频率和 master时钟的时钟频率的差值,然后调整本地时钟以达到和master时钟频率的同步。如果slave时钟的本地时间和master时钟的时间相差大于1S的情况下,slave时钟还应该更改本地时钟的时间,以达到和 master时钟的时间一致。
请求响应机制,普通时钟在计算线路延迟时,把从master到slave的线路延迟和从slave到master的延迟视为同等的。通过取两个不同方向延迟的平均值作为线路延迟。
3.1.2 请求响应机制边界时钟的实现
请求响应机制边界时钟,是请求响应机制普通时钟的聚合体。请求响应机制边界时钟上,必须且只能有一个slave角色的请求响应机制普通时钟和若干个 master角色的请求响应机制普通时钟。Slave时钟和这些master时钟共用相同的时钟源。请求响应机制边界时钟,通过slave普通时钟和外部的时钟源完成时钟同步。
请求响应机制边界时钟上的 slave普通时钟和 master普通时钟的实现,和4.1.1节中介绍的请求响应机制普通时钟的实现是一样的。
3.1.3 对等机制普通时钟的实现
对等机制普通时钟在进行时钟频率同步的时候,也是有master时钟和slave时钟之分的,但在进行线路延迟的测量时,却没有master和slave之分,这个时候体现出了对等的关系。两个对等机制普通时钟之间是直接互联的,中间没有连接任何设备。
对等机制普通时钟频率同步的实现和请求响应机制普通时钟的频率同步的实现是一样的。对等机制普通时钟的特殊之处,在于它把两个时钟之间的两个方向上的线路延迟看做是不对等的,因此相连的两个时钟,要分别计算从对方到己方的线路延迟。
3.1.4 对等机制边界时钟的实现
对等机制边界时钟,是对等机制普通时钟的聚合体。对等机制边界时钟上,必须且只能有一个slave角色的对等机制普通时钟和若干个 master角色的对等机制普通时钟。Slave时钟和这些master时钟共用相同的时钟源。对等机制边界时钟,通过slave普通时钟和外部的时钟源完成时钟同步。
对等机制边界时钟上的slave普通时钟和master普通时钟的实现,和4.1.3节中介绍的对等机制普通时钟的实现是一样的。
3.1.5 对等机制透传时钟的实现
透传时钟的作用,是将IEEE1588消息在该透传时钟设备上的逗留时间添加到消息报文中去。为了保证所加的逗留时间的准确性,这就要求透传时钟也要和时钟源进行时钟同步。
对等机制透传时钟的消息入口,是一个slave角色的对等机制普通时钟。当来自主时钟的IEEE1588消息从该入口进入到透传时钟时,硬件所做的工作,是将消息报文拷贝一份送往CPU供软件进行频率同步,同时将原消息报文递送往出口,以使其到达从时钟。而在反方向,来自从时钟的回应消息,将会被硬件在消息报文中,添加逗留时间后直接转发往主时钟。
3.1.6 端到端机制透传时钟的实现
作为透传时钟,端到端机制透传时钟也要和时钟源进行时钟同步。
端到端机制透传时钟的消息入口是一个 slave角色的请求响应机制的普通时钟。当来自主时钟的IEEE1588消息从该入口进入到透传时钟时,硬件所做的工作是将消息报文拷贝一份,送往CPU供软件进行频率同步,同时将原消息报文递送往出口,以使其到达从时钟。而在反方向,来自从时钟的回应消息,将会被硬件在消息报文中,添加逗留时间后直接转发往主时钟。
目前支持IEEE 1588功能的设备大多为主干网上的设备。虽然支持IEEE 1588功能的局域网设备也已经开发出来了,但是因为成本的原因,先期布设局域网设备不可能在短期内得到更换。已有的实验显示,在两个支持IEEE 1588功能的设备中间,加上10级不支持IEEE 1588的交换机后,同步的时间精度在300微妙左右。这样IEEE 1588在局域网中,还是不能够很好的发挥其精确时间同步的作用。
IEEE 1588PTP协议借鉴了NTP技术,具有容易配置、快速收敛以及对网络带宽和资源消耗少等特点。同时还能够提供亚微秒级的精确度。是适合以太网的理想时钟同步协议。但是在实际的应用中,也还存在着问题。比如如何很好的克服在协议栈处理是产生的延迟;如何提高主时钟的容错性能。这些问题,都还需要更进一步的研究。
[1]IEEE Std 1588 TM —2002 Standard for a precision clock synchronization protocol for networked measurement and control systems[S]. 2002.
[2]IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control System ,[C]IEEE Instrumentation and Measurement Society , 2008.
[3]于鹏飞,喻强,邓辉, IEEE 1588精确时间同步协议的应用方案,[J]电力系统自动化,33(3)2009.7.3.
[4]张妍,孙鹤旭,林涛等,IEEE 1588在实时工业以太网中的应用,[J]微计算机技术,2005(25)。
[5]袁振华,董秀军,刘朝英,基于IEEE 1588的时钟同步技术及应用,[J]计算机与控制,2006(12)。