gPTP介绍

  802.1AS通用精确时间协议gPTP(Generalized Precision Time Protocol),将为汽车、工业自动化控制等领域实现精确时间的测量。

  1. 基本构成

  在802.1AS中,时间同步是按照“域”(domain)划分的,包含多个PTP节点。在这些PTP节点中,有且仅有一个全局主节点(GrandMaster PTP Instance),其负责提供时钟信息给所有其他从节点。

  PTP节点又分为两类:PTP End Instance(PTP端节点)和PTP Relay Instance(PTP交换节点)。其中:

  • PTP End Instance或者作为GrandMaster,或者接收来自GrandMaster的时间同步信息;
  • PTP Relay Instance从某一接口接收时间同步信息,修正时间同步信息后,转发到其他接口。

  2. GrandMaster的选取

  GrandMaster的选取除了手动设置以外,可以通过比较每个PTP节点的属性,自动选出GrandMaster,这一策略就是BMCA(Best Master Clock Algorithm)。在BMCA建立的过程中,首先各个PTP节点将自身时钟属性(比如时钟源)、接口信息放入Announce报文中,并发送给gPTP域内所有节点,之后PTP节点比较自身与接收到的时钟属性,优先级高的PTP节点自动成为GrandMaster。

  3. 802.1AS测量过程

  为了实现从节点本地时钟与GrandMaster时钟同步,需要考虑三个因素:

  • 时钟频率误差;
  • 链路延迟;
  • 驻留时间。

  1)时钟频率误差

  802.1AS为了消除这种误差,采用累积计算相邻节点时钟频率的比值(NeighborRateRatio)的方式,实现将本地时基(Local Clock Timebase)换算成(GrandMaster Timebase)。

  双步模式,Follow Up报文传输前面SYNC报文的物理层发送时间戳。

  于是,Slave节点能够得到4个时间戳:T1-T4。于是可以计算出两个时钟的频率比。

  neighborRateRatio= (T3-T1)/(T4-T2)

 

  2)链路延迟测量

  802.1AS中测量链路延迟采用P2P测量机制(Peer-to-Peer delay Mechanism),假设链路往返延迟一致(链路具有对称性),通过测定四个精确时间戳,计算得出一段链路上的链路延迟(MeanLinkDelay)。

  

  

  • 对于一段链路,存在两个PTP节点,其中Peer delay initiator(发起者)会主动发出Pdelay_Req报文,接收Pdelay_Req报文的节点称为Peer delay responder(响应者);
  • 在initiator端会记录Pdelay_Req报文实际的发出时间戳t1,在responder端会记录报文实际的接收时间戳t2;
  • responder在接收到Pdelay_Req后会回复Pdelay_Resp报文给initiator,这个报文会包含t2这一信息;
  • 在responder端会记录Pdelay_Resp发送时间戳t3,在initiator端会记录接收时间戳t4;
  • responder端会在Pdelay_Resp之后在发送一个Pdelay_Resp_Follow_Up报文给initiator,以包含信息t3;
  • 至此,在initiator端有t1、t2、t3、t4四个精确时间戳,通过计算t2-t1和t4-t3就能得到这一链路两个方向(i->r、r->i)传播的用时(tir、tri),再对其求均值,就能得到这一链路延迟(MeanLinkDelay);
  • 对于进行P2P测量的双方节点会交替作为initiator,从而都能获得该链路延迟(MeanLinkDelay)。

  使用P2P测量机制,就能得到gPTP域中每一段链路延迟,在实际进行同步过程中,PTP Relay Instance会将从GrandMaster开始的链路延迟累积记录在Follow_Up报文中的correctionField中,再转发出去;同时,对非对称误差的修正(通过测定后,手动设置参数修正),也放在correctionField中。

  于是,initiator端可以得到四个时间:t1,t2,t3,t4。单向链路延迟计算公示如下(假设slave为initiator端):

  

 

  3)驻留时间

  驻留时间由PTP Relay Instance引入,指的是报文停留在Relay中的时间。想要消除其带来的影响相对简单,就是在转发出的Follow_Up报文中的correctionField中记录这一驻留时间,其他PTP节点收到该报文,就能计算得出正确的时间偏移。

  4. 同步原理

 

  在slave中,我们已经有Pdelay time,T1,T2时间,则master的T6时间应该是slave节点的T5,两者之间可以通过以下公示表示:

 

  如果加上relay节点(交换机)的驻留时间。

  则需要加上两个Pdelay time,以及Bridge上的residence time。

  5. 包类型

  gPTP包类型:Sync,Follow_up,Pdelay_Req,Pdelay_Resp,Pdelay_Resp_Follow_Up, Announce,Signaling。 如下图所示。

  其中前5个类型的包,在上述过程都已经涉及到,在此不再赘述。下面介绍一下Announce和Signaling。

  Announce:gPTP的主时钟选择机制是“最佳主时钟算法(BMCA)”。选择算法启动时,所有可以成为主时钟的端点都会参与竞争。要启动BMCA算法,所有端点都通过发送Announce报文来宣告自己的能力。各个端点比较自己与其他端点的相关字段值,胜出者作为主时钟端点。但车辆是一个封闭的网络,不会出现节点总变化的情况,所以车载应用中,主时钟往往都是固定的,比如网关。

  Signaling: 在实现节点同步之前,各个PTP节点通过Signaling报文协商计算NeighborRateRatio的间隔、计算MeanLinkDelay的间隔等信息; 主要传送非时间关键流。

  6. 模拟实现

  从Inet4版本后开始支持TSN功能。通过Omnet和Inet组件模拟。

  1)模拟方法

  实验环境:Omnetpp 6.0.2 、Inet4.4。

  文件位置:/inet/showcases/tsn/timesynchronization/gptp/omnetpp.ini

  实验拓扑中有一个tsnClock、一个tsnSwitch和两个tsnDevice,具体如下:

  2)模拟结果

  通过模拟,可以观察到包的发送情况。具体如下:

   可以看到:gPTP协议通过节点相互发送GptpPdelayReq、GptpPdelayResp、GptpPdelayResFollowUp确认各个链路的Pdelay值。然后再周期性发送GptpSync和GptpFollowUp进行时间同步。大家还可以深入到包内容去看一下correctionField值,在此不再延伸。

  最终得到时钟同步效果如下图所示:

  

  7.总结

  本文介绍了gPTP的原理、包类型,并且通过模拟观察到同步过程。

  8.参考资料

  [1]"Precision Time Protocol (gPTP) Explained in 5 minutes "   url: https://youtu.be/3vsO4Ndv-9M?si=Fxuamm7r1mnBquk7

  [2] “车载以太网时间同步之EthTsync”   url:https://zhuanlan.zhihu.com/p/627420984

  [3] “时间同步—TSN(Time Sensitive Network-时间敏感网络)协议802.1AS介绍”  url:https://zhuanlan.zhihu.com/p/336741458

  [4] "using gPTP"  url: https://inet.omnetpp.org/docs/showcases/tsn/timesynchronization/gptp/doc/index.html  

posted @ 2024-03-30 11:04  hello_oldman  阅读(688)  评论(0编辑  收藏  举报