继上一期带你读懂时间敏感网络 (TSN) 中的时间同步协议 gPTP(一),这期为您带来该系列的第二篇。
多端口实例、中继实例
多端口PTP实例的每个端口都具有收发PTP报文的能力,当其成为GrandMaster时会向所有支持802.1AS的链路发送Announce报文与Sync报文。当PTP实例不是中继实例且成为Slave时会选择可获得最高同步精度的端口作为Slave端口,其他端口收到的Sync报文将被忽略,忽略Sync的端口称为Passive端口。BMCA算法首先使用systemIdentity判断哪个实例是最佳GrandMaster,当多个端口收到相同systemIdentity时,BMCA算法选取连接到至GrandMaster经转发最少链路的端口成为Slave端口。gPTP通过stepsRemoved识别报文被转发的次数,它和GrandMaster信息一起在Announce报文中传输,每经过一个PTP节点该值会加一。
中继实例(Relay Instance)是指拥有转发和处理时间同步消息功能的PTP实例,通过中继实例时间同步消息能够准确传播到网络中的多个设备上。典型的中继实例有支持gPTP的交换机、路由器等。相对于非中继实例,中继实例会同时拥有Master、Slave、Passive端口。
中继实例选择Slave端口的逻辑与多端口实例的逻辑相同,都是收到包含最佳systemIdentity、stepsRemoved参数Announce报文的端口成为Slave端口。若实例当前GrandMaste的systemIdentity优于端口收到的systemIdentity端口将成为Master端口,其他端口成为Passive端口。以下为PTP实例的Master/Slave层次结构:
注意:本文为方便读者理解将多端口实例、中继实例、单端口实例的BMCA算法进行了拆分解释,实际上各种PTP实例使用的BMCA算法相同。
sync转发
如前文所属,当GrandMaste与Slave实例直连时Slave实例通过以下数据计算本地时钟与Master时钟的偏移:
链路延迟
而当Slave端口与中继实例相连时,Pdelay报文不会被转发而是由中继实例直接响应,Slave端口测得的链路延迟为到中继节点的延迟而非到GrandMaste的延迟。另外中继实例对Sync报文的处理、转发操作也会增加Sync报文从GrandMaste到达Slave的时间,按照前文中的方法将无法得出正确的时钟偏移量。实际上每个gPTP报文的包头都带有correctionField字段,在与Sync对应的Followup报文中该字段表示对应的Sync报文从被GrandMaster发出,到被最后一个中继实例发出经过的时间,有了该变量即使GrandMaster与Slave间存在中继实例,Slave依然可求得与Master时钟的正确偏移量。
correctionField由中继实例计算,每个中继实例会将以下值相加得出correctionField:
中继实例转发Sync报文时会使用新计算的correctionField替换原报文中的correctionField。