当前位置:首页 > 技术分析 > 正文内容

1588v2,是怎样实现时钟同步的?

ruisui883周前 (04-11)技术分析14

一、什么是1588v2 ?

对于无线通信来说,时钟同步至关重要,是基站正常工作的必要条件。如果同步有问题,轻则切换成功率降低,重则系统无法运行。

从3G/4G以来,随着连接基站和控制器,核心网的传输网络的逐渐IP化,传统的TDM(时分复用,比如SDH等技术)网络承载的时钟功能,也必须在新的分组交换网中得以解决。

其实,在IT业界,这个问题早以太网的发展初期便被提了出来。

1985年,以太网被IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会)标准化为802.3协议;十年之后的1995年,以太网的数据传输速率从10Mbps提高到了100Mbps,在此过程中,计算机和网络业界也在致力于解决以太网的定时同步能力不足的问题。

于是,IEEE便着手制定进行基于分组交换的精密时钟同步标准。

2000年底,网络精密时钟同步委员会成立。

2002年底,该委员会制定的同步标准获得IEEE标准委员会的认证,IEEE1588标准诞生,第一个版本就被称为1588v1。

2008年初,IEEE组织对1588进行了修订并重新发布,这个版本就是目前正在广泛使用的1588v2,可以提供小于100ns的时间同步精度。

IEEE 1588的全称是“IEEE P1588 DM2.2, Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems”,翻译为中文就是:“网络测量和控制系统的精密时钟同步协议”。因此1588协议也被简称作PTP(Precise Time Protocol )协议。

1588协议的基本构思是通过软硬件配合,记录同步时钟信息的发出时间和接收时间,并给每条信息都加上时间标签。有了时间记录,接收方就可以计算出自己在网络中的时钟误差和延时,经过修正之后,就可以实现和网络时钟源同步的目的。

二、1588v2 怎样实现时钟同步?

在这样一个复杂的同步网络中,1588主时钟(Master)和从时钟(Slave)主要靠传递Sync,Follow_Up,Delay_Req,以及Delay_Resp这几条消息来实现同步的。

1588v2的时钟具体的同步原理如下图所示:

1、主时钟向从时钟发出Sync报文,并携带自身的时钟t1;

2、从时钟收到Sync报文,并标注上该时刻自己的时钟t2;

3、从时钟向主时钟发送Delay_Req报文,并携带该时刻自身的时钟t3;

4、主时钟收到Delay_Req报文,并注上该时刻自己的时钟t4;

5、主时钟向从时钟发送Delay_Resp报文,并携带时钟t4;

6、假设从时钟和主时钟两者之间的差值为偏移量offset,主时钟到从时钟的传输时延为t_ms,从时钟到主时钟的传输时延为t_sm,则有下面两个等式:

t2 - t1= t_ms + offset

t4 - t3= t_sm - offset

假设双向时延相同,即:delay = t_ms = t_sm,则可以算出如下结果:

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

delay = ( ( t2 - t1 ) + ( t4 - t3 ) ) / 2

有了上述计算结果,然后就可以根据偏移量offset来修正从时钟,就可以实现同步。

需要注意的是,上述结果存在一个假设,那就是上下行的时延delay是一样的,且不同报文间的时延也是相同的。

1588v2主要支持如下3种时钟类型:普通时钟(Ordinary Clock,OC),边界时钟(Boundary Clock, BC),透明时钟(Transparent Clock,TC)。其中透明时钟又可分为E2E(End to End)透明时钟,也叫E2E-TC;以及P2P(Pear to Pear)透明时钟,也叫P2P-TC。

1、普通时钟(Ordinary Clock,OC)

在一个域中,维护着域内使用的时标,并且只有一个PTP端口的时钟。普通时钟要么作为主时钟提供时钟源,要么作为最末一级终端,从其他的时钟源获取时钟,而不能作为中间节点把时钟向其他节点传递。

2、边界时钟(Boundary Clock,BC)

边界时钟有多个PTP物理通信端口和网络相连,其每个PTP端口和普通时钟的PTP端口是一样的,其中的一个端口在收到上级时钟源的PTP报文后进行终结,然后再生成新的PTP报文并向下传递。

3、透明时钟(Transparent Clock,TC)

透明时钟作为中间节点,收到PTP报文之后不进行终结,其内部有一个驻留时间桥来计算报文在本节点的驻留时间,并以此来修正时间标签再向下传递。

透明时钟可分为E2E(End to End)透明时钟,以及P2P(Peer to Peer)透明时钟。两者对于PTP报文时延的修正和处理方法不同,在其他方面是完全一样的。

E2E透明时钟对时延的修正只包含本节点驻留的时间,而P2P透明时钟对时延的修正除了包含本节点驻留的时间之外,还添加了传输路径上的时延。

除了上述的几种时钟之外,1588v2还定义了管理节点。管理节点负责处理PTP管理报文,有一个或者多个物理接口连接网络,可以和任意的时钟类型组合在一起工作。


三、1588v2 有哪些应用场景?

IEEE 1588独立于物理层,可通过在报文中加入时间标签来传递同步信息,因此除了频率同步之外还可以实现时间同步。但在实际应用中由于会受到网络状态的影响,延时,丢包等都会影响到精度,所以通过交换网络来传输时钟有较多限制。

1、全网支持1588v2功能(FTS)

全网支持1588v2功能(FTS,Full Timing Support),是指主时钟和从时钟之间的所有传输设备都支持1588功能,包括边界时钟(BC模式)和透传时钟(TC模式)两种模式。它们的物理拓扑基本相同,仅在PTP协议的处理机制上有所差异。

边界时钟模式(BC模式)下的网络中间节点设备有多个1588端口,其中一个端口作为从时钟和上级时钟保持同步,其他端口则作为下一级网元的主时钟。设备收到1588v2报文之后进行终结,然后生成新的报文再向下游传递。

透传时钟(TC模式)下的网络节点设备接收到来自时钟源的1588v2报文之后不进行终结,而是根据报文的驻留时间和链路时延,修正报文的时间戳信息,并将其传送给下游设备。

边界时钟模式下,由于分组网络的不稳定性,中间节点不可能百分之百地恢复原始时钟,而是存在或多或少的误差,这样传递给下游的时钟就产生了漂移,并且这样的漂移还会随着跳数的增加而不断累积。而透传时钟模式下,中间节点只修正时延,对跳数并不敏感,故其理论上的精度高于边界时钟。

然而在实际使用中,由于边界时钟模式下的漂移是不定向的,可能不断累积增大,也可能多个节点之间产生的漂移可能相互抵消,所以实际上两种模式的精度相当。


2、1588v2 ATR(Auto Timing Recovery,自动定时恢复)

对于第一点全网所有传输节点都支持1588v2协议的场景,毕竟是理想情况,现实总是和理想有所差距的。如果主时钟和从时钟之间的传输节点不支持1588v2协议,还能怎样实现频率同步和相位同步吗?

答案是,可以。但传输网中的时延,抖动,丢包都会影响时钟精度,只能用于传输负载较小,主从时钟之间的跳数较少的非常有限的场景。

3、1588v2同步是否可以用于5G?

理论上来说,1588v2可支持高精度的相位同步,基本能够满足5G的同步需求。

但实际上,分组传输网络需要所有节点都支持PTP协议,组网较为复杂,网络的拥塞,时延,抖动,丢包都会影响时钟精度。更为重要的是,1588v2同步需要上下行链路的时延相等,否则就需要人工校准,这一点在项目实施中非常困难。

因此,5G网络主流的同步方式是GPS或者北斗这样的GNSS系统。

好了,本期的内容就到这里,希望对大家有所帮助。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3422.html

分享给朋友:

“1588v2,是怎样实现时钟同步的?” 的相关文章

微软的Linux发行版终于加入了对XFS根文件系统的支持

当许多Linux发行版在评估新的根文件系统选项或甚至像OpenZFS这样的特性,微软内部Linux发行版到本月才开始支持XFS作为根文件系统选项。随着这个月对微软内部Linux发行版CBL-Mariner的更新,他们现在支持XFS作为根文件系统。到目前为止,这个用于微软内部各种目的的Linux发行版...

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

Git 分支管理策略汇总

最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码?我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。Git flow在这种模式下,主要维护了两类分支...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

K8S NFS 共享存储

NFS 共享存储前面我们学习了 hostPath 与 Local PV 两种本地存储方式,但是平时我们的应用更多的是无状态服务,可能会同时发布在不同的节点上,这个时候本地存储就不适用了,往往就需要使用到共享存储了,比如最简单常用的网络共享存储 NFS,本节课我们就来介绍下如何在 Kubernetes...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...