网络时钟同步——PTP(IEEE 1588)
一、简介
IEEE 1588全称是网络测量和控制系统的精密时钟同步协议标准,基本功能是使分布式网络中所有时钟都与最精确的时钟保持同步,它定义了一种精确的时间协议PTP(precision Time Protocol),用于对标准以太网或其他支持多播技术的终端设备中的时钟进行亚微妙级别的同步,IEEE 1588用于需要时钟精度比NTP高的局域分布系统。
二、版本历史
版本号 | 发布 时间 | 改动点 | 兼容性 |
1588v1 (IEEE1588-2002) | 2002 | - | - |
1588v2 (IEEE1588-2008) | 2008 | 亚微秒级的精度,定义了硬件时戳处理,获得更快的同步(Sync)报文速率,引入透明时钟模型,报文长度更短,新增了单播协商报文,点到点路径延时机制,报文TLV扩展用来延伸协议特性和功能等 | 不兼容1588v1 |
1588v2.1 (IEEE 1588-2019) | 2019 | 更广的兼容性,允许一个网络提供多个时间,给不同应用更好的安全性提供性能监控功能等 | 兼容1588v2, 但不兼容1588v1 |
相比于1588v1版本,1588v2版本特性有所增强,现在1588v1基本已被1588v2取代,因此后面谈到的PTP主要指1588v2。
三、PTP时钟同步原理及实现
3.1 基本时钟节点类型
时间同步网络中的每个节点,都被称为Clock。 PTP协议定义了三种基本的时钟节点类型:
- OC(Ordinary Clock,普通时钟)
节点仅有一个物理端口同网络通信,既可作为首节点(Grandmaster Clock,最优时钟)向下游节点发布时间,也可作为末节点(Slave Clock,从时钟)从上游节点同步时间。如1588服务器一般配置为OC模式,作为整个网络的GrandmasterClock;而用户终端(如:无线基站) 作为最末端的Slave Clock设备,也配置为OC模式。
- BC(Boundary Clock,边界时钟)
节点有多个物理端口与网络通信,其中一个端口从上游设备同步时间,其余多个端口向下游设备发布时间。
- TC(Transparent Clock,透明时钟)
节点有多个物理端口与网络通信,只在端口之间处理和转发PTP协议报文,并不从任何一个端口同步时间。
3.2 PTP报文协议类型
根据报文的是否携带时间戳可分为事件报文和通用报文。
报文分类 | 描述 | 包含的报文 |
事件报文 (Event Message) | 进出设备端口时需要打上精确的时间戳,设备利用这些时间戳来计算设备间的链路延时和时间偏差 | Sync Delay_Req Pdelay_Req Pdelay_Resp |
通用报文 (General Message) | 进出端口时不打时间戳 | Announce Follow_Up Delay_Resp Pdelay_Resp_Follow_Up Management Signaling |
报文的具体作用:
报文 | 作用 | 说明 |
Sync | 发送时钟(主时钟或主时钟的代理)定期发送Sync报文,以传达当前时间戳给接收时钟 | Sync报文不包含实际的发送时间,而是通过后续的Follow_Up报文提供精确的发送时间戳 |
Follow_Up | 在发送Sync报文之后,发送时钟会发送Follow_Up报文,包含Sync报文的发送时间戳 | 只有在双步时钟(two-step clock)模式下使用 |
Delay_Req | 接收时钟向发送时钟请求一个时间戳,用于测量往返延迟 | 接收时钟发送Delay_Req报文后,发送时钟会返回一个Delay_Resp报文 |
Delay_Resp | 响应接收时钟的Delay_Req报文,包含接收到Delay_Req报文的时间戳 | 通过Delay_Req和Delay_Resp报文的时间戳,可以计算出网络延迟 |
Pdelay_Req | 在测量对等时钟之间的通信延迟时使用,通常用于对等透明时钟(peer-to-peer transparent clocks) | 用于检测链路延迟 |
Pdelay_Resp | 响应Pdelay_Req报文,提供接收到Pdelay_Req报文的时间戳 | 与Pdelay_Req报文配合使用 |
Pdelay_Resp_Follow_Up | 在Pdelay_Resp报文之后发送,提供Pdelay_Resp报文的精确发送时间戳 | 用于双步时钟模式 |
Announce | 发送时钟定期广播其自身信息,包括优先级、时钟质量和同步能力 | 用于时钟选择和最佳主时钟(Best Master Clock, BMC)算法 |
Management | 用于PTP时钟的管理,包括获取和设置PTP时钟属性、状态和配置 | 主要用于维护和管理 |
Signaling | Signaling报文用于传递管理信息、 请求和通知,不仅在管理PTP节点之间的通信方面发挥重要作用,还可以用于修改某些协议参数 | Signaling报文在主从时钟之间传递非时间戳相关的信息。例如,可以用来请求主时钟改变Sync报文的发送频率,或通知从时钟进行参数调整等 |
Follow_Up和Pdelay_Resp_Follow_Up被称为跟随报文。根据是否发送跟随报文, PTP同步机制分为单步模式和双步模式:
- 单步模式
直接使用Sync和Pdelay_Resp携带时间戳信息,不发送跟随报文。
单步模式交互的报文数量较双步模式少,占用的网络带宽较少,但需要硬件芯片支持。
单步模式下是先打时间戳再发送报文,发送的时间戳是预估的报文发送时间,不如双步模式准确。
- 双步模式
使用跟随报文携带时间戳。其中Follow_Up用于携带Sync的时间戳,Pdelay_Resp_Follow_Up用于携带Pdelay_Req的接收时间戳和Pdelay_Resp的发送时间戳。
双步模式发送的时间戳是报文的实际发送时间,单步模式更准确,能提高PTP时间同步的精度。
同一TC节点上PTP接口使用的单步、双步模式必须相同,一般情况下,一个PTP域内所有的时钟节点使用相同的单步、双步模式。单步模式和双步模式的原理相同,设备缺省支持双步模式。
3.3 PTP时钟同步原理
PTP通过主时钟(master clock)和从时钟(slave clock)之间的报文交换,实现网络中所有设备的时间同步。其核心思想是通过计算时钟之间的时间偏差和网络传输延迟,调整从时钟的时间,使其与主时钟保持一致。
3.4 PTP时间同步机制
时间同步机制分为 E2E (End-to-End,端到端)机制和 P2P (Peer-to-Peer,点到点)机制。在PTP网络中,主时钟节点可以与从时钟节点直接相连,或者隔几个中间节点相连。对于主时钟节点到从时钟节点之间的总链路延迟, E2E和P2P的测量机制不同。
- E2E机制
E2E机制是一种端到端的延迟测量机制,它通过测量发送端和接收端之间的总延迟来计算时钟偏差。在E2E机制中,发送端发送一个包含时间戳的PTP报文,接收端收到报文后,记录下接收时间戳,并计算出报文在传输过程中的延迟。然后,接收端将计算出的延迟值反馈给发送端,发送端根据反馈的延迟值调整其时钟,以实现网络同步。(E2E实际上是直接测量两个OC或者BC之间的总链路延迟,包括其间的所有中间TC节点。)
E2E机制的优点在于它可以测量端到端之间的总延迟,因此可以准确地反映网络中的时钟偏差。但是, E2E机制也有一些缺点。首先,它需要发送端和接收端之间的通信,因此对于一些无法建立通信的设备, E2E机制无法正常工作。其次, E2E机制需要计算报文在传输过程中的延迟,因此对于网络延迟较大的情况, E2E机制的同步精度会受到一定影响。
- P2P机制
P2P机制是一种对等延迟测量机制,它通过测量网络中各个设备之间的延迟来计算时钟偏差。在P2P机制中,每个设备都会与其他设备建立通信,并互相测量链路延迟。然后,每个设备都会根据收到的延迟信息调整自己的时钟,以实现网络同步。(P2P仅限于测量两个直接相连的OC、 BC或者TC节点之间的逐点链路延迟。)
P2P机制的优点在于它可以实现分布式网络同步,不需要中心节点进行控制。此外,由于每个设备都会互相测量链路延迟,因此可以获得更准确的时钟偏差信息。但是, P2P机制也有一些缺点。首先,它需要每个设备都有足够的计算能力和通信能力,因此对于一些资源受限的设备,P2P机制可能无法正常工作。其次,由于每个设备都会互相测量链路延迟,因此需要处理大量的测量
数据,这可能会对设备的性能产生一定影响。
在实际应用中,可以根据具体需求选择合适的PTP延迟测量机制。例如,对于一些需要高精度同步的场景,如金融交易或传感器网络等,可以选择E2E机制;而对于一些需要实现分布式网络同步的场景,如物联网或云计算等,可以选择P2P机制。
3.5 PTP时间同步过程
PTP的网络同步过程包括:
- 确定最优时钟以及主从关系
- 频率同步 ,实现从时钟频率与主时钟同步。频率同步是相位同步的前提和基础。
- 相位同步 ,实现从时钟相位与主时钟同步,使得从时钟的时间(从节点的本地时间)和主时钟的时间保持一致。
1)确定最优时钟
最优时钟可以通过手工指定,也可以通过BMC算法动态选举。 BMC是1588v2协议规定的一种确定网络中各时钟主从层级的算法。通过这种算法,将网络中的时钟划分为主、从时钟,从时钟跟踪主时钟的频率和时间。在网络发生变化,或网络中某个时钟源的属性发生改变时, BMC算法能重新选择最佳主时钟,使全网的频率和相位达到同步。选举的具体过程如下:
- 各时钟节点之间通过交互Announce报文,会依据Announce报文中所携带的时钟的第一优先级、时间等级、时间精度和第二优先级的次序依次进行比较,获胜者将成为最优时钟,比较规则如下图所示。
- 主节点定期发送Announce报文给从节点,如果在一段时间内,从节点没有收到主节点发来的Announce报文,便认为该主节点失效,于是重新选举最优时钟。
2)确定主从关系
PTP网络中,所有的时钟节点类型(TC除外)通过主从关系联系在一起。主从关系包括各时钟节点之间的主从关系以及各时钟节点上接口的主从关系(Master-Slave),主从关系决定了PTP时间同步的方向。各时钟节点之间的主从关系可通过BMC算法自动产生,也可手工指定。
主从关系是相对而言的,对于相互同步的一对时钟节点来说,存在如下主从关系:
- 主/从节点:发布同步时间的时钟节点称为主节点(Master Node),接收同步时间的时钟节点称为从节点(SlaveNode)。
- 主/从时钟:主节点上的时钟称为主时钟(Master Clock),从节点上的时钟称为从时钟(Slave Clock)。
- 主/从/被动接口:时钟节点上发布同步时间的PTP接口称为主接口(Master Port),接收同步时间的PTP接口称为从接口(Slave Port),主接口和从接口均可存在于BC或OC上。既不发布也不接收同步时间的PTP接口称为被动接口(Passive Port),被动接口用于避免PTP报文形成环路。
选出最优时钟并确定主从关系之后,整个PTP域内建立起了一棵无环路、全连通,并以最优时钟为根的最短路径树,如图所示, PTP域内的节点会进行时间同步。
3)频率同步
确认了最优时钟以及时钟节点之间的主从关系之后,主时钟和从时钟之间交换Sync报文来实现频率同步。主时钟周期性地向从时钟发送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')。从时钟根据计算出来的频率比调整本机时钟芯片的频率。
4)相位同步
确认了最优时钟以及时钟节点之间的主从关系之后,主、从时钟之间还会开始相位同步。主、从时钟间周期交互PTP报文,从时钟通过时间戳计算和主时钟的当前时间偏差。从时钟根据时间偏差调整本地时间,使得本地时间和主时钟时间保持一致,也称为时间同步。
从时钟本地准确时间=从时钟本地当前时间-时间偏差。
粗略地计算,时间偏差=Tn- Tn'。
实际上,(Tn- Tn')中包含了报文在链路中的传输延时,为了提高时间同步的精度,时间偏差的测量和计算过程包括以下两个阶段:
- 链路延时测量阶段:该阶段用于确定主时钟与从时钟之间报文传输的延时。主、从时钟之间交互同步报文并记录报文的收发时间,通过计算报文往返的时间差来计算主、从时钟之间的往返总链路延时。如果两个方向的链路延时相同(也称为网络对称),则往返总链路延时的一半就是单向链路延时(meanPathDelay)。如果网络延时不对称且通过其它方式获知了报文发送方向和接收方向的链路延迟之差,可以通过配置非对称延迟来校正链路延时,从而更精确地进行时间同步。
- 时间偏差测量阶段:该阶段用于测量主时钟与从时钟之间的时间偏差。主时钟按周期向从时钟发送Sync报文,并记录它的发送时间Tn'。从时钟接收到Sync报文时立刻把当前时刻Tn记下,于是得到主从时钟的“时间偏差=(Tn- Tn')-单向链路延时”。
PTP协议定义了两种链路延时测量机制:请求应答(Request_Response)机制和端延时(Peer Delay)机制,且这两种机制都以网络对称为前提。 PTP域中所有时钟节点使用的链路延时测量机制必须相同,对于时钟节点类型全为BC和OC的PTP网络,使用请求应答机制和端延时机制基本没有差别。这两种机制的差别主要体现在使用TC的PTP域中。用户先根据组网情况,确定是否使用E2ETC或P2PTC,再根据使用的TC类型使用对应的链路延时测量机制。当使用E2ETC时,需配套使用请求应答机制;当使用P2PTC时,需配套使用端延时机制。
TC节点分成两种类型: E2E TC(End-to-End Transparent Clock)、P2P TC(Peer-to-Peer TransparentClock) 。
- 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复杂
请求应答机制(E2E)
请求应答机制下主时钟和从时钟根据收发的PTP协议报文计算主、从时钟之间的平均路径延时。如果主时钟和从时钟中间有TC, TC不计算平均路径延时,只传递收到的PTP协议报文,并将Sync报文在本TC上的驻留时间传递给从时钟。
如下图所示,以双步模式为例来说明请求应答机制的实现过程:
- 主时钟向从时钟发送Sync报文,并记录发送时间t1;从时钟收到该报文后,记录接收时间t2。
- 主时钟发送Sync报文之后,紧接着发送一个携带有t1的Follow_Up报文。
- 从时钟向主时钟发送Delay_Req报文,用于发起对反向传输的延时的计算,并记录发送时间t3;主时钟收到该报文后,记录接收时间t4。
- 主时钟收到Delay_Req报文之后,回复一个携带有t4的Delay_Resp报文。
此时,从时钟便拥有了t1~ t4这四个时间戳,由此可计算出:
- 主、从时钟间的往返总链路延时
- 主、从时钟间的单向链路延时
- 从时钟相对于主时钟的时钟偏差
端延时机制(P2P)
端延时机制用于计算两个时钟节点之间的平均路径延时,而且这两个时钟节点会互相发送Pdelay报文,各自计算路径延时。如果主时钟和从时钟中间有TC, TC会将主、从时钟之间的同步路径划分为多段链路, TC会参与计算每段链路的路径延时。每段链路的路径延时累计在同步报文中向下游传递,同时传递的信息还包括Sync报文在TC上的驻留时间。从节点根据累计的链路延时和TC驻留时间,计算主从节点的平均路径延时。
使用端延时机制的两个时钟节点(可以为BC、 TC或OC)会互相发送Pdelay报文,并分别计算这两个时钟节点之间链路的单向时延,两个节点上的报文交互流程和计算原理完全相同。如下图所示,只画了双步模式下Clock node B作为端延时测量发起方的情况来示意端延时机制实现过程。双步端延时机制实现过程如下:
- Clock node B向Clock node A发送Pdelay_Req报文,用于发起反向传输延时的计算,并记录发送时间t1; Clock node B收到该报文后,记录接收时间t2。
- Clock node A收到Pdelay_Req报文之后,回复一个携带有t2的Pdelay_Resp报文,并记录发送时间t3; Clock node B收到该报文后,记录接收时间t4。
- Clock node A回复Pdelay_Resp报文之后,紧接着发送一个携带有t3的Pdelay_Resp_Follow_Up报文。
此时, Clock node B便拥有了t1~ t4这四个时间戳,由此可计算出:
- Clock node A和Clock node B间链路的往返总延时
- 由于网络是对称的, Clock node A和Clock node B间链路的单向延时
- 从时钟相对于主时钟的时钟偏差Offset=从时钟收到Sync报文的时间-主时钟发送Sync报文的时间-每段链路单向时延的累计时间-链路上所有TC驻留时间和。
本文地址:https://www.vps345.com/14610.html