1 概述
1. 产生背景
在通信网络中,许多业务的正常运行都要求网络时间同步。时间同步包括频率和相位两个方面的同步,通过时间同步可以使得整个网络各设备之间的频率和相位差保持在合理的误差范围内。
PTP(Precision Time Protocol,精确时间协议)是一种用于网络节点之间高精度频率同步和相位同步的时间同步协议,时间同步精度为亚微秒级,可满足广电网络、城市轨道交通、无线接入网络等场景的高精度时间同步要求。
2. 技术对比
2 PTP协议标准
IEEE1588是PTP的基础协议,它规定了网络中用于高精度时钟同步的原理和报文交互处理规范。因此,PTP也称为IEEE 1588,简称为1588。1588 分为 1588v1 和 1588v2 两个版本,1588v1 只能达到亚毫秒级的时间同步精度,而 1588v2 可达到亚微秒级同步精度,可同时实现相位同步和频率同步。基于IEEE1588,PTP根据使用场景不同又衍生了一些协议。PTP这些协议的对比如下表所示:
3 时间同步基础
时间同步一般分为频率同步和相位同步。
1 频率同步
频率同步也称为时钟同步。频率同步指两个信号的变化频率相同或保持固定的比例,信号之间保持恒定的相位差。如下图所示,两个表的时间不一样,但是保持一个恒定的差(6 小时)。
2 相位同步
相位同步是指,不同时钟的信号变化频率和相位均保持一致,即不同时钟每时每刻都保持一致。相位同步的前提是频率同步,因此相位同步也称时间同步。如下图所示:
4 1588v2 技术实现
PTP基本概念
(1)概述
如下图所示,1588v2网络架构中涉及如下重要元素:
- PTP域
- 时钟源
- 最优时钟
- 时钟节点
(2)PTP域和多域
将一个应用了PTP协议的网络称为一个PTP域。 为适应复杂的组网环境,Comware 还支持PTP多域,即支持将设备同时加入多个PTP域,不同PTP 域的时钟源、时钟信息以及时间同步流程互相独立。当设备加入多个PTP域时,需要从多个域中确定一个最优域,以最优域所跟踪的时钟源来同步本设备的时间。
(3)时钟源
设备可以使用的时钟源分为本地时钟源和外地时钟源:
- 本地时钟源:由设备内部时钟监控模块的晶体震荡器产生的 38.88 MHz 时钟信号。
- 外地时钟源:由外接的时钟设备产生,通过专用接口接收的时钟信号。
(4)最优时钟
当PTP域内存在多个时钟源时,用户可手工指定或者通过 BMC 算法自动选举一个时钟源作为该PTP域的最优时钟(Grandmaster Clock,GMC)。最优时钟是整个PTP域的参考时间,PTP域内有且只有一个最优时钟,域内的所有设备都与该时钟保持同步。通过各时钟节点间PTP协议报文的交互,最优时钟的时间最终将被同步到整个PTP域内。
(5)时钟节点
PTP域内参与时间同步的网络设备称为时钟节点。1588v2 协议标准定义了以下类型的基本时钟节点:
TC节点在收到PTP报文时会在所有PTP接口上复制和转发,增加了上游和下游的宽带压力,甚至造成业务报文丢包。因此,TC节点划分为如下两种类型:
- E2ETC(End-to-End Transparent Clock,端到端透明时钟):转发所有 PTP 协议报文,并在转发 Sync、Delay_Req 报文时,携带 Sync、Delay_Req 报文在本设备内的驻留时间(驻留时间用于对时间偏差进行校正)。适用于时钟节点数量较少的 PTP 网络。
- P2PTC(Peer-to-Peer Transparent Clock,对等透明时钟):直接转发 PTP 协议报文中的 Sync、Follow_Up 和Announce 报文,并在转发 Sync 报文时,携带 Sync 报文在本设备内的驻留时间以及本设备和上游时钟节点之间的链路传输延时(驻留时间用于对时间偏差进行校正,链路传输延时用于计算时间偏差),终结其他 PTP 协议报文。相对 E2ETC,P2PTC 转发的 PTP 报文类型减少了,更适用于时钟节点数量较多的 PTP 网络。但P2PTC 需要计算链路传输延时,实现较 E2ETC 复杂。
Comware 还支持 TC+OC 类型的混合时钟节点,它融合了 TC 和 OC 各自的特点,包含如下两种PTP 接口:
- 一个 OC 类型的 PTP 接口,OC 类型接口用于时间同步。
- 多个 TC 类型的 PTP 接口,TC 类型接口用于转发 PTP 协议报文并对其进行转发延时校正。
对应 TC 的分类,TC+OC 也包括两种类型:E2ETC+OC 和 P2PTC+OC。
协议报文
(1)报文类型
各1588v2报文的作用如下:
- Sync、Follow_Up、Delay_Req 和 Delay_Resp 用于测量机制为请求应答机制的设备计算时间偏差和链路延时。
- Pdelay_Req、Pdelay_Resp 和 Pdelay_Resp_Follow_Up 报文用于测量机制为端延时机制的设备计算链路延时,并通过 Sync 和 Follow_Up 报文中的时间戳信息计算时间偏差。
- Announce 报文携带BMC算法的相关信息用来建立主从关系。
- Management 报文用来查询和更新时钟维护的PTP数据集,PTP域中的管理设备使用Management报文来管理时钟节点。H3C 设备暂不支持此类报文。
- Signaling 报文用在时钟设备间实现其他用途的通信,比如用于协商主从时钟间单播报文的速率。H3C设备1588v2协议暂不支持此类报文(H3C设备ITU-T G.8275.2协议支持此类报文)。
- [x] 注意:
同一 TC 节点上 PTP 接口使用的单步、双步模式必须相同,建议一个PTP域内所有的时钟节点使用相同的单步、双步模式。单步模式和双步模式的原理相同,设备缺省支持双步模式,本文均以双步模式举例。
(2)报文封装
1588v2 支持 IEEE 802.3/Ethernet 和 UDP 两种封装类型。UDP 封装又分为 IPv4 UDP 和 IPv6 UDP两种封装类型,H3C 设备暂不支持 IPv6 UDP 封装。
- IEEE 802.3/Ethernet封装:以太网类型(EthernetType)值为 0x88F7。缺省情况下,对于请求应答机制,PTPI报文的组播目的MAC地址为 011B-1900-0000;对于端延时机制,PTP报文的组播目的MAC地址为 0180-C200-000E。
- IPv4 UDP 封装:PTP 事件报文的 UDP 目的端口号为 319,通用报文的 UDP 目的端口号为320。根据主从节点间的拓扑类型可以配置组播封装或者单播封装:
- 对于组播组网环境,缺省情况下,请求应答机制中报文目的IP地址为组播地址224.0.1.129,端延时机制中报文目的 IP 地址为组播地址 224.0.0.107;
- 对于单播组网环境,报文的目的 IP 地址为用户配置的单播 IP 地址。
同步原理
PTP 时间同步的实现包括以下步骤:
(1) 确定最优时钟以及主从关系。
(2) 频率同步,即实现从时钟频率与主时钟同步。频率同步是相位同步的前提和基础。
(3) 相位同步,即实现从时钟相位与主时钟同步,使得从时钟的时间(从节点的本地时间)和主时钟的时间保持一致。
确定最优时钟
最优时钟可以手动指定也可以通过BMC(最佳主时钟算法)动态选出。通过这种算法,可将网络中的时钟节点划分为主、从时钟,从时钟跟踪主时钟的频率和时间。在网络发生变化,或网络中某个时钟源的属性发生改变时,BMC算法能重新选择最佳主时钟,使全网的频率和相位达到同步。选举的具体过程如下: (1) 各时钟节点会交互Announce报文,时钟节点收到其他节点发来的Announce报文时,会依据 Announce 报文中所携带的时钟的第一优先级、时间等级、时间精度和第二优先级等信息的次序依次与自己进行比较,自己获胜者将被更新为最优时钟。
(2) 主节点定期发送 Announce 报文给从节点,如果在一段时间内,从节点没有收到主节点发来的Announce 报文,便认为该主节点失效,于是重新选举最优时钟。
选举过程如下所示:
确定主从关系
PTP 网络中,所有类型的时钟节点(TC 除外)通过主从关系联系在一起。主从关系包括各时钟节点之间的主从关系以及各时钟节点上接口的主从关系Master-Slave)。各时钟节点之间的主从关系可通过 BMC 算法自动产生,也可手工指定。
主从关系是相对而言的,对于相互同步的一对时钟节点来说,存在如下主从关系:
- 主/从节点:发布同步时间的时钟节点称为主节点(Master Node),接收同步时间的时钟节点称为从节点(Slave Node)。
- 主/从时钟:主节点上的时钟称为主时钟(Master Clock),从节点上的时钟称为从时钟(Slave Clock)。
- 主/从/被动接口:时钟节点上发布同步时间的 PTP 接口称为主接口(Master Port),接收同步时间的 PTP 接口称为从接口(Slave Port)。既不发布也不接收同步时间的 PTP 接口称为被动接口(Passive Port),被动接口用于避免 PTP报文形成环路。
选出最优时钟并确定主从关系之后,整个 PTP 域内建立起了一棵无环路、全连通,并以最优时钟为根的最短路径树,如下图所示。PTP 域内的节点会进行时间同步。
频率同步
主时钟周期性地向从时钟发送 Sync 报文,如果不考虑链路延时的变化,且从时钟的频率和主时钟是同步的,那么在相同的时间间隔内,主时钟和从时钟累计的时间偏差应该是相同的,如下图所示,T(n+1)-Tn=T(n+1)'-Tn'。如果时间偏差不相同:
- T(n+1)-Tn > T(n+1)'-Tn',说明从时钟的频率比主时钟快,则需要调慢从时钟的频率;
- T(n+1)-Tn < T(n+1)'-Tn',说明从时钟的时间比主时钟快,频率比主时钟慢,则需要调快从时钟的频率。
频率比计算公式为:(T(n+1)-Tn)/(T(n+1)'-Tn')。从时钟根据计算出来的频率比调整本机时钟芯片的频率。
相位同步
- 原理概述
确认了最优时钟以及时钟节点之间的主从关系之后,主、从时钟之间还会开始相位同步。主、从时钟间周期交互 PTP 报文,从时钟通过时间戳计算和主时钟的当前时间偏差。从时钟根据时间偏差调整本地时间,使得本地时间和主时钟时间保持一致,也称为时间同步。
从时钟本地准确时间=从时钟本地当前时间-时间偏差。
时间偏差的测量和计算过程包括以下两个阶段:
(1) 链路延时测量阶段:该阶段用于确定主时钟与从时钟之间报文传输的延时。若两个方向的链路延时相同(也称为网络对称),则往返总链路延时的一半就是单向链路延时(meanPathDelay)。如果网络延时不对称且通过其它方式获知了报文发送方向和接收方向的链路延迟之差,可以通过配置非对称延迟来校正链路延时,从而更精确地进行时间同步。
(2) 时间偏差测量阶段:该阶段用于测量主时钟与从时钟之间的时间偏差。时间偏差=(Tn-Tn')-单向链路延时。PTP 协议定义了两种链路延时测量机制:请求应答机制和端延时机制,且这两种机制都以网络对称为前提。PTP 域中所有时钟节点使用的链路延时测量机制必须相同,这两种机制的差别主要体现在使用了 TC 的 PTP 域中。用户先根据组网情况,确定是否使用 E2ETC或 P2PTC,再根据使用的 TC 类型使用对应的链路延时测量机制。当使用 E2ETC 时,需配套使用请求应答机制;当使用 P2PTC 时,需配套使用端延时机制。
- 请求应答机制
请求应答机制下主时钟和从时钟根据收发的 PTP 协议报文计算主、从时钟之间的平均路径延时。如果主时钟和从时钟中间有 TC,TC 不计算平均路径延时,只传递收到的 PTP 协议报文,并将 Sync报文在本 TC 上的驻留时间传递给从时钟。
下图以双步模式为例来说明请求应答机制的实现过程:
(1) 主时钟向从时钟发送 Sync 报文,并记录发送时间 t1;从时钟收到该报文后,记录接收时间 t2。
(2) 主时钟发送 Sync 报文之后,紧接着发送一个携带有 t1 的 Follow_Up 报文。
(3) 从时钟向主时钟发送 Delay_Req 报文,用于发起对反向传输的延时的计算,并记录发送时间t3;主时钟收到该报文后,记录接收时间 t4。
(4) 主时钟收到 Delay_Req 报文之后,回复一个携带有 t4 的 Delay_Resp 报文。
此时,从时钟便拥有了 t1~t4 这四个时间戳,设从时钟比主时钟快offset,由此可计算出:
- 主、从时钟间的往返总链路延时=[(t2-t1)+(t4-t3)]
- 主、从时钟间的单向链路延时=[(t2-t1)+(t4-t3)]/2
- 从时钟相对于主时钟的时钟偏差 Offset=(t2-t1)-[(t2-t1)+(t4-t3)]/2=[(t2-t1)-(t4-t3)]/2
- 端延时机制
端延时机制用于计算两个时钟节点之间的平均路径延时,而且这两个时钟节点会互相发送 Pdelay报文,各自计算路径延时。如果主时钟和从时钟中间有 TC,TC 会将主、从时钟之间的同步路径划分为多段链路,TC 会参与计算每段链路的路径延时。每段链路的路径延时累计在同步报文中向下游传递,同时传递的信息还包括 Sync 报文在 TC 上的驻留时间。从节点根据累计的链路延时和 TC驻留时间,计算主从节点的平均路径延时。
使用端延时机制的两个时钟节点(可以为 BC、TC 或 OC)会互相发送 Pdelay 报文,并分别计算这两个时钟节点之间链路的单向时延,两个节点上的报文交互流程和计算原理完全相同。下图中只画了双步模式下 Clock node B 作为端延时测量发起方的情况来示意端延时机制实现过程。双步端延时机制实现过程如下:
(1) Clock node B 向 Clock node A 发送 Pdelay_Req 报文,用于发起反向传输延时的计算,并记录发送时间 t1;Clock node B 收到该报文后,记录接收时间 t2。
(2) Clock node A 收到 Pdelay_Req 报文之后,回复一个携带有 t2 的 Pdelay_Resp 报文,并记录发送时间 t3;Clock node B 收到该报文后,记录接收时间 t4。
(3) Clock node A 回复 Pdelay_Resp 报文之后,紧接着发送一个携带有 t3 的Pdelay_Resp_Follow_Up 报文。
此时,Clock node B 便拥有了 t1~t4 这四个时间戳,设从时钟比主时钟快offset,由此可计算出:
- Clock node A 和 Clock node B 间链路的往返总延时=(t2-t1)+(t4-t3)
- 由于网络是对称的(即双向传输的单向延时相同),Clock node A 和 Clock node B 间链路的单向延时=[(t2-t1)+(t4-t3)]/2=[(t3-t2)+(t4-t1)]/2
- 从时钟相对于主时钟的时钟偏差 Offset=从时钟收到 Sync 报文的时间-主时钟发送 Sync 报文的时间-每段链路单向时延的累计时间-链路上所有 TC 驻留时间和。
ANNOUNCE报文与BMC
ANNOUNCE报文的作用
当域中没有人为指定主时钟时,域中设备利用此报文自动选出主时钟。每个域中只能有一个主时钟。 ANNOUNCE报文对外发送自身时钟的特性信息,域中的其它设备将此报文用于最佳主时钟算法。BMC算法:最佳主时钟算法
每台设备独立计算自身的主、从状态。通过运算结果决定主时钟、从时钟。算法的数据来自Announce报文,以及自身defaultDS中的数据。
算法分为两步:- 从所有Annouce报文中选出最佳报文。
- 将最佳报文和自身属性比较,依据比较结果决定是否更新最优时钟。
ANNOUNCE报文发送方式
- 方式一:
地址: UDP组播224.0.1.229 目的MAC地址:01-00-5E-00-01-81
端口号:320 - 方式二:
ethernet帧(以太网帧),ethertype=0x88F7。
地址:
普通消息:01-1B-19-00-00-00
事件消息:01-80-C2-00-00-0E
发送者: 立志成为主时钟的设备
- 方式一:
ANNOUNCE报文的内容
originTimestamp:=0。//接收到的dante数据中此值固定为0。
currentUtcOffset:=timePropertiesDS. currentUtcOffset。//接收到的dante数据中此值固定为0.
grandmasterPriority1:=parentDS.grandmasterPriority1
grandmasterClockQuality:=parentDS. grandmasterClockQuality
grandmasterPriority2:=parentDS.grandmasterPriority2
grandmasterIdentity:=parentDS.grandmasterIdentity
stempsRemoved:=currentDS.stepsRemoved
simeSource:=timePropertiesDS.timeSource
- 数据集说明
defaultDS: Attributes describing the ordinary clock.//本地时钟的数据。
currentDS:Attributes related to synchronization.//时钟同步相关的信息。
parentDS:Attributes describing the parent (the clock to which the ordinary clock synchronizes) and the grandmaster (the clock at the root of the master−slave hierarchy).//父时钟和最高级时钟的信息。
timePropertiesDS: Attributes of the timescale.
- 处理函数
void handleAnnounce(MsgHeader *header, ssize_t length,
Boolean isFromSelf, const RunTimeOpts *rtOpts, PtpClock *ptpClock)
- 注意
- 人工设定为主时钟的设备可忽略此报文。
- 如果从时钟状态时收到来自主时钟的报文,执行此状态对应的数据集更新。
- 保存报文数据,供BMC算法调用时使用。