1588的E2E链路延迟测量机制
扫描二维码
随时随地手机看文章
无用的前言
做1588已经很多年了,现在才开始想起来写一些技术文章。这是第一篇,希望能坚持写下去。1588标准的内容其实很多、很细,但终究是做网络时钟同步,所有方法和机制最终都是为计算出slave clock和master clock的时间偏差。所以想最快,最直观的了解1588是怎么同步网络中的时钟,那就应该看标准中最基本的E2E链路延迟测量机制,了解slave clock是如何通过该机制同步。E2E链路延迟测量机制
直接上图,这是1588标准中,E2E链路延迟测量机制的原理图。E2E链路延迟测量机制也叫Delay request-response链路延迟测量机制。其实不难理解,两个网络设备要靠网络报文来交换时间信息完成时间同步,而这些网络报文的发送和接收都会记录对应的时间戳。可以是软件的时间戳,也可以是硬件的时间戳,如MAC时间戳或者PHY时间戳。进入正题,我们来看这个同步的过程。- Master发送Sync报文,发送时间戳记为t1。
- Slave收到Sync报文,接收时间戳记为t2。
- Master发送完Sync报文后立即发送Follow_up报文,并把t1写在Follow_up报文上告诉slave。
- Slave发送Delay_req报文,发送时间戳记为t3。
- Master收到Delay_req报文,接收时间戳记为t4。立即回复Delay_resp报文,并把t4写在Delay_resp报文上告诉slave。
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)