一文讲懂gPTP

2023-10-27

原文链接:https://zhuanlan.zhihu.com/p/113398852

在这里插入图片描述

一文讲懂gPTP

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

gPTP的目的是确保所有局域网里的节点的时间完全一致(ns级别的误差),下面让我们直奔主题。

如何达到NS级别的误差:

为了达到ns基本的误差,gPTP实现了哪些要求呢?

gPTP协议基于L2层传输

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

MAC上的硬件支持

为了测量更精准的时间,我们必须精准的知道一个MAC帧出去的时间,和收到一个MAC帧的时间,这个地方不能通过软件来获得,因为如果通过软件来获取时间,进出终端,任务抢占的时间是不确定的,不可测的。

这里我们来看一下S32K148的MAC的简单框图
在这里插入图片描述
MAC里包含了一个timer,通常这个timer是32bit的,当然如果是64bit的就最好,每次当一帧出去的时候,会有一个timestamp从timer上记录下来,这个时候程序任何时候处理,都知道这一帧出去的真正时间。

通常,这个timer里得到的值最好是ns,假如时钟是100M,那么每一个时钟timer增加10。

测量网线上的延时

为了到达ns级别的延时,网线上的传输时间自然不能忽略,如何测量网线上的传输延时呢?

专业名称叫 peer to peer delay
在这里插入图片描述
我们建设A想知道自己传输到B的延时有多少,怎么办的。

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协议基于L2层传输
MAC上的硬件支持
测量网线上的延时

时间同步:

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的时间就一样了。

SLAVE有了这个时间该如何处理?

我们再来看MAC的timer计数器,这个计数器的时钟通常来在晶振然后PLL作为输入,既然是晶振,那么master和slave的晶振就必然会有误差,随着时间的积累会越来越大。

所有SLAVE需要做的就是利用master发来的sync,follow-up帧和测量的pDelay来纠正这个timer计数器里的值。

这个通常会有硬件上的支持去更改,再看一下S32K148的MAC的框图

在这里插入图片描述
这里不去细讲这个,有兴趣可以去看看S32K148的RM。

有了gPTP的协议支持,这个时候不管是master的代码去读timer的值,还是slave的代码去读timer的值,我们理论上认为去到的值都是一样的了。

下图是汽车上gPTP的一些时间标准。
在这里插入图片描述
更多细节可以看:

https://link.zhihu.com/?target=https%3A//avnu.org/wp-content/uploads/2014/05/AutoCDSFunctionalSpec-1_4-public_with_legal_notices.pdf

本文主要介绍了gPTP的endpoint的一些特性,后续还会继续介绍一些gPTP bridge节点的一些特性,还有hybird模式的场景等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文讲懂gPTP 的相关文章

随机推荐

  • 阿里云 OSS介绍

    1 什么是阿里云 OSS OSS 为 Object Storage Service 即对象存储服务 是阿里云提供的海量 安全 低成本 高可靠的云存储服务 OSS 具有与平台无关的 RESTful API 接口 可以在任意应用 任意时间 任意
  • 代码重复率检查工具jsinspect 检查重复代码,去掉冗余代码。

    jscpd jsinspect npm install g jsinspect 检测复制粘贴和结构类似的JavaScript代码
  • Flutter 图片裁剪

    参考一 参考二 参考三
  • 「OceanBase 4.1 体验」|大厂开始接入的国产分布式数据库,不来了解了解?

    OceanBase 4 1 体验 前言 OCP Express在线升级功能 租户级物理备库 TP 事务处理 和AP 分析处理 优化 TP 性能优化 AP 性能优化 结尾 前言 上次我们讲了本人自己亲自上手OceanBase 4 1的初体验
  • 自动化测试实现多线程

    自动化测试实现多线程 进程 进程就是一个程序在一个数据集上的一次动态执行过程 我们编写的程序用来描述进程要完成哪些功能以及如何完成 线程 线程页脚轻量级进程 他是一个基本的CPU执行单元 是进程中的实现 线程的出现是为了降低上下文切换的小号
  • vue调试工具vue-devtools安装及使用(支持vue3版本)

    github下载地址 https gitee com h5web devtools 6 0 0 beta 15 1 下载Github源文件 devtools 6 0 0 beta 15 git clone https gitee com h
  • Blender雕刻基础:使用方法与技巧

    如何正确进入雕刻模式 1 在启动对话框界面中或是文件菜单新建项 选择Sculpting直接进入雕刻模式 选择雕刻模式默认只有Sculpting 雕刻 和Shading 着色 两个选项卡 2 如果选择的是常规 界面中的物体并不是真正用以雕刻的
  • activiti源码解析系列8 - 任务完成命令类

    我们在完成任务的时候都执行了哪些操作呢 主要涉及删除表 默认非级联 ACT RU TASK ACT RU IDENTITYLINK ACT RU VARIABLE 主要看一个CompleteTaskCmd protected Void ex
  • react,tsx中使用微信jssdk分享总结

    React tsx的H5项目使用企业微信JS SDK 步骤 1 配置域名 点击企业微信PC版左下角登录管理后台 应用管理 应用 设置应用主页 网页授权及JS SDK 2 引入JS SDK 在React项目内终端下载 npm install
  • go 并发的非阻塞缓存

    本节中我们会做一个无阻塞的缓存 这种工具可以帮助我们来解决现实世界中并发程序出现但没有现成的库可以解决的问题 这个问题叫作缓存 memoizing 函数 译注 Memoization的定义 memoization 一词是Donald Mic
  • ApiPost测试

    1 api接口地址 1 错误地址 2 正确地址 3 原因
  • STM32学习之温湿度检测——DHT11

    一准备材料 1 参考资料 STM32不完全手册 库函数版本 STM32F103xCDE DS CH V5 pdf STM32中文参考手册 V10 pdf DHT11 DHT11 下载链接 https pdf1 alldatasheetcn
  • 10 款超级实用的Chrome 黑科技插件

    总所周知 IE浏览器市场份额曾经占据了PC端半壁江山 如今谷歌推出的Chrome浏览器已经遥遥领先的登上了杠把子的位置 IE的市场份额在全球仅排行第三 毋庸置疑 Chrome浏览器已经成为了全球最受欢迎 用户量最多的浏览器 深受程序员的喜爱
  • amis百度前端框架,在js中使用amis写json转页面

    amis百度前端框架 在js中使用用amis写的json页面 1 在项目中使用百度 amis 的sdk做开发库 2 加载sdk中的库 amis amisRequire amis embed amisLib amisRequire amis
  • 第六届蓝桥杯java试题-九数组分数

    1 2 3 9 这九个数字组成一个分数 其值恰好为1 3 如何组法 代码如下 author Administrator 类名 Main 创建时间 2015 5 1 vesion1 0 public class Main public sta
  • 用手画了11张图终于搞明白了Git工作流,我怀疑你用的是假 Git

    号外号外 死磕 Java 并发编程 系列连载中 大家可以关注一波 死磕 Java 并发编程05 阿里面试失败后 一气之下我图解了Java中18把锁 死磕 Java 并发编程04 说说Java Atomic 原子类的实现原理 死磕 Java
  • MATLAB编程:绘制折线图 以及 画图的一些小技巧

    MATLAB编程 绘制折线图 以及 画图的一些小技巧 前言 一 介绍 二 MATLAB实现 三 总结 前言 本博主使用的MATLAB版本是2020b 这个版本可以使用许多有趣的扩展APP 本节将会对如何在已有数据条件下绘制一幅折线图 非常详
  • 《视觉SLAM十四讲》学习笔记-3D-3D位姿估计-ICP

    ICP问题 问题描述 假设匹配好的3D点为 P p 1 p n P p 1 p n P p 1
  • 深度学习框架pytorch快速开发与实战chapter3

    报错 问题1 出现这种情况的主要原因是环境中有两个libiomp5md dll文件 一般环境都会放在conda文件夹的envs下 或者是直接cmd下输入以下代码 conda info envs 找到相应环境然后去掉下面那个就行 问题2 da
  • 一文讲懂gPTP

    原文链接 https zhuanlan zhihu com p 113398852 一文讲懂gPTP 简介 gPTP是general precise time protocol的简称 是PTP协议的派生 gPTP的目的是确保所有局域网里的节