欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线。

无用的前言

做1588已经很多年了,现在才开始想起来写一些技术文章。这是第一篇,希望能坚持写下去。1588标准的内容其实很多、很细,但终究是做网络时钟同步,所有方法和机制最终都是为计算出slave clock和master clock的时间偏差。所以想最快,最直观的了解1588是怎么同步网络中的时钟,那就应该看标准中最基本的E2E链路延迟测量机制,了解slave clock是如何通过该机制同步。

E2E链路延迟测量机制

直接上图,这是1588标准中,E2E链路延迟测量机制的原理图。E2E链路延迟测量机制也叫Delay request-response链路延迟测量机制。其实不难理解,两个网络设备要靠网络报文来交换时间信息完成时间同步,而这些网络报文的发送和接收都会记录对应的时间戳。可以是软件的时间戳,也可以是硬件的时间戳,如MAC时间戳或者PHY时间戳。

进入正题,我们来看这个同步的过程。

  1. Master发送Sync报文,发送时间戳记为t1。
  2. Slave收到Sync报文,接收时间戳记为t2。
  3. Master发送完Sync报文后立即发送Follow_up报文,并把t1写在Follow_up报文上告诉slave。
  4. Slave发送Delay_req报文,发送时间戳记为t3。
  5. Master收到Delay_req报文,接收时间戳记为t4。立即回复Delay_resp报文,并把t4写在Delay_resp报文上告诉slave。

所以最终不管是master的时间戳t1和t4,还是slave的时间戳t2和t3,slave端都是知道的。那如何计算slave和master之间的时间偏差呢,我们直接给出下面等式,然后再具体分析。

t2 - t1 = delay + offset
t4 - t3 - delay - offset

其实Sync报文从发送到接收的过程,t2 - t1的时间差值不只包含了链路延迟,同时也包含了时间偏差。而Delay_req报文从发送到接收也是类似的,t4 - t3的时间差值不只包含了链路延迟,同时也包含了时间偏差。这两个时间偏差刚好是相反数。

有人可能会问,从master到slave的链路延迟,和从slave到master的链路延迟是一样的吗?重点来了,1588标准的核心假设,就是master和slave之间的链路延迟是对称的。如果有任何非对称延迟的引入,那计算的时间偏差就会引入误差。所以严格的说两个网络设备做1588同步,如果中间经过了路由器或者交换机等转发设备,而这些路由器或交换机并不支持1588协议的话,那就会引入非对称链路延迟,影响同步的精度。这些话题以后再慢慢介绍。

回归正题,总之这两个公式是可以算出来链路延迟,和时间偏差的。

2 * delay = (t4 - t3) + (t2 - t1)
2 * offset = (t2 - t1) - (t4 - t3)

Slave如何调整时钟

从1588标准的角度,介绍到计算出offset已经完事了。1588并不规定怎么调整slave的时钟和master同步。在这里我们做个知识扩展,1588协议软件通常会这么做,Slave如果计算出和master的时间偏差,并且发现这个时间偏差超出设定的一个阈值,比如1s,它就是直接重置clock的时间和master的时间值一样。

这样时间同步就完成了吗?并不是,因为重置clock的过程所有软件操作都是有延迟的,所以slave和master仍然时间会有偏差。而且这两个clock如果各自free running的话,时间漂移会越来越大。这个时候软件通常在重置slave clock之后,时间偏差小于设定阈值的情况下,用PI servo来不断补偿slave的频率,使得计算得到的时间偏差趋于一个最小的稳定的数值。感兴趣的同学可以私下了解下什么是PI控制。

无用的结束语

希望能坚持写。

1588的E2E链路延迟测量机制相关推荐

  1. TCP的ACK原理和延迟确认机制

    原文地址:https://blog.csdn.net/gamekit/article/details/53898802 一.ACK定义 TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表 ...

  2. 虚拟机间延迟测量_简单的类来测量延迟

    虚拟机间延迟测量 这是我编写的用于测量延迟的非常简单的类. HDRHistogram不是劳斯莱斯解决方案,但是如果您只想在项目中添加一个类,那么效果就很好. 这是一个简单的测试程序,向您展示其用法: ...

  3. Linux内核延迟写机制学习

    Linux内核延迟写机制 Linux内核延迟写的特点,是指在Linux通过write的场景下写入数据之后,会将数据直接标记为dirty,然后通过延迟读写的方式最后将数据回写到磁盘上.在本文的Linux ...

  4. TCP延迟确认机制和SACK

    一 TCP的ACK原理和延迟确认机制 (1)ACK的定义: TCP协议中,接收方成功接收到数据后会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据.字段长度是32位. (2)ACK的 ...

  5. 长谈:关于 View Measure 测量机制,让我一次把话说完

    <倚天屠龙记中>有这么一处:张三丰示范自创的太极剑演示给张无忌看,然后问他记住招式没有.张无忌说记住了一半.张三丰又慢吞吞使了一遍,问他记住多少,张无忌说只记得几招了.张三丰最后又示范了一 ...

  6. Redis故障检查:延迟测量

    目录 网络延迟测量 固有延迟 往返延迟 检查CPU利用率 检查持久化操作 Redis的故障检查,上一篇日志总结到的是找出一些慢查询操作,也就是这些查询花费了很长的时间才能完成,但是这个慢操作识别只记录 ...

  7. OFDM子载波频率 知乎_5G新在哪儿(14)-NSA模式下测量机制与系统间互操作

    欢迎关注微信公众号:网优小谈 在网络建设初期,由于建设进度和投资等诸多因素可能在某些局部区域造成网络覆盖空洞或者弱覆盖,为了保证用户使用移动通信网络的用户感知,需要通过将新建通信基础网络与已有的通信基 ...

  8. drawtext ffmpeg 倾斜_ffmpeg drawtext在视频延迟测量上的应用

    音频和视频之间的延迟 音频和视频之间的延迟通俗讲就叫做"音视频同步误差",音视频同步误差普遍是通过观察视频画面和听到的声音之间是否有明显差距来判断,ffplay中还可以通过比对音频 ...

  9. 以 ptp4l、E2E 为例的 Linuxptp 代码分析

    最近在学习这部分内容,发现网上没有多少相关的代码分析的文章,结合自己的学习,和大家分享一下,希望大家批评指正! linuxptp code git clone git://git.code.sf.ne ...

最新文章

  1. 到底什么时候用指针或是引用
  2. Windows2003 IIS6.0启用Gzip功能
  3. 多线程池、饱和策略详解
  4. CST normalize S-parameter to given impedance
  5. matlab如何求矩阵的转置矩阵,怎么用MATLAB程序求转置矩阵?急需,高手帮忙………………...
  6. loj#2340. 「WC2018」州区划分
  7. 基于rocketMq实现分布式事务解决方案
  8. 搜索引擎关键词劫持之php篇(源码与分析)
  9. 面向对象编程思想---OOP
  10. sqlyog企业版 v8.32注册码
  11. android自定义图标下载,Android使用IconFont矢量图标库
  12. 最新的计算机主板,最新主流电脑主板天梯图2020
  13. 机器学习导论——机器学习三要素
  14. 文献笔记04-大学生运动会报名系统的设计与研究
  15. 打印模板-Zebra指令
  16. 安卓手机屏幕投射电脑 手机投屏到win7
  17. 未来的计算机漫画,搞笑漫画:能预知未来有多可怕?大雄如此试了,结果很失落...
  18. matlab 古典概率求解,第1章数学建模古典概型解答.ppt
  19. 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】
  20. CANoe测试的两种方式Test Module 和 Test Unit对比,你常用哪种呢?

热门文章

  1. ctfhub-->命令注入练习
  2. WPF使用MEF插件开发打造自己的工具箱
  3. PyGame “超级玛丽”游戏专题开篇——“变态超级玛丽”的诞生
  4. xftp,xftp和ftp
  5. 基于php的旅游景点网站设计
  6. 安卓APP源码和设计报告——快递查询录入系统
  7. 服务器系统专用驱动程序,NVIDIA显卡win 2008系统专用驱动
  8. 如何监测内存泄漏(引用自网络)
  9. 【PHP】PHP基本语法
  10. XSS Game通关教程