当前位置:文档之家› PTP高精度时间同步协议

PTP高精度时间同步协议

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报文

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: 180373fffed 2018-08-30 10:05:54.732676 ptpd2[27616].eno1 (notice) (slv) Now in state: PTP_SLAVE, Best master: 180373 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

相关主题