IEEE 1588 Sync报文单步时间戳

欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线。

在IEEE 1588中,报文的单步时间戳应用于Sync报文和Pdelay_resp报文。这两种报文的单步时间戳的实现有着不同的定义。本文介绍的是Sync报文的单步时间戳,这是单步时间戳最常见的应用,而支持Pdelay_resp报文的单步时间戳的网络硬件非常少见,目前的linux内核中,都没有一种硬件设备支持它。

什么是单步时间戳

什么叫两步时间戳,什么叫单步时间戳?我们结合Sync报文的发送来看一下。
Sync-two-step
Master在发送Sync报文时,记录发送时间戳t1,紧接着通过发送一个Follow_up报文,把t1告诉slave。所以说对slave而言,接收Sync报文并且拿到Sync报文的发送时间戳t1,是需要master的两步发送。这种情况下的时间戳,就叫做两步时间戳。
单步时间戳实际上省去了发送Follow_up报文的步骤,在Sync报文从master的网络硬件发出来的同时,网络硬件会直接在报文上插入t1的时间信息。这样slave在收到Sync报文的时候,报文上已经包含了t1的信息。这种情况下的时间戳,就叫做单步时间戳。
显然,使用单步时间戳必须要网络硬件支持才行。

Sync报文的格式

在进一步了解单步时间戳如何将发送时间信息插入到Sync报文上之前,我们不得不先看看Sync报文的格式。IEEE 1588除了对1588报文分配了指定的以太网层,UDP/IP层的多播地址、端口和ethtype之外,还对报文的数据内容做了定义。
Sync报文的数据内容定义如下。它是由一个header和一个originTimestamp的字段组成。
Sync-format
其header中的各个字段定义如下。
ptp-header
我们在这里重点关注两个字段,一个是originTimestamp,一个是correctionField。因为Sync报文两步时间戳和单步时间戳的区别就在这两个字段的内容上。
originTimestamp字段代表对Sync报文发送时间的评估值。其格式定义如下。在两步时间戳的情况下,该字段为0。

struct Timestamp
{
	UInteger48 secondsField;
	UInteger32 nanosecondsField;
};

correctionFeild字段代表Sync报文从网络硬件发出之前,经历的链路延迟。它的类型是interger64,其数值是链路延迟的纳秒值乘以2^16。例如,2.5ns可以表示为0x0000000000028000。通常作为master构建的Sync报文发送时,两步时间戳的情况下该字段为0。

Sync报文单步时间戳插入

上面我们了解到,在两步时间戳的情况下,Sync报文的originTimestamp和correctionFeild字段的数值都是0。那么单步时间戳有什么不同呢。

  1. 在发送Sync报文之前,originTimestamp字段会被写入发送时间评估值,这个评估值和真正的发送时间戳要求误差要在1s之内。通常是软件读出1588 time写到这个字段内。
  2. Sync报文真正从硬件发送的时候,硬件会在correctionFeild字段加上一个延迟时间。

这样correctionFeild + originTimestamp的时间值就是真正的发送时间戳。如果报文是UDP报文的话,硬件还要修改UDP校验和。

我们用wireshark可以查看一个收到的单步时间戳的Sync报文。注意correctionFeild和originTimestamp两个字段。
correctionFeild
sync-correction
originTimestamp
sync-origintimestamp

结束语

以上就是Sync报文的单步时间戳介绍。未来会有更多IEEE 1588的技术知识介绍给大家。

  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值