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

PTP协议精讲(3.12):单播协商实现——PTP的“专线服务“

3.12 单播协商实现PTP的专线服务为什么需要单播默认PTP使用组播但有些场景需要单播组播的局限性 1. 跨网段问题 - 组播可能被路由器阻止 - TTL限制传播范围 - 需要组播路由支持 2. 网络负载 - 所有设备都收到所有报文 - 浪费带宽 - 不必要的处理 3. 精确控制 - 无法指定特定主时钟 - 无法控制服务质量 - 无法按需分配资源 单播的优势 1. 跨网段 - 穿越路由器 - 无组播限制 - 更广的覆盖范围 2. 按需服务 - 只发送给请求者 - 节省网络带宽 - 精确控制目标 3. 服务质量 - 可协商发送速率 - 可协商持续时间 - 灵活的参数配置 适用场景 - 跨路由器的PTP - 电信运营商网络 - 数据中心互联单播协商协议信令消息单播协商使用Signaling消息 Signaling Message结构 ┌─────────┬─────────┬──────────┬──────────┐ │Header │Target │TLV │TLV │ │34 bytes │Port ID │(Request) │(Grant) │ │ │10 bytes │Variable │Variable │ └─────────┴─────────┴──────────┴──────────┘ 包含的TLV - REQUEST_UNICAST_TRANSMISSION - GRANT_UNICAST_TRANSMISSION - CANCEL_UNICAST_TRANSMISSION - ACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSION协商流程单播协商三步握手 步骤1请求从时钟→ 主时钟 Signaling消息包含 - REQUEST_UNICAST_TRANSMISSION TLV - messageType请求的消息类型Sync/Announce/Delay_Resp - logInterMessagePeriod发送间隔 - durationField请求的持续时间秒 步骤2授权主时钟 → 从时钟 Signaling消息包含 - GRANT_UNICAST_TRANSMISSION TLV - messageType同意的消息类型 - logInterMessagePeriod实际发送间隔 - durationField授权的持续时间 - flags授权标志 步骤3开始传输 主时钟按协商参数发送单播消息 从时钟接收并处理 步骤4取消可选 任何一方可以发送CANCEL_UNICAST_TRANSMISSION 对方响应ACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSIONTLV结构详解REQUEST_UNICAST_TRANSMISSION/* tlv.h, 第283-289行 */structrequest_unicast_xmit_tlv{Enumeration16type;/* 0x0004 */UInteger16length;uint8_tmessage_type;/* 请求的消息类型 */Integer8 logInterMessagePeriod;/* 发送间隔log2秒 */UInteger32 durationField;/* 持续时间秒 */};消息类型编码message_type字段 bit 7-4消息类型 bit 3-0保留 编码 0x10 ANNOUNCE 0x20 SYNC 0x40 DELAY_RESP 0x50 PDELAY_RESP 示例 请求Sync消息message_type 0x20 请求Announce消息message_type 0x10 logInterMessagePeriod 发送间隔 2^logInterMessagePeriod 秒 示例 0每1秒发送一次 -3每0.125秒发送一次125ms 3每8秒发送一次GRANT_UNICAST_TRANSMISSION/* tlv.h, 第169-177行 */structgrant_unicast_xmit_tlv{Enumeration16 type;/* 0x0005 */UInteger16 length;uint8_tmessage_type;/* 消息类型 */Integer8 logInterMessagePeriod;/* 发送间隔 */UInteger32 durationField;/* 授权时长 */uint8_treserved;uint8_tflags;/* 授权标志 */};flags字段/* tlv.h, 第150行 */#defineGRANT_UNICAST_RENEWAL_INVITED(10)flags含义 bit 0RENEWAL_INVITED - 1主时钟邀请从时钟续约 - 0不邀请续约 续约流程 1. 授权即将到期 2. 主时钟设置RENEWAL_INVITED 1 3. 从时钟收到后可以提前请求续约 4. 避免服务中断 其他bits保留。CANCEL_UNICAST_TRANSMISSION/* tlv.h, 第162-167行 */structcancel_unicast_xmit_tlv{Enumeration16 type;/* 0x0006 */UInteger16 length;uint8_tmessage_type_flags;/* 消息类型和标志 */uint8_treserved;};取消流程取消场景 1. 从时钟不再需要服务 - 断开连接 - 切换到其他主时钟 - 停止同步 2. 主时钟无法继续服务 - 资源不足 - 设备关闭 - 配置变更 取消消息 CANCEL_UNICAST_TRANSMISSION TLV - message_type_flags要取消的消息类型 确认消息 ACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSION TLV - 确认收到取消请求 - 停止发送/接收LinuxPTP实现unicast_client结构/* port.h中定义 */structunicast_client{LIST_ENTRY(unicast_client)list;structPortIdentityportIdentity;/* 目标端口ID */structPortAddressaddress;/* 目标地址 */uint8_tmessage_type;/* 消息类型 */Integer8 logInterMessagePeriod;/* 发送间隔 */UInteger32 durationField;/* 剩余时长 */structtimespecgrant_time;/* 授权时间 */intstate;/* 状态 */};发送请求/* port.c中的单播请求简化 */staticintport_request_unicast(structport*p,structunicast_client*client){structptp_message*msg;structrequest_unicast_xmit_tlv*req;/* 构造Signaling消息 */msgmsg_allocate();msg-header.messageTypeSIGNALING;/* 设置目标 */msg-signaling.targetPortIdentityclient-portIdentity;/* 构造REQUEST TLV */req(structrequest_unicast_xmit_tlv*)msg-management.suffix;req-typeTLV_REQUEST_UNICAST_TRANSMISSION;req-lengthsizeof(*req)-sizeof(structTLV);req-message_typeclient-message_type;req-logInterMessagePeriodclient-logInterMessagePeriod;req-durationFieldclient-durationField;/* 字节序转换 */tlv_pre_send((structTLV*)req,NULL);/* 发送 */returnport_tx(p,msg,p-trp);}处理授权/* port.c中的授权处理简化 */staticvoidport_handle_grant(structport*p,structgrant_unicast_xmit_tlv*grant){structunicast_client*client;/* 字节序转换 */grant-durationFieldntohl(grant-durationField);/* 查找对应的请求 */clientfind_unicast_client(p,grant-message_type);if(!client)return;/* 更新参数 */client-logInterMessagePeriodgrant-logInterMessagePeriod;client-durationFieldgrant-durationField;client-stateUNICAST_GRANTED;/* 记录授权时间 */clock_gettime(CLOCK_MONOTONIC,client-grant_time);pr_info(unicast grant received: type %u, interval %d, duration %u,grant-message_type4,client-logInterMessagePeriod,client-durationField);}发送单播消息/* port.c中的单播发送简化 */staticintport_tx_unicast(structport*p,structptp_message*msg,structunicast_client*client){/* 设置目标地址 */msg-addressclient-address;/* 使用transport_sendto发送到特定地址 */returntransport_sendto(p-trp,p-fda,TRANS_EVENT,msg);}配置示例从时钟配置# /etc/linuxptp/ptp4l.conf[global]# 启用单播协商unicast_nego_enabledefault1# 单播主时钟表unicast_master_tabletable1[table1]# 表索引table_id1# 主时钟列表logAnnounceInterval1 logSyncInterval-3logDelayReqInterval-3# 主时钟地址# 格式addressprioritymaster_address192.168.1.100128 master_address192.168.1.101127[eth0]# 使用单播主时钟表unicast_master_tabletable1主时钟配置# /etc/linuxptp/ptp4l.conf[global]# 启用单播服务unicast_nego_enabledefault1# 允许单播请求inhibit_multicast_service0[eth0]# 主时钟优先级priority1128 priority2128启动命令# 从时钟启动ptp4l-ieth0-f/etc/linuxptp/ptp4l.conf-m# 主时钟启动ptp4l-ieth0-m-S# 查看单播状态pmc-uGET UNICAST_MASTER_TABLE_NP单播 vs 组播对比特性组播单播地址224.0.1.129特定IP覆盖范围子网内可跨网段网络负载所有设备接收仅目标接收配置复杂度简单较复杂动态性自动发现需要协商延迟测量E2E或P2PE2E适用场景局域网广域网、跨网段小结单播协商的关键要点核心概念Signaling消息三步握手请求→ 授权 → 传输TLV类型REQUEST_UNICAST_TRANSMISSIONGRANT_UNICAST_TRANSMISSIONCANCEL_UNICAST_TRANSMISSIONACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSION协商参数消息类型发送间隔持续时间适用场景跨网段PTP按需服务精确控制下集预告单播解决了如何建立专线服务但网络中的故障如何诊断下一节我们将分析故障处理与诊断——看看LinuxPTP如何应对各种故障场景。【悬念留给3.13】PTP网络中可能遇到各种故障。如何检测链路故障如何处理主时钟丢失如何诊断同步问题下一节最后一节源码分析。本文内容摘自本人的开源书《PTP技术书 - 从思想实验到协议实现》全书从时间本质的思想实验出发深度解析 IEEE 1588 协议、逐章分析 LinuxPTP 源码并带你动手实现一个轻量级 PTP 程序ptp-lite。 在线阅读/下载ptp-bookgitclone https://github.com/Lularible/ptp-book.git⭐ 如果对您有帮助欢迎 Star 支持也欢迎通过 GitHub Issues 交流讨论。

相关文章:

PTP协议精讲(3.12):单播协商实现——PTP的“专线服务“

3.12 单播协商实现:PTP的"专线服务" 为什么需要单播 默认PTP使用组播,但有些场景需要单播: 组播的局限性:1. 跨网段问题- 组播可能被路由器阻止- TTL限制传播范围- 需要组播路由支持2. 网络负载- 所有设备都收到所有…...

SMHasher问题排查:常见错误及其解决方案

SMHasher问题排查:常见错误及其解决方案 【免费下载链接】smhasher Hash function quality and speed tests 项目地址: https://gitcode.com/gh_mirrors/smha/smhasher SMHasher是一款用于测试哈希函数质量和速度的开源工具,广泛应用于哈希算法的…...

机器学习赋能软件质量保障:从Bug自动分类到智能缺陷管理实战

1. 项目概述:当机器学习遇见软件质量保障在软件开发的日常里,Bug(缺陷)的识别、分类和处理,是每个工程师和测试人员绕不开的“日常任务”。想象一下,一个大型开源项目,每天有成百上千个新的Bug报…...

解锁QuickCut视频处理黑科技:从光流法补帧到视频倒放的完整指南

解锁QuickCut视频处理黑科技:从光流法补帧到视频倒放的完整指南 【免费下载链接】QuickCut Your most handy video processing software 项目地址: https://gitcode.com/gh_mirrors/qu/QuickCut QuickCut作为一款便捷的视频处理软件,不仅提供基础…...

DeepLake:AI数据管理的瑞士军刀,从原理到实战全解析

1. 项目概述:为什么说DeepLake是AI数据管理的“瑞士军刀”?如果你正在构建一个AI应用,无论是图像识别、自然语言处理还是多模态模型,数据管理绝对是你绕不开的“拦路虎”。数据格式五花八门,从图片、文本到视频、点云&…...

Docker GitHub Actions Runner 多环境部署:开发、测试与生产环境配置

Docker GitHub Actions Runner 多环境部署:开发、测试与生产环境配置 【免费下载链接】docker-github-actions-runner This will run the new self-hosted github actions runners with docker-in-docker 项目地址: https://gitcode.com/gh_mirrors/do/docker-git…...

如何为Runtime Mobile Security (RMS)扩展新功能并贡献到开源社区:完整指南

如何为Runtime Mobile Security (RMS)扩展新功能并贡献到开源社区:完整指南 【免费下载链接】RMS-Runtime-Mobile-Security Runtime Mobile Security (RMS) 📱🔥 - is a powerful web interface that helps you to manipulate Android and iO…...

终极PDF OCR工具指南:如何用OCRmyPDF快速实现文档扫描识别与智能PDF处理 [特殊字符]✨

终极PDF OCR工具指南:如何用OCRmyPDF快速实现文档扫描识别与智能PDF处理 📄✨ 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OC…...

终极指南:BinNavi与Ghidra全方位对比,哪款开源二进制分析工具更适合你?

终极指南:BinNavi与Ghidra全方位对比,哪款开源二进制分析工具更适合你? 【免费下载链接】binnavi BinNavi is a binary analysis IDE that allows to inspect, navigate, edit and annotate control flow graphs and call graphs of disassem…...

深度解析 ArcGIS Python API 栅格分析功能:遥感数据处理完全教程

深度解析 ArcGIS Python API 栅格分析功能:遥感数据处理完全教程 【免费下载链接】arcgis-python-api Documentation and samples for ArcGIS API for Python 项目地址: https://gitcode.com/gh_mirrors/ar/arcgis-python-api ArcGIS Python API 是一款功能强…...

10个必学的Laravel Artisan命令:提升开发效率的终极自动化工具

10个必学的Laravel Artisan命令:提升开发效率的终极自动化工具 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel Artisan是Larav…...

Laravel并行测试:3倍速提升测试效率的终极实战指南

Laravel并行测试:3倍速提升测试效率的终极实战指南 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel是一款拥有简洁优雅语法的We…...

Laravel断言库终极指南:掌握20+测试验证方法的实战技巧

Laravel断言库终极指南:掌握20测试验证方法的实战技巧 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel是一款拥有简洁优雅语法的…...

终极指南:Laravel如何无缝连接PHP与JavaScript构建高效前后端交互

终极指南:Laravel如何无缝连接PHP与JavaScript构建高效前后端交互 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel是一款拥有简…...

告别XSS攻击!Laravel HTML生成安全实战指南

告别XSS攻击!Laravel HTML生成安全实战指南 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel是一款具有表达性、优雅语法的Web应…...

终极GStreamer安全指南:防范多媒体处理中的25个致命风险

终极GStreamer安全指南:防范多媒体处理中的25个致命风险 【免费下载链接】gstreamer GStreamer open-source multimedia framework 项目地址: https://gitcode.com/gh_mirrors/gs/gstreamer GStreamer作为开源多媒体框架,广泛应用于视频播放、直播…...

Vinix音频子系统解析:HDA驱动与OSS兼容层的实现原理

Vinix音频子系统解析:HDA驱动与OSS兼容层的实现原理 【免费下载链接】vinix Vinix is an effort to write a modern, fast, and useful operating system in the V programming language 项目地址: https://gitcode.com/gh_mirrors/vi/vinix Vinix是一个用V语…...

Lowdefy核心概念深度解析:Blocks、Operators、Actions和Requests的终极指南

Lowdefy核心概念深度解析:Blocks、Operators、Actions和Requests的终极指南 【免费下载链接】lowdefy Build apps that AI can generate, humans can review, and teams can maintain. Config that works between code and natural language. 项目地址: https://g…...

gltf-pipeline入门教程:5分钟学会glTF与glb格式转换

gltf-pipeline入门教程:5分钟学会glTF与glb格式转换 【免费下载链接】gltf-pipeline Content pipeline tools for optimizing glTF assets. :globe_with_meridians: 项目地址: https://gitcode.com/gh_mirrors/gl/gltf-pipeline glTF Pipeline是一款强大的内…...

Twake Drive开发环境搭建:从零开始的完整教程

Twake Drive开发环境搭建:从零开始的完整教程 【免费下载链接】twake-drive-legacy LEGACY: The open-source alternative to Google Drive. 项目地址: https://gitcode.com/gh_mirrors/tw/twake-drive-legacy Twake Drive是一款开源的Google Drive替代方案…...

卡内基梅隆大学研究团队告诉你,如何让AI代理既安全又好用

这项由卡内基梅隆大学软件工程研究团队主导的研究,发表于2026年的软件工程与人工智能交叉领域,论文编号为arXiv:2604.15579,有兴趣深入了解的读者可以通过该编号查询完整论文。设想你开了一家医院,雇了一位能力超群的新员工。这位…...

Fewshot Corp与卡内基梅隆发现:超15%AI测试题存在可被绕过漏洞

这项由Fewshot Corp与卡内基梅隆大学联合开展的研究,以预印本形式于2026年4月19日发布,论文编号为arXiv:2604.17596,研究团队来自两个机构,分别是专注于少样本学习应用的Fewshot Corp,以及在AI安全领域具有重要影响力的…...

如何用Style2Paints实现专业级动漫上色:从草图到成品的完整指南

如何用Style2Paints实现专业级动漫上色:从草图到成品的完整指南 【免费下载链接】style2paints sketch style paints :art: (TOG2018/SIGGRAPH2018ASIA) 项目地址: https://gitcode.com/gh_mirrors/st/style2paints Style2Paints是一款强大的AI驱动工具&am…...

上海交通大学等机构开发出能“真正玩游戏“的AI程序员

这项由上海交通大学、浙江大学、腾讯光子工作室联合完成的研究,于2026年4月发表在ACM旗下期刊,论文编号为arXiv:2604.19742,感兴趣的读者可通过该编号查阅完整原文。说到底,让AI写代码这件事已经不算新鲜了。GPT系列、Claude系列这…...

告别僵硬动画:用mojs曲线编辑器打造丝滑路径动画的终极指南

告别僵硬动画:用mojs曲线编辑器打造丝滑路径动画的终极指南 【免费下载链接】mojs The motion graphics toolbelt for the web 项目地址: https://gitcode.com/gh_mirrors/mo/mojs mojs是一款专为网页设计的强大运动图形工具库,它以快速、支持视网…...

3步轻松下载B站资源:BiliTools跨平台工具箱使用指南

3步轻松下载B站资源:BiliTools跨平台工具箱使用指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 还在…...

终极智能导航神器:autojump让终端操作效率翻倍

终极智能导航神器:autojump让终端操作效率翻倍 【免费下载链接】autojump A cd command that learns - easily navigate directories from the command line 项目地址: https://gitcode.com/gh_mirrors/au/autojump autojump是一款革命性的终端导航工具&…...

SDQM:合成数据质量评估的创新方法与实践

1. 合成数据质量评估的行业痛点与SDQM创新在计算机视觉领域,数据饥渴已成为制约模型性能提升的主要瓶颈。以工业质检场景为例,要训练一个能识别金属零件表面缺陷的YOLOv11模型,通常需要数万张标注精准的样本。但实际生产中,缺陷样…...

3分钟解锁Cursor Pro永久免费:终极破解工具完全指南

3分钟解锁Cursor Pro永久免费:终极破解工具完全指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...

高通Open-Q SiP模块工业应用与开发实战

1. 高通平台Open-Q 2290CS与4290CS SiP模块深度解析在工业物联网和机器视觉领域,硬件模块的选型往往决定了整个项目的技术上限。Lantronix最新推出的Open-Q 2290CS和4290CS两款系统级封装(SiP)模块,基于高通QCS2290/QCS4290平台打造,为开发者…...