背景技术
生成树协议(STP,Spanning Tree Protocol)族中的电气和电子工程师协会(IEEE,Institute of Electrical and Electronic Engineers)802.1S标准定义的MSTP在网络的MSTP域内计算出多个多生成树实例(MSTI,MultipleSpanning Tree Instance)生成树拓扑,域间通过公共生成树(CST,CommonSpanning Tree)连接。运行STP的设备间通过互相通告根向量消息的方式,在整个网络内计算出具有唯一树根节点的无环路树形网络拓扑结构。在树形拓扑的各种端口角色中,通向根桥并提供转发通路的端口为根端口;通向根桥但提供备份的阻塞端口为替换端口;由从树根通向树叶子节点提供转发通路的端口为指定端口。
采用MSTP发送的多实例根向量信息组成为:{根桥标识(ID),根路径开销,指定桥ID,指定端口ID},其中各向量成员含义如下:
根桥ID:即根桥的标识,由根桥的优先级和媒体访问控制(MAC,MediaAccess Control)地址组成;
根路径开销:到根桥的总路径开销;
指定桥ID:即发送桥的标识,由指定桥的优先级和MAC地址组成;
指定端口ID:即指向下游设备的发送端口的标识,由指定端口的优先级和该端口的全局编号组成。
STP设备在计算生成树时,使用的端口根向量还要在消息根向量的尾部加上接收端口ID。在计算比较各端口的根向量时,依次比较各向量成员并以数值小为优;或者,若新根消息来自同一个指定桥(对端的发送桥),也认为是收到较优的根消息。如果接收到较优的指定端口根向量消息,则更新掉接收端口的端口根向量信息。具有最优根消息来源的接收端口被计算为通向根桥的根端口,其它也收到根消息的端口计算为替换端口,即通向根桥的备份链路。
图1给出了现有的根桥为A的稳定生成树拓扑示意图,如图1所示,假定设备1的桥ID为A,设备2的桥ID为C,设备3的桥ID为D;各设备的端口ID如图1所示,各端口的路径开销都为1。生成树的最终计算结果为:设备1是整个网络中的树根,根桥ID为A,其中,端口P1、P3和P5都为指定端口;设备2的P2和设备3的P4为根端口,设备3的P6为阻塞备份链路的替换端口。设备2的P2持有的端口根向量Root C={A,1,A,P1,P2},接收自设备1;设备3的P4持有的端口根向量RootD={A,2,C,P3,P4},接收自设备2。
在根桥设备或中间设备变化时,都可能出现老根消息残留的情况。
图2-1~图2-2给出了当根桥设备的桥ID变大时老根消息残留的情景,具体如下:
图2-1为当图1中的根桥ID由A变为B后的消息接收示意图,如图2-1所示,当根桥设备1的桥MAC地址变大,例如桥ID由A变为B后,设备1的端口1周期性地发出以B为根桥的新根消息{B,0,B,P1}。由于设备2的P2持有更优的端口根向量RootC={A,1,A,P1,P2},接收到的根消息{B,0,B,P1}会被认为是低优先级消息而被丢弃。由于原根桥A已经不存在,不再向下游桥发送保活(hello)报文,这样,当P2的接收端口根向量信息接收超时老化后,设备2的3个端口P2/P3/P5会向外发出以自己为根桥的新根消息{C,0,C,P2/P3/P5}。
图2-2为当图1中的根桥ID由A变为B后,以老根桥A为根的消息残留示意图,如图2-2所示,假如设备3的端口P6先收到设备2发送的新根消息{C,0,C,P5},因端口P6上持有的老的端口根向量{A,2,C,P5,P6}也来自发送桥C,结果P6的接收端口根向量被更新,但因根端口P4持有的以A为根桥的端口根向量还未老化,结果端口P6被计算成了指定端口并向外传播以A为根桥的老根消息{A,2,D,P6}。而设备2的端口P5收到该较优的老根消息之后,又会被计算为根端口,从而设备2从其它端口传播以老根桥A为根的根消息。设备3的端口P4在收到设备2发来的以老根桥A为根的老根消息后,因为该老根消息与本端口P4持有的端口根向量来自同一个发送桥C,端口P4的接收端口根向量会被更新,结果P4被计算为根端口,但最新根向量为{A,4,C,P3,P4},仅因根信息传播多经过了一个设备,端口的路径开销增加了。这样就出现了原老根桥A的老根消息残留在网络中并绕圈传播,结果引起网络拓扑的震荡,也会延迟新根桥的生成树拓扑正确收敛。
图3给出了当中间设备的桥ID变大时老根消息残留的示意图,如图3所示,设图1中设备2的桥MAC地址变大,桥ID由C变为E,该变化对于网络中的其它设备来说,就是以C为桥ID的设备已经消失了。此时,设备2通过STP计算仍然会选举设备A为根桥,然后向下游设备发送以新桥ID:E为发送桥的新根消息,例如:从端口P3发送新根消息{A,1,E,P3},从端口P5发送新根消息{A,1,E,P5};而设备3的端口P4和P6都分别还持有先前接收的来源于C为发送桥的端口根向量{A,2,C,P3,P4}和{A,2,C,P5,P6}。假如设备3的端口P4先收到设备2的新根消息{A,1,E,P3},则设备3在进行STP计算时与端口P4原来持有的端口根向量{A,2,C,P3,P4}比较:因为新根消息向量中的指定桥ID:E没有原端口根向量中的C优,且桥ID的桥MAC地址不一样,不会认为新根消息与原来的端口消息来自同一个发送桥,结果设备2发出的新根消息{A,1,E,P3}会被设备3的端口P4当作不优的根消息丢弃,直到P4持有的老的端口根向量{A,2,C,P3,P4}等待超时老化之后,再次接收到设备2发出的新根消息{A,1,E,P3}后,才将端口P4持有的端口根向量更新为{A,2,E,P3,P4}。对于端口P6也一样会丢弃设备2发出的桥ID变化之后的根消息{A,1,E,P5}。这样就导致以设备2原来的桥ID:C为发送桥的根信息会持续一段时间残留在设备2的下游网络中,设备2的下游设备会认为桥ID为C的设备还一直存在,直到各端口的老根向量信息老化超时,超时时长一般为3倍hello周期。
标准协议中为了防止已经失效的老根消息在网络中通过冗余链路绕圈传播,提供了根消息的传播生命周期老化机制。MSTI实例和CST实例分别通过下面的消息时间参数来控制传播消息的老化:
RemainingHops:即剩余跳数。对于MSTI实例,在MSTP域内的多实例根消息在网络中传播经过的剩余跳数生存期。根消息每经过一台设备后,剩余跳数计数会减一,当接收消息的剩余跳数为0时,此根信息即被老化。
MessageAge:即消息生存期。对于CST实例,根消息每经过一台域边界设备端口接收后,MessageAge会加1。当MessageAge大于或等于MaxAge后,此CST根消息就被老化丢弃。
在有多条冗余备份连路的复杂组网中,老根消息的老化过程较慢,一般在10秒左右,甚至更长时间。老根消息绕圈期间容易引起网络拓扑震荡,且部分链路因不能快速迁移而导致秒级的临时性流量中断。
发明内容
本发明提供根信息老化方法及设备,以避免老根信息在MSTP网络内残留。
本发明的技术方案是这样实现的:
一种根信息老化方法,该方法包括:
多生成树协议MSTP网络设备发现根信息老化时,启动老根消息过滤定时器,并从自身各指定端口发送在下一跳直接老化的根信息老化消息,以使得:下游设备接收到该根信息老化消息后,根据该消息中的根桥标识ID和发送桥ID,将本设备上的对应根信息立即老化掉,并启动老根消息过滤定时器,以及在该根信息老化消息中的根桥ID与发送桥ID相同时,继续从自身各指定端口传播该根信息老化消息,
其中,在所述老根消息过滤定时器超时前,启动该定时器的设备接收到与老化的根信息对应的消息都直接丢弃。
所述老根消息过滤定时器的定时时长为大于1个hello周期。
所述MSTP网络设备为根桥设备,
所述MSTP网络设备发现根信息老化为:
所述根桥设备发现自己的桥ID变大或者生成树协议STP关闭。
所述MSTP网络设备为中间设备,
所述MSTP网络设备发现根信息老化为:
所述中间设备发现自己的桥媒体访问控制MAC地址变大。
所述MSTP网络设备为直连根桥的设备,
所述MSTP网络设备发现根信息老化为:
所述直连根桥的设备发现本设备直连根桥的唯一根端口故障,或者,本设备从根桥设备收到了新根消息,且该新根消息没有自身当前的根信息优。
所述MSTP网络设备为中间设备,
所述方法进一步包括:
当所述MSTP网络设备接收到上游设备发来的指示在下一跳直接老化的根信息老化消息时,根据该消息中的根桥ID和发送桥ID,将本设备上的对应根信息立即老化掉,并启动老根消息过滤定时器,若在该定时器超时前,本设备接收到与老化的根信息对应的消息则直接丢弃,并且,若该根信息老化消息中的根桥ID与发送桥ID相同,则继续从本设备各指定端口传播该根信息老化消息。
一种多生成树协议MSTP网络设备,该设备包括:
老化消息发送模块:当发现根信息老化时,从本设备的各指定端口发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器,若在该过滤定时器超时前,本设备接收到与老化的根信息对应的消息则直接丢弃。
所述设备为根桥设备,
所述老化消息发送模块发现根信息老化为:发现本设备的桥标识ID变大或者生成树协议STP关闭。
所述设备为中间设备,
所述老化消息发送模块发现根信息老化为:发现本设备的桥媒体访问控制MAC地址变大。
所述设备为直连根桥的设备,
所述老化消息发送模块发现根信息老化为:发现本设备直连根桥的唯一根端口故障,或者,本设备从根桥设备收到了新根消息,且该新根消息没有本设备当前的根信息优。
当所述设备为中间设备时,
所述设备进一步包括:老化消息接收模块,用于接收上游设备发来的根信息老化消息,发现该消息中的生成期为在下一跳直接老化,则根据该消息中的根桥ID和发送桥ID,将本设备上的对应根信息立即老化掉,并启动老根消息过滤定时器,若在该定时器超时前,本设备接收到与老化的根信息对应的消息则直接丢弃,同时若该根信息老化消息中的根桥ID与发送桥ID相同,则继续从本设备各指定端口传播该根信息老化消息。
与现有技术相比,本发明加快了老根消息的老化,避免了老根信息在MSTP网络内绕圈、残留,提高了网络拓扑收敛速度。本发明还可以避免老根消息绕圈后,可能造成的临时环路或流量中断。
具体实施方式
以下针对两种场景对本发明进行进一步说明:
场景一、MSTP网络内的根桥设备的桥ID变大或者STP关闭;
场景二、MSTP网络内的中间设备的桥MAC地址变大。
图4为本发明实施例一提供的MSTP网络内的根信息老化方法流程图,如图4所示,其具体步骤如下:
步骤401:MSTP网络内的根桥设备发现自己的桥ID变大或者自己的STP关闭时,从通向下游网络的各指定端口主动发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器。在该过滤定时器超时前,根桥设备若接收到以本设备的原桥ID为根桥ID的消息都直接丢弃。
本步骤中的根信息老化消息与现有的根信息老化消息的区别仅在于消息的生成期不同,消息中携带的根向量信息完全相同,即根向量信息中的根桥ID为根桥设备的原桥ID。
桥ID变大可能是桥MAC地址变大或者桥优先级降低。
对于根信息老化消息的生成期满足:在下一跳直接老化,具体实现可如下:
对于CST实例,将根信息老化消息中的MessageAge直接填充为MaxAge;
对于MSTI实例,则将根信息老化消息中的RemainingHops填充为0。
介于正常情况下STP设备会通过指定端口每个hello周期发送一个协议报文,因此,老根消息过滤定时器的定时时长为大于1个hello周期,较佳地,可取3倍hello周期。
为了保证根信息老化消息传播的可靠性,根桥设备在各指定端口后续的第一个hello周期发送hello报文时,可再补充发送一次根信息老化消息。
步骤402:下游设备接收到该根信息老化消息,根据该消息中的生成期得知有根信息要立即老化,从该消息中解析出根向量,根据根向量中的根桥ID和发送桥ID,立即老化本设备上的对应根向量,同时,启动老根消息过滤定时器,若在该过滤定时器超时前,本设备接收到与老化的根向量对应的消息都直接丢弃;同时,若发现该根信息老化消息的根向量中的根桥ID=发送桥ID,则通过各指定端口向其它设备继续传播该根信息老化消息。
由于根信息老化消息中的生成期指示了在下一跳直接老化,因此,下游设备得知要直接老化本设备上的对应根信息;具体要老化哪些根信息,则需要根据根信息老化消息的根向量中的根桥ID和发送桥ID来确定,将本设备上满足:根桥ID、发送桥ID与根信息老化消息的根向量中的根桥ID、发送桥ID匹配的根信息老化掉。
本步骤提到的:若在该过滤定时器超时前,本设备接收到与老化的根向量对应的消息都直接丢弃中的“与老化的根向量对应的消息”指的是,消息中的根桥ID、发送桥ID与老化的根向量中的根桥ID、发送桥ID相同。
本步骤中的老根消息过滤定时器的定时时长与步骤401中的老根消息过滤定时器相同。
当下游设备接收到的根信息老化消息的根向量中的根桥ID与发送桥ID不同时,无需再继续传播该根信息老化消息。
为了保证根信息老化消息传播的可靠性,下游设备在各指定端口后续第一个hello周期发送hello报文时,可再补充发送一次根信息老化消息。
以下给出本发明实施例一的应用示例:
图5-1为本发明应用示例中,当图1中的设备1的桥ID由A变为B后的根信息老化消息传送示意图一,如图5-1所示,当设备1的桥ID由A变为B时,设备1先从指定端口P1发送一个根信息老化消息{A,0,A,P1},该消息中的RemainingHops=0,同时设备1启动老根消息过滤定时器,该定时器的定时时长为3倍hello周期。如果在该定时器超时前,设备1收到根桥为桥A的消息都直接丢弃。
图5-2为本发明应用示例中,当图1中的设备1的桥ID由A变为B后的根信息老化消息传送示意图二,如图5-2所示,设备2收到设备1发来的根信息老化消息,发现消息中的RemainingHops=0,从消息中解析出根向量,其中,根桥ID=A、发送桥ID=A,则立即将本设备上根桥ID=A、发送桥ID=A的根信息老化掉,并启动老根消息过滤定时器,同时,设备2发现消息中的根桥ID=发送桥ID,则从指定端口P3、P5分别发送根信息老化消息{A,1,C,P3}、{A,1,C,P5},消息中的RemainingHops=0。
设备3收到设备2发来的根信息老化消息后的处理与设备2对根信息老化消息的处理类似,区别仅在于:设备3发现消息中的根桥ID与发送桥ID不同,则不再继续向下游传播该根信息老化消息。
如图5-2所示,此后,设备2从端口P2收到设备1的新根消息{B,0,B,P1},立即计算出新的端口根向量{B,1,B,P1,P2},然后设备2从指定端口P3、P5分别发出新根消息{B,1,C,P3}、{B,1,C,P5};最后,设备3从端口P4和P6收到来自同一发送桥C的新根消息,则会立即计算出以B为根的正确根向量。
另外,在实际应用中,直连根桥的设备也可以直接触发根信息老化消息,以便其在感知到根桥失效后能立即老化下游网络中的老根信息。判断设备是否直连根桥的方法是:比较端口根向量中的根桥ID与发送桥ID,如果两者相同,则表明本设备直连根桥。
直连根桥的设备可以在如下场景触发根信息老化消息:
场景1、本设备上直连根桥的唯一根端口故障(down)时,此时,先从各指定端口发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器。
图6为本发明应用示例提供的由直连根桥的设备触发根信息老化消息的示意图,如图6所示,假设图1中的设备2的直连根桥的根端口P2故障,则设备2分别从端口P3、P5发送根信息老化消息{A,1,C,P3}、{A,1,C,P5},该消息中的RemainingHops=0,并启动老根消息过滤定时器。
场景2、本设备从直连根桥的根端口收到了没有当前端口根向量优的新根消息时,例如:有新根桥设备替换了老根桥设备时,或者老根桥的桥优先级变低时,此时,直连根桥的设备从各指定端口发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器。
需要说明的是,根端口down的原因除了是根桥设备自身失效外,也可能是根桥转移了在网络中的接入位置,或者是直连根桥的设备与根桥设备之间的共享链路上接入了其它设备,对于后两者,不应该触发根信息老化消息。因此,为了避免不必要的根信息老化消息的发送,可以由用户来决定直连根桥的设备何时触发根信息老化消息。
图7为本发明实施例二提供的MSTP网络内的根信息老化方法流程图,如图7所示,其具体步骤如下:
步骤701:MSTP网络内的中间设备发现自己的桥MAC地址变大时,从通向下游网络的各指定端口主动发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器。在该过滤定时器超时前,该中间设备若接收到以本设备的原桥ID为发送桥ID的消息都直接丢弃。
本步骤中的根信息老化消息与现有的根信息老化消息的区别仅在于消息的生成期不同,消息中携带的根向量信息完全相同,即根向量信息中的发送桥ID为该中间设备的原桥ID。
对于根信息老化消息的生成期满足:在下一跳直接老化,具体实现可如下:
对于CST实例,将根信息老化消息中的MessageAge直接填充为MaxAge;
对于MSTI实例,则将根信息老化消息中的RemainingHops填充为0。
老根消息过滤定时器的定时时长为大于1个hello周期,较佳地,可取3倍hello周期。
为了保证根信息老化消息传播的可靠性,中间设备在各指定端口后续第一个hello周期发送hello报文时,可再补充发送一次根信息老化消息。
步骤702:下游设备接收到该根信息老化消息,根据该消息中的生成期得知有根信息要立即老化,从该消息中解析出根向量,根据根向量中的根桥ID和发送桥ID,立即老化本设备上的对应根向量,同时,启动老根消息过滤定时器,若在该过滤定时器超时前,本设备接收到与老化的根向量对应的消息都直接丢弃;同时,若发现该根信息老化消息的根向量中的根桥ID与发送桥ID不同,则不向下游设备传播该根信息老化消息。
由于根信息老化消息中的生成期指示了在下一跳直接老化,因此,下游设备得知要直接老化本设备上的对应根信息;具体要老化哪些根信息,则需要根据根信息老化消息的根向量中的根桥ID和发送桥ID来确定,将本设备上满足:根桥ID、发送桥ID与根信息老化消息的根向量中的根桥ID、发送桥ID匹配的根信息老化掉。
本步骤提到的:若在该过滤定时器超时前,本设备接收到与老化的根向量对应的消息都直接丢弃中的“与老化的根向量对应的消息”指的是,消息中的根桥ID、发送桥ID与老化的根向量中的根桥ID、发送桥ID相同。
本步骤中的老根消息过滤定时器的定时时长与步骤701中的老根消息过滤定时器相同。
为了保证根信息老化消息传播的可靠性,下游设备在各指定端口后续第一个hello周期发送hello报文时,可再补充发送一次根信息老化消息。
以下给出本发明实施例二的应用示例:
图8-1为本发明应用示例中,当图1中的设备2的桥ID由C变为E后的根信息老化消息传送示意图,如图8-1所示,当设备2的桥MAC地址变大,桥ID由C变为E时,设备2先分别从端口P3、P5发送RemainingHops=0的老根信息老化消息{A,1,C,P3}、{A,1,C,P5}。
当设备3的端口P4和P6分别接收到RemainingHops=0的根信息老化消息时,发现消息中的RemainingHops=0,从消息中解析出根向量,其中,根桥ID=A、发送桥ID=C,则立即将本设备上根桥ID=A、发送桥ID=C的根信息老化掉,并启动老根消息过滤定时器,同时,设备3发现消息中的根桥ID与发送桥ID不同,则不再继续向下游传播该根信息老化消息。
图8-2为本发明应用示例中,当图1中的设备2的桥ID由C变为E后的新根消息接收示意图,如图8-2所示,设备3在接收到设备2发出的以新桥ID:E为发送桥ID的新根消息后,通过STP计算,能立即计算出正确的当前端口根向量{A,2,E,P3,P4}、{A,2,E,P5,P6},即根消息来自发送桥E,接收端口为P4、P6,也就是说设备3认为根消息来源于发送桥E,原来的发送桥C已经不存在。
图9为本发明实施例提供的MSTP网络设备的组成示意图,如图9所示,其主要包括:老化消息发送模块91和老化消息接收模块92,其中:
老化消息发送模块91:当发现根信息老化时,从本设备的各指定端口发送根信息老化消息,该消息的生成期满足:在下一跳直接老化,同时启动老根消息过滤定时器,若在该过滤定时器超时前,本设备接收到与老化的根信息对应的消息都直接丢弃。
老化消息发送模块91进一步包括:在从本设备的各指定端口发送根信息老化消息之后,在各指定端口的后续第一个hello周期内,再补充发送一次根信息老化消息。
当MSTP网络设备为根桥设备时,其中,老化消息发送模块91发现根信息老化为:发现本设备的桥ID变大或者STP关闭。
当MSTP网络设备为中间设备时,其中,老化消息发送模块91发现根信息老化为:发现本设备的桥媒体访问控制MAC地址变大。
当MSTP网络设备为直连根桥的设备时,其中,老化消息发送模块91发现根信息老化为:发现本设备直连根桥的唯一根端口故障,或者,本设备从根桥设备收到了新根消息,且该新根消息没有本设备当前的根信息优。
老化消息接收模块92:接收上游设备发来的根信息老化消息,发现该消息中的生成期为在下一跳直接老化,则根据该消息中的根桥ID和发送桥ID,将本设备上的对应根信息立即老化掉,并启动老根消息过滤定时器,若在该定时器超时前,本设备接收到与老化的根信息对应的消息都直接丢弃,同时若该根信息老化消息中的根桥ID与发送桥ID相同,则继续从本设备各指定端口传播该根信息老化消息。
老化消息接收模块92进一步包括,在继续从本设备各指定端口传播该根信息老化消息之后,在各指定端口的后续第一个hello周期内,再补充发送一次根信息老化消息。
需要说明的是,当MSTP网络设备为根桥设备时,它只需执行老化消息发送模块91的功能即可。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。