news 2026/4/20 21:47:13

PTP协议精讲(2.12):PTP的十种语言——报文格式全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PTP协议精讲(2.12):PTP的十种语言——报文格式全解析

2.12 PTP的十种语言:报文格式全解析

如果PTP报文会说话

想象PTP报文是"信使",在网络中穿梭。

它们携带不同的"信件":

  • Sync:“主时钟说,现在是10:00:00.000000000秒”
  • Announce:“我是主时钟,我的clockClass是6,clockAccuracy是0x20”
  • Delay_Req:“请告诉我,你什么时候收到这条消息?”
  • Delay_Resp:“我在10:00:01.000000100秒收到你的请求”

每种报文都有特定的格式和用途。今天,我们就来"解读"PTP的十种报文。


PTP报文的分类

事件报文(Event Messages)

特点

  • 需要打时间戳
  • 精确性要求高
  • 通常由硬件处理

报文类型

报文类型值用途
Sync0x0携带时间信息
Delay_Req0x1请求延迟测量
Pdelay_Req0x2对等延迟测量请求
Pdelay_Resp0x3对等延迟测量响应

为什么需要时间戳?

这些报文用于时间同步和延迟测量,必须精确记录发送和接收时间。

通用报文(General Messages)

特点

  • 不需要打时间戳
  • 携带配置和状态信息
  • 可以由软件处理

报文类型

报文类型值用途
Follow_Up0x8携带精确时间戳(two-step模式)
Delay_Resp0x9延迟测量响应
Pdelay_Resp_Follow_Up0xA对等延迟测量精确时间戳
Announce0xB主时钟公告
Signaling0xC信令
Management0xD管理

公共报文头部:所有报文的"信封"

头部结构(34字节)

每个PTP报文都以一个34字节的公共头部开始。

字段字节数含义
majorSdoId + messageType1高4位:sdoId高位;低4位:报文类型
minorVersionPTP + versionPTP1高4位:次版本号;低4位:主版本号
messageLength2整个报文的字节数
domainNumber1域编号
minorSdoId1sdoId低位
flagField2标志位
correctionField8校正值(单位:纳秒×2¹⁶)
messageTypeSpecific4消息类型特定字段
sourcePortIdentity10发送端口的标识
sequenceId2序列号
controlField1控制字段(已过时)
logMessageInterval1消息间隔

关键字段详解

messageType(报文类型)

低4位标识报文类型:

  • 0x0:Sync
  • 0x1:Delay_Req
  • 0x2:Pdelay_Req
  • 0x3:Pdelay_Resp
  • 0x8:Follow_Up
  • 0x9:Delay_Resp
  • 0xA:Pdelay_Resp_Follow_Up
  • 0xB:Announce
  • 0xC:Signaling
  • 0xD:Management

高4位(majorSdoId)

用于域隔离(见2.3节)。

domainNumber + sdoId

domainNumber(1字节)+majorSdoId(高4位)+minorSdoId(1字节)= 完整的域标识。

flagField(标志位)

16位标志位,各位含义:

字节名称含义
00alternateMasterFlagTRUE表示发送端口不在MASTER状态
01twoStepFlagTRUE表示会有Follow_Up
02unicastFlagTRUE表示单播
05-6profileSpecific1/2Profile定义
10leap61当月最后一分钟61秒
11leap59当月最后一分钟59秒
12currentUtcOffsetValidUTC偏移有效
13ptpTimescaleTRUE表示PTP时间尺度
14timeTraceable时间可溯源
15frequencyTraceable频率可溯源
16synchronizationUncertain同步不确定
correctionField(校正字段)

8字节整数,单位是纳秒×2¹⁶,支持亚纳秒精度。

用途

  • 携带小数纳秒部分
  • 透明时钟累加驻留时间
  • 路径不对称校正值

示例

correctionField = 0x0000000000028000 值 = 0x28000 / 65536 = 2.5纳秒
sourcePortIdentity(发送端口标识)

10字节

  • 前8字节:clockIdentity
  • 后2字节:portNumber

示例

clockIdentity = 00-1B-19-00-00-00-00-01 portNumber = 0x0001 sourcePortIdentity = 00-1B-19-00-00-00-00-01-00-01
sequenceId(序列号)

2字节,标识报文的序号。

用途

  • 关联Sync和Follow_Up
  • 关联Delay_Req和Delay_Resp
  • 检测丢包

各报文类型详解

Sync报文

格式

字段字节数
公共头部34
originTimestamp10

originTimestamp(10字节)

  • 6字节:秒部分
  • 4字节:纳秒部分

one-step模式

Sync报文直接携带发送时间戳(误差≤1秒)。

two-step模式

Sync报文的originTimestamp为0或估计值,精确时间戳由Follow_Up携带。


Follow_Up报文

格式

字段字节数
公共头部34
preciseOriginTimestamp10

preciseOriginTimestamp(10字节)

精确的Sync发送时间戳。

关联规则

Follow_Up报文的sequenceId必须与对应的Sync报文相同。


Delay_Req报文

格式

字段字节数
公共头部34
originTimestamp10

originTimestamp

通常设为0(因为从时钟不知道自己的时间是否准确)。

用途

从时钟发送Delay_Req,主时钟回复Delay_Resp,用于测量路径延迟。


Delay_Resp报文

格式

字段字节数
公共头部34
receiveTimestamp10
requestingPortIdentity10

receiveTimestamp(10字节)

主时钟接收Delay_Req的时间。

requestingPortIdentity(10字节)

发送Delay_Req的端口标识(用于关联)。

示例

从时钟发送Delay_Req(sequenceId = 100)。
主时钟在1000.000001000秒接收Delay_Req。
主时钟发送Delay_Resp:

  • receiveTimestamp = 1000.000001000秒
  • requestingPortIdentity = 从时钟的portIdentity
  • sequenceId = 100

Pdelay_Req报文

格式

字段字节数
公共头部34
originTimestamp10
reserved10

reserved字段

保留字段,使报文长度与Pdelay_Resp一致,避免不对称。

用途

P2P机制中,测量两个端口之间的链路延迟。


Pdelay_Resp报文

格式

字段字节数
公共头部34
requestReceiptTimestamp10
requestingPortIdentity10

requestReceiptTimestamp

响应者接收Pdelay_Req的时间(t2)。

one-step模式

Pdelay_Resp的correctionField携带(t3 - t2)。

two-step模式

Pdelay_Resp携带t2,Pdelay_Resp_Follow_Up携带t3。


Pdelay_Resp_Follow_Up报文

格式

字段字节数
公共头部34
responseOriginTimestamp10
requestingPortIdentity10

responseOriginTimestamp

响应者发送Pdelay_Resp的时间(t3)。


Announce报文

格式

字段字节数
公共头部34
originTimestamp10
currentUtcOffset2
reserved1
grandmasterPriority11
grandmasterClockQuality4
grandmasterPriority21
grandmasterIdentity8
stepsRemoved2
timeSource1

grandmasterClockQuality(4字节)

  • 1字节:clockClass
  • 1字节:clockAccuracy
  • 2字节:offsetScaledLogVariance

stepsRemoved

到Grandmaster的边界时钟跳数。

timeSource

Grandmaster的时间源类型(如GNSS、原子钟)。

用途

  • 主时钟广播自己的信息
  • 用于BMCA决策
  • 传播时间属性(UTC偏移、闰秒等)

Signaling报文

格式

字段字节数
公共头部34
targetPortIdentity10
后缀(TLV序列)可变

用途

  • 单播协商
  • 路径追踪
  • 其他信令功能

后缀

一个或多个TLV(Type-Length-Value)实体。


Management报文

格式

字段字节数
公共头部34
targetPortIdentity10
startingBoundaryHops1
boundaryHops1
reserved1
actionField1
reserved1
managementTLV可变

actionField

  • 0:GET(读取)
  • 1:SET(设置)
  • 2:RESPONSE(响应)
  • 3:COMMAND(命令)
  • 4:ACKNOWLEDGE(确认)

用途

  • 配置PTP设备
  • 查询状态
  • 故障诊断

报文长度汇总

报文类型基础长度(字节)备注
Sync44可加TLV
Delay_Req44可加TLV
Follow_Up44可加TLV
Delay_Resp54可加TLV
Pdelay_Req54含10字节保留
Pdelay_Resp54可加TLV
Pdelay_Resp_Follow_Up54可加TLV
Announce62可加TLV
Signaling44+头部+TLV序列
Management48+头部+管理TLV

一个完整的报文示例

Sync报文(one-step)

十六进制表示

00 00 00 2C // majorSdoId=0, messageType=0x0(Sync), version=2.1, length=44 00 00 00 00 // domainNumber=0, minorSdoId=0 00 00 // flagField=0 00 00 00 00 00 00 00 00 // correctionField=0 00 00 00 00 // messageTypeSpecific=0 00 1B 19 00 00 00 00 01 00 01 // sourcePortIdentity 00 64 // sequenceId=100 00 00 // controlField=0, logMessageInterval=0 00 00 00 00 00 00 03 E8 // originTimestamp秒=1000 00 00 00 00 // originTimestamp纳秒=0

解读

  • 报文类型:Sync
  • PTP版本:2.1
  • 域:0
  • 发送端口:clockIdentity=00-1B-19-00-00-00-00-01, portNumber=1
  • 序列号:100
  • 发送时间:1000.000000000秒

Announce报文

十六进制表示(简化)

00 0B 00 3E // messageType=0xB(Announce), length=62 00 00 00 00 // domainNumber=0, minorSdoId=0, flagField=0 ... 00 1B 19 00 00 00 00 01 00 01 // sourcePortIdentity 00 64 // sequenceId=100 ... 00 00 00 00 00 00 00 00 // originTimestamp=0 00 25 // currentUtcOffset=37 00 // reserved 0A // grandmasterPriority1=10 06 20 00 00 // clockClass=6, clockAccuracy=0x20, variance=0 0A // grandmasterPriority2=10 00 1B 19 00 00 00 00 01 // grandmasterIdentity 00 00 // stepsRemoved=0 20 // timeSource=0x20(GNSS)

解读

  • 报文类型:Announce
  • 发送端口:clockIdentity=00-1B-19-00-00-00-00-01, portNumber=1
  • Grandmaster信息:
    • priority1=10, priority2=10
    • clockClass=6, clockAccuracy=0x20
    • timeSource=GNSS
  • stepsRemoved=0(发送者自己就是Grandmaster)

小结:PTP报文的核心要点

报文分类

  • 事件报文:需要时间戳(Sync、Delay_Req、Pdelay_Req、Pdelay_Resp)
  • 通用报文:不需要时间戳(Follow_Up、Delay_Resp、Pdelay_Resp_Follow_Up、Announce、Signaling、Management)

公共头部

  • 34字节
  • 包含报文类型、域标识、校正字段、发送端口等

关键报文

  • Sync:时间同步
  • Announce:主时钟公告
  • Delay_Req/Resp:E2E延迟测量
  • Pdelay系列:P2P延迟测量

报文关联

  • 通过sequenceId关联相关报文
  • 通过sourcePortIdentity标识发送者

下集预告

PTP报文格式是固定的,但有时需要扩展功能。

下一节,我们将讲解TLV扩展机制——如何在固定格式基础上,灵活扩展PTP功能。

【悬念留给2.13】

你可能注意到:PTP报文有一个"后缀"部分,可以携带TLV。

TLV是什么?它能做什么?

  • PATH_TRACE TLV:记录报文经过的路径
  • CUMULATIVE_RATE_RATIO TLV:携带频率信息
  • AUTHENTICATION TLV:安全认证

下一节,我们详细解读TLV扩展机制。

📚本文内容摘自本人的开源书《PTP技术书 - 从思想实验到协议实现》

全书从时间本质的思想实验出发,深度解析 IEEE 1588 协议、逐章分析 LinuxPTP 源码,并带你动手实现一个轻量级 PTP 程序(ptp-lite)。

🔗 在线阅读/下载:ptp-book

gitclone https://github.com/Lularible/ptp-book.git

⭐ 如果对您有帮助,欢迎 Star 支持,也欢迎通过 GitHub Issues 交流讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 21:45:17

开发会计实训课程市场匹配度数据测评小程序,比对职校教学实训数据和企业智能岗位需求,量化脱节分值生成改革建议。

一、实际应用场景描述场景设定某职业院校开设《智能会计综合实训》课程,学生完成:- 凭证录入- 智能记账- 财务报表生成- 税务申报模拟与此同时,合作企业(如代账公司、制造企业财务共享中心)提供了真实岗位能力需求指标…

作者头像 李华
网站建设 2026/4/20 21:44:05

微服务架构中的分布式事务处理方案与数据一致性保障

微服务架构中的分布式事务处理方案与数据一致性保障 随着微服务架构的广泛应用,系统被拆分为多个独立部署的服务,每个服务拥有独立的数据库。这种松耦合的设计提升了系统的灵活性和可扩展性,但也带来了分布式事务与数据一致性的挑战。在跨服…

作者头像 李华
网站建设 2026/4/20 21:36:42

【金蝶云星空】报表如何设置勾稽关系校验

学习目标学习本内容后,您将掌握如何设置报表勾稽关系校验。业务背景小蝶每月在出报表时,发现资产负债表不平衡系统也没有进行校验提醒。现在想要加上这个校验。操作步骤打开报表模板 找到要修改的报表模板双击打开修改前确认已经反审核报表模板新增校验…

作者头像 李华
网站建设 2026/4/20 21:35:48

3分钟掌握文件秒传工具:免安装网页版文件分享解决方案

3分钟掌握文件秒传工具:免安装网页版文件分享解决方案 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘文件分享的繁琐流程…

作者头像 李华