GNSS终端授时之四:高精度的PTP授时

news2025/6/4 8:29:30

我们在GNSS终端的授时之三:NTP网络授时中介绍了NTP网络授时的基本原理。我们知道了NTP授时的精度跟网络环境相关,即使在局域网中NTP授时的精度也只能到ms级别。如果广域网,经过多级交换机,路由器,由于传输路径和延时的不确定性,NTP授时的精度在百ms的级别。

为什么NTP授时精度只能到ms(局域网),百ms(广域网)呢?

在上一个文章中也提到了,导致NTP授时精度比较低的原因主要有2个:

  • CPU的处理延时

NTP授时原理中的四个时间戳,T1、T2、T3、T4,都是CPU处理时间数据包的时刻,并不是数据包从网口发送/接收的时刻。

CPU处理数据包的时刻 和 数据包从网口上输入/输出的时刻 ,肯定存在差异,这个也会引起授时精度降低。

而且由于CPU都带有操作系统,是多线程运行的,带来的结果是CPU的处理延时并不是一个确定的数值,没法进行补偿。

  • 网络环境的延时

在 NTP 授时原理中,假定从服务器到客户端的网络传输延时 T1 和从客户端到服务器的网络传输延时 T2 相等且对称。而实际网络环境中,存在多级交换机,多级路由器,上面的两个时间T1和T2不可能是相等、对称的。

这就带来了NTP授时的误差。随着广域网中国路由器的数量增多,从服务器到客户端的路由路径 和从客户端到服务器的路由路径 会有很大的差异,导致T1和T2的差异更大,所以授时精度也会到百ms的级别。

那么,有没有一种办法,能够让网络授时精度达到1us以下呢?

今天我们就来聊聊这个话题。

授时精度能够达到1us以下精度的网络授时方式是有的,这就是PTP授时

PTP授时中的第一个“P”的意思就是Precise,精确的意思。

我们从NTP授时精度差的痛点开始介绍。

CPU处理延时怎么解决

既然

  • CPU处理存在延时

  • 应该记录的是数据包从网口发送和接收的时刻

那么

我们给T1、T2、T3和T4打时间戳的时候,直接在物理层(PHY)或者网卡(NIC)记录时间,这样就绕过了操作系统和软件协议栈的延时抖动,不存在由于操作系统的调度,中断处理等导致的随机延时了。

就像下面这个图上所表示的:

时间戳

时间戳

网络环境延时怎么解决

中间节点延时补偿

网络中数据包经过的交换机、路由器这些中间节点的时候,在节点的内部都存在处理时间,这个交换机和路由器的处理时间,称为驻留时间(Residence Time)。

如果我们能够把驻留时间测量出来,然后作为补偿值放在时间数据包的专用字段中,发送到下一级。

下一级节点收到数据包之后,经过处理,在对外发送的时候,把自己的驻留时间和上一级的驻留时间相加,相加的结果放在时间数据包的专用字段中。

。。。。

这样一级一级的传递下去,等到数据包从主时钟到达从时钟的时候,从时钟不仅知道了从主时钟到从时钟的总路径延时T,还知道了中间各个节点总的驻留时间Tr。

在主从时钟之间传输的数据包中有专门的时间校正字段correctionField

我们假定主时钟和从时钟之间有2个路由器,第一个路由器的驻留时间是3us,第二个路由器的驻留时间是2us。主时钟发送的数据包从第一个路由器发出的时候,数据包的correctionField字段写上了3us,数据包从第二个路由器发出的时候,数据包的correctionField字段写上了5us。

从时钟拿到数据包之后,从correctionField字段中拿到了5us,就知道网络路径上的路由器节点增加了5us延迟,那么

总路径延时T减去总驻留时间Tr=5us,不就是实际的网络传输延时吗?

以此类推,如果有N级路由器,每个路由器都把自己的处理驻留时间加到correctionField字段上去。

我们可以用下面这个图来说明。

驻留时间分析

驻留时间分析

通过上述的办法,可以消除交换机、路由器内部处理带来的延时影响,即使经过了多级交换机,多级路由器也没关系了。

中间节点延时补偿,在业内有一个专门的术语“透明时钟”,意思也就是说,数据包通过节点是完全“透明”的,没有增加延时,原因是延时已经被补偿掉了。

强制路由

中间节点延时补偿能够消除路由器、交换机内部处理延时的影响。但是我们从服务器到客户端的路由路径,和,从客户端到服务器的路由路径 不同的话,仍然会存在路径延时的误差,导致往返延时的不对称,最终影响授时的精度。

所以,我们可以对网络路由进行优化,通过配置路由协议,强制服务器到客户端之间双向往返流量走相同的物理路径,从而保证往返延迟的对称性。

另外如果能够为PTP时间数据包划分独立的VLAN或者物理链路,就更好了,不仅保证了双向链路走了相同的物理路径,还避免了路径上的数据堵塞可能导致的随机延迟。

具体实现方式

上面根据NTP授时精度不高的痛点,提出了提高授时精度的解决方法。而PTP授时就是利用上面的方法来提高授时精度的。

首先PTP时间协议中的时间戳,都是基于网卡NIC或者物理层PHY的时间,是数据包从网口发送/接收的时刻,消除了CPU处理延时的影响。

在网络中的节点,交换机和路由器,都是测量自己的处理时间(驻留时间)Tr,然后把自己的驻留时间加到总的驻留时间中

具体的实现方式如下:

主从时间传递

主从时间传递

(1) SyncFollow_Up 消息(主 → 从)

主时钟发送同步信息Sync。如果硬件时间的话,就把网口的发送时间T1放在Sync数据包中发送出去。

如果硬件不能支持的话,就由CPU读取网口发送时间T1,随后再发送一个Follow_UP数据包,把T1放在Follow_UP数据包中发送出去。

(2) Delay_Req 消息(从 → 主)

从时钟收到Sync数据包之间,记录自己的网口接收时刻T2,然后向主时钟发送Delay_Req数据包,同时记录自己网口的发送时刻T3。

在这个过程中,T2 和 T3 这两个时间戳都不需要向主时钟回传。

(3) Delay_Resp回传信息(主→从)

主时钟收到Delay_Req之后,记录自己网口的接收时间T4,然后通过Delay_Resp数据包把T4返回给从时钟。

那么现在从时钟手里有了T1、T2、T3和T4,应该怎么处理才能得到主从时钟时间的时间差offset呢?

跟NTP授时的时候类似,我们可以如下计算:

从时钟计算出了offset之后,将自己的时钟调整offset,就可以完成跟主时钟时间的同步了。

为什么PTP授时仍然能够假定主从之间的往返路径延时是对称的呢?就是因为:

透明时钟消除了各个节点的内部处理驻留时间,强制路由限定了主从之间相同的路径,保证了主从往返延时的对称性。

时钟传递,从时钟变成下一级的主时钟

如果网络过于复杂,即使经过上述处理,主从之间的往返延时仍然是不对称的。还有一种办法能够提高授时精度,就是把主时钟到从时钟之间的长链路分割为多个短链路。

假定主时钟A需要给从时钟B授时,但是A和B之间网络比较复杂,还可以中间增加一个PTP的节点C,C具备从主时钟A获取时间的能力,把自己的时间同步到主时钟。

同时C还可以作为新的主时钟,给下一级的时钟B提供时间。

时钟传递

时钟传递

由于长链路分成了多个短链路,每个短链路的往返延时就更容易保证对称了。

示例

下面是某PTP授时板卡的技术指标和说明

PTP授时板

PTP授时板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP与MYSQL结合中中的一些常用函数,HTTP协议定义,PHP进行文件编程,会话技术

MYSQL: 查询函数: 执行查询语句: 1.mysql_query("SQL语法"); 凡是执行操作希望拿到数据库返回的数据进行展示的(结果返回: 数据结果); 2.执行结果的处理:成功为结果集,失败为false; 成功返回结果:SQL指令没有错误,但是查询结果…

OpenCV计算机视觉实战(9)——阈值化技术详解

OpenCV计算机视觉实战(9)——阈值化技术详解 0. 前言1. 全局阈值与自适应阈值2. Otsu 算法3. 实战案例:文档扫描中的二值化处理4. 算法对比小结系列链接 0. 前言 在图像处理领域,阈值化 (Binarization) 技术就像一把魔术剪刀&…

【Tauri2】049——upload

前言 这篇就看看一个简单地插件——upload Upload | Taurihttps://tauri.app/plugin/upload/upload的英文意思是“上传(程序或信息)”。 看来是用来上传文件的。 支持移动端 正文 安装 pnpm tauri add upload 在前后端都会安装,即 .plug…

4、数据标注的武林秘籍:Label-Studio vs CVAT vs Roboflow

开篇痛点:90%的模型效果取决于数据质量 "标注3小时,训练5分钟"——这是很多AI工程师的真实写照。上周有位读者训练YOLOv12时发现,同样的代码,换批数据mAP直接跌了15%,根本原因是标注不规范!本文…

Linux 基础IO(上)

目录 前言 重谈文件 文件操作 1.打开和关闭 2.对文件打开之后操作 理解文件fd 1.文件fd的分配规则与重定向 2.理解shell中的重定向 3.关于Linux下一切皆文件 关于缓冲区 1.为什么要有缓冲区 2.缓冲区刷新策略的问题 3.缓冲区的位置 前言 本篇到了我们linux中的文件…

el-tree拖拽事件,限制同级拖拽,获取拖拽后节点的前后节点,同级拖拽合并父节点name且子节点加入目标节点里

node-drag-start:开始拖拽节点时触发​​(按下鼠标按钮),无论是否允许放置,此事件都会触发。 allow-drop 返回 true 才能触发@node-drag-end="handleDragend"、@node-drop="handleDrop"; (1)allow-drop:动态控制​​是否允许放置; (2)node-dr…

day62—DFS—太平洋大西洋水流问题(LeetCode-417)

题目描述 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , hei…

《Python基础》第2期:环境搭建

在开始编写 Python 代码前,还需要搭建 Python 的开发环境。 电脑是没办法直接读懂 Python 代码的,而是需要一个解释器,实时把代码翻译成字节码,字节码再转换成 0 和 1,电脑就能读懂了。 Python 的运行过程就是翻译一行…

WSL 安装 Debian 12 后,Linux 如何安装 curl , quickjs ?

在 WSL 的 Debian 12 系统中安装 curl 非常简单,你可以直接使用 APT 包管理器从官方仓库安装。以下是详细步骤: 1. 更新软件包索引 首先确保系统的包索引是最新的: sudo apt update2. 安装 curl 执行以下命令安装 curl: sudo…

[CSS3]vw/vh移动适配

vw/vh 目标: 能够使用vw单位设置网页元素的尺寸 相对单位相对视口的尺寸计算结果.vw全称viewport width; 1vw1/100视口宽度 vh全称viewport height; 1vh1/100视口高度 体验vw和vh单位 <!DOCTYPE html> <html lang"en"> <head><meta charset…

YOLOX 的动态标签分类(如 SimOTA)与 Anchor-free 机制解析2025.5.29

YOLOX 的动态标签分类&#xff08;如 SimOTA&#xff09;与 Anchor-free 机制是其核心改进中的两个关键部分&#xff0c;它们在目标检测中的作用和实现方式存在显著差异。以下从原理、实现细节及效果三个方面进行详细对比&#xff1a; 一、核心原理与目标 1. Anchor-free 机制…

724.寻找数组的中心下标前缀和

题目链接&#xff1a; https://leetcode.cn/problems/find-pivot-index/ 这道题目我们可以使用暴力解法&#xff0c;就一个下标前数组之和&#xff0c;再求一个下标后数组之和&#xff0c;时间复杂度达到n方&#xff0c;我们来写一下&#xff1a; int pivotIndex(vector<in…

软考-系统架构设计师-第十六章 层次式架构设计理论与实践

层次式架构设计理论与实践 16.2 表现层框架设计16.3 中间层框架设计16.4 数据访问层设计16.5 数据架构规划与设计16.6 物联网层次架构设计 软件体系结构为软件系统提供了结构、行为和属性的高级抽象&#xff0c;由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及…

Docker学习笔记:基础知识

本文是自己的学习笔记 1、什么是Docker2、Docker的架构设计2.1、镜像&#xff08;Image&#xff09;2.2、容器&#xff08;Container&#xff09;2.3、仓库&#xff08;Repository)2.4、Docker使用场景案例 1、什么是Docker Docker是基于Go语言实现的云开源项目。它的角色是作…

5.2 初识Spark Streaming

在本节实战中&#xff0c;我们初步探索了Spark Streaming&#xff0c;它是Spark的流式数据处理子框架&#xff0c;具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理&#xff0c;并通过两个案例演示了如何利用Spark Streaming实现词频统计。…

Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、为什么要做词云&#xff1f;让文字"活"起来&#xff01;二、核心…

理解解释器架构:原理、组成与运行机制全解析

目录 前言1. 什么是解释器架构2. 解释器的基本组成2.1 被解释执行的程序2.2 解释器引擎2.3 解释器内部状态2.4 程序执行的当前状态2.5 存储器模型 3. 解释器的工作原理3.1 解析源代码3.2 初始化运行环境3.3 逐条执行语法结构3.4 维护程序状态3.5 内存管理与变量作用域 4. 举例&…

2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现

华为OD全流程解析&#xff0c;备考攻略 快捷目录 华为OD全流程解析&#xff0c;备考攻略一、什么是华为OD&#xff1f;二、什么是华为OD机试&#xff1f;三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…

设计模式——桥接设计模式(结构型)

摘要 桥接设计模式是一种结构型设计模式&#xff0c;用于将抽象与实现解耦&#xff0c;使二者可以独立变化。它通过将一个类拆分为“抽象”和“实现”两部分&#xff0c;并通过桥接关系组合&#xff0c;避免了类继承层次结构过于庞大。桥接模式包含抽象类、扩充抽象类、实现类…

LLaDa——基于 Diffusion 的大语言模型 打平 LLama 3

这里分享一篇文章《Large Language Diffusion Models》&#xff0c;来自人民大学高领人工智能学院&#xff0c;一篇尝试改变传统自回归范&#xff08;预测下一个token&#xff09; LLM 架构&#xff0c;探索扩散模型在 LLM 上的作用&#xff0c;通过随机掩码-预测逆向思维&…