防止环路震荡的方法和设备
技术领域
本发明涉及网络通信技术,特别涉及防止环路震荡的方法和设备。
背景技术
为使本申请容易理解,下面对本申请主要涉及到的技术术语进行简单描述:
多生成树协议(MSTP:Multiple Spanning Tree Protocol):相比于现有的生成树协议(STP:Spanning Tree Protocol)、快速生成树协议(RSTP:Rapid SpanningTree Protocol)等,引入“域”的概念,即把一个网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立;并且,还引入了“实例(Instance)”的概念,即将多个虚拟局域网(VLAN:Virtual Local Area Network)映射到一个实例中,以节省通信开销和资源占用率。MSTP中各个实例的计算是独立的,每个实例对应一棵单独的生成树,这些实例可以实现VLAN数据的负载分担;另外,MSTP还可以实现类似RSTP的端口状态快速迁移机制。
多VLAN注册协议(MVRP:Multiple VLAN Register Protocol):用于维护设备中的VLAN动态注册信息,并将该信息向其它设备传播。也就是说,当一设备的端口启动了MVRP之后,就能够接收其它设备传播的VLAN信息来注册,并动态更新本地的VLAN信息,包括当前的VLAN及这些VLAN可通过哪个端口到达等,此外,该启动了MVRP的设备端口还能够将本地的VLAN信息传播给其它设备的端口来注册。这里,MVRP传播的VLAN信息既包括本地手工配置的静态VLAN的信息,也包括其注册的来自其它设备传播的动态VLAN的信息。另外,MVRP有一个特点,即如果某端口没有加入到某实例,则该端口不会发送该实例的MVRP报文,也不会发送该实例的MSTP报文。其中,端口没有加入到某实例具体为:该端口所处的设备不存在该实例所映射的任何一个静态VLAN,或该端口不允许该实例所映射的所有VLAN通过,或该端口没有注册该实例所映射的任何一个动态VLAN。
下面以图1所示的组网为例,通过图2说明如何进行VLAN注册。
参见图2,图2为现有VLAN注册流程图。图2应用于图1所示的组网。在图1中存在以下属于同一个域的三台设备,依次记为:DUT1、DUT2和DUT3,该三台设备上所有互连端口被配置为中继(trunk)类型且允许所有VLAN通过,在该三台设备上启动MSTP,且在全局开启MVRP后开启该三台设备上所有互连端口的MVRP功能。并且,在DUT2和DUT3上创建静态VLAN100,其中,VLAN100对应实例1。如此,如图2所示,该流程可包括以下步骤:
步骤1,根据MVRP,DUT1上的端口P1就会收到DUT3上的端口P6发送的MVRP的加入(join)报文,同样,DUT1上的端口P2就会收到DUT2上的端口P3发送的join报文。
join报文携带了VLAN100的标识。
步骤2,DUT1上的端口P1依据join报文携带的VLAN100标识注册至动态VLAN100,同样,DUT1上的端口P2也注册至动态VLAN100。
步骤3,当端口P1、P2注册至动态VLAN100,则表示该端口P1、P2已加入到VLAN100,同时也表示该端口P1、P2相应加入该VLAN100所映射的实例1。
步骤4,由于DUT2和DUT3的所有端口配置了VLAN100,其也能相互注册到VLAN100,则如图1所示,实例1内的DUT1、DUT2和DUT3之间就形成了环路。
步骤5,为了避免上述环路,就根据生成树算法计算生成树和计算环路中各个设备上端口的角色和状态,将状态为阻塞(discarding)的端口阻塞。
假如步骤5计算出图1所示的DUT2为根桥,DUT1的端口P2和DUT3的端口P5为根端口,DUT1上的端口P1、DUT2上的端口P3和P4为指定端口,以及DUT3上的端口P6为阻塞端口,其中根端口、指定端口的状态设置为转发(forwarding),阻塞端口的状态设置为discarding,如此,就阻塞端口P6。下文均以阻塞端口P6为例描述。
步骤6,当端口P6被阻塞后,端口P6不再发送上述join报文,如此,就会导致端口P1无法持续接收到上述join报文。
步骤7,由于端口P1无法持续接收上述join报文,这会引起端口P1注销其已注册的与实例1具有映射关系的动态VLAN即VLAN100。
步骤8,当端口P1注销了其已注册的实例1的动态VLAN100时,表示该端口P1从实例1退出,这样环路就消除了。
步骤9,由于端口P1从实例1退出,基于上面描述的MVRP特点,端口P1显然不会再发送实例1的MSTP报文和join报文,这样,端口P6会一直接收不到端口P1发送的实例1的MSTP报文,其状态会在设定的端口超时时间到达时状态慢速迁移到forwarding。
步骤10,当端口P6的状态恢复到forwarding后,由于端口P6支持实例1的VLAN100,因此便继续发送join报文,该join报文携带VLAN100的标识。
步骤11,当端口P1接收到端口P6发送的join报文时,便又通过注册join报文中VLAN标识对应的VLAN100加入到实例1中,如此,如图1所示,实例1内的DUT1、DUT2和DUT3之间又形成了环路,这样,为避免环路,就得返回上面步骤5,如此就会导致图1所示的DUT1、DUT2和DUT3之间的环路在环路存在和环路消除之间来回反复震荡。
发明内容
本发明提供了防止环路震荡的方法和设备,以避免环路在存在和消除之间来回反复震荡。
本发明提供的技术方案包括:
一种防止环路震荡的方法,包括:
A,第一设备通过第一端口接收对端端口在被阻塞之前发送的阻塞通告;
B,所述第一设备依据所述阻塞通告确定需要阻塞的实例;
C,所述第一设备建立孪生端口组,并将所述需要阻塞的实例设置为所述孪生端口组的孪生实例;其中,所述孪生端口组包括目的端口和源端口,所述目的端口为所述第一端口,所述源端口为第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识;
D,所述第一设备在被设置了第一标识的源端口注册与所述孪生实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN。
其中,所述阻塞通告携带了需要阻塞的实例标识,所述实例标识依据多生成树协议MSTP确定;
步骤B中,所述第一设备确定的需要阻塞的实例为所述阻塞通告携带的实例标识对应的实例。
优选地,步骤B和步骤C之间进一步包括:
判断所述第一端口是否注册了与所述孪生实例具有映射关系的静态VLAN,如果是,则结束当前流程,否则,继续执行步骤C。
本发明中,该方法进一步包括:
当所述第一设备上未加入所述孪生端口组的端口注册了与所述孪生实例具有映射关系的动态VLAN时,将该端口作为所述孪生端口组的源端口加入所述孪生端口组,并针对该端口设置第二标识。
本发明中,所述第一设备上的端口注销其已注册的VLAN时,该方法进一步包括:
判断该被注销的VLAN是否与所述孪生实例具有映射关系,当该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口当前已注册的VLAN中是否只有该被注销的VLAN与所述孪生实例具有映射关系;
当该注销VLAN的端口当前已注册的VLAN中只有该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口是否为所述孪生实例对应的孪生端口组中被设置了第一标识的源端口;
若该注销VLAN的端口为所述孪生端口组中被设置了第一标识的源端口,则从所述孪生端口组中被设置了第二标识的源端口中选择一个,并将该选择的源端口的标识从第二标识更新为第一标识,将该注销VLAN的端口从所述孪生端口组中删除;
若该注销VLAN的端口为所述孪生端口组中被设置了第二标识的源端口,则将该注销VLAN的端口从所述孪生端口组中删除。
本发明中,该方法进一步包括:
当孪生端口组中所有的源端口被删除时,或者当所述目的端口接收到所述对端端口发送的与所述孪生实例相关联的多VLAN注册协议MVRP报文时,解除所述孪生端口组。
本发明还提供了另一种防止环路震荡的方法,该方法包括:
本端设备在在本端端口被阻塞之前向第一设备的第一端口发送阻塞通告,以触发所述第一设备执行如上所述方法中的步骤。
本发明提供了一种防止环路震荡的设备,包括:
端口接收单元,用于通过第一端口接收对端端口在被阻塞之前发送的阻塞通告;
实例确定单元,用于依据所述阻塞通告确定需要阻塞的实例;
端口组建立单元,用于建立孪生端口组,并将所述需要阻塞的实例设置为所述孪生端口组的孪生实例;其中,所述孪生端口组包括目的端口和源端口,所述目的端口为所述第一端口,所述源端口为第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识;
触发单元,用于在被设置了第一标识的源端口注册与所述孪生实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN。
优选地,该设备进一步包括:
判断单元,用于判断所述第一端口是否注册了与所述孪生实例具有映射关系的静态VLAN,如果是,则结束当前流程,否则,触发所述端口组建立单元建立所述孪生端口组。
优选地,该设备进一步包括:
加入单元,用于当所述设备上未加入所述孪生端口组的端口注册了与所述孪生实例具有映射关系的动态VLAN时,将该端口作为所述孪生端口组的源端口加入所述孪生端口组,并针对该端口设置第二标识。
优选地,该设备进一步包括:判断该被注销的VLAN是否与所述孪生实例具有映射关系,当该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口当前已注册的VLAN中是否只有该被注销的VLAN与所述孪生实例具有映射关系;
当该注销VLAN的端口当前已注册的VLAN中只有该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口是否为所述孪生实例对应的孪生端口组中被设置了第一标识的源端口;
若该注销VLAN的端口为所述孪生端口组中被设置了第一标识的源端口,则从所述孪生端口组中被设置了第二标识的源端口中选择一个,并将该选择的源端口的标识从第二标识更新为第一标识,将该注销VLAN的端口从所述孪生端口组中删除;
若该注销VLAN的端口为所述孪生端口组中被设置了第二标识的源端口,则将该注销VLAN的端口从所述孪生端口组中删除。
优选地,该设备进一步包括:
解除单元,用于当孪生端口组中所有的源端口被删除时,或者当所述目的端口接收到所述对端端口发送的与所述孪生实例相关联的多VLAN注册协议MVRP报文时,解除所述孪生端口组。
本发明还提供了另一种防止环路震荡的设备,包括:
端口阻塞单元,用于在本设备的本端端口需要被阻塞时,阻塞该需要被阻塞的端口;
发送单元,用于在所述端口阻塞单元阻塞所述需要被阻塞的端口之前,向如上所述设备的第一端口发送阻塞通告,以触发如上所述设备中的各个单元执行相应操作。
由以上技术方案可以看出,本发明中,第一设备通过第一端口接收对端端口在被阻塞之前发送的阻塞通告,并依据所述阻塞通告确定需要阻塞的实例;如此,第一设备建立满足以下条件的孪生端口组:所述实例为所述孪生端口组的孪生实例,第一端口为所述孪生端口组的目的端口、第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口为所述孪生端口组的源端口,并且,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识;之后在被设置了第一标识的源端口注册了与所述实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN,这保证了目的端口一直可以注册到所述实例中,避免了环路在存在和消除之间来回反复震荡。
附图说明
图1为现有环路组网示意图;
图2为现有VLAN注册流程图;
图3为本发明实施例提供的方法流程图;
图4为本发明实施例提供的端口加入孪生端口组流程图;
图5为本发明实施例提供的端口退出孪生端口组的流程图;
图6为本发明实施例提供的设备结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明提出了图3所示的方法流程:
参见图3,图3为本发明实施例提供的方法流程图。如图3所示,该流程可包括以下步骤:
步骤301,第一设备通过第一端口接收对端端口在被阻塞之前发送的阻塞通告。
对端端口被阻塞是在该对端端口加入的一实例出现环路时依据MSTP计算出的,这里不再赘述。并且,该对端端口发送的阻塞通告携带了该出现环路的实例标识,该实例标识记为需要阻塞的实例的标识。
步骤302,所述第一设备依据所述阻塞通告确定需要阻塞的实例。
由于阻塞通告携带了需要阻塞的实例的标识,基于此,执行到本步骤302,第一设备可直接将所述阻塞通告携带的需要阻塞的实例标识所对应的实例确定为需要阻塞的实例。
另外,作为本发明的一个优选实施例,可在本步骤302完成之后、且在执行下述步骤303之前,进一步包括:
判断所述第一端口是否注册了与所述实例具有映射关系的静态VLAN,如果是,则结束当前流程,否则,继续执行步骤303。
其中,在执行步骤303之前,之所以判断第一端口是否注册了与所述实例具有映射关系的静态VLAN,主要是因为,如果判断出第一端口注册了与所述实例具有映射关系的静态VLAN,则说明该第一端口会始终在所述实例内,不会出现背景技术中描述的由于第一端口退出所述实例、加入所述实例而导致的该实例内的环路震荡,因此,可直接结束当前流程。
步骤303,所述第一设备建立孪生端口组,并将所述需要阻塞的实例设置为所述孪生端口组的孪生实例;其中,所述孪生端口组包括目的端口和源端口,所述目的端口为所述第一端口,所述源端口为第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识。
本步骤303中,优选地,可将所述孪生端口组中的目的端口、源端口与孪生实例之间的映射关系记录在预设设置的一张映射表中,以方便后续可以通过该映射表直接确定孪生端口中的目的端口、源端口和孪生实例。
另外,本步骤303之所以将孪生端口组中的源端口区分设置第一标识或者第二标识,目的就是保证第一设备只有在被设置了第一标识的源端口注册了与所述孪生实例具有映射关系的动态VLAN时,才触发所述目的端口注册该动态VLAN,具体见步骤304。
其中,所述被设置第一标识的源端口可为随机从源端口中选择的,也可根据实际情况原则,本发明并不限定。优选地,上述的第一标识、第二标识可依次优选为有效、无效。
步骤304,第一设备在被设置了第一标识的源端口注册与所述孪生实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN。
优选地,步骤304中的触发还可以进一步包括:刷新用于管理该动态VLAN的定时器。其中,作为本发明的一个实施例,该用于管理该动态VLAN的定时器可为VLAN注销定时器,其用于在设定的时间到达时,触发目的端口注销该动态VLAN。
以被设置了第一标识的源端口注册与孪生实例有映射关系的动态VLAN为动态VLAN1为例,则第一设备在被设置了第一标识的源端口注册了该动态VLAN1时,触发目的端口注册该动态VLAN1,并触发目的端口刷新用于管理该动态VLAN1的定时器。
下面通过一个具体实施例对图3所示的方法流程进行描述:
该具体实施例仍以背景技术描述的图1所示的组网为例,在通过背景技术描述的步骤1至步骤4确定出实例1内的DUT1、DUT2和DUT3之间形成环路后、且在背景技术描述的步骤5阻塞设备DUT3上的端口P6之前,本发明中,由端口P6发送阻塞通告至DUT1上的端口P1,该阻塞通告携带实例1的标识,之后,阻塞端口P6。当端口P1收到来自端口P6的阻塞通告后,确定需要阻塞的实例为实例1。因此,就需要建立孪生端口组,并将实例1确定为该孪生端口组的孪生实例,其中,所述孪生端口组包括目的端口和源端口,本实施例中,目的端口为端口P1、源端口为DUT1上其他注册了与孪生实例即实例1具有映射关系的动态VLAN比如VLAN100的端口,并且,从孪生端口组的源端口中选择一个源端口设置第一标识,例如将端口P2设置有效,而针对剩余的源端口设置第二标识,例如将剩余的源端口设置为无效。
之后,依赖于被设置了第一标识的源端口比如端口P2是否注册与实例1具有映射关系的动态VLAN来决定是否触发端口P1注册该动态VLAN,这保证了端口P1可以持续注册与实例1具有映射关系的动态VLAN,并且,由于端口P6一直被阻塞,这也能保证实例1内的环路一直处于被解除的状态,不会出现背景技术描述的步骤7至步骤11的情况,进而也不会出现图1所示的DUT1、DUT2和DUT3之间的环路在环路存在和环路消除之间来回反复震荡。
另外,本发明中,基于图3所示的方法流程,在第一设备建立了孪生端口组的前提下,如果该第一设备上未加入所述孪生端口组的端口注册了所述孪生端口组的孪生实例有映射关系的动态VLAN,则将该端口作为所述孪生端口组的源端口加入所述孪生端口组,并为该端口设置第二标识,具体可参见图4所示的流程。
参见图4,图4为本发明实施例提供的端口加入孪生端口组流程图。如图4所示,该流程可包括以下步骤:
步骤401,第一设备上未加入孪生端口组的端口注册一动态VLAN。
步骤402,判断该动态VLAN是否为与所述孪生实例有映射关系的VLAN,如果是,执行步骤403,否则,结束当前流程。
步骤403,将该端口作为源端口加入所述孪生实例对应的孪生端口组,并设置该端口为第二标识。结束当前流程。
至此,完成图4所示的流程描述。
另外,本发明还提供了端口退出孪生端口组的流程图,具体如图5所示。
参见图5,图5为本发明实施例提供的端口退出孪生端口组的流程图。如图5所示,该流程可包括以下步骤:
步骤501,所述第一设备上的端口注销VLAN。
为便于描述,下文均将步骤501中的端口描述为注销VLAN的端口。
步骤502,判断该注销的VLAN是否与孪生实例具有映射关系,如果是,执行步骤503,否则,结束当前流程。
步骤503,判断该注销VLAN的端口当前已注册的VLAN中是否只有该被注销的VLAN与所述孪生实例具有映射关系,如果是,执行步骤504,否则,结束当前流程。
步骤504,判断该注销VLAN的端口是否为孪生端口组中被设置了第一标识的源端口,如果是,执行步骤505,否则,执行步骤506。
步骤505,从该孪生端口组中被设置了第二标识的源端口中选择一个,并将该选择的源端口的标识从第二标识更新为第一标识,之后执行步骤506。
步骤506,将该注销VLAN的端口从孪生端口组中删除。
至此,完成图5所示的流程。
需要说明的是,本发明中,当孪生端口组中所有的源端口通过图5所示的流程被删除时,或者当孪生端口组中的目的端口接收到之前已被阻塞的对端端口发送的与所述孪生实例相关联的MVRP报文比如join报文时,解除孪生端口组。其中,与孪生实例相关联的MVRP报文具体可为:携带了孪生实例标识、或者与孪生实例具有映射关系的VLAN的标识的MVRP报文。仍以图1所示的组网为例,则,如上文所述,由于实例1出现环路,需要阻塞端口P6,并建立以下孪生端口组:实例1为孪生实例,端口P1作为目的端口、DUT1上其他注册了与孪生实例即实例1具有映射关系的动态VLAN比如VLAN100的端口作为源端口。而当端口P6发送与所述孪生实例即实例1相关联的MVRP报文至端口P1时,则说明端口P6不再被阻塞,进而也说明实例1内不存在环路,如此,之前建立的上述孪生端口组就没有任何意义了,可以解除。
至此,完成本发明提供的方法描述。下面对本发明实施例提供的设备进行描述:
参见图6,图6为本发明实施例提供的设备结构图。如图6所示,该设备包括:端口接收单元、实例确定单元、端口组建立单元和触发单元。
其中,端口接收单元,用于通过第一端口接收对端端口在被阻塞之前发送的阻塞通告。
实例确定单元,用于依据所述阻塞通告确定需要阻塞的实例。其中,所述阻塞通告携带了需要阻塞的实例标识,所述实例标识依据多生成树协议MSTP确定,基于此,所述实例确定单元确定的需要阻塞的实例为所述阻塞通告携带的实例标识对应的实例。
端口组建立单元,用于建立孪生端口组,并将所述需要阻塞的实例设置为所述孪生端口组的孪生实例;其中,所述孪生端口组包括目的端口和源端口,所述目的端口为所述第一端口,所述源端口为第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识;
触发单元,用于在被设置了第一标识的源端口注册与所述孪生实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN。
优选地,本发明中,如图6所示,该设备进一步包括:判断单元、加入单元、注销单元和解除单元。
其中,判断单元,用于判断所述第一端口是否注册了与所述孪生实例具有映射关系的静态VLAN,如果是,则结束当前流程,否则,触发所述端口组建立单元建立所述孪生端口组。
加入单元,用于当所述设备上未加入所述孪生端口组的端口注册了与所述孪生实例具有映射关系的动态VLAN时,将该端口作为所述孪生端口组的源端口加入所述孪生端口组,并针对该端口设置第二标识。
注销单元,用于当所述设备上的端口注销VLAN时,判断该被注销的VLAN是否与所述孪生实例具有映射关系,当该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口当前已注册的VLAN中是否只有该被注销的VLAN与所述孪生实例具有映射关系;
当该注销VLAN的端口当前已注册的VLAN中只有该被注销的VLAN与所述孪生实例具有映射关系时,进一步判断该注销VLAN的端口是否为所述孪生实例对应的孪生端口组中被设置了第一标识的源端口;
若该注销VLAN的端口为所述孪生端口组中被设置了第一标识的源端口,则从所述孪生端口组中被设置了第二标识的源端口中选择一个,并将该选择的源端口的标识从第二标识更新为第一标识,将该注销VLAN的端口从所述孪生端口组中删除;
若该注销VLAN的端口为所述孪生端口组中被设置了第二标识的源端口,则将该注销VLAN的端口从所述孪生端口组中删除。
解除单元,用于当孪生端口组中所有的源端口被删除时,或者当所述目的端口接收到所述对端端口发送的与所述孪生实例相关联的多VLAN注册协议MVRP报文时,解除所述孪生端口组。
至此,完成图6所示的设备描述。
另外,本发明还提供了另外一种防止环路震荡的设备,该设备包括:
端口阻塞单元,用于在本设备的本端端口需要被阻塞时,阻塞该需要被阻塞的端口;
发送单元,用于在所述端口阻塞单元阻塞所述需要被阻塞的端口之前,向如图6所示设备的第一端口发送阻塞通告,以触发图6所示设备中的各个单元执行相应操作。
至此,完成本发明的描述。
由以上技术方案可以看出,本发明中,第一设备通过第一端口接收对端端口在被阻塞之前发送的阻塞通告,并依据所述阻塞通告确定需要阻塞的实例;如此,第一设备建立满足以下条件的孪生端口组:所述实例为所述孪生端口组的孪生实例,第一端口为所述孪生端口组的目的端口、第一设备上其他注册了与所述孪生实例具有映射关系的VLAN的端口为所述孪生端口组的源端口,并且,所述源端口中只有一个被设置第一标识,剩余的被设置第二标识;之后在被设置了第一标识的源端口注册了与所述实例具有映射关系的动态VLAN时,触发所述目的端口注册该动态VLAN,这保证了目的端口一直可以注册到所述实例中,避免了环路在存在和消除之间来回反复震荡。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。