gPTP 学习笔记

1. 背景

PTP协议

网络测控系统精确时钟同步协议PTP(Precision Time Protocol)是一种对标准以太网终端设备进行时间和频率同步的协议,也称为IEEE 1588,简称为1588。
    1588分为1588v1和1588v2两个版本,1588v1只能达到亚毫秒级的时间同步精度,而1588v2可以达到亚微秒级同步精度。1588v2被定义为时间同步的协议,本来只是用于设备之间的高精度时间同步,随着技术的发展,1588v2也具备频率同步的功能。现在1588v1基本已被1588v2取代,以下非特殊说明,PTP即表示1588v2。

gPTP协议

gPTP主要是IEEE TSN(时间敏感网络)工作组定义的规范族中的一个组成部分;由于PTPv2定义了太多的特性选项,多个设备之间的互操作性变的较差;gPTP对PTPv2进行了简化,固定了特性选项的选择,相当于PTPv2的一个特定profile。

gPTP AUTOSAR 协议

gPTP AUTOSAR时间同步协议是基于IEEE 802.1AS规范中定义的gPTP标准协议发展出来的一套协议,该模块的时间同步原理与gPTP协议一致,只不过在协议内容方面,AUTOSAR规范进行了一些扩展,丰富了gPTP时间同步的内容。

协议差别

类别PTP(IEEE1588-2008)gPTP(IEEE802.1AS-2011)
传输延时测量方式支持P2P方式和E2E方式仅支持P2P方式
时间戳采样方式支持MAC层,也支持Lay3,Lay4层 的时间戳仅支持MAC层时间戳
时钟同步类型既支持单步模式,也支持双步模式仅支持双步模式
时钟类型存在多种类型的时钟:原始时钟,边界时钟,E2E透传时钟,P2P透传时钟存在两种时钟:端节点节点时钟,桥接节点时钟
桥接节点兼容性可以适应TSN网络,也适用于非TSN网络仅适用于TSN网络

说明:

  • P2P方式:透传节点(桥接设备)需要记录驻留时间,并加入到报文中;
  • E2E方式:只需要端到端的时间差,误差比较大,但是对中间的透传的设备要求低;
  • 时间戳采样方式:如果是MAC采样,那么确定性比较高,误差比较少,如果在IP层或者UDP层采样时间戳,由于受到操作系统调度的影响,精度不高;
  • 时钟同步类型:单步模式对MAC的要求比较,双步模式需要增加follow up消息,但是对MAC层的要求比较低,便于网络扩展与应用;

gPTP 在AUTOSAR中针对车载网络的特性做了进一步的限制和约束,以便能够更加灵活应用,降低整个系统的集成难度。

AUTOSAR规范中的gPTP主要约束条件如下:

  • 不支持BMCA算法, 车载网络为静态网络,不需要计算Master节点;
  • 不支持Anounce与Signaling报文的发送与接收;
  • Pdelay_req不作为开启发送SYNC报文的前置条件;
  • AUTOSAR允许使用带有VLAN信息的报文,前提是网关支持转发预留的多播地址:01:80:C2:00:00:0F
  • 报文中的CRC保护措施不能作为信息安全的内容;

2. PTP协议介绍

IEEE1588 V1 原理
在这里插入图片描述
四种报文
(IEEE 1588 V2 扩展了消息类型)
(1)sync 同步报文;
(2)Follow_up 跟随报文;
(3)Delay_req 延迟请求报文;
(4)Delay_resp 延迟请求响应报文;

延迟响应同步机制的报文收发流程:

  1. 主时钟周期性的发出 sync 报文,并记录下 sync 报文离开主时钟的精确发送时间 t1;(此处 sync 报文是周期性发出,可以携带或者不携带发送时间信息,因为就算携带也只能是预估发送时间戳 originTimeStamp)

  2. 主时钟将精确发送时间 t1 封装到 Follow_up 报文中,发送给从时钟;(由于 sync 报文不可能携带精确的报文离开时间,所以我们在之后的 Follow_up 报文中,将 sync 报文精确的发送时间戳t1封装起来,发给从时钟)

  3. 从时钟记录 sync 报文到达从时钟的精确时到达时间t2;

  4. 从时钟发出 delay_req 报文并且记录下精确发送时间t3;

  5. 主时钟记录下 delay_req 报文到达主时钟的精确到达时间t4;

  6. 主时钟发出携带精确时间戳信息t4的 delay_resp 报文给从时钟;

时钟偏差 & 网络延时

offset:时钟间偏差(主从时钟之间存在时间偏差,偏离值就是 offset)

delay:网络延时(报文在网络中传输带来的延时)

从时钟可以通过 t1,t2,t3,t4 四个精确时间戳信息,得到主从时钟偏差offset和传输延时delay:
在这里插入图片描述
从时钟得到 offset 和 delay 之后就可以通过修正本地时钟进行时间同步。

消息分类

messageIdMessage nameMessage内容
0x0SYNCEvent message该报文由 Master 时钟发送,带有 Master 的时间信息。
0x1DELAY_REQEvent messageelay_Req 报文的内容格式与 Sync 报文完全相同,Delay_Req 报文由从时钟发出
0x2PATH_DELAY_REQEvent message该报文仅在 P2P TC 时钟模式下才产生,由 P2P 时钟作为“延迟请求者”发出。
0x3PATH_DELAY_RESPEvent message该报文仅在 P2P TC 时钟模式下才产生,由 P2P 时钟作为“延迟响应者”发出。
0x8FOLLOW_UPGeneral message只有在主时钟是 Two_Step 时钟模式时,才会发送 Follow_UP 报文,其内容格式与 Sync 和 Delay_Req 报文相同。
0x9DELAY_RESPGeneral message当 Master 收到 Slave 发出的 Delay_Req 报文时,会响应 Delay_Resq 报文。
0xAPATH_DELAY_FOLLOW_UPGeneral message只有在 P2P 时钟模式是 Two_Step 时才会产生 Pdelay_Resp_Follow_Up 报文。
0xBANNOUNCEGeneral message该报文用来描述时间源能力, 比如精度等,用于BCMA算法。
0xCSIGNALINGGeneral message该报文用于PTP时钟之间进行交互,如协商消息的周期等。
0xDMANAGEMENTGeneral message该报文用来查询和设置PTP时钟的时钟数据。

IEEE1588 V2 原理
IEEE1588V2在IEEE1588V1版本上做了改进和扩展。主要包括:
1.新增点到点路径延时测量的独立消息模式。(在gPTP中描述)
在 PTPv1 中,平均路径延迟测量时通过 Sync 帧与 Delay_Req 帧配合使用的,但是在 PTPv2 中却不需要 Sync 帧的参与,仅通过 PDelay_Req 数据帧系列来进行测量。这是一个独立的延迟测量过程,不依赖 Sync 帧和同步体系建立的参与,使得测量精度有所提高,并且可以经过多次测量求得平均值得到更为准确的路径延迟。
另一方面,如果网络中的同步体系发生改变,这时不需要重新计算该节点间的路径延迟,直接使用之前已测得的延迟数据,大大增强了协议执行的效率,使得协议更为方便灵活。在PTPv2 中,利用 PDelay_req 数据帧系列已成为主要的测量路径延迟方法。
2.新增透明时钟模型
在 PTPv1 中,网络中间节点均采用边界时钟模型。与网络中唯一的主时钟,即一个普通时钟连接的边界时钟,其上唯一的从端口接收主节点发送的同步数据帧,与主时钟实现同步,其余的主端口和与之相连的其他边界时钟发送同步数据帧,最后同步到网络边缘的普通时钟,这样便实现了整个网络的时间同步。这种方法虽然可行,但是由于这种方式是逐级同步,所以距离主时钟越远的节点,同步精度越低。
当网络中的一些节点不需要进行时钟同步或者不具备同步功能时,便可采用透明时钟模型。透明时钟不像 BC/OC 模式那样,需要每个节点都与主时钟进行同步,它的端口只对协议数据帧进行转发,并将计算出的数据帧滞留时间添加在校正域中。这种方式将 PTP 数据帧的处理变得更为简单,降低了网络中 PTP 协议的实施难度,同时提高了各从节点的同步精度。 透明时钟有模型两种:端对端透明时钟,和点对点透明时钟。
端对端(E2E)透明时钟
E2E 透明时钟对网络中普通数据帧不做任何处理,仅进行转达让其正常通过。但是对于 PTP 事件数据帧,则将他们从接收端口到发送端口间的驻留延迟时间累加到数据帧中的修正域,用以弥补 PTP 数据帧在经过其自身所带来的延迟误差。
点对点(P2P)透明时钟
点对点(P2P)透明时钟只转发特定的 PTP 报文,包括 Sync 帧、Follo_Up 帧和Announce 帧等。并且会采用 Pdelay_Req 数据帧系列计算每个端口与所连接的端口间的路径延迟时间,再与端口间延迟时间合并添加到时间修正域,来补偿数据帧从源端口到点对点透明时钟出端口的时间延迟。
3.增加单步时钟模型
单步时钟模型解决了 Follow_Up 帧与 Sync 帧匹配问题。PTP 协议基本的同步过程采用双步模式,即主时钟节点发送 Sync 帧,和带有 Sync 帧发送时间的Follow_Up帧。这种方式虽然能提高 Sync 帧时间戳标记的精度,提高同步效果,但是在网络负载较大的情况下,数据帧很有可能发生丢失或者阻塞,造成两种数据帧的匹配出现差错。
在 PTP 数据帧中设置一个标志,来使用单步模式,将 Sync 帧的发送时间与数据帧中的时间标签的差值作为传输延迟,并将其累加到修正域中。这样主时钟便通过单独的 Sync 帧而不需要 Follow_Up 进行时间的同步校准工作。 单步模式可以减少网络流量,提高网络负载较大时同步的可靠性。单步模式需要额外的辅助硬件,来帮助计算时间修正值并将其累加到校正域中,这对网络的实时性有比较高的要求。

3. gPTP协议介绍

gPTP主体思想

1. 体系结构
AVB域内的每一个节点都是一个时钟,由以下两个角色组成:

  1. 主时钟(Grandmaster Clock),只有一个主时钟,它是标准时间的来源;
  2. 从时钟(Slave Clock),多个从时钟,它们必须把自己的时间和主时钟调整一致。

下图是一个简单的gPTP网络拓扑图:
在这里插入图片描述
它包含两种类型的节点:
**Time-aware end station:**这类设备可以是系统内的主时钟(时间源,Grandmaster),也可以是从时钟(被校时的设备)。图中标注了802.1AS endpoint的就是这种设备。
**Time-aware Bridge:**它可以是主时钟,也可以仅仅是个中转设备(类似传统的交换机),连接网络内的其他设备。作为中转设备,它需要接收主时钟的时间信息并将该信息转发出去(在转发的时候,需要矫正链路传输时延和驻留时间)。图中标注了802.1AS bridge的就是这种设备。
从上图还可以看到,时间信息是从主时钟出发,经由各个Bridge分发到所有的从节点。

2. 主时钟选取
gPTP中的主时钟,既可以默认指定,也可以通过BMCA(Best Master Clock Algorithm) 动态选取。
不过在车载或其他一些网络拓扑固定的应用场景中,一般不允许使用BMCA动态选取主时钟,而是默认指定。

3. 绝对时间同步
下图包含一个主时钟(Master time)和一个从时钟(Slave time),二者时间不同步。现在要把从时钟的时间校准到主时钟的时间,其中t1、t4为主时钟对应的时间,t2、t3为从时钟对应的时间。
在这里插入图片描述
主要流程如下:

  1. 主时钟在t1时刻发送Sync命令,从时钟在t2时刻收到同步指令。这时候从时钟并不知道主时钟是在什么时候发出这个Sync命令的,但是知道自己是在t2时刻收到该命令的。

  2. 主时钟发送一个Follow_Up命令,该命令中携带t1的值。从时钟收到后,知道上面的Sync指令是在t1时刻发出的。此时从时钟拥有t1、t2两个值。

  3. 从时钟在t3时刻发送一个Delay_Req命令,主时钟在t4时刻收到该命令。此时从时钟知道t1、t2、t3三个值。

  4. 主时钟接着发送一个Delay_Resp响应从时钟的Delay_Req,该命令中携带t4的值。从时钟收到后,知道主时钟是在t4时刻收到的Delay_Req命令的。此时从时钟知道t1、t2、t3、t4四个值。

  5. 我们假设路径传输延时是对称的,即去程的传输延时和回程的传输延时相等。从时钟可以根据下面的公式计算路径传输延时(path_delay),以及自己与主时钟的偏差(clock_offset):

    t2 – t1 = path_delay + clock_offset t4 – t3 = path_delay - clock_offset

    由此可以算出:
    path_delay = (t4 – t3 + t2 – t1) / 2
    clock_offset = (t3 – t4 + t2 – t1) / 2

  6. 现在从时钟知道了自己与主时钟的时差clock_offset,就可以调整自己的时间了。另外,从时钟还知道自己与主时钟的路径传输延时path_delay,该值对于switch意义重大,因为在gPTP的P2P校时方式中,switch需要转发主时钟的校时信号,在转发的时候,需要将该值放在补偿信息中(后面章节会详细介绍)。

从上面的流程可以看到,传输延时path_delay的精度/稳定性会影响校时精度。而传输延时又可以划分为:各段链路传输时间总和 + 中间节点转发导致的驻留时间(缓存时间)

4. 相对时间同步
我们首先看下时间度量的原理:时间是基于晶振的震荡周期进行度量的,如果一个晶振的震荡频率是10Hz,也就是说每100ms震荡一次,震荡10次代表过了1秒,震荡600次代表经过了1分钟。

但是晶振并非绝对稳定的,受温度等因素影响,震荡频率可能发生变化,震荡周期也就变得不准了。而晶振的使用者(时钟)并不知道这些变化,只是傻傻的计数,震荡10次为1s,震荡600次为1分钟。如果现实世界的1s内该晶振少震荡了一次(某两次震荡之间的间隔变成了200ms),那么该时钟的1s就对应现实世界中的1.1s;如果某两次震荡的时间间隔变成了50ms(多震荡了一次),那么该时钟的1s就对应现实世界中的0.95s。

相对时间同步,要求从时钟的频率和主时钟一致。我们可以通过下面的方式估算晶振的变化,并动态调整。 如下图所示,分别在t1、tn时刻对主时钟和从时钟进行采样,采样值分别记为t1_master、tn_master、t1_slave、tn_slave,可以得到下面的比例:

ratio = (tn_slave – t1_slave) / (tn_master – t1_master)

理想情况下,ratio的值应该是1,如果大于1,说明从时钟走的快了,如果小于1,说明走的慢了。从时钟可以根据该值调整自己的频率。
在这里插入图片描述

4.影响校时精度的因素

1. 传输时延不对称

前面提到的校时流程中,我们假设传输时延是对称的,即报文从A传到B和从B传到A耗时相同,实际情况中,路径有可能是不对称的,如下图所示,tms和tsm有可能是不相等的。这会导致校时误差。


gPTP对策:

  1. 要求网络内的节点都是时间敏感的
  2. 传输延时分段测量(P2P方式)减少平均误差
  3. 中间转发节点可以计算报文的驻留时间,保证校时信号传输时间的准确性
  4. 如果已知链路不对称,可以将该值写在配置文件中,对于endpoint,在校时的时候会把该偏差考虑进去;对于bridge设备,在转发的时候,会在PTP报文的矫正域中(correctionField)把对应的差值补偿过来。

2. 驻留时间

对于Bridge设备,从接收报文到转发报文所消耗的时间(中间可能经过缓存),称为驻留时间。该值会具有一定的随机性,从而影响校时精度。
gPTP对策:

  1. Bridge设备必须具有测量驻留时间的能力,在转发报文的时候,需要将驻留时间累加在PTP报文的矫正域中(correctionField)。

3. 时间戳采样点

前面提到的t1、t2、t3、t4等采样时刻的值,应该在哪里产生呢?
协议栈缓冲带来的延时是不固定的
操作系统调度导致的随机延时
为了达到高精度的时间同步,必须消除软件带来的不确定因素,这就要求必须把时间采集点放在最靠近传输介质的地方。
gPTP对策:

  1. 比较合适的采集点就是MAC层:在发送方,当报文离开MAC层进入PHY层的时候记录当前时刻;在接收方,当报文离开PHY层刚到达MAC层的时候记录当前时刻。这样可以消除协议栈带来的不确定性。
  2. MAC时间戳可以通过软件的方式打,也可以通过硬件的方式打,硬件方式会更精确(可以消除系统调度带来的不确定性)。gPTP中要求使用硬件方式,也就是常说的硬件时间戳。

4. 时钟频率

晶振频率越高,误差越小,校时越精确。

  1. gPTP要求晶振频率不小于25MHz,误差不大于100PPM(每天8.64s误差)。
  2. gPTP的要求并不算高,主要是考虑到成本因素,要求太高不利于推广。

5. 传输路径延时测量方式

IEEE 1588支持两种路径延时测量方式:End-to-End(E2E) 和 Peer-to-Peer(P2P),二者不能在同一个网络中共存。
在End-to-End机制中,强调的是两个支持PTP的端点(一个master port,一个slave port)之间的延时,这两个端点可能是直接相连的,也可能中间穿插了普通的交换机、时间敏感的透明时钟(TC),在通信双方看来,信息都是在master port 和slave port之间传输,所以最终slave测量到的传输延时是从master到slave的端到端延时。
在Peer-to-Peer机制中,要求网络内所有节点必须支持P2P,所以它强调的是相邻节点间的通信,最终测量的是相邻节点间的传输延时。

二者主要区别如下图所示:

  1. P2P测量的是相邻节点间的延时,路径测量报文不会跨节点传输,有利于网络扩展;E2E测量的是master port和slave port之间的,中间节点(如TC、普通switch)需要转发延时测量报文,网络规模较大时,报文可能泛滥,master节点压力较大。
  2. master节点变更时,E2E需要重新测量到新master节点的路径延时,P2P只需关心相邻节点。
  3. E2E方式允许网络中有普通的switch(透传PTP报文即可,由于驻留时间随机,会影响测量精度),而P2P要求网络中的switch必须全部支持P2P。
  4. E2E机制中,校时报文和路径测量报文是耦合在一起的(典型的End-to-End的流程,它使用Sync、Follow_Up、Delay_Req、Delay_Resp四个消息,同时计算时钟偏差和路径测量);P2P机制中有独立的报文负责路径测量,把校时和路径测量解耦了。
    在这里插入图片描述
    gPTP要求使用P2P方式,并且要求网络中所有设备都支持PTP协议,路径传输延时测量只在相邻节点间进行。它使用Pdelay_Req、Pdelay_Resp、Pdelay_Resp_Follow_Up消息来测量路径传输延时。
    注意Peer-to-Peer中没有使用Sync报文,而是专门为路径测量新建了几个报文,降低了复杂度。
    在这里插入图片描述
    具体流程如下:
  5. 节点A在t1时刻发送路径测量请求命令Pdelay_Req,并记录下时刻t1
  6. 节点B在t2时刻收到Pdelay_Req
  7. 节点B将t2放在报文Pdelay_Resp中,并在t3时刻将该报文发给节点A
  8. 节点B将t3放在报文Pdelay_Resp_Follow_Up中发给节点A
  9. 节点A在t4时刻收到Pdelay_Resp_Follow_Up。至此,节点A拥有t1、t2、t3、t4四个参数,平均路径传输延时可以通过下面的公式计算出来:
    path_delay = (t4 – t3 + t2 – t1) / 2

在Peer-to-Peer机制中,不仅节点A会主动发起测量请求,节点B也会主动发起测量请求,也就是说,每个节点都知道和自己紧挨着的节点的传输延时(Peer-to-Peer的名字也是这样来的)。不过有的场景下(比如固定主时钟的情况),可能会禁止master port进行路径测量。

6. 时钟类型

PTP时钟可以分为两类:One-Step Clock和Two-Step Clock。

还记得下图Follow_Up消息的作用吗? 它只是为了把t1的值传给slave节点。这种时钟就是Two-Step Clock, 它的事件报文(Sync等)中不携带时间信息,需要用另外一条普通报文传输时间信息(用来描述上一条事件报文是在什么时候发送的)。
在这里插入图片描述
如果t1能在Sync报文本身中传递给slave节点,就节省了一条报文,如下图所示,这是One-step clock的做法。这种时钟对硬件要求比Two-step clocks高,成本也比较高。
在这里插入图片描述
理论上来讲,同一个网络内可以存在两种类型的时钟,并且时钟类型不会影响校时精度。
gPTP要求使用Two-step时钟,因为这种机制对硬件要求较低,方便后续扩展,以及在现有的网络中普及。

5.gPTP校时过程

1. 绝对时钟同步

以下图为例介绍gPTP时间同步过程,为了表述方便,这里做两点假设:

  • 假设下面的三个设备都是One-Step的Clock,即Sync报文发出后,不需要额外的Follow_Up报文告知Sync报文是在哪个时刻发送的。(实际802.1AS要求时钟必须是Two-Step的)
  • 假设各设备已通过前面介绍的Peer-to-Peer机制测量出路径传输延时path_delay1、path_delay2

在这里插入图片描述
校时流程如下:

  1. Grandmaster时钟在t1时刻发送时间同步报文Sync到Bridge,报文Sync的originTimestamp中填充时间信息t1,矫正域correction填充ns的小数部分(Sync报文的时间戳部分只能表示秒和纳秒,不足1纳秒的只能放在矫正域)。

  2. Bridge收到Sync报文后,不仅要矫正自己的时钟,还要把Sync报文转发出去

  3. Bridge根据Sync报文调整自己的时钟:
    Bridge在t2时刻收到Sync报文,并从中解析出Grandmaster是在t1时刻发送该报文的,以及Grandmaster填充的矫正值correction。在t2时刻,Grandmaster的时钟显示的值应该是:
    t1 + correction + path_delay1
    由此可以计算出Bridge的时钟偏差,并调整自己的时钟:
    clock_offset = t1 + correction + path_delay1 – t2

  4. Bridge转发Sync报文:
    如下图所示,收到Sync报文后,Bridge将自己与上级节点的路径延时(path_delay1)和Sync报文在自己这里的驻留时间(rEsidence_time)累加到Sync报文的矫正域,并转发出去。此时矫正域correction值如下: correction = old_value_of_ correction + path_delay1 + residence_time
    注意:Bridge不修改Sync报文的originTimestamp字段(该字段为Grandmaster发出Sync报文的时间)。
    在这里插入图片描述

  5. End-Point在t4时刻收到Sync报文,并从中解析出Grandmaster是在t1时刻发送该报文的,以及Bridge矫正后的correction。在t4时刻,Grandmaster的时钟显示的值应该是:
    t1 + correction + path_delay2
    由此可以计算出End-Point和Grandmaster的时钟偏差,并调整自己的时钟:
    clock_offset = t1 + correction + path_delay2 – t4

由上面的校时流程可以看出,整个校时过程像水面的波纹一样从Grandmaster开始向外一层层的扩散,每个节点只关注自己和上级节点的传输延时,Bridge负责将中间路径的传输延时和缓存时间逐段累加到矫正域。

2. 相对时钟同步

如下图所示,主时钟在时刻master_t1发出校时信号Sync_1,从时钟接收到该信号的时候,记录两个值:

**slave_t1:**接收到Sync_1信号时,slave本地时钟的值,这个值是当前时刻在slave时间坐标系下的采样
**slave_t1’:**接收到Sync_1信号时master时间坐标系的值,该值可以用下面的公式算出:
master_t1 + 传输时延 + 矫正域
其中,master_t1和矫正域的值在Sync报文中携带,传输延时可以通过前面的方法测量。
在这里插入图片描述
根据前面介绍的相对时钟同步原理,可以通过下面的公式判断自己的频率和主时钟是否保持一致:
ratio = (slave_tn – slave_t1) / (slave_tn’ – slave_t1’)
理想情况下,ratio的值应该是1,如果大于1,说明从时钟走的快了,如果小于1,说明走的慢了。从时钟可以根据该值调整自己的频率。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值