gptp(generalized Precision Time Protocol,广义精确时间同步协议),能够完成微秒级的时间信息同步
gptp定义了两种类型的设备
每一种设备都有自己的本地时钟,设备中用来发布同步时间报文的网络端口被称为主端口,用来接收时间同步报文的被称为从端口
• Time-aware-end station
○ 既可以作为主时钟,也可以作为从时钟
• Time-aware bridge
○ 既可以作为主时钟,也可以作为桥接设备,功能类似于交换机。桥接类设备在收到gptp报文之后,会请报文洗个澡再走,报文在内部洗澡的时间也被称为驻留时间,gptp要求桥设备具有计算驻留时间的能力。
主时钟动态分配机制(BMCA)
系统上电唤醒之后,所有的设备都会去发送一条报文来参与主时钟竞选,报文中含有各自设备的时钟信息。所有的参与竞选设备都会区比较自身的设备时钟与其他设备时钟,并判断是否具有优势,最后选出综合能力最强的作为主时钟。
同步过程
gptp定义了两类报文,事件类型的报文(包括sync,pdelay_req, pdelay_resp)和一般类型报文(包括follow_up, pdelay_resp_follow_up)。Gptp定义设备工作在MAC层。
当设备mac层接受或者发送事件类型的报文时,会触发硬件计数器进行采样,从而获得时钟振荡周期计数值,结合基准时间获取时间戳。一般类型的报文仅用来携带信息,不会触发内部硬件计数器的采样操作。![在这里插入图片描述](https://img-blog.csdnimg.cn/eed1a39282ba4df7a4d30fb7e8511aff.png)
• 测量时钟偏差
○ 在gptp定义的五条报文中,sync和follow_up同为一组报文,周期性发送,用来测量时钟偏差,sync动作由主端口发送,报文离开主端口mac层时,触发主端口记录时间错t1。从端口MAC层收到sync报文之后,记录此时的时间戳t2.随后,主端口将t1时刻放在follow_up报文中发送到从端口,从端口计算时间偏差(t1-t2)加上基准时间完成时间同步。
• 传输延迟测量
gptp采用p2p的方法去测量传输延迟。在p2p方法中,报文只能在相邻设备进行传输,这就要求gptp网络中的所有设备都需要支持gptp功能。同时再定义一组独立的报文负责传输延迟测量,分别为周期发送的pdelay_req,pdelay_resp和pdelay_resp_follow_up。
○ 从端口回先去发送pdalay_req报文,标志着传输延迟测量的开始,在报文离开从端口mac层时
触发从端口记录此时的时间戳t3。主端口MAC层收到Pdelay_Req报文后会记录此时的时间戳t4,随后,主端口通过Pdelay_Resp报文将值t4发送给从端口,同时在Pdelay_Resp报文离开主端口的MAC层时,触发主端口记录此时的时间戳t5,从端口MAC层收到Pdelay_Resp报文后记录此时的时间戳t6。随后,相同的套路,主端口通过Pdelay_Resp_Follow_Up报文将值t5发送给从端口。至此一次传输延迟测量过程已经结束。
gptp频率同步
之前描述的传输延迟测量是基于从端口与主端口时钟振荡频率一致的前提之下得出的。
假设从端口的时钟振荡频率是25MHz,主端口的时钟振荡频率是100MHz,这个时候参考时钟本身的频率比=4,但主从端口的rate ratio还是为1。这意味着从端口在收到一次振荡的时候,原有时间会加40ns,而主端口则加10ns。 如果这个时候从端口由于温度、老化等原因,振荡频率变为26MHz,从端口收到一次振荡的时候再加40ns,显然是不准确的。
而频率同步就是要解决主从端口晶振精度不准带来的误差,通过测量报文可以发现此时rate ratio不为1,则从端口可以基于这个值调整自己的时基了
频率同步复用传输延迟测量过程中的pdelay_resp和pdelay_resp_follow_up报文。通过采用两组答复,最终得到了t5,t6,t9,t10的值。
若频率比大于1,则说明主端口走的比较快,如果小于1,说明主端口走的慢。
gptp与ptp之间的差异
gptp仅仅支持p2p的传输延时测量方式,ptp除了支持p2p的方式还支持e2e的方式,所谓的e2e方法就是测量的是网络中任意两个支持ptp设备之间的传输延迟,在这些设备之间允许存在普通的交换机,用来透传ptp报文的设备。
测量精度:
P2P方法中,报文在bridge设备中驻留时间可以被测量,且会和传输延时时间一起发送给链路上的设备,e2e的方法中,负责透传的交换机中驻留的时间是不可控的,导致测量精度的波动范围大
结构灵活性:
在p2p方法中,测量报文不会跨设备传输,主时钟变化或者新增从时钟,仅仅影响相邻设备,有利于网络的扩展;e2e方法中,无论主时钟还是从时钟变化,都需要重新计算整个网络的时间传输延迟,扩展性能较差
时间戳采样方式
gPTP只能工作在MAC子层,PTP除了可以工作在MAC子层,还可以工作在传输层。工作在传输层时,报文要经历协议栈缓存、操作系统调度等过程,这两个过程都会带来传输延时的增加且大小不可控。而工作在MAC子层时,离物理层只有一步之遥,既能减缓协议栈缓存带来延时的不确定性,又能缩短报文传输延时。
工作在MAC子层时,报文要么直接发给物理层要么从物理层收到,因此时间戳可以选择由物理层硬件打或由软件打。通过硬件的方式打,可以消除操作系统调度带来的延时不确定性。PTP工作在MAC子层时,既支持硬件打时间戳,也支持软件打时间戳。而gPTP从延时可控,延时减少的角度考虑,只允许打硬件时间戳。
时钟类型
PTP时钟支持两种时钟类型,One-Step Clock和Two-Step Clock。在One-Step Clock中,事件报文发送时,同时将本身记录的时间戳发送给从端口,如下图左半部分所示。在Two-Step Clock中,事件报文不携带时间戳信息,需要一条专门的一般类型报文来给从端口发送时间戳,如下图右半部分所示。
One-Step Clock虽然可以比Two-Step Clock节省一条报文,但对硬件要求很高,且硬件成本高,不利于网络扩展和应用普及。在两者精度没有区别的前提下,Two-Step Clock类型显然是gPTP的更优选择,这也是gPTP协议里规定的类型。