当前位置: 首页 > news >正文

TSN协议原理!看完这一篇就够了(1)——时钟同步IEEE802.1AS-2020

▎前言

在许多应用场景中,一个本地局域网中互联的设备集群需要共享同一个时间,以支持各设备的协同工作。例如:音频设备与视频设备的配合播放,雷达与摄像头的数据融合等;这样一个看似简单的域功能,细化成为各节点的需求就变得不那么简单了。想象一下,A和B节点的绝对时间不同——A此刻时间为09:00:00,B的时间为09:00:05;时间频率不同——标准时间经过了1分钟,A节点计时59秒,B节点计时61秒;如何实现各节点的时间矫正,我们今天要讲解的802.1AS协议就是用来实现以上提到的功能的。

▎协议目的-共享时间

TSN任务组(Time-Sensitive Networking Task Group)是IEEE 802.1 Working Group的一个组成部分,它的目的是在IEEE 802网络上提供确定性连接。我们可以把确定性连接这个概念简单理解为网络包传输的低延时,低抖动和无丢包;TSN在汽车控制,工业自动化,电力自动化等领域的应用通过协议簇实现,例如时间同步机制类协议802.1AS,冗余机制类协议802.1CB,服务质量类协议802.1Qbv,Qav,Qbu等和安全机制类协议802.1Qci。在IEEE 802.1DG草案中定义了汽车车内以太网的通信配置要求,时钟同步机制采用802.1AS。

提供确定性连接的关键是共享网络中各组件的时间。802.1AS协议用于满足音频,视频等时间敏感应用和时间敏感控制场景下的时间同步需求;网络配置的更新,网络组件的增加,去除或者故障都不应影响同步功能。为此,协议规定了时间同步模型的架构,同步方法,节点的介质无关子层,介质相关子层具体实现方法。花费大量篇幅解释专业名词并非文章的核心,我们专注于基本概念、同步原理和实现形式。

▎基本概念-gPTP域

在讲解802.1AS协议之前,需要简单介绍一下IEEE 1588协议。IEEE 1588定义了一种精确时间协议,被称为precision time protocol,PTP。802.1AS基于PTP提出了自己的同步模型,并称之为generalized precision time protocol,gPTP。

下图给出了一个时间感知网络拓扑图。在这个网络系统中,由于所有的设备都具有gPTP能力,因此这个网络是一个gPTP域。虽然系统中存在网桥,路由器,终端站等多种设备,对于gPTP域来说只有两类,PTP终端节点(PTP End Instance)和PTP中继节点(PTP Relay Instance)。

如果节点只与一个节点连接,那么这是一个终端节点,比如图中的end station;如果节点与多个节点连接,那么这是一个中继节点,比如下图中的bridge和router;时间同步的最终效果是,所有的节点都以图中与stratum 1时钟源相连的bridge作为时间基准,并不断修正自己的时间;这个时间基准被称为主时钟(Grandmaster Clock,GM)。

图片来源:IEEE 802.1AS 2020
当网络出现故障时,例如外网与本地网络连接中断,本地网络中的所有设备会重新选择一个主时钟设备,也就是下图中的end station(local GM),作为自己的参考对象。

图片来源:IEEE 802.1AS 2020

▎同步原理-延时和频率比值

gPTP域中的时间修正通过发送和接收特定报文实现。首先确定主时钟节点和时间同步生成树,然后该节点会沿生成树方向发送时间同步报文,中继节点转将报文转发至下游节点,最终实现将GM时钟信息传递给域内所有节点。在时间同步过程中,存在两类延时:

  • 转发延时:报文在中继节点中停留的时间。转发延时是中继节点的本地属性,易于计算;
  • 传播延时:报文在链路上传播的时间。传播延时取决于很多因素,例如介质相关属性和链路长度。当两类延时时间都已知,各个节点通过累计报文到达前的转发延时和传播延时便可得到同步时间。

因此我们需要考虑:①如何选择GM时钟?②如何测量报文在同步路径中的延时?
在这里插入图片描述

GM时钟选择

有两种方法可以选择一个gPTP域内的主时钟:

  • 最优主时钟算法(Best Master Clock Algorithm, BMCA)

    使用BMCA来确定gPTP域的GM节点,并以该节点为根构建时间同步生成树。各节点之间通过发送Announce报文来交换最佳主时钟选择信息,通过两两对比报文内容,系统最终收敛到唯一的主时钟。

  • 预定义端口状态

    强制配置一个节点作为GM,并构建以该节点为根的时间同步生成树。

在车载网络中,主时钟是预先分配的,例如将TBOX作为GM,使用GPS时间作为同步时间。

延时测量

gPTP定义了两类报文用于时间同步,事件型报文和一般型报文。在PTP节点入口和出口打上时间戳的报文是事件型报文,没有打时间戳需求的是一般型报文。

  • 事件型报文:Sync、Pdelay_Req、Pdelay_Resp
  • 一般型报文:Follow_Up、Pdelay_Resp_Follow_Up

图片来源:IEEE 802.1AS 2020
传播延时测量方法为两步对等路径延时/对等延时,测量的方向为initiator向responder发起,通过Pdelay_Req、Pdelay_Resp和Pdelay_Resp_Follow_Up获取四个时间t1,t2,t3和t4,测量步骤和计算方法如下:

  • 请求方发送Pdelay_Req报文,记录出口时间戳t1
  • 应答方收到该报文,记录入口时间戳t2;此时请求方获取的时间是t1
  • 应答方反馈Pdelay_Resp报文,记录出口时间戳t3,并在报文中携带t2
  • 请求方收到该报文,记录入口时间戳t4;此时请求方获取的时间是t1,t2,t4
  • 应答方再次发送Pdelay_Resp_Follow_Up报文,并在报文中携带t3;此时请求方获取到时间t1,t2,t3和t4
  • 根据两个方向的时间差值计算传播延时

在这里插入图片描述
需要注意的是,这种测量方式不考虑链路方向的延时差异,假定请求方和应答方之间两个方向的报文传播时间是对称的;这种计算方法对应请求方和应答方走时一致的理想情况,而实际二者的频率差是必然存在的。当请求方的时钟频率比应答方的慢,D会比实际值小。感兴趣的读者可以自己计算一下。

转发延时的测量基于本地时钟,计算报文的出口时间戳和入口时间戳差值。

802.1AS并未规定传播延时测量的方向,但是在车载网络中,一般由Slave端向Master端发起。

由于时间频率不同会导致校准误差,我们需要得到相邻节点的时间频率rateRatio,并将其计入传播延时中。

计算方法为统计连续的Pdelay_Resp和Pdelay_Resp_Follow_Up报文时间戳信息。如下图所示,第一次发送Pdelay_Resp的时间为t3,到达另一端的时间为t4,第二次发送Pdelay_Resp的时间为t3’,到达时间为t4’。

在这里插入图片描述
频率比值计算结果为:

在这里插入图片描述
计入频率比值的传播延时为:

在这里插入图片描述
相邻节点之间的频率比被称为neighborRateRatio,节点与主时钟之间频率比被称为rateRatio;rateRatio是neighborRateRatio的累积乘积,而由于neighborRateRatio与1非常接近(以ppm为单位),实际计算中也可通过累计相加的方式得到。

在这里插入图片描述
传播延时一般是ns-μs量级,转发延时由于交换机转发与处理能力的限制,一般是μs-ms量级。因此,时间同步的误差来源主要是转发延时。

▎实现方式-PTP报文

延时测量方法,测量结果,PTP端口信息和发送周期在时间同步报文(PTP报文)中携带。PTP报文位于MAC帧的数据段,目的MAC地址为固定组播地址01-80-C2-00-00-0E,以太网帧类型为固定0x88F7。

在这里插入图片描述
PTP报头为34字节,包含报文类型messageType,PTP版本号versionPTP,PTP报文字节数messageLength等内容。

Correction field字段是上游节点相对于GM节点的修正值,换算成ns时间需要除以2^16。当follow_up报文中的originTimestamp加上该字段以后,就是上游节点发送该Sync报文的同步时间。

在这里插入图片描述

Sync报文

Sync报文根据一步法和两步法的不同,报文格式存在差异。一步法仅由Sync报文携带延时和频率比值信息。

图片来源:IEEE 802.1AS 2020
如果报头中的两步法标志位为True,那么Sync报文格式如IEEE 802.1AS 2020中的表11-8所示;如果标志位为False,那么Sync报文格式如IEEE 802.1AS 2020中的表11-9所示。由于一步法不发送Follow_Up报文,因此GM节点发送Sync报文的时间originTimestamp和TLV字段统一在Sync报文中携带。车载应用中,通常使用两步法。

在这里插入图片描述

Follow Up报文

Follow_Up报文携带相关Sync报文的出口时间戳信息。

preciseOriginTimestamp是GM节点发送Sync报文的时间。

在这里插入图片描述

Pdelay_Req报文

报文的数据段不携带信息,为保留值。
在这里插入图片描述

Pdelay_Resp报文

requestReceiptTimestamp为Responder接收Pdelay_Req报文的入口时间。

requestingPortIdentity为Pdelay_Req报文的源端口信息。

在这里插入图片描述

Pdelay_Resp_Follow_Up报文

responseOriginTimestamp为Responder发送Pdelay_Resp报文的出口时间。

requestingPortIdentity同样为Pdelay_Req报文的源端口信息。

在这里插入图片描述

▎总结

TSN任务组颁布了IEEE 802.1AS-2020协议以解决本地局域网中各组件的时间同步问题。在一个gPTP域中,各节点测量传播延时,转发延时和频率比值。通过BMCA算法或预配置方式,系统确定主时钟节点并向其他节点发送时间同步报文,完成时间同步。本期协议解读到此就告一段落了,下期我们将为大家带来更多精彩的TSN协议系列解读,敬请期待。

▎参考文献

[1] IEEE Std 802.1AS™‐2020 IEEE Standard for Local and Metropolitan Area Networks —Timing and Synchronization for Time‐Sensitive Applications

[2] IEEE Std 1588™-2008 IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems

相关文章:

TSN协议原理!看完这一篇就够了(1)——时钟同步IEEE802.1AS-2020

▎前言 在许多应用场景中,一个本地局域网中互联的设备集群需要共享同一个时间,以支持各设备的协同工作。例如:音频设备与视频设备的配合播放,雷达与摄像头的数据融合等;这样一个看似简单的域功能,细化成为…...

Intel被喷惨的大小核CPU终于有救,12、13代也沾了光

2021年 Intel 将混合架构引入 PC ,至今也没能让所有用户接受这一改动。 虽然 PE 核心设计 帮助我们更好理解鸡兔同笼问题 带来了额外的多线程性能提升,但对于游戏玩家们可就不那么友好了。 关了吧觉得亏,不关吧又要时不时担心大核偷懒、小核…...

JAVA入门第一步

学习总结: 打开CMD常见的CMD命令 一、打开CMD CMD的概念 CMD是Windows操作系统中的命令提示符(Command Prompt)程序,它是一种命令行工具,可以让用户通过键入命令来与计算机进行交互。CMD是Windows中一个基本的系统组件,它提供了一…...

【scala】使用gradle和scala构建springboot程序

零、版本说明: springboot: 2.7.18 使用log4j2,不使用springboot自带的logback scala版本:2.11 jackson版本:2.16.0 一、依赖: buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("…...

Linux sfdisk命令教程:硬盘分区表编辑器(附实例详解和注意事项)

Linux sfdisk命令介绍 sfdisk是一个用于编辑硬盘分区表的命令。它与fdisk和cfdisk类似,但具有更多的功能。此外,与这两个程序不同,sfdisk可以非交互式地运行。它通常用于从脚本中对驱动器进行分区,或用于分区表的备份和恢复。 L…...

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…...

算法打卡day23|回溯法篇03|Leetcode 39. 组合总和、40.组合总和II、131.分割回文串

算法题 Leetcode 39. 组合总和 题目链接:39. 组合总和 大佬视频讲解:组合总和视频讲解 个人思路 这道组合题主要是有总和的限制,当递归和超过了总和就return,递归时加上回溯去遍历数组。 解法 回溯法 把组合问题抽象为如下树形结构 如上…...

Google研究者们提出了VLOGGER模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

Python从入门到精通秘籍十九

一、Python之union 联合类型注释 当谈论Python中的联合类型注释时,通常会提到Union类型。Union是typing模块中定义的一个泛型类,用于表示多个可能的类型。 Union的语法如下: Union[type1, type2, ...]其中type1, type2, … 是要组成联合类…...

解决:您还有0天的时间继续使用internet download manager

通过修改注册表来白嫖的IDM方法 1、新建txt文件复制代码(命名为idm.reg) 2、代码如下 Windows Registry Editor Version 5.00[-HKEY_CURRENT_USER\Software\Classes\CLSID\{7B8E9164-324D-4A2E-A46D-0165FB2000EC}] [-HKEY_CURRENT_USER\Software\Clas…...

操作系统目录

北航操作系统 chapter 1 北航操作系统 chapter3-1 内存管理 北航操作系统chapter3-2 内存管理 北航操作系统chapter3-3 页式管理 北航操作系统chapter3-4 段式管理 北航操作系统chapter3-5 虚拟内存管理 操作系统chapter4-1 进程与线程 北航操作系统-chapter4.2 同步与互斥…...

常用的Node.js命令集锦

当使用Node.js开发时,以下是一些常用的Node.js命令集锦: npm init 用于初始化一个新的Node.js项目,并创建一个package.json文件来管理项目的依赖和元数据。 npm install [package-name] 用于安装指定的Node.js包,可以通过--save选…...

2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题

“2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题 目录 一.考试说明 1 二.模块B网络构建 2 (一)任务描述 2 (二)任务清单 9 一.考试说明 本模块比赛时间为…...

80386 ATT汇编语法

文章目录 gcc的预处理,不进行编译、汇编或链接预处理编译汇编 8.8.2 AT&T语法与英特尔语法8.8.3操作码命名8.8.4寄存器命名8.8.5操作码前缀8.8.6内存引用8.8.7跳转指令的处理8.8.8浮点8.8.9写入16位代码8.8.10笔记 gcc的预处理,不进行编译、汇编或链…...

如何在Linux系统使用宝塔面板搭建Inis博客并发布至公网【内网穿透】

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…...

【漏洞复现】netgear路由器 boarddataww 存在RCE漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…...

什么是原型链

1、原型链的本质 是一个链表,当使用一个构造函数时,就会返回一个实例,在这个实例上找某个属性未找到时,则会顺着proto属性指向它的原型,去原型上找,如果原型也没有的话,则会顺着原型的原型找&a…...

什么是虚拟线程?

1、典型回答 Java 中的虚拟线程,也叫做协程或“轻量级线程”,它诞生于JDK 19(预览 API),正式发布于 JDK 21,它是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可…...

node.js是什么怎么用常用方法

什么是node.js Node.js是一个基于Chrome V8 JavaScript引擎的服务器端运行环境。它允许使用JavaScript来开发高性能的网络应用程序。Node.js采用事件驱动、非阻塞式I/O模型,使其能够处理大量并发请求而不会出现阻塞。 Node.js最初是由Ryan Dahl于2009年创建的&…...

pikachu靶场第十四关——XSS(跨站脚本)之js输出(附代码审计)

源代码: //这里讲输入动态的生成到了js中,形成xss //javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义//讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修? //这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...