1588的E2E链路延迟测量机制

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

无用的前言

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

E2E链路延迟测量机制

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

  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控制。

无用的结束语

希望能坚持写。

  • 14
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值