4. gPTP协议原理
(generalized Precision Time Protocol,IEEE 802.1AS)是 TSN 网络中实现全网站时间同步的核心协议。它并不只是“发一个时间戳”那么简单,而是由主时钟选举、路径延迟测量、时间偏差修正三条主线共同构成。理解 ,关键要看清:谁负责发时间、时间如何从主时钟传到从时钟、链路延迟如何被逐跳扣除,以及当主时钟失效时网络如何自动切换。
一、主时钟选举与 BMCA:谁有资格发时间
网络中的每个设备都运行着一套“最佳主时钟算法”(BMCA,Best Master Clock Algorithm)。BMCA 的目标不是人为指定主时钟,而是让所有节点根据一组可比较的属性,自动选出全网最优的时钟作为 Grandmaster(GM)。
参与比较的核心属性包括:
- priority1:用户可配置的优先级,数值越小越优先;
- clockClass:时钟等级,如是否锁定 GPS、是否保持 holdover;
- clockAccuracy:时钟精度等级;
- offsetScaledLogVariance:时钟稳定度;
- priority2:次级用户优先级;
- clockIdentity:最终平局时的唯一标识,通常取 MAC 地址。
BMCA 的比较顺序是“逐级淘汰”:先比 priority1,再比 clockClass、clockAccuracy、offsetScaledLogVariance,最后比 priority2 和 clockIdentity。每个节点通过 Announce 消息交换这些属性,最终收敛到同一个 GM。GM 确定后,网络形成一棵以 GM 为根的生成树,各端口进入 Master 或 Slave 状态。
关键点:BMCA 是“分布式选举”,不是中心服务器指定。每个节点都独立计算,但最终结果一致。这也是 具备冗余和自愈能力的基础。
二、同步消息与 Follow_Up:时间如何被传递
GM 选定后,它会周期性地发送 Sync 消息。Sync 消息本身可以携带时间戳,但在实际以太网实现中,由于硬件打时间戳的位置和软件读取存在延迟, 通常采用“两步模式”:
- GM 发送 Sync 消息,记录其精确的发送时刻 t1;
- 紧接着发送 Follow_Up 消息,把 t1 作为“精确发送时间”带给从时钟;
- 从时钟在收到 Sync 时记录本地接收时刻 t2;
- 从时钟根据 t1、t2 以及链路延迟,计算时间偏差并修正本地时钟。
用公式表示,从时钟需要修正的偏差为:
offset = t2 - t1 - link_delay
修正后本地时间 = 本地时间 - offset
其中 link_delay 就是通过 Pdelay 机制测得的路径延迟。Follow_Up 的作用,是把“发送时刻”从 Sync 消息中解耦出来,避免因软件处理抖动导致时间戳不准。
三、Pdelay_Req / Pdelay_Resp / Pdelay_Resp_Follow_Up:逐跳测延迟
与普通 PTP 的一个重要区别是:它要求逐跳测量链路延迟,而不是端到端测量。每条链路两端的端口通过三个消息完成一次延迟测量:
- Pdelay_Req:发起方记录发送时刻 t1;
- Pdelay_Resp:响应方收到后记录 t2,并回送响应,同时记录发送时刻 t3;
- Pdelay_Resp_Follow_Up:响应方把 t2 和 t3 带给发起方;
- 发起方记录收到响应的时刻 t4。
于是链路往返延迟和单程延迟为:
round_trip = (t4 - t1) - (t3 - t2)
link_delay = round_trip / 2
这个计算假设链路上下行对称。对于全双工以太网,这个假设通常成立。测得的 link_delay 会被用于 Sync/Follow_Up 的偏差修正,也会被逐跳累加,形成从 GM 到当前节点的总路径延迟。
四、案例与场景:一条 TSN 链路的时间同步过程
假设一条工业产线中有三台设备:一台带 GPS 的 TSN 交换机 A、一台普通 TSN 交换机 B、一台伺服驱动器 C。上电后:
- A、B、C 各自发送 Announce,携带 priority1、clockClass 等属性;
- BMCA 比较后,A 因 priority1 最小且 clockClass 最优,成为 GM;
- A 与 B 之间、B 与 C 之间分别执行 Pdelay 三消息测量,得到 link_delay_AB 和 link_delay_BC;
- A 周期发送 Sync,并紧跟 Follow_Up,携带精确发送时间 t1;
- B 收到后,用 link_delay_AB 修正本地时间,再作为 Master 向 C 转发 Sync/Follow_Up;
- C 收到后,用 link_delay_BC 修正,最终与 A 保持亚微秒级同步。
如果 A 失效,B 和 C 会重新运行 BMCA。若 B 的 clockClass 优于 C,则 B 成为新 GM,网络在数百毫秒到数秒内恢复同步。这个过程不需要人工干预。
五、常见误区与复盘
| 误区 | 正确理解 |
|---|---|
| BMCA 只比 priority1 | priority1 只是第一级,后面还要比 clockClass、clockAccuracy、variance、priority2、clockIdentity。 |
| Sync 消息自带精确发送时间 | 两步模式下,精确发送时间由 Follow_Up 携带,Sync 只负责触发时间戳记录。 |
| Pdelay 是端到端测量 | 要求逐跳测量,每个链路独立计算 link_delay,再逐跳累加。 |
| 链路延迟可以忽略 | 在 1 Gbps 链路上,1 米线缆约 5 ns 延迟;多跳累积后可能达到微秒级,必须修正。 |
工程建议:调试 时,优先确认三件事:Announce 是否正常收发、BMCA 是否收敛到同一 GM、Pdelay 三消息是否完整。很多“同步不上”的问题,根源不是算法,而是端口状态、组播地址或硬件时间戳未使能。
注意:如果网络中同时存在多个 GM 且 BMCA 未收敛,会出现“主时钟震荡”,导致从时钟频繁切换、时间跳变。此时应检查 priority1 配置是否冲突,以及 Announce 消息是否被过滤。
总结来说, 的同步能力来自三个机制的配合:BMCA 决定“谁发时间”,Sync/Follow_Up 决定“时间怎么发”,Pdelay 三消息决定“延迟怎么扣”。三者缺一不可,共同构成 TSN 工业网络时间同步的协议基础。