3、IEEE 1588v2(PTP)协议:PTP的基本原理、时钟类型(OC、BC、TC)、报文交互流程
各位好,咱们今天聊聊IEEE 1588v2,也就是常说的PTP协议。说实话,这玩意儿在OTN里越来越重要。以前大家觉得同步嘛,有SyncE就够了,但时间同步这块,PTP是绕不开的。
我最早接触PTP是在一个跨省干线项目里。当时客户要求整条链路的时间偏差小于1微秒,用NTP根本搞不定。后来上了PTP,配合SyncE,才勉强达标。嗯,这里面的坑,我后面会慢慢讲。
3.1 PTP的基本原理
PTP的核心思想,说白了就是“对表”。但跟咱们平时对表不一样,它要解决两个问题:一是主从时钟之间的时间偏差(Offset),二是报文传输的路径延迟(Delay)。
为什么会有这两个问题?你想想看,主时钟说“现在是10:00:00”,从时钟收到这句话时,可能已经是10:00:01了。这1秒的差距,一部分是因为从时钟本身就不准(偏差),另一部分是报文在路上花了时间(延迟)。
PTP的做法是:通过四次报文的交互,把这两个值算清楚。我习惯把这个过程叫做“握手测量”。
核心公式:
时间偏差 (Offset) = (t2 - t1) - (t4 - t3) / 2
路径延迟 (Delay) = (t2 - t1) + (t4 - t3) / 2
其中t1、t2、t3、t4分别是四次报文的打戳时间。
这里有个细节要注意:PTP假设主到从的延迟和从到主的延迟是相等的。但在实际光纤链路中,上下行光纤长度可能不一样,这就引入了不对称误差。我曾经在一个40公里长的链路上遇到过这个问题,最后靠测量光纤长度手动补偿才解决。
3.2 时钟类型:OC、BC、TC
PTP定义了三种基本时钟类型。我刚开始学的时候也觉得有点绕,但后来发现,你只要记住它们各自在链路里扮演什么角色就行了。
| 时钟类型 | 英文全称 | 角色说明 | 我的经验 |
|---|---|---|---|
| OC | Ordinary Clock | 普通时钟,只有一个PTP端口。要么是主,要么是从。 | 常用于终端设备,比如基站、服务器。 |
| BC | Boundary Clock | 边界时钟,有多个PTP端口。一个端口作为从,其他端口作为主。 | 我建议在汇聚层设备上用BC,可以隔离时钟域。 |
| TC | Transparent Clock | 透明时钟,不参与主从选举,只负责计算报文驻留时间。 | OTN设备里用得最多,因为它不修改时钟层级。 |
OC(普通时钟):最简单的一种。它只有一个PTP端口,要么是Master,要么是Slave。我记得第一次调PTP时,用的就是两台OC设备直连,一台设成Master,一台设成Slave,很快就跑通了。
BC(边界时钟):这个就有点意思了。它有两个以上的端口,其中一个端口作为Slave向上同步,其他端口作为Master向下分发。说白了,它就是个“二传手”。我在一个大型数据中心项目里用过BC,效果不错,因为它能阻断延迟累积。
TC(透明时钟):这个是我最喜欢的类型,也是OTN里最常用的。TC不参与主从选举,它只做一件事:计算PTP报文在设备内部的驻留时间,然后把这个时间写到报文的修正域里。嗯,这里要注意,TC有两种:E2E TC和P2P TC,前者修正累计延迟,后者修正链路延迟。
我的建议:
在OTN网络中,如果设备支持,优先使用TC。因为它对网络拓扑没有影响,而且精度足够高。BC虽然也能用,但会增加主从选举的复杂度。
3.3 报文交互流程
PTP的报文交互,我习惯把它分成两个阶段:建立主从关系和同步测量。
第一阶段:建立主从关系
这个阶段用的是Announce报文。所有设备都在发Announce,里面包含了自己的时钟质量、优先级等信息。然后通过最佳主时钟算法(BMC),选出一个Grandmaster。其他设备就乖乖当Slave。
我曾经遇到过一个坑:两台设备都觉得自己是Master,结果链路一直震荡。后来发现是Announce报文的发送间隔设得太短,导致BMC算法来不及收敛。把间隔从1秒改成2秒,问题就解决了。
第二阶段:同步测量
这个阶段就是咱们前面说的四次握手。具体流程是这样的:
- Sync报文:Master在t1时刻发送Sync报文,Slave在t2时刻收到。
- Follow_Up报文:Master把t1时间戳通过Follow_Up报文告诉Slave。
- Delay_Req报文:Slave在t3时刻发送Delay_Req报文给Master。
- Delay_Resp报文:Master在t4时刻收到,然后把t4时间戳通过Delay_Resp报文告诉Slave。
你看,经过这四步,Slave手里就有了t1、t2、t3、t4四个时间戳。然后套用咱们前面的公式,就能算出偏差和延迟。
注意事项:
1. Sync报文可以是单步模式(One-step),也可以两步模式(Two-step)。单步模式直接把时间戳嵌在Sync报文里,省去了Follow_Up报文,但精度稍差。
2. 在OTN网络中,由于有FEC和映射开销,报文延迟抖动会比以太网大。我建议在部署前先做一次延迟抖动测试。
3. 如果链路中有TC,TC会在报文经过时修改修正域,Slave计算时要考虑这个修正值。
最后说一句,PTP的精度很大程度上取决于硬件打戳的精度。软件打戳的PTP,精度只能到微秒级;硬件打戳的,可以到纳秒级。我在项目中一直坚持用硬件打戳,虽然成本高一点,但省心。
好了,这一章就到这里。下一章咱们聊聊PTP在OTN网络中的部署策略,那才是真正考验功力的时候。