Precision Time Protocol (PTP) IEEE 1588
PTP 是一种高精度时间同步协议, 在网络通过同步信号周期性对所有节点时钟校正。
PTP一般在硬件级实现的,精度更高,常见的是直接在 MAC 层嵌入时间戳, 1588v1能达到亚毫秒级精度,1588v2能达到亚微秒级精度。1588v2本只用于设备间高精度时间同步,随着技术的发展,1588v2也具备频率同步功能。
NTP是在应用层软件实现.精度在毫秒级别。
同步过程:
参考上图,同步过程有以下步骤:
- sync同步报文。由主时钟发起的,并且真正包发送的精确时间t1记录下来。
- Follow_up跟随报文,把第1步记录下来的时间戳t1发送给从时钟。
- Delay_req延迟请求报文,由从时钟发送给主时钟,从时钟把精确时间t3记录下来。主时钟收到此报文时,把接收的精确时间t4记录下来。
- Delay_resp延迟请求响应报文,主时钟把第3步记录的t4,,通过报文发送给从时钟。
- 从时钟收到Delay_resp报文以后,凑齐t1,t2,t3,t4,一共4个时间戳。假设网络通信的延迟delay固定,通过这几个时间戳,可以推算出delay的值,以及从时钟与住时钟的偏差。
计算:
假设从时钟加上一个offset就跟主时钟对上,可知t_master = t_slave + offset。
可以得到以下方程:
t1 + delay = t2 + offset。 (sync同步包的发送接收过程)
t3 + offset + delay = t4。 (delay request 和 response的过程)。
挪动一下变量,可以得到以下方程。
delay – offset = t2 – t1
delay + offset = t4 – t3
解二元一次方程,可以得到
delay = ((t4 – t3) + (t2 – t1)) / 2
offset =( (t4 – t3) – (t2 – t1)) / 2