深入浅出1588v2(PTP)里的时间同步原理

news2024/9/30 15:30:24

1.时间同步

1.1 单步同步(OneStep)

单步同步最为简单,master向slave发送一个sync的同步包,同步包里带有这条信息发送时master的当前时间t1,假如这条信息从master传输到slave需要的传输时间是D,那么slave收到信息时,master的当前时间已经变成了t1+D,如果slave当前时间是t2,那么它们之间的时间差

offset = t2 - (t1+D)

比如上图的例子,假如master在自己时间是15:00的时候发送了一个sync包,包里面带有时间t1即15:00,slave在自己时间是15:40的时候收到了这条信息,接收时间点是t2,slave看到包里面数据显示这条信息发送时间点是master的15:00,假如slave已经知道了它和master之间传递消息需要30分钟,那它可以很简单的算出它现在比master快了10分钟,否则它现在应该是15:30。

1.2两步同步(TwoStep)

两步同步一样简单,在单步同步里,sync包直接携带了这个包的发送时间点,两步同步和它唯一的区别在于这个时间点不再直接放在sync包里了,而是在发送完sync包后,紧接着发送一个follow_up包,把这个时间放在follow_up包内。

对于上图的情况就是master在自己时间为15:00时发送了一个sync包给slave,但是这个包里什么也没有。slave在自己时间是15:40时,收到了这个sync包,此时时间点是t2,到这里为止,除了它并不知道sync包是什么时候发送的(t1),其他都和单步一模一样,所以它会继续等待后续的follow_up包。而master在15:10的时候发送了一个follow_up包,所以slave在15:50才收到了follow_up包,但slave对于follow_up包的发送和接收时间根本不关心,因为现在只差sync包的发送时间了,而sync的发送时间就包含在follow_up包内。

是不是觉得单步同步是两步同步的优化版?明明单步就能实现,为何还要多一个follow_up包去传递sync的发送时间?

很简单,思考一下sync这个15:00的时间点是怎么来的?

假如master和slave是两台电脑,你发送sync时,可以直接把15:00填充到sync包里,然后告诉网卡,你需要在15:00把这条信息发送出去,但是这很难实现,而且很麻烦,还需要网卡支持。简单的方法是你把sync包给网卡,但是里面的时间并不填充,而是让网卡在发送时,把这个时间填写进去,这也需要网卡支持,但是明显更符合实际一点。假如我们使用follow_up时,则最简单,我们只需要记录发送时间即可,而根本不需要在发送时填充。

2. 测量延迟

2.1 E2E

在时间同步里,我们假设了我们已知消息传递时间D,但其实这个时间我们一开始并不知道,所以需要计算。E2E的意思是End to End,从名字就可以看出,它从一个终点到另一个终点。

E2E必须要时间同步包sync(如果是两步则也包括follow_up)同时参与。它的计算也很简单,master在t1时刻发送sync给slave,slave收到的时候是t2,slave知道了t1和t2,则有

t2-t1=D+offset

slave在t3时刻发送Delay_Req给master,master收到的时候是t4,然后master把这个时间t4填充到Delay_Resp里再发回给slave,slave知道了t4和t3,则有

t4-t3=D+(-offset)

所以t4-t3+t2-t1=2D,从而消掉了offset,只需再除以2就可以算出D的时间。

或者由上图看,t-ms是master发送到slave的路径延迟,t-sm是slave发送到master的路径延迟。我们用t4-t1-(t3-t2)可以算出t-ms+t-sm的值,当t-ms=t-sm时,D=t-ms=t-sm,所以只需要把结果再除以2就可以了。这里很关键的前提条件是,从master->slave和slave->master的路径延迟相同!其实正常情况下并不相同,但是这里我们为了计算D,把它们看作是相同的。

2.2 P2P

P2P的意思是Peer to Peer,它意思是端到端。请注意上图,两边的设备不再是master和slave,也就是说对于无论是master还是slave都可以主动发送第一条Pdelay-Req消息,从而开启一次测量流程,这点和E2E不同,E2E里我们知道,最后所有的时间只有slave知道,所以只有slave可以计算出路径延迟D。还有一点不同是,仅仅用P2P计算路径延迟D不需要sync包参与,所以当计算完路径延迟D后,再进行时间同步时还需要发送sync包。

实际的计算过程则大同小异,从上图上看,计算无非是:

D=(t4-t1-(t3-t2))/2

当然也可以理解为t4-t3=D+(-offset),t2-t1=D+offset,再去消掉offset计算。

2.3 E2E-TC

其实只单单看E2E和P2P感觉并没有什么不同,所以当然会有感而发,为何有了E2E还需要P2P?

待续...

3. 频率同步

频率同步既可以是单步也可以是两步,对于单步的情况来说,假如15:00的时候B给A发送了sync包,15:10的时候又发送了一个sync包,理论上来说,假如B和A的时间走的一样快,那么A收到两个sync包的时间间隔也是10分钟!路径延迟和两个设备之间的时钟偏差并不影响这个间隔。如果不能理解就再做一个假设,A收到第一个包的时间是15:40,路径延迟是30分钟,那么我们知道A和B时钟偏差是10分钟,算上这个偏差,第二个包里面的时间是15:10,那么A可以计算出来,如果频率没有偏差,收到第二个包的时间应该是15:50!但是假如A收到第二个包的时候它自己的时间是16:00,它就知道了B发送两个包的间隔是10分钟,而自己收到两个包的时间分别是15:40和16:00,间隔20分钟,所以A的时钟比B快一倍!知道这个之后,我们只需要把A的时钟调慢一倍即可,注意不是直接把时钟当前时间减去10分钟,那再过10分钟A又比B快10分钟了,而是把A原来走2秒的时间调成只算做1秒!

附一些PTP相关资料:

1588v2报文格式

linuxptp项目

linuxptp项目github仓库

linuxptp中ptp4l使用手册

瑞萨关于linux对PTP硬件时间戳支持介绍

https://www.elinux.org/images/f/f9/Introduction_to_IEEE_1588_Precision_Time_Protocol_(PTP)_Using_Embedded_Linux_Systems.pdf

https://blog.csdn.net/weixin_43408952/article/details/125009747

https://blog.csdn.net/yaojiawan/article/details/124601694

https://blog.csdn.net/yanceylu/article/details/116085860

新华三PTP介绍

华为PTP介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芯驰(E3-gateway)开发板环境搭建

1-Windows下环境配置 可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在 prebuilts/windows 目录中,包括编译器、Python和命令行工具。 1.1.1 CMD SSDK集成 msys 工具,可以在Windows命令行中完成SDK的配置、编译和…

嵌入式系统硬件设计与实践(第一步下载eda软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 现实生活中,我们经常发现有的人定了很多的目标,但是到最后一个都没有实现。这听上去有点奇怪,但确实是实实在在…

Mysql数据库总结

一.MySQL 的基础1.架构图Mysql逻辑架构图主要分三层:(1)第一层负责连接处理,授权认证,安全等等 (2)第二层负责编译并优化SQL (3)第三层是存储引擎。Mysql 服务器的默认端…

Welcome to TryHackMe --- 我在TryHackMe学习的第90天

我在TryHackMe学习的第90天 自发的thm玩家交流企鹅群:751273347 TryHackMe是一个及其优秀的道德嗨客学习平台 这三个月里,我在TryHackMe都学了什么 TryHackMe的几个路径我觉得是按照oscp出的,所以理论上讲我应该差不多有oscp水准&#xff…

ElasticSearch修改索引字段类型

一、Es报MapperParsingException异常 线上功能报错,一看日志是往es中添加数据报错,错误日志如下: org.elasticsearch.index.mapper.MapperParsingException: failed to parse field [categoryId] of type [integer] in document with id 16…

软件技术知识库必备的功能清单及注意事项!

文档是一个迭代过程。它可能需要根据客户反馈进行改进,或者可能需要折射文档中已包含的某些内容。知识库可以包括客户的常见问题或对解决方案的更多参考,这些解决方案可能需要包括这些解决方案,以提高效率、生产力并降低公司成本,…

百趣代谢组学分享—揭示水稻“生长-防御”平衡调控机制!

湖南农业大学科研团队揭示水稻“生长—防御”平衡调控机制! 文章标题:Rice cellulose synthase-like protein OsCSLD4 coordinates the trade-off between plant growth and defense 发表期刊:Frontiers in Plant Science 影响因子&#x…

【个人总结】超详细Neo4j安装下载

【个人总结】超详细Neo4j安装下载一、下载1.1 Jdk下载1.2 Neo4j下载:二、安装配置2.1 解压2.2 配置三、启动Neo4j一、下载 1.1 Jdk下载 下载neo4j之前,需要下载jdk,这里默认已经下载过jdk,,若未下载可参考之前文章:h…

17.标准库特殊设施

文章目录标准库特殊设施17.1tuple类型17.1.1定义和初始化tuple访问tuple的成员关系和相等运算符17.1.2使用tuple返回多个值17.2bitset类型(后续需要时再详细了解)17.3正则表达式17.4随机数bernoulli_distribution类17.5IO库再探标准库特殊设施 17.1tuple类型 tuple(定义在tupl…

Spark工作原理

1)Spark工作原理: 首先看中间是一个Spark集群,可以理解为是Spark的 standalone集群,集群中有6个节点 左边是Spark的客户端节点,这个节点主要负责向Spark集群提交任务,假设在这里我们向Spark集群提交了一个任…

周赛334(前缀和、贪心+双指针、Dijkstra求最短路径、二分答案)

文章目录[6369. 左右元素和的差值](https://leetcode.cn/problems/left-and-right-sum-differences/)前缀和[6368. 找出字符串的可整除数组](https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/)超长整数如何取余?[6367. 求出最多标记下标](ht…

9.3 IGMPv3

实验目的 熟悉IGMPv3的应用场景掌握IGMPv3的配置方法实验拓扑 实验拓扑如图9-22所示: 图9-22:IGMPv3 实验步骤 (1)配置IP地址 MCS1的配置 MCS1的IP地址配置如图9-23所示: 图9-23:配置MCS1的IP地址 MCS2…

结构体字节对齐、偏移量

复习下struct的大小、成员偏移量offsetof,说下我的理解: 64位下默认对齐数default8原则1:struct中每一个成员变量tmp的对齐数realmin{default,tmp} struct Student {int num;//0char name[8];double score; } stu; 这个结构体stu中&#x…

阿里前端二面经典手写面试题汇总

实现类的继承 实现类的继承-简版 类的继承在几年前是重点内容,有n种继承方式各有优劣,es6普及后越来越不重要,那么多种写法有点『回字有四样写法』的意思,如果还想深入理解的去看红宝书即可,我们目前只实现一种最理想…

rollup环境配置

VUE2.x源码学习笔记 1. rollup环境配置 首先在VScode中新建文件夹vue_sc,然后终端打开定位到打开的文件夹,输入“npm init -y”初始化配置项,运行成功之后文件夹新增package.json文件 继续在终端运行"npm install babel/preset-env ba…

浅析Tomcat架构上的Valve内存马(内存马系列篇十一)

写在前面 这篇也是在Tomcat容器上面构造的内存马(收回之前说的不搞Tomcat了),这是建立在Tomcat的管道上面做文章的一个内存马的实现方式。这是内存马系列的第十一篇文章了。 前置 什么是Pipeline-Valve管道? 根据前面Tomcat架构的相关知识&#xff0…

腾讯云卖向“有币”区块链

曾经坚决“不涉币”的腾讯云将业务延伸向“有币区块链”。 在首届 Web3 全球峰会“腾讯云Web3构建日”上,腾讯云宣布进军Web3,并公开了与Ankr、Avalanche、Scroll和Sui 四个原生区块链项目的合作,其中前两个项目都发行了加密货币&#xff0c…

关于Java中的静态块讲解

文章目录类的加载特性与时机类加载的特性类加载的时机static的三个常用地方什么是静态块?特点写法静态块 static怎么用?类的加载特性与时机 在介绍static之前可以先看看类的相关 类加载的特性 在JVM的生命周期里,每个类只会被加载一次。 类加载的原则&#xf…

老板让我在Linux中使用traceroute排查服务器网络问题,幸好我收藏了这篇文章!

一、前言 作为网络工程师或者运维工程师,traceroute命令不会陌生,它的作用类似于ping命令,用于诊断网络的连通性,不过traceroute命令输出的命令会比ping命令丰富的多,可以跟踪从源系统到目标系统的路径。 很多工程师…

jsp城乡信息管理系统

技术:Java、JSP等摘要:管理信息系统(Management System,简称MS)是一个由管理人员和计算机组成的用以进行信息的收集、传输、加工、存储、维护和使用的系统。它是一门综合了管理科学,系统理论,计…