最佳主时钟选择是由5个状态机互相配合实现,通过比较各网络节点的时钟参数,最终选举出一个gPTP域内的最佳主时钟GM。
BMCA描述
BMCA通过比较一组具有优先级的表示系统的时钟性能的向量,选出时钟性能最好的网络节点(桥或端站)为最佳主时钟。
开始A SystemIdentity=B SystemIdentityNA>Bpriority1 A=BA>BclockClass A=BA>BclockAccuracy A=BA>BoffsetScaledLogVariance A=BA>Bpriority2 A=BB的时钟性能优于AYA>B+1A (1) priority1 (1 octet,一个字节):表示时钟的优先级变量1,取值范围为0-255。 (2)clockClass (1 octet):表示时钟的质量等级。 (3)clockAccuracy (1 octet):表示时钟精度。 (4)offsetScaledLogVariance (2 octets):表示时钟的稳定度。 (5)priority2 (1 octet):表示时钟的优先级变量2,取值范围为0-255。 (6)clockIdentity (8 octets):表示时钟识别信息。 其中priority1和priority2由人为根据实际情况设定,clockClass,clockAccuracy和offsetScaledLogVariance是时钟源的固有参数由时钟源厂家提供,clockIdentity是每一个时间感知系统的固有时钟ID,通常要求每个节点的clockIdentity互不相同。 经过比较如果A、B两节点的SystemIdentity不是所有的元素都相等,则认为A和B两点的SystemIdentity不同,随后开始按照顺序逐个比较SystemIdentity中的元素,所有的元素值越小表示时钟性能越好,当优先级高的元素比较出大小之后立即结束比较,确定出时钟性能较好的节点。当两个节点选出时钟性能较好的之后,性能较差的那个节点会将自身的SystemIdentity向量设置为与之相比较好的那个节点的SystemIdentity向量值。最终在一个gPTP域中选择出时钟性能最好的那个网络节点作为最佳主时钟,同时BMCA还要完成系统端口角色的确定。 假设在gPTP域中选出了一个时钟性能最好的节点(假设为C),此时A、B两个节点的SystemIdentity向量值相等,但是因为A、B是相邻端口需要确定主从关系。如0所示,此时A和B再来比较stepsRemoved、sourcePortIdentity和portNumber三个参数来确定主从关系。首先比较stepsRemoved,它表示当前节点距离超主的跳数,即选择A、B中距离超主近的作为主节点远的作为从节点,以此来确定端口的主从角色。如果A、B两个节点距离超主的跳数也相等,那么继续比较sourcePortIdentity和portNumber两个参数,其中sourcePortIdentity表示发送报文的端口标识,portNumber表示接收报文端口的端口号。通过逐级比较,最终确定A、B两个节点的主从关系。 BMCA实现过程 0节描述了两个节点之间的BMCA比较过程,在一个时间感知系统内部系统通过6种结构相同功能不同的优先级向量的相互传递,完成端口和系统状态及信息的更新,以实现超主的选择与端口角色的确认,6种向量的功能如下: (1)portPriorityVector:记录各个端口处的时钟信息,分别接收来自其他系统的messagePriorityVector或本系统的masterPriorityVector用以更新自身的数据。并根据更新的情况确定端口角色,然后将结果传递给其他系统的端口或本系统。 (2)messagePriorityVector:本地系统向其他系统的端口发送Announce中所含的本系统认定的超主时钟信息向量。 (3)gmPathPriorityVector:对portPriorityVector中的步长部分加一处理后得到的向量。 (4)systemPriorityVector:本地系统时钟信息向量。 (5)gmPriorityVector:由本地系统所选出的当前状态下超主时钟信息向量,由各个端口得到。 (6)masterPriorityVector:当系统选出gmPriorityVector向量后据此向量生成masterPriorityVector用以将其认定的超主信息向其他系统传递。 BMCA在时间感知系统内的运行步骤可以分为算法初始化及发送和接收到Announce后处理两部分。如0所示,系统初始化后根据本地的时钟信息生成systemPriorityVector向量,根据systemPriorityVector初始化并生成gmPriorityVector向量根据此向量的内容生成masterPriorityVector向量,并且将其传给系统的各端口。各端口通过收到的masterPriorityVector向量结合端口内数据生成 portPriorityVector 和 messagePriorityVector 向量,并且根据 messagePriorityVector向量的内容打包到Announce报文中的响应字段,报文打包完成后按照设定的周期发送。 初始化systemPriorityVector生成portPriorityVector生成masterPriorityVector填充Announce报文并发送 BMCA初始化步骤 如0所示,时间感知系统的端口在获取相邻系统的端口发送的Announce报文后,从报文中解析数据生成messagePriorityVector向量,并且与端口自身的portPriorityVector向量比较,选出二者时钟信息最优的作为新的portPriorityVector向量。更新后的portPriorityVector将其中的stepsRemoved加一得到gmPathPriorityVector向量,系统各端口都执行相同的操作。时间感知系统将得到的gmPathPriorityVector与本地的systemPriorityVector向量,按照BMCA的比较方法选择最佳的作为系统的gmPriorityVector向量,更新系统的messagePriorityVector向量并发送给系统的各端口。各端口根据收到的messagePriorityVector向量再更新各端口的messagePriorityVector向量和portPriorityVector,准备下次的Announce报文的发送。 接收Announce报文并解析生成gmPathPriorityVector生成gmPriorityVector生成masterPriorityVector更新各端口向量参数 BMCA收到报文后处理步骤 状态机的实现 本文错误!未找到引用源。节系统描述了BMCA的5个状态机之间的数据流关系,本节按照状态机的功能、状态机变量和状态跳转,详细描述每个状态机的实现。 (1)PortAnnounceReceive 状态机 状态机功能: a)从MD entity接收Announce报文信息并检验报文信息是否合法。 b)根据检验的结果设置rcvdMsg接收标志变量。 状态机变量如0所示: PortAnnounceReceive 状态机变量 变量名称 rcvdAnnounce rcvdMsg portEnabled pttPortEnabled asCapable 类型 Boolean Boolean Boolean Boolean Boolean 描述 Announce报文接收标志 Announce报文校验结果标志 端口是否使能 端口是否支持时间同步与BMCA 端口是否支持IEEE 802.1AS协议 状态机跳转:如0所示,PortAnnounceReceive状态机初始状态为DISCARD,在此状态下完成对rcvdAnnounce和rcvdMsg两个变量的初始化,初始值为false。当时间感知系统支持IEEE 802.1AS协议并且端口使能且支持时间同步和最佳主时钟选择,即portEnabled、pttPortEnabled和asCapable同时为true。此时该状态机等待接收MD实体转发过来的报文,收到Announce报文后首先将rcvdAnnounce设置为true然后跳转到RECEIVE状态。在RECEIVE状态下首先将rcvdAnnounce接收标志置为false,然后完成对Announce报文的解析和判断,如果是正确的Announce报文将rcvdMsg置为true,并且将Announce报文中的信息转发给PortAnnounceInformation状态机。完成上述操作之后状态机停留在 RECEIVE状态,等待PortAnnounceInformation状态机接收完Announce数据之后将rcvdMsg置为false,之后PortAnnounceReceive状态机仍停留在RECEIVE状态等待下一次从MD实体转发过来的Announce报文。 如果在DISCARD状态下不满足所有的跳转条件,则停留在此状态等待MD实体转发过来的报文。如果asCapable为false表明该系统不支持IEEE802.1AS协议,此时系统将提示并退出,pttPortEnabled和portEnabled为false也会做出相应的提示。 rcvdAnnounce&&portEnabled && pttPortEnabled && asCapableDISCARDRECEIVEBEGIN|| (rcvdAnnounce ||(!portEnabled || !pttPortEnabled || !asCapable))rcvdAnnounce&&portEnabled && pttPortEnabled && asCapable&&!rcvdMsg PortAnnounceReceive状态机状态跳转 (2)PortAnnounceInformation状态机 状态机功能: a)从PortAnnounceReceive接收合格的报文信息。 b)判断Announce报文中的时钟信息是否优于当前系统认定的最佳时钟信息。 c)接收从PortRoleSelection发送的角色信息,根据情况更新相应端口信息。 d)当端口报文接收超时,提示超时并更新端口状态。 状态机变量如0所示。 状态跳转:如0所示PortAnnounceInformation初始位于CURRENT状态,此状态表示当前端口的状态。如果端口状态InfoIs信息不为Disable则跳转到DISABLED状态,直到系统或者端口回复正常时跳出到AGED状态。在portPriorityVector向量不需要被更新即updtInfo为false时,从CURRENT跳转到RECEIVE状态。在RECEIVE状态端口正在接收来自Master 系统发送的报文,并进行信息的比较与选择。在CURRENT或AGED状态下当selected和updtInfo 为true时表明当前端口的portPriorityVector向量需要更新,此时跳转到UPDATE进行向量的更新操作。在CURRENT状态下如果端口等待Announce超时,状态机从CURRENT跳转到AGED状态。当状态机在UPDATE完成向量更新或者在RECEIVE状态完成数据接收操作之后,无条件(UTC)跳回CURRENT状态。 PortAnnounceInformation状态机变量 变量名称 rcvdMsg updtInfo InfoIs rcvdAnnouncePtr portPriority portStepsRemoved masterStepsRemoved masterPriority newInfo reselect 类型 Boolean Boolean Boolean 指针 结构体 UInteger16 UInteger16 结构体 Boolean Boolean数组 select Boolean数组 PortAnnounceInformation处理标志 描述 Announce报文校验结果标志 portPriorityVector更新标志 表示当前端口状态信息 指向Announce报文的指针 端口优先级向量值 端口距离超主系统的跳数 本地系统据超主系统的跳数 master优先级向量的值 Announce报文发送标志 PortRoleSelection角色选择标志 UPDATESelected&&updinfoSelected&&updinfo(infoIs == Received) &&(currentTime >= announceReceiptTimeoutTime ||(currentTime >= syncReceiptTimeoutTime &&gmPresent) ) && !updtInfo && !rcvdMsgAGEDCURRENTrcvdMsg&&!updinfoRECEIVEUTCUTC(!portEnabled || !pttPortEnabled || !asCapable)&&infosIs != DisabledportEnabled && pttPortEnabled && asCapableDISABLED PortAnnounceInformation 状态机状态跳转 (3)PortRoleSelection状态机 状态机功能: a)为每个端口更新gmPathPriority向量。 b)为系统更新masterPriorityVector向量。 c)决定系统中各个端口的角色。 d)判断是否有超主系统与本地系统直接相连。 状态机变量如0所示。 PortRoleSelection状态机变量 变量名称 selectedRole[ ] pathTrace 类型 Enumeration2 clockIdentity数描述 存储系统中各个端口的角色信息 保存从超主系统到该系统经过的所组 gmPathPriority gmPriority masterPriority 结构体 结构体 结构体 有系统的clockIdentity 保存gmPathPriorityVector的值 保存gmPriorityVector的值 保存masterPriorityVector的值 状态跳转:如0所示,状态机初始状态为NIT_BRIDGE,在此状态下完成对状态机参数的初始化。之后无条件(UTC)跳转到ROLE_SELECTION状态,在此状态下完成对端口角色的选择和更新,然后继续检测是否有端口角色发生变化,如果有端口角色的变化则状态机实现自身的跳转,即再执行一遍端口角色选择过程。 NIT_BRIDGEUTCROLE_SELECTIONReselect[1] || reselect[2] || … || reselect[N] PortRoleSelection状态机状态跳转 (4)PortAnnounceTransmit状态机 状态机功能:根据更新后的端口角色和信息填充Announce报文,通过端口向MD实体发送报文。 状态机变量及功能如0所示。 PortAnnounceTransmit状态机变量 变量名称 selectedRole announceSendTime announceInterval 类型 Enumeration2 UScaledNs UScaledNs 描述 保存端口角色信息 表示下一次Announe报文发送时间 Announce报文发送间隔 newInfo Boolean Announce报文发送标志 状态跳转:如0所示,状态机初始状态为TRANSMIT_INIT,在此状态下将报文发送标志newInfo置为true,随后强制跳转到IDLE状态。在IDLE状态设置Announce报文发送的时间间隔,如果在设定的报文发送间隔内满足图中所示条件则跳转到TRANSMIT_ANNOUNCE状态。在TRANSMIT_ANNOUNCE状态首先将发送标志newInfo置为false,然后调用发送函数发送Announce报文,发送完报文之后无条件跳转到IDLE状态继续等待报文发送条件。如果在IDLE状态下在时间间隔内没有满足Announce报文的发送条件即发送超时,则跳转到TRANSMIT_PERIODIC状态,之后再无条件跳转到IDLE继续等待报文发送条件。 TRANSMIT_INITcurrentTime >= announceSendTime&& selected && !updtInfoUCTnewInfo && (selectedRole == MasterPort) &&(currentTime < announceSendTime) && selected&& !updtInfoTRANSMIT_PERIODICIDLETRANSMIT_ANNOUNCEUCTUCT PortAnnounceTransmit 状态机状态跳转 (5)AnnounceIntervalSetting状态机 状态机功能:在Announce发送的初始化阶设置报文发送间隔,根据接收的Signaling报文调整Announce报文的发送间隔。 状态机变量如0所示。 AnnounceIntervalSetting状态机变量 变量名称 rcvdSignalingMsg2 rcvdSignalingPtr 类型 Boolean 指针 描述 Signaling报文接收标志 指向Signaling报文数据的指针 currentLogAnnounceInterval Integer8 当前报文间隔的对数表示形式的值 initialLogAnnounceInterval Integer8 初始化时报文间隔的对数表示形式的值 announceInterval UScaledNs. 端口发送报文的时间间隔 状态跳转:如0所示,状态机在NOT_ENABLED状态下判断端口是否满足portEnabled和pttPortEnabled为true,满足则跳转到INITIALIZE状态,在此状态下初始化currentLogAnnounceInterval和announceInterval的值,并将rcvdSignalingMsg2 标志位设置为false,开始等待Signaling报文的到来。当状态机收到Signaling报文之后,rcvdSignalingMsg2置为true,状态跳转至SET_INTERVALS,在此状态下完成对Announce报文发送周期的设置,并将rcvdSignalingMsg2置为false,之后一直在INTERVALS状态等待下次Signaling报文的到来。 portEnabled&&pttPortEnabledrcvdSignalingMsg2NOT_ENABLEDINITIALIZESET_INTERVALSrcvdSignalingMsg2 AnnounceIntervalSetting状态机状态跳转 多节点的BMCA分析 如果一个gPTP域只有两个网络节点直连,则BMCA仅需要比较两个节点的时钟性能即可以选择出最佳主时钟。但在实际应用中一个gPTP域中的网络节点往往有两个以上,需要用到桥即交换机和集线器等网络设备,gPTP协议定义的BMCA算法是在端站和桥上通用的即端口的数目可以在1-n之间变化错误!未找到引 用源。 。但是在实际的网络拓扑中两个以上的节点要用到交换机等网桥设备,目前支 持gPTP协议的交换机还在试验阶段价格十分昂贵。因此目前大多数实现gPTP协议的实现方案都是仅实现了端对端两个节点的最佳主时钟选择。 本文设计的时间感知系统,依照协议的规定,每个系统都支持多个端口。多 端口的情况一般在桥上出现,桥的端口数目根据实际的网络拓扑设定,端站则都设置为一个端口错误!未找到引用源。。由于硬件设备的,本文在Linux系统上使用NS-3仿真软件模拟多个网络节点,给每个网络节点设置一个模拟时钟源,用作桥的节点模拟多个端口,通过模拟出的端站和桥组建不同的网络拓扑结构,用来验证本文设计的时间感知系统BMCA两个以上节点之间的实现。NS-3的仿真步骤和结果在本文第五章介绍。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务