当前位置: 首页 > news >正文

802.1AS-2011_Gptp协议栈

Gptp协议栈理解:

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

总的来说,GPTP的功能可以概括为提供精确的时间同步服务,确保网络中各设备的时间一致性,以满足特定应用的需求。

Gptp协议栈是二层协议,不能连接到路由器。在OSI网络模型里,L2是MAC层,L3是IP层,我们通常见到的如交换机是L2层的转发,路由器是L3层的转发。gPTP协议是基于L2层的传播,那么就决定了一个特性,只能在局域网里传播,不能通过路由器往WAN网传输,具体的话,对于路由器来说,硬件地址会有多个,在网络传送的过程中,硬件地址会发生变化。

1. 主时钟选取

gPTP中的主时钟,既可以默认指定,也可以通过BMCA(Best Master Clock Algorithm) 动态选取。 在AutoSAR官方文档中,一般不允许使用BMCA动态选取主时钟,而是默认指定。

2.两步时钟和一步时钟:

在这里插入图片描述

对于两步时钟,标志位oneStepTXOper为FALSE,时间戳和纠正域等信息会在follow_up报文中携带并发送给slave

然后对于一步时钟,标志位oneStepTXOper为TRUE,所有信息会由Sync报文携带并发给slave。

两步法相对于一步法而言:在发送端,两步法不需要在消息离开时将时间戳写入消息,这可以使两步法的主时钟在硬件方面要求会低一点,可以节约成本。同时在两步时钟模式中,时间信息的产生分两步完成,这样可以兼容一些不支持给事件报文打时间戳的设备。

2.gptp协议时间同步过程:

测量时钟偏差,完成频率同步:

在实际的gPTP通信中,master会不停地发送Sync和Follow-up,slave能够测量出自己收到Sync报文的时间,即上图中的T2和T4(这个时间是以slave的本地时钟为基准的)。在每个sync报文之后,master都会发送一个follow-up报文,用来告诉slave自己发送上一条sync报文时的时间戳(以master的本地时钟为基准)。没有follow-up报文的话,slave无法Sync报文的实际发送时间,即上图中的T1和T3。有了T1、T3和T2、T4,slave就能够计算出自己的时钟频率与master之间的偏差,计算式如下图所示:

​ R = 在这里插入图片描述

在这里插入图片描述

延迟时间测量:

1.首先slave发送PDelay_Req报文,请求测量延迟时间;

2.PDelay_Req报文离开物理层时,slave利用本地时钟获得T1时间戳;

3.PDelay_Req报文到达应答方物理层,master利用本地时钟获得T2时间戳;

4.master生成一个PDelay_Resp报文并发送,将T2时间戳带给slave;

5.slave利用本地时钟可以捕获收到PDelay_Resp时的时间戳T4

6.然后master会发送PDelay_Resp_Followup报文将T3带给slave;

这样slave就知道T1,T2,T3,T4这四个时间戳了,然后利用如下算式计算延迟时间:

​ delay = 在这里插入图片描述

其中R是在上面计算出的slave与master之间时钟频率的偏差。

在这里插入图片描述

根据计算出延迟时间和频率差异之后,slave就可以利用master不断发送的sync和follow_up报文将自己的时钟与master进行同步了。

同步方式如右图所示:

计算公式如下:

Ta = T1 + delay + (Tb-T2) * R

在上述计算式中,Tb是slave在某时刻的本地时间戳,Ta是该时刻master上的本地时间戳。同步的目的,就是根据Tb可以推算出Ta的值。在这个计算式中,slave通过sync和follow_up报文获得T1和T2,delay和R在之前的延迟时间和频率差异计算中已经获得。所以,slave能够根据本地时间戳Tb计算出master上的时间戳Ta,时间同步就实现了。

在这里插入图片描述

3.Gptp作为bridge原理:

gPTP规定一个局域网里只能有一个master,其他全部是slave,同时只有endpoint能参与作为时钟节点,bridge不能作为时钟节点,只能作为透明时钟。

gPTP桥节点不会去参与到grandmaster的节点竞选, 只复制消息的转发,同时由于bridge桥节点作为中间交换节点,从一个包ingress到这个包egress是有时间差的。这个时间差叫做驻留时间(residence time).

在这里插入图片描述

Follow-up帧里有一个correctionField字段,这个correctionField是A系统到B系统的传播延时+B系统内的驻留延时构成。C系统只能知道自己和B系统之间的传播延时,不能知道B系统和A系统之间的传播延时,所以A系统和B系统之间的传播延时必须包含在correctionField中。

有了correctionFiled的帮助,C系统就可以知道B和A系统之间的准确的时间差了。

4.时钟矫正流程:

假设下面的三个设备都是One-Step的Clock,即Sync报文发出后,不需要额外的Follow_Up报文告知Sync报文是在哪个时刻发送的

  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

即每个节点只关注自己和上级节点的传输延时,Bridge负责将中间路径的传输延时和缓存时间逐段累加到矫正域。

5.时间同步报文解析

gPTP定义有两类报文,事件类型报文(包括Sync、Pdelay_Req、Pdelay_Resp三条)和一般类型报文(包括Follow_UP、Pdelay_Resp_Follow_UP二条)。gPTP定义设备工作在网络七层模型中的第二层数据链路层的MAC(Media Acess Control,媒介访问控制)子层。

当设备MAC层接收或发送事件类型报文时,会触发对硬件计数器进行采样,从而获得时钟振荡周期计数值,结合时钟振荡频率及基准时间,可获得此时的时间戳。而一般类型报文仅用来携带信息,不会触发内部硬件计数器的采样操作。

Ethernet Header:

Destination MAC 8bytes 固定值01:80:c2:00:00:0e,链路层广播地址

Source MAC 8bytes 具体设备地址

Type 2bytes 0x88f7为gptp

gPTP报文由3部分组成:

Header (对所有gPTP都一样)
Body (取决于gPTP 报文类型)
TLV(type length value)

Header详情:

在这里插入图片描述

body:取决于gPTP 报文类型messageID

报文头中的messageID标识了gPTP报文的类型,类型取值范围如下图所示:

messageIDValue
Sync0x0
Pdelay_Req0x2
Pdalay_Resp0x3
Follow_up0x8
Pdelay_Resp_Follow_up0xA
Announce0xB
Signaling0xC

6.影响校时精度的因素

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

6.1GPTP对策:

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

6.2. 驻留时间

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

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

6.3. 时间戳采样点

前面提到的t1、t2、t3、t4等采样时刻的值,应该在哪里产生呢?

常规的做法是在应用层采样,如下图蓝色传输线路所示:在发送端,报文在应用层(PTP校时应用)产生后,需要经过协议栈缓冲,然后才发送到网络上;在接收端,报文要经过协议栈缓冲,才能到达接收者(PTP校时应用)。这样存在下面两个问题,而这都会影响时间同步的精度:

• 协议栈缓冲带来的延时是不固定的

• 操作系统调度导致的随机延时

6.4 传输路径延时测量方式

EEE 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,所以它强调的是相邻相邻节点间的通信,最终测量的是相邻节点间的传输延时。

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

• P2P测量的是相邻节点间的延时,路径测量报文不会跨节点传输,有利于网络扩展;E2E测量的是master port和slave port之间的,中间节点(如TC、普通switch)需要转发延时测量报文,网络规模较大时,报文可能泛滥,master节点压力较大。

• master节点变更时,E2E需要重新测量到新master节点的路径延时,P2P只需关心相邻节点。

• E2E方式允许网络中有普通的switch(透传PTP报文即可,由于驻留时间随机,会影响测量精度),而P2P要求网络中的switch必须全部支持P2P。

• E2E机制中,校时报文和路径测量报文是耦合在一起的(第二章第3部分描述的就是典型的End-to-End的流程,它使用Sync、Follow_Up、Delay_Req、Delay_Resp四个消息,同时计算时钟偏差和路径测量);P2P机制中有独立的报文负责路径测量,把校时和路径测量解耦了。

img

gPTP要求使用P2P方式,并且要求网络中所有设备都支持PTP协议,路径传输延时测量只在相邻节点间进行。它使用Pdelay_Req、Pdelay_Resp、Pdelay_Resp_Follow_Up消息来测量路径传输延时。

注意Peer-to-Peer中没有使用Sync报文,而是专门为路径测量新建了几个报文,降低了复杂度。

  • 节点A在t1时刻发送路径测量请求命令Pdelay_Req,并记录下时刻t1
  • 节点B在t2时刻收到Pdelay_Req
  • 节点B将t2放在报文Pdelay_Resp中,并在t3时刻将该报文发给节点A
  • 节点B将t3放在报文Pdelay_Resp_Follow_Up中发给节点A
  • 节点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进行路径测量。

7.系统对于硬件时钟的支持:

ethtool -T eth0:

  1. 软件时间戳需要包括参数

       SOF_TIMESTAMPING_SOFTWARESOF_TIMESTAMPING_TX_SOFTWARESOF_TIMESTAMPING_RX_SOFTWARE  
    
  1. 硬件时间戳需要包括参数

     SOF_TIMESTAMPING_RAW_HARDWARESOF_TIMESTAMPING_TX_HARDWARESOF_TIMESTAMPING_RX_HARDWARE SOF_TIMESTAMPING_TX_SOFTWARESOF_TIMESTAMPING_RX_SOFTWARE  
    
    
    
  2. 硬件时间戳需要包括参数

     SOF_TIMESTAMPING_RAW_HARDWARESOF_TIMESTAMPING_TX_HARDWARESOF_TIMESTAMPING_RX_HARDWARE 
    

http://www.mrgr.cn/news/60416.html

相关文章:

  • Vue 3 的组件式开发(2)
  • AngularJS 指令
  • Java设计模式之装饰器模式
  • Kaggle比赛复盘
  • C++红黑树插入操作的模拟实现
  • Gstreamer的webrtcbin插件
  • 【动手学强化学习】part2-动态规划算法
  • Pytorch学习--DataLoader的使用
  • mabtisx突然不起作用:mapper跳转不到xml
  • 采用WinSW将jar包做成window本地服务
  • 扣子(Coze)
  • 【vue 全家桶】1、vue 基础(更新中)
  • CRD臻珈设计 | 北外滩虹口源·717:摩登印象,艺术永恒
  • Unity 编辑器扩展精髓 之 窗口创建与绘制基础组件
  • 二十一、行为型(中介者模式)
  • JAVA运算符详解
  • 【山西】《信息化项目软件运维费用测算指南》(DB 14/T 2163-2020)-省市费用标准解读系列01
  • AutoSAR从0开始到入门培训
  • 学校会拒绝孤独症孩子吗?揭秘专业教育机构的关怀之心
  • 力扣hot100-->递归/回溯
  • 【Elsa 3】Elsa 3 中的一些基本概念梳理
  • Cobalt Strike隐藏特征与混淆流量
  • 元空间--JVM基础(8)
  • 拍拍贷鸿蒙版H5容器之路
  • 项目管理平台如何体现工程项目管理的主要特征?
  • 数据分析-38-关于互联网企业黑名单的探索