时间同步绝对是一个大问题

嵌入式Linux

共 1726字,需浏览 4分钟

 ·

2021-08-05 17:23


上图是加班看到的夜景




假设A电脑时间和B电脑时间不同,当他们两个电脑的用户在使用电脑的时候就会存在问题,比如A电脑的用户说,我们下午5:00 去打球,然后A电脑到了5:00就去打球了,但是可能这个时候B电脑的时间才到4:00,他们的信息就不能对齐。


还有一些问题的追溯,如果出现问题后,本地时间存在差异,那么我们根据日志时间来排查问题就会有问题。


NTP 时钟


NTP(Network TimeProtocol,网络时间)是由美国德拉瓦大学的David L. Mills教授于1985年提出,由时间协议、ICMP时间戳消息及IP时间戳选项发 展而来。NTP用于将计算机客户或服务器的时间同步到另一服务器或参考时钟源。它使用UTC作为时间标准,是基于无连接的IP协议和UDP协议的应用层协议,使用层次式时间分布模型,所能取得的准确度依赖于本地时钟硬件的精确度和对设备及进程延迟的严格控制



PTP 时钟


NTP 时钟是不准确时钟,人们为了获得更加精准的时钟对齐,所以就出现了PTP时钟。


PTP(PrecisionTime Protocol)是一种对标准以太网终端设备进行时间和频率同步的协议,也称为IEEE 1588,简称为1588。1588分为1588v1和1588v2两个版本,1588v1只能达到亚毫秒级的时间同步精度,而1588v2可以达到亚微秒级同步精度。1588v2被定义为时间同步的协议,最初只是用于设备之间的高精度时间同步,随着技术的发展,1588v2也具备频率同步的功能。


理论上任何PTP时钟都能实现主时钟和从时钟的功能,但一个PTP通信子网内只能有一个主时钟。整个系统中的最优时钟为最高级时钟GMC(Grandmaster Clock),有着最好的稳定性、精确性、确定性等。根据各节点上时钟的精度和级别以及UTC(通用协调时间)的可追溯性等 特性,由最佳主时钟算法(Best MasterClock)来自动选择各子网内的主时钟;在只有一个子网的系统中,主时钟就是最高级时钟GMC。每个系统只有一个GMC,且每个子网内只有一个主时钟,从时钟与主时钟保持同步。



整个PTP网络中,所有时钟都会按照主从(Master-Slave)层次关系组织在一起,各节点逐级同步时钟,最终完成与系统的最优时钟Grandmaster的同步。整个同步的过程是通过交换1588v2报文来完成的。从时钟通过1588v2报文中携带的时间戳信息计算与主时钟之间的时间偏移和路径延迟,据此调整本地时钟达到与主时钟的同步。


1588v2报文是在物理芯片上打时间戳,而不是在上层网络,这样能最大程度上保证时间戳的准确。因此,与传统的应用层协议NTP(Network Time Protocol,网络时间协议)相比,1588v2的精度更高。



时间同步的原理


1588V2时间同步的基本原理和NTP相同,都是主从设备之间双向收发时间同步报文,根据报文的收发时间戳,计算得到两个设备之间往返的总时间T。


如果两个方向的时延相同,T/2 就是单向时延。


根据单向时延就可以得到主设备和从设备的时间偏差,从设备根据这个时间偏差来调整自身的时间,就可以完成主从设备之间的时间同步。


PTP 与NTP的区别


NTP 协议运行在应用层,测量出来的时间差除了在实际物理网络上的时间,还包括操作系统的处理时间,比如你在发送网络数据包的时候,被更高优先级的任务中断了,又或者缓存阻塞了等等。


所以NTP的抖动相对PTP来说大得非常非常多


1588v2 的优势在于,它的时间戳是在物理层发送前加上去的,就撇开了操作系统对它和影响。


因为最近工作需要研究的一些知识点,我们要解决的问题是在两个网络设备上保证他们时间是完全对齐的,这个完全对齐一定是要求非常非常高的。如果也是在从事这方面研究的同学,欢迎一起讨论。





推荐阅读:


专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈


浏览 63
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报