IEEE1588协议(精密时间协议)

解读

用于计算机网络中的时钟,在局域网中,他能将时钟精确度控制在亚微秒范围内,使其适于测量和控制系统。

为时钟分配定义了一个主从式架构,由一个或多个网段及一个或多个时钟组成。

TSN网络中时间同步协议使用IEEE802.1AS协议,是基于IEEE1588协议进行精简和修改,也称为gPTP协议。

基本工作原理

通过主从节点之间进行同步数据帧的发送,记录数据帧的发送时间和接收时间信息进行,并且将该时间信息添加到该数据帧中。从节点获取这些时间信息,并计算从节点本地时钟和主时钟的时间偏差和网络节点的传输延时,对本地时钟进行纠正,使之和主时钟同步。一个PTP网络中只能存在一个主时钟。

PTP协议主要分为两大部分来实现时钟同步的功能

1、协议使用最佳主时钟算法,通过选取主时钟,建立主从拓扑关系,进而在整个PTP网络中建立起同步体系。

2、协议使用本地时钟同步算法,通过PTP数据报文在网络主从节点之间的交换,计算各从节点本地时钟和主时钟间的时间偏差,调整本地时钟,使之与主时钟同步。

IEEE1588V1

在整个ptp网络内的时钟可按照其上PTP通信端口的数目来划分成普通时钟和边界时钟

普通时钟只存在一个,而边界时钟则存在多个。一般在确定性不高的网络节点处使用边界时钟,例如交换机或者路由器一般作为边界时钟,如下图所示,在每个端口上,PTP通信都是独立进行的。

1、边界时钟

边界时钟上只允许存在一个从端口,与上级节点的主端口通信,将其本地时钟和上级主端口进行同步。其余端口为主端口,与下游节点的从端口进行通信。边界时钟可以连接不同的网络协议。

注:边界时钟一般是交换机、网关、中继器等设备才需要的,我们的应用仅需要普通时钟就可以了。

2、同步体系建立

1、初始状态:各个节点端口会在指定的时间内侦听网络中的sync报文;若接收到sync数据帧,节点端口会根据最佳主时钟算法决定端口状态。若没有收到sync数据帧,改节点状态变更为pre_Master,并将自己嘉定为主时钟节点。此时节点端口状态为主时钟,但是并不发送sync报文。

2、端口状态在一定时间内保持Pre_Master:

若在端口指定时间内接收sync数据帧,则改端口状态由最佳主时钟算法决定。

若判定端口为主时钟,则将周期性的发送sync数据帧;若判定为从时钟,则接收sync帧,并计算偏差,纠正本地时钟。

若在该时间段内端口没有收到sync数据帧,则状态会变更为主时钟,并且开始定时发送sync数据帧。

3、主时钟和从时钟的状态随着时钟性能与运行状态的变化而变化,如下图展示

3、时间同步建立流程

如下图PTP同步原理

如图所示,Master为网络中的同步时钟源,可以认为其与UTC和GPS时无限接近。slave为网络中需要呗同步的设备。假设Master到slave的路径符合对称路劲,那么路径上的延时,我们设delay,然后设备Master和设备slave之间的时间差值为offset,即slave比master在同一时刻慢offset。

则下面推导式:

T2=Offset+Delay+T1

T4=T3-Offset+Delay

得出:

Delay=[(T2−T1)+(T4−T3)]/2

Offset=[(T2−T1)−(T4−T3)]/2

slave设备根据算出的offset即可以进行本地时钟校准。但是1588V1协议依赖于链路的对称性,即Master到salve和slave到master时延一致,和实际网络情况不符。

IEEE1588V2

主要是在1588V1上面做了扩展和改进,包括

 

1、新增点到点路径延时测量的独立信息模式。

端口A和端口B间的延时时间delay为

Delay=(tab+tba)/2

Delay=(T4−T1−(T3−T2))/2

在PTPV1中,平均路径延时测量是通过sync和delay_req帧配合使用的,但是在PTPV2中不需要sync帧的参与,仅通过PDelay_Req数据帧系列来进行测量。是一个独立延时测量的过程。

好处:

不依赖sync帧和同步体系建立的参与,使得测量精度更高,并可以通过多次测量求得平均值和得到更为准确的路径。

若网络中的同步体系发生变化,这时uxuyao重新计算该节点间的路径延迟,直接使用之前已经测的的延时数据,增强协议的执行效率,使得协议更为方便。

2、新增透明时钟模型

在PTPv1中网络中间节点采用边界时钟模型。主时钟发送时间同步信息,然后边界时钟进行从节点接收,在从此边界时钟的主节点发送时间同步信息去下一个边界时钟的从端口,以此类推。方法虽然可行,但是由于这种方式是逐级同步的,所以距离主时钟越远的节点,同步精度越低。

当网络中的一些节点不需要进行时钟同步或者不具备同步功能时,采用透明时钟模型。端口只针对协议数据帧进行转发,并将计算的数据帧滞留时间添加到校正域里面。这种方式的PTP数据帧的透明时钟模型有两种:端对端透明时钟、点对点透明时钟。

1、端对端透明时钟(E2E)

E2E透明时钟对网络 中普通数据帧不做处理,仅进行转达让其正常通过。但对PTP事件数据帧,则将他们从接收端口到发送端口间的驻留延时时间累加到数据帧中的修正域,用来弥补PTP数据帧在经过其自身所带来的延时误差。

2、点对点透明时钟(P2P)

P2P透明时钟只转发特定的PTP报文,包括sync、Follo_up和Announce报文等。并且会采用Pdelay_Req数据帧系列计算每个端口与所连接的端口间的路径延迟时间,在与端口间延时时间合并添加到时间修正域,来补偿数据帧从源端口到点对点透明市长出端口的时间延迟。

3、增加单步时钟模型

单步时钟模型解决了 Follow_Up 帧与 Sync 帧匹配问题。PTP 协议基本的同步过程采用双步模式,即主时钟节点发送 Sync 帧,和带有 Sync 帧发送时间的Follow_Up帧。这种方式虽然能提高 Sync 帧时间戳标记的精度,提高同步效果,但是在网络负载较大的情况下,数据帧很有可能发生丢失或者阻塞,造成两种数据帧的匹配出现差错。

在 PTP 数据帧中设置一个标志,来使用单步模式,将 Sync 帧的发送时间与数据帧中的时间标签的差值作为传输延迟,并将其累加到修正域中。这样主时钟便通过单独的 Sync 帧而不需要 Follow_Up 进行时间的同步校准工作。

单步模式可以减少网络流量,提高网络负载较大时同步的可靠性。单步模式需要额外的辅助硬件,来帮助计算时间修正值并将其累加到校正域中,这对网络的实时性有比较高的要求。

最佳主时钟算法(BMCA)

BMCA,即最佳主时钟算法,它选择网络中性能最佳的时钟作为主时钟,并以此建立网络拓扑,生成同步体系,进而实现时钟同步功能。

​ 最佳主时钟的选取是通过Announce帧在网络中各节点的传输,比较各个节点上的时钟属性(比如是否将时钟指定为主或者从时钟),用于标识精度的时钟等级,以及用于标识时钟源类型的时钟类型(比如铷钟、铯钟等),还有表示时钟偏移、方差等的时钟特性、时钟地址以及时钟端口号等特征来选择最佳主时钟,当其他时钟特征都一样是,协议会将端口号最小的节点时钟作为主时钟。IEEE 1588协议会以主时钟节点作为根节点形成树形拓扑结构,并且为避免生成回路,那些竞争失败的节点端口,协议将他们定义为被动或者禁用状态。

Announce报文

当域中没有人为指定主时钟时,域中设备利用此报文自动选出主时钟。每个域中只能有一个主时钟。Announce报文对外发送自身时钟特性信息,域中的其他设备将此报文用于最佳主时钟算法。

SYNC、FOLLOW_UP报文的发送

SYNC报文由处于Master状态的时钟周期性的发送,间隔时间为1(秒) ×(2^portDS.logSyncInterval)。

FOLLOW_UP是SYNC的关联报文,应在SYNC之后,尽快发送。

FOLLOW_UP头中的sequenceId应当与SYNC头中的sequenceId相同

Delay_Req报文的发送

端口处于slave或uncalibrated(未校准的)状态时,才可以发送此报文。

发送时间要求为:

第一帧Delay_Req的时间没有额外要求,之后的间隔应使用响应报文中的logMessageInterval计算,公式为1(秒) ×2^portDS.logMinDelayReqInterval。logMinDelayReqInterval=最后一次接收到的Delay_Resp中的logMessageInterval。

连续Delay_Req的时间间隔应该随机分布,分布时间范围为0~2^(logMinDelayReqInterval+1)秒之间,又不能大于2的(logSyncInterval-4)次方秒,每次发送前都应重新计算此随机值。

Delay_Resp报文的发送

端口处于Master状态时,才可以发送此报文。

接收到Delay_Req报文后,应尽快发送此报文。

在发送报文之前应:

1.计算logMinDelayReqInterval的更新值。

2.用上面的计算结果更新发送端口的portDS.longMinDelayReqInterval值

PTP状态机包含以下几种状态:

initializing(初始化):初始化数据集、硬件、通讯设备。时钟端口不发送任何PTP报文。边界时钟:如果有一个端口处于这种状态,则其它所以端口都应处于这种状态。

faulty(错误的):故障状态。在此状态下,除了响应部分管理报文外,端口不应发送任何PTP报文。边界时钟:故障端口不应影响其他端口,否则所以端口都应处于此状态。

disable(失效的):端口不向外发送任何PTP报文,除管理报文外,所有接收的报文都应当丢弃。边界时钟:该端口的行为不允许影响其他端口的行为。

listening:端口等待announceReceiptTimeout超时,或者等待主时钟的Announce报文。该状态的目的是有序的将时钟增加到一个域。当端口处于此状态时,除Pdelay_Req、Pdelay_Resp、Pdealy_Resp_Follow_Up、信号报文或管理报文的响应报文,不应发送任何其他报文。

Pre_Master:此状态下只能发送Pdelay_Req、Pdelay_Resp、Pdelay_Resp_Follow_Up、信号报文和管理报文,其余部分和MASTER状态一样。

Master:端口作为主时钟进行动作。

Passive(被动的):端口只能发送Pdelay_Req、Pdelay_Resp、Pdelay_Resp_Follow_Up、信号报文或管理报文的响应。不能发送其他报文。

uncalibrated(未校准的):当域中有多个主时钟时。已选择了合适的主时钟,并且本地端口正准备同步到所选的主时钟。这是一个暂时状态,以便允许各种初始化、数据集更新等动作。

Slave:端口同步到所选的主时钟端口。

Logo

获取更多汽车电子技术干货

更多推荐