1588V2协议
基本的时间同步机制
1588V2 提供了一套时间同步的方案PTP,可以提供亚微秒级的时间同步精度。
1588V2时间同步过程分为偏移测量阶段和延迟测量 2个阶段。偏移测量阶段用来修正主、从属时钟的时间差。如图 1所示 ,在该偏移修正过程中 ,主时钟周期性发出一个确定的同步信息(Sync信息) (缺省为 1次 /1 s ) ,它包含了一个时间戳 ,含有数据包发出的预计时间 a,即它是真实发出时间 T1 的估计值。由于信息包含的是预计的发出时间而不是真实的发出时间 ,故主时钟在Sync信息发出后发出一个 Follow Up信息 ,该信息也加了一个时间戳 ,准确地记载了 Sync信息的真实发出时间 T 。这样做的目的是使报文传输和时间测量分开进行 ,相互不影响。从属时钟使用 Follow Up信息中的真实发出时间 T1 和接收方的真实接收时间 T2 ,可以计算出从属时钟与主 时钟之间的偏移 Offset
Offset=T2 - T1 - Delay。
延迟测量 DelayMeasurement 阶段用来测量网络传输造成的延迟时间。为了测量网络传输延时 , IEEE 1588定义了一个延迟请求信息Delay Request Packet (Delay Req )。 从属时钟在收到 Sync信息后在 T3 时刻发延迟请求信息包 Delay Req, 主时钟收到 Delay Req后在延迟响应信息包 Delay Request Packe(Delay Resp) 加时间戳 ,反映出准确的接收时T4 ,并发送给从属时钟 ,故从属时钟就可以非常准确地计算出网络延时。与偏移测量阶段不同是 ,延迟测量阶段的延迟请求信息包是随机发的 ,并没有时间限制。由于 T2-T1 = Delay + Offset T4-T3 = Delay - Offset 故可得
Delay= [ T2-T1 + T4-T3 ] /2 Offset= [ T2-T1-T4+T3 ] /2
最后根据Offset来修正从时钟。需要提出的是这里假设的是:Delay是双向一致的,且不同信息报文的延时也是一样的。
图1 1588时间同步过程。
消息分类
PTP协议定义了2种消息:事件消息和通用消息。
事件消息需要在发送和接收的时候打上精确的时间戳。而通用消息不需要。 事件消息包括:
? Sync
? Delay_Req ? Pdelay_Req ? Pdelay_Resp 通用消息包括 ? Announce ? Follow_Up
? Delay_Resp
? Pdelay_Resp_Follow_Up ? Management ? Signaling
Sync, Delay_Req, Follow_Up, Delay_Resp.消息是用来产生和交互时间信息的,这些信息用来同步时间的。
Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up用来测量link延时。 Announce消息用来建立同步层次。
Management消息用来查询和设置PTP时钟的时钟数据。
Signaling消息是用来PTP时钟之间进行交互(如协商消息的周期等) 所有消息均使用TLV格式以利于扩展。
PTP实体类型
有5种PTP实体:
? 普通时钟(Ordinary clock), ? 边界时钟(Boundary clock),
? E2E透传时钟(End-to-end transparent clock), ? P2P透传时钟(Peer-to-peer transparent clock), ? 管理节点。
普通时钟
普通时钟只有一个PTP物理通信端口和网络相连,一个物理端口包括2个逻辑接口,事件接口(event interface)和通用接口(general interface)。事件接口接收和发送需要打时间标签的事件消息。通用接口接收和发送其他消息。一个普通时钟只有一个PTP协议处理器。在网络中,普通时钟可以作为祖父时钟(grandmaster clock)或从时钟(slave clock)。当作为祖父时钟是,其PTP端口处于主状态(master),作为从时钟时其PTP端口处于从状态(slave),普通时钟的框图如下: 框图中的协议引擎主要完成: ? 发送和接收协议消息。 ? 维护时钟和端口数据
? 执行PTP状态机的处理功能。
? 如果普通时钟是作为从时钟,则根据PTP协议计算父时钟的时间。 一个普通时钟维护两套数据:时钟相关的数据和端口相关的数据 时钟相关的数据有:
? Default数据:用于描述普通时钟的属性。 ? Current数据:用于描述同步相关的属性。
? 父时钟和祖父时钟数据:用于描述父时钟和祖父时钟的属性。 ? 时间特性:用于描述时标的属性。
端口相关的数据包括端口的属性以及PTP状态的数据。
当普通时钟的端口是从状态时,时钟控制环路用来控制本地时钟和父时钟同步。当普通时钟作为祖父时钟时,本地时钟要么自由振荡要么同步于外部的时钟源(如GPS等)。
边界时钟
边界时钟有多个PTP物理通信端口和网络相连,每个物理端口包括2个逻辑接口,事件接口和通用接口。边界时钟的每个PTP端口和普通时钟的PTP端口一样,除了以下几点: ? 边界时钟的所有端口共同使用一套时钟数据。 ? 边界时钟的所有端口共同使用一个本地时钟。
? 每个端口的协议引擎增加一个功能:从所有端口中选择一个端口作为本地时钟的同步输入。 协议引擎将总结和同步相关(包括建立时钟同步层次)的消息和信令。但可以转发管理消息。 边界时钟的框图如下:
E2E透传时钟
E2E透传时钟像路由器或交换机一样转发所有的PTP消息,但对于事件消息,有一个停留时间桥计算该消息报文在本点停留的时间(消息报文穿过本点所花的时间),停留时间将累加到消息报文中的“修正”(correction field)字段中。修正过程如下图: E2E透传时钟的框图如下:
用于计算停留时间的时间戳是由本地时钟产生的,所以本地时钟和时间源的时钟之间的频率差会造成误差。最好是本地时钟去锁定时钟源时钟。如果本地时钟锁定的不是时间源时钟则要求其精度能到达一定标准,以本地时钟是三级钟为例,1ms的停留时间大约造成5ns的误差。 E2E透传时钟可以和普通时钟合在一起作为一个网络单元,其框图如下:
在上图中,如果普通时钟是从时钟,停留时间桥将接收到的时间消息,宣称消息,由输入的时钟同步消息产生的时间戳以及内部的停留时间传送给协议引擎,协议信息根据这些信息计算出正确的时间并以此控制本地时钟。如果普通时钟是主时钟,协议引擎将产生Sync和Followup消息,消息中发送时间戳由本地时钟基于内部停留时间和输出时间戳产生(it would originate Sync and Follow_Up messages with the sending timestamps referenced to the local clock of the ordinary clock and based on internal timing corrections and the egress timestamp.)在实现中,透传时钟和普通时钟使用同一个本地时钟。
P2P透传时钟
P2P透传时钟和E2E透传时钟只是对PTP时间消息的修正和处理方法不同,在其他方面是完全一样的。P2P透传时钟可以和E2E透传时钟一样与普通时钟合在一起作为一个网络单元。 P2P透传时钟的框图如下:
P2P透传时钟对每个端口有一个模块用来测量该端口和对端端口的link延时,对端端口也必须支持P2P模式。link的延时通过交换Pdelay_Req, Pdelay_Resp以及可能的 Pdelay_Resp_Follow_Up消息测量出。P2P透传时钟仅仅修正和转发Sync和Followup消息。本地的停留时间和收到消息的端口的link延时均记入修正。修正过程如下图:
因为P2P的修正包括了link延时和停留时间,其修正域反映了整个路径的延时,从时钟可以根据Sync消息计算出正确的时间,而不需要再发Delay测量消息。再发生时钟路径倒换的时候,P2P方式基本不受影响,而E2E方式则需要在进行过新的延时测量之后,才能计算出正确的时间。
管理节点
管理节点向人或程序提供PTP管理消息的接口,管理节点可以和任意时钟合在一起。
建立时钟同步层次
在每个时钟域,普通时钟和边界时钟的每个端口都运行一个PTP协议状态机,该状态机根据设置和宣称(Announce)消息决定本端口的状态。
Slave-only 时钟 和Non-Slave-only 时钟
一个普通时钟可以通过管理平面设置为Slave-only 时钟 或Non-Slave-only 时钟,如果设置成Slave-only时钟,则该时钟不能进入主用模式。边界时钟只能是Non-Slave-only时钟。
端口的状态
普通时钟和边界时钟的每个端口正常工作时可以处于以下3个状态中的一个: ? Master:表明本端口是一条时钟路径的源。 ? Slave:表明本端口同步与一个Master时钟。
? Passive:表明本端口即不是Master,也不是Slave。该状态主要用于防止时钟成环。处于该状
态的端口除了Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up消息和信令以及必须响应的管理消息外不发送任何PTP消息。 其他状态还包括:
? 初始化(INITIALIZING):表示该端口正在初始化数据,硬件或通讯口。一个时钟如果一个端
口处于初始化状态,其他所有端口都应处于初始化状态。在初始化状态端口不发送和接收任何PTP消息。
? 故障(FAULTY):表示端口有故障。处于故障状态的端口除了必须响应的管理信息不发送和
接收任何PTP消息。故障端口的动作不应影响其他端口。如果故障不能限制在故障端口内,则该时钟的所有端口应均为故障状态。 ? 不可用(DISABLED):表示端口不可使用(例如网管禁止)。处于不可用状态的端口不能发送
任何PTP消息,除了必须管理信息也接收任何PTP消息。不可用端口的动作不应影响其他端口。
? 侦听(LISTENING):表示端口正在等待接收Announce消息。该状态用于将时钟加入到时钟
域时。处于侦听状态的端口除了Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up消息和其他必须响应的管理消息和信令外不发送其他PTP消息。 ? 预主用(PRE_MASTER):处于这个状态的端口的行为和主用端口一样,但是它除了Pdelay_Req,
Pdelay_Resp, Pdelay_Resp_Follow_Up消息和管理消息和信令外不发送其他PTP消息。 ? 未校准(UNCALIBRATED):表明域内发现一个和多个Master端口,本地时钟已经从中选择
一个并准备跟踪。该状态是一个过渡状态,用于进行跟踪前的预处理。
状态转移图
Non-slave-only时钟的端口的状态转移图如下: Slave-only时钟的端口的状态转移图如下:
状态转移图中的STATE_DECISION_EVENT一种根据Announce消息和本地时钟配置决定哪个是最好的主用时钟(Best Master Clock(BMC))并决定端口的状态。每个时钟应实现产生该事件的机制,如当接收到新的Announce消息或新的时钟配置或检测到故障等,应产生该事件,当该事件发生时,将会调用BMC算法,逻辑框图如下:
最佳主时钟算法
BMC算法主要包括2部分:
? 数据比较算法:比较两个时钟以决定哪个更好。 ? 状态决定算法:计算端口应该处于的状态。
BMC使用的数据主要包括Announce消息和本地时钟的配置信息。
状态决定算法
对于一个时钟的端口r,要根据本端口的收到的Announce消息,从和本端口相连Master时钟中挑出一个最好的,记为Erbest。然后时钟从所有端口的Erbest时钟中挑出一个最好的,记为Ebest。然后再加上本地时钟的配置D0。端口根据本端口的Erbest和Ebest和D0确定端口应该的状态,具体流程如下:
数据比较算法
数据比较算法用来比较两个时钟以决定哪个更好。其用到的数据有: 数据比较算法的流程图如下:
管理消息 管理消息的接收
当下列2个条件中的一个满足时,一个管理消息将被接受。
1) 当消息中的targetPortIdentity域中的clockIdentity 和本点配置的clock_identity一致时。如果
portNumber域为0,则该命令对所有端口生效。否则该命令只对指定端口生效。 2) 当消息中targetPortIdentity域中的所有字段均为0,说明是广播命令。