gPTP

gPTP

参考:

  1. https://zhuanlan.zhihu.com/p/113398852

简介

gPTP是general precise time protocol的简称,是PTP协议的派生。

gPTP的目的是确保所有局域网里的节点的时间完全一致(ns级别的误差)

gPTP协议基于L2层传输

在OSI网络模型里,L2是MAC层,L3是IP层,我们通常见到的如交换机是L2层的转发,路由器是L3层的转发。gPTP协议是基于L2层的传播,那么就决定了一个特性,只能在局域网里传播,不能通过路由器往WAN网传输。

MAC上的硬件支持

为了测量更精准的时间,我们必须精准的知道一个MAC帧出去的时间,和收到一个MAC帧的时间,这个地方不能通过软件来获得,因为如果通过软件来获取时间,进出终端,任务抢占的时间是不确定的,不可测的。
MAC帧
MAC里包含了一个timer,通常这个timer是32bit的,当然如果是64bit的就最好,每次当一帧出去的时候,会有一个timestamp从timer上记录下来,这个时候程序任何时候处理,都知道这一帧出去的真正时间。
通常,这个timer里得到的值最好是ns,假如时钟是100M,那么每一个时钟timer增加10。

测量网线上的延时

网线的传输时延,专业名称叫 peer to peer delay
链路时延
A会发出一个信息(PdelayReq,这个信息的内容是什么不重要),由MAC记录下离开MAC发送到网线上的真正时间t1,B收到这一帧,由MAC记录下收到这一帧的时间t2,然后B会发送一个信息(PdelayResp, 这个信息的内容是什么不重要),同样的B记录下t3,A会记录下t4,最后B会把(t2,t3 装再Pdelay_Resp_Follow_UP)这个帧里面发到A,这时候A会有4个时间数据,t1,t2,t3,t4。

我们假设A,B 时间相差offset,线上传输延时为delay.

t1+delay=t2+offset

t3+delay=t4-offset

delay=(t2-t1+t4-t3)/2

这个时候我们就可以测到线上的延时是多少了。

在汽车以太网中,这个测量过程A和B都会互相发起,测量。但是不用太频繁,因为这个值主要受线的长度影响,一旦固定下来,就不会有大的变化了。

时间同步

gPTP规定一个局域网里只能有一个master,其他全部是slave,同时只有endpoint能参与作为时钟节点,bridge不能作为时钟节点,只能作为透明时钟。
在汽车以太网中,不需要动态协商谁是master节点,通常是预先设定好的
在这里插入图片描述
在这里插入图片描述
只有master节点能发送,sync 和 follow_up这两个帧,其实这个的作用就是告诉所有slave节点,我的时间是多少,你应该和我设置为一样的。

在上图中,master发出sync的时间为 te11,slave收到的时间为tb11,同时master发送follow-up携带te11,告诉slave,这个时候slave就有了两个时间,tb11,te11。

这个时候slave自然就知道自己和master的时间差是多少了,这个地方还有一个重要的一点,slave端还要加上Pdelay这个时间,要把在网线上传输的时间加上。这个时间我们master和slave的时间就一样了

我的理解就是:前面双方可以通过互相发送消息计算出链路的时延Pdelay,然后bridge可以获得GM的tb11,所以自己当前的时间就是:

t = tb11 + Pelay

如何调整时间

我们再来看MAC的timer计数器,这个计数器的时钟通常来在晶振然后PLL作为输入,既然是晶振,那么master和slave的晶振就必然会有误差,随着时间的积累会越来越大。
所有SLAVE需要做的就是利用master发来的sync,follow-up帧和测量的pDelay来纠正这个timer计数器里的值。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页