BMCA的实现
最佳主时钟选择是由5个状态机互相配合实现,通过比较各网络节点的时钟参数,最终选举出一个gPTP域内的最佳主时钟GM。
BMCA描述
BMCA通过比较一组具有优先级的表示系统的时钟性能的向量,选出时钟性能最好的网络节点(桥或端站)为最佳主时钟。
BMCA流程图
如图4.1所示,BMCA通过比较一组衡量时钟性能的优先级向量,确定A、B两个节点中时钟性能较好的一个。BMCA开始运行后首先比较A、B两个节点的SystemIdentity向量,该向量包含6个元素分别为:
(1) priority1 (1 octet,一个字节):表示时钟的优先级变量1,取值范围为0-255。
(2)clockClass (1 octet):表示时钟的质量等级。
(3)clockAccuracy (1 octet):表示时钟精度。
(4)offtScaledLogVariance (2 octets)小投资赚钱:表示时钟的稳定度。
(5)成分残缺的病句priority2 (1 octet):表示时钟的优先级变量2,取值范围为0-255。
(6)clockIdentity (8 octets):表示时钟识别信息。
其中priority1和priority2由人为根据实际情况设定,clockClass观察的反义词,clockAccuracy和offtSca
ledLogVariance是时钟源的固有参数由时钟源厂家提供,clockIdentity是每一个时间感知系统的固有时钟ID,通常要求每个节点的clockIdentity互不相同。
经过比较如果A、B两节点的SystemIdentity不是所有的元素都相等,则认为A和B两点的SystemIdentity不同,随后开始按照顺序逐个比较SystemIdentity中的元素,所有的元素值越小表示时钟性能越好,当优先级高的元素比较出大小之后立即结束比较,确定出时钟性能较好的节点。当两个节点选出时钟性能较好的之后,性能较差的那个节点会将自身的SystemIdentity向量设置为与之相比较好的那个节点的SystemIdentity向量值。最终在一个gPTP域中选择出时钟性能最好的那个网络节点作为最佳主时钟,同时BMCA还要完成系统端口角色的确定。
假设在gPTP域中选出了一个时钟性能最好的节点(假设为C),此时A、B两个节点的SystemIdentity向量值相等,但是因为A、B是相邻端口需要确定主从关系。如图4.1所示,此时A和B再来比较stepsRemoved、sourcePortIdentity和portNumber三个参数来确定主从关系。首先比较stepsRemoved,它表示当前节点距离超主的跳数,即选择A、B中距离超主近的作为主节点远的作为从节点,以此来确定端口的主从角色。如果A、B两个节点距离
超主的跳数也相等,那么继续比较sourcePortIdentity和portNumber两个参数,其中电脑怎么没声音sourcePortIdentity表示发送报文的端口标识,portNumber表示接收报文端口的端口号。通过逐级比较,最终确定A、B两个节点的主从关系。
BMCA实现过程不忍卒读的意思
4.1.1节描述了两个节点之间的BMCA比较过程,在一个时间感知系统内部系统通过6种结构相同功能不同的优先级向量的相互传递,完成端口和系统状态及信息的更新,以实现超主的选择与端口角色的确认,6种向量的功能如下:
(1)portPriorityVector:记录各个端口处的时钟信息,分别接收来自其他系统的messagePriorityVector或本系统的masterPriorityVector用以更新自身的数据。并根据更新的情况确定端口角色,然后将结果传递给其他系统的端口或本系统。
(2)messagePriorityVector:本地系统向其他系统的端口发送Announce中所含的本系统认定的超主时钟信息向量。
(3)gmPathPriorityVector:对portPriorityVector中的步长部分加一处理后得到的向量。
(4)systemPriorityVector:本地系统时钟信息向量。
(5)gmPriorityVector:由本地系统所选出的当前状态下超主时钟信息向量,由各个端口得到。
(6)masterPriorityVector:当系统选出gmPriorityVector向量后据此向量生成masterPriorityVector用以将其认定的超主信息向其他系统传递。
BMCA在时间感知系统内的运行步骤可以分为算法初始化及发送和接收到Announce后处理两部分。如图4.2所示,系统初始化后根据本地的时钟信息生成systemPriorityVector向量,根据systemPriorityVector初始化并生成gmPriorityVector向量根据此向量的内容生成masterPriorityVector向量,并且将其传给系统的各端口。各端口通过收到的masterPriorityVector向量结合端口内数据生成portPriorityVector和messagePriorityVector向量,并且根据messagePriorityVector向量的内容打包到Announce报文中的响应字段,报文打包完成后按照设定的周期发送。
BMCA初始化步骤
如图4.3所示,时间感知系统的端口在获取相邻系统的端口发送的Announce报文后,从报文中解析数据生成messagePriorityVector向量,并且与端口自身的portPriorityVector向量比较,选出二者时钟信息最优的作为新的portPriorityVector向量。更新后的portPriorityVector将其中的stepsRemoved加一得到gmPathPriorityVector向量,系统各端口都执行相同的操作。时间感知系统将得到的gmPathPriorityVector与本地的systemPriorityVector向量,按照BMCA的比较方法选择最佳的作为系统的gmPriorityVector向量,更新系统的messagePriorityVector向量并发送给系统的各端口。各端口根据收到的messagePriorityVector向量再更新各端口的messagePriorityVector向量和portPriorityVector,准备下次的Announce报文的发送。
BMCA收到报文后处理步骤
状态机的实现
本文3.1.3节系统描述了BMCA的5个状态机之间的数据流关系,本节按照状态机的功能、状态机变量和状态跳转,详细描述每个状态机的实现。
(1)PortAnnounceReceive 状态机
状态机功能:
a)从MD entity接收Announce报文信息并检验报文信息是否合法。
b)根据检验的结果设置rcvdMsg接收标志变量。
状态机变量如表4.1所示:
PortAnnounceReceive 状态机变量
变量名称 | 类型 | 描述 |
rcvdAnnounce | Boolean | Announce报文接收标志 |
rcvdMsg | Boolean | Announce报文校验结果标志 |
portEnabled | Boolean | 端口是否使能 |
狗一直叫pttPortEnabled | Boolean | 端口是否支持时间同步与BMCA |
asCapable | Boolean | 端口是否支持IEEE 802.1AS协议 |
| | |
状态机跳转:如图4.4所示,PortAnnounceReceive状态机初始状态为DISCARD,在此状态下完成对rcvdAnnounce和rcvdMsg两个变量的初始化,初始值为fal。当时间感知系统支持IEEE 802.1AS协议并且端口使能且支持时间同步和最佳主时钟选择,即portEnabled、pttPortEnabled和asCapable同时为true。此时该状态机等待接收MD实体转发过来的报文,收到Announce报文后首先将rcvdAnnounce设置为true然后跳转到RECEIVE状态。在RECEIVE状态下首先将rcvdAnnounce接收标志置为fal,然后完成对Announce报文的解析和判断,如果是正确的Announce报文将rcvdMsg置为true,并且将Announce报文中的信息转发给PortAnnounceInformation学生会职务描述状态机。完成上述操作之后状态机停留在RECEIVE状态,等待PortAnnounceInformation状态机接收完Announce数据之后将rcvdMsg置为fal,之后PortAnnounceReceive状态机仍停留在R防校园欺凌手抄报ECEIVE状态等待下一次从MD实体转发过来的Announce报文。