E2E和P2P
在之前的文章中,我们介绍了1588中的E2E(End-to-End)链路延迟测量机制。在本文中,我们将顺便介绍一下P2P(Peer-to-Peer)的链路延迟测量机制,这也有助于以后的E2E透明时钟和P2P透明时钟的介绍。E2E机制是由从节点时钟(Slave clock)发起的链路延迟测量,而P2P机制则将每个时钟视为对等的,并且每个时钟都会发起链路延迟测量。简而言之,E2E机制中,只有从节点时钟进行链路延迟测量,而在P2P机制中,每个时钟都会进行链路延迟测量。
P2P链路延迟测量机制
P2P链路延迟的测量使用了与E2E不同的报文。E2E使用的是Delay_req和Delay_resp报文,而P2P使用了Pdelay_req、Pdelay_resp和Pdelay_resp_follow_up报文。请看下图。
整个过程是这样的:
-
发起端发送报文Pdelay_req,并记录发送时间戳t1。响应端收到后,记录接收时间戳t2。 -
响应端立即回复报文Pdelay_resp,把t2写在Pdelay_resp报文上,告诉发起端。同时记录发送时间戳t3。 -
发起端收到Pdelay_resp,记录接收时间戳t4。 -
紧随Pdelay_resp报文,响应端又发送一个叫作Pdelay_resp_follow_up的报文,将t3写在该报文上,告诉发起端。
完成整个过程后,发起端已经知道t1,t2,t3和t4这四个时间戳。和E2E类似,我们又得到两个等式。
t2 - t1 = delay - offset
t4 - t3 = delay + offset
t2和t1的时间差值包含了链路延迟delay和两个clock的时间偏差。t4和t3的时间差值包含了链路延迟delay和刚提到的时间偏差的相反数。于是链路延迟和时间偏差可以被计算出来了。
2 * delay = (t2 - t1) + (t4 - t3)
2 * offset = (t4 - t3) - (t2 - t1)
时钟同步的实现
通过上面的介绍我们又学习到了P2P链路延迟的测量机制,上面的两个等式可以计算出链路延迟和时间偏差。然而真正的1588软件就是用这个时间偏差值来调整clock的吗?答案并不是这样。不要忘了,P2P机制下,1588同步还有Sync和Follow_up报文的参与。
对于P2P机制下的时钟同步,1588软件通常是怎么做的呢?重点来了。1588软件通常把时钟同步解耦成两个任务:
-
第一个任务是通过P2P机制测链路延迟。 -
第二个任务就是通过Sync/Follow_up报文同步时钟。
这两个任务独立执行,并可以以不同的周期定时运行。第一个任务周期性的测量链路延迟,并可以辅助一些滤波算法,降低一些偶然的抖动带来的影响。第二个任务中,Slave clock收到Sync/Follow_up后,即可利用第一个任务最新计算出的链路延迟的值delay,来计算时间偏差offset,调整Slave clock与Master clock同步。别忘了下面等式。同样,对offset的值也可以使用一些滤波算法。
t2 - t1 = delay + offset
结束语
至此,P2P的链路测量机制也介绍完了,是不是就是这么回事,就是这么简单。其实越深入越复杂,以后了解到报文的格式,P2P透明时钟,尤其是不局限于1588还想了解802.1AS协议的Time-aware bridge,你就不这么想了。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !