
IEEE1588(PTP)协议简介
IEEE1588协议,称作PTP(precise time protocol, 精确时间协议),2002年发布version1,2008年发布version2。即可以用硬件实现,也可以用软件实现。当采用硬件实现时可以达到ns级的精度,采用软件实现时通常可以达到ms级精度。当在网络中采用软件实现亚毫秒的精度时,存在多种因素的 影响会造成时间同步的不可靠。例如:网络的不平稳性、网卡对信息包的缓存效应、操作系统进程调度的影响。
IEEE1588v2协议提出的同步原理Delay Request-Response Mechanism(延时响应机制)如图1所示。

图1 PTP协议延迟响应机制
图中所描述的PTP报文为一下几种:
- sync 同步报文
- Follow_up 跟随报文
- Delay_req 延迟请求报文
- Delay_resp 延迟请求响应报文
延迟相应同步机制的报文收发流程:
主时钟周期性的发出sync报文,并记录下sync报文离开主时钟的精确发送时间t1。
(如果sync在此时携带发送时间,这个发送时间并不是精确的,是预估的,在不要求精度的情况下允许这么做,称为单步同步)
主时钟将精确发送时间t1封装到Follow_up报文中,发送给从时钟。
从时钟记录sync报文到达从时钟的时间t2。
从时钟发出Delay_req报文并且记录下发出的时间t3。
主时钟记录下Delay_req报文到达主时钟的精确时间t4。
主时钟将t4封装到Delay_resp报文给从时钟。
主从时钟的差异主要是由时钟偏差和数据包在网络中传输的延迟构成。
时钟偏差&网络延时
offset:主从时钟的时间偏差;delay:网络延时(报文在网络中传输的延时)
经过延迟响应同步机制后,从时钟获得t1,t2,t3,t4四个精确的时间戳,可以据此计算offset和delay:

在从时钟中计算得到offset和delay,用current_time表示从时钟的当前时间,那么同步公式为:
current_time = current_time - offset - delay