ptp精准时间协议_PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码(转载)...

本文详细介绍了精密时间协议(PTP)的工作原理,包括亚微秒级精度、与NTP的区别、主从同步机制、报文类型及其实现方式。通过在Ubuntu上安装和配置ptpd,展示了PTP的单播和组播模式,并提供了一段CS模式的测试代码,解释了如何计算时间偏移和传输延时。实验结果显示,通过PTP,客户端能够实现与服务器的时间同步。
摘要由CSDN通过智能技术生成

Precision Time Protocol (PTP)

一、什么是PTP

PTP 是一种高精度时间同步协议,可以到达亚微秒级精度,有资料说可达到30纳秒左右的偏差精度,但需要网络的节点(交换机)支持PTP协议,才能实现纳秒量级的同步。

一般在实际使用中,现有的NTP可以达到5ms以内的精度,对一般的应用都是满足的;非超高精度设备,不建议使用PTP设备。

与NTP主要区别:PTP是在硬件级实现的,NTP是在应用层级别实现的.

PTP 是主从同步系统,一般采用硬件时间戳,并配合一些对NTP更高精度的延时测量算法。

PTP 最常用的是直接在 MAC 层进行 PTP 协议包分析 , 这样可以不经过UDP 协议栈 , 减少PTP 在协议栈中驻留时间 , 提高同步的精确度。

PTP 也可以承载在 UDP 上时 , 软件可以采用 SOCKET 进行收发 UDP包 , 事件消息的 UDP 端口号 319 , 普通消息的组播端口号为 320 ,但其精度就大大降低。

在物理硬件要求主从端都是PTP设备,且网络不能太大,其中间经过的交换机设备也必须支持PTP协议,并且主从时间网络链路唯一,不存在交替的PTP通道。

PTPv2 采用相对时间同步机制。一个参与者被选作主时间钟,其将发送同步信息到从站。主站将发送同步报文到网络。所有的从站计算时间延迟。

Fig. 39.1 PTP Synchronization Protocol

The PTP synchronization in the sample application works as follows:

Master sends Sync message - the slave saves it as T2.

Master sends Follow Up message and sends time of T1.

Slave sends Delay Request frame to PTP Master and stores T3.

Master sends Delay Response T4 time which is time of received T3.

The adjustment for slave can be represented as:

adj = -[(T2-T1) - (T4-T3)]/2

从钟根据 t1 、 t2 、 t3 、 t4 计算时间偏移 (offset) 以及传输延时 ( delay) ,即

t2 -t1 = offset + delay

t4 - t3 = delay - offset

计算出

delay = ( t4 - t3 + t2 - t1) / 2

offset = ( t2 - t1 - t4 + t3) / 2

从钟根据 offset 从钟可以调整自己的时钟。

二、PTP的一些名词

PTP域中的节点称为时钟节点,PTP协议定义了以下三种类型的基本时钟节点:

OC(Ordinary Clock,普通时钟):只有一个PTP通信端口的时钟是普通时钟。

BC(Boundary Clock,边界时钟):有一个以上PTP通信端口的时钟。

TC(Transparentclock,透明时钟):与BC/OC相比,BC/OC需要与其它时钟节点保持时间同步,而TC则不与其它时钟节点保持时间同步。TC有多个PTP端口,但它只在这些端口间转发PTP协议报文并对其进行转发延时校正,而不会通过任何一个端口同步时间。TC包括以下两种类型:

E2ETC(End-to-End TransparentClock,端到端透明时钟):直接转发网络中非P2P(Peer-to-Peer,点到点)类型的协议报文,并参与计算整条链路的延时。

P2PTC(Peer-to-PeerTransparent Clock,点到点透明时钟):只直接转发Sync报文、Follow_Up报文和Announce报文,而终结其它PTP协议报文,并参与计算整条链路上每一段链路的延时。

一般链式的P2P网络选择E2E-TC,而从钟节点较多的网络考虑P2P-TC。因在 P2P 延时测量机制中,延时报文交互是在每条链路的两个端口间进行的,主钟只与直接相连的网络交换设备有延时报文交互,因此在 P2P TC 的延时测量机制中,没有对从钟数量的限制。

主时钟:一个PTP通信子网中只能有一个主时钟。

三、PTP报文

PTP协议定义了4种多点传送的报文类型和管理报文,包括同步报文(Sync),跟随报文(Follow_up),延迟请求报文(Delay_Req),延迟应答报文(Delay_Resp)和管理报文。

报文有一般报文和事件报文两种类型。跟随报文和延迟应答报文属于一般报文,一般报文本身不进行时戳处理,它可以携带事件报文的准确发送或接收时刻值信息。同步报文和延迟请求报文属于事件报文,事件报文是时间敏感消息,需要加盖精确的时间戳。

同步报文是从主时钟周期性发出的(一般为每两秒一次),它包含了主时钟算法所需的时钟属性,它包含了一个时间戳,精确地描述了数据包发出的预计时间。

(1) Sync: 同步消息 , 由主设备发送给从设备 , 消息中可以包含 Sync 发送时间标签 , 也可以在后续的Follow UP 消息中包含 ;

(2) Delay Req: 请求对端返回接收到 Delay Req消息时的时间标签 , 时间标签嵌入在响应消息Delay Resp ;

(3) Pdelay req: 用于发起链路延时测量请求 , 带发送时间标签。

普通消息没有时间标签 , 主要用于传递其他消息的发送时间标签、系统状态以及管理信息 , 包括 :

(4) Announce: 广播发送节点和高级主钟的状态和特征信息 ;

(5) Follow Up : 用于传送Sync 消息的发送时间 ;

(6) Delay Resp : 对 Pdelayreq 的响应 , 可以带发送时间标签 , 如果没有带由随后的 Pdelay RespFollow Up 传送 ;

(7) Pdelay Resp Follow Up : 用于传送 DelayResp 的发送时间 ;

(8) Management : 传输用于管理时钟设备的的信息以及命令 ;Signaling: 在不同时钟之间传送信息、请求以及命令。

(9) Signaling: 在不同时钟之间传送信息、请求以及命令。

由于Sync包发送前,无法直接获取到硬件发送Sync包的时间; Sync发送后,可以获取到硬件发送Sync时间

ptpd源代码[2]net.c中的实现:

netSendPcapEther -> sendto或pcap_inject发包

getTxTimestamp 获取精确发送时间

四、局域网中实验

ubuntu下安装

$ sudo apt instal ptpd

server ip 192.168.37.68

$ sudo ptpd -M -i eno1 -C

指定了“仅主控”模式 向外组播数据

client

$ sudo ptpd -g -i eno1 -C

等一会就会看到输出

2018-08-30 10:05:23.271647 ptpd2[27616].eno1 (notice) (lstn_reset) Now in state: PTP_LISTENING

2018-08-30 10:05:54.732606 ptpd2[27616].eno1 (info) (lstn_reset) New best master selected: 180373fffed4ca44(unknown)/1

2018-08-30 10:05:54.732676 ptpd2[27616].eno1 (notice) (slv) Now in state: PTP_SLAVE, Best master: 180373fffed4ca44(unknown)/1 (IPv4:192.168.37.68)

2018-08-30 10:05:55.732189 ptpd2[27616].eno1 (notice) (slv) Received first Sync from Master

2018-08-30 10:05:56.732758 ptpd2[27616].eno1 (notice) (slv) Received first Delay Response from Master

1

2

3

4

5

修改server的系统时间,client也会跟着同步.如果client开启了网络时间同步,系统时间会不停的在网络同步的时间和主服务器的时间之间进行切换

wireshark抓包看了一下,组播地址224.0.1.129,使用的是319和320端口

单播模式

服务器端 -u 指定单点广播模式 向指定IP发送数据

$ sudo ptpd -u 192.168.92.153 -M -i eno1 -V

客户端 接受指定IP的数据

$ sudo ptpd -u 192.168.52.190 -i eno1 -V

五、CS模式测试代码

使用CS模式实现如下伪PTP协议:

ID方向动作动作客户端状态服务器状态说明

1c -> st1 send()t2 recvc:t1s:t2t1时刻,客户端向服务器发请求,服务器收包时间为t2,

此时客户端知道t1, 服务器端知道t2

2c

此时客户端知道t1,t2,t4, 服务器端知道t2,t3

3c -> ssend(t1,t4)c:t1,t2,t4s:t1,t2,t3,t4

4c

offset: t1端比t2端慢多少 负数表示t1端比t2端时间要快

delay: 延迟

delay = ( t4 - t3 + t2 - t1 ) / 2

offset = ( t2 - t1 - t4 + t3 ) / 2

官方文档timestamping.txt里的部分说明:

三个socket选项,都设置一下

SO_TIMESTAMP

SO_TIMESTAMPNS

SO_TIMESTAMPING

时间戳生成的几个标志位:

SOF_TIMESTAMPING_TX_SOFTWAR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值