发明内容
本发明的第一个目的在于提供处理生成树协议报文的方法,可以在生成树的根发生切换的情况下阻塞端口,从而可以在重新构造生成树的过程中避免环路的产生。
本发明的第二个目的在于提供处理生成树协议报文的交换机,可以在生成树的根发生切换的情况下阻塞端口,从而可以在重新构造生成树的过程中避免环路的产生。
为了达到上述第一个发明目的,本发明提出的技术方案为:
一种处理生成树协议报文的方法,该方法包括:
按照生成树协议对接收到的生成树协议报文进行处理,在处理过程中获得生成树原有的根标识信息和新的根标识信息,并在端口角色迁移之前根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则设置端口需要阻塞的指示信息,并在端口角色迁移和后续处理过程中根据端口需要阻塞的指示信息将端口进行阻塞;否则,继续按照生成树协议进行处理。
上述方案中,在判断出生成树的根发生了切换时,该方法进一步包括:
处理生成树协议报文的交换机根据新的根标识信息和自身标识判断自身是否为生成树新的根,如果是,则执行所述设置端口需要阻塞的指示信息的步骤;否则,执行所述继续按照生成树协议进行处理的步骤。
上述方案中,在判断出生成树的根发生了切换时,该方法进一步包括:
处理生成树协议报文的交换机根据原有的根标识信息和自身标识判断自身是否为生成树原有的根,如果是,则执行所述设置端口需要阻塞的指示信息的步骤;否则,执行所述继续按照生成树协议进行处理的步骤。
上述方案中,所述端口为指定端口,所述端口需要阻塞的指示信息为指示指定端口需要同步的信息。
上述方案中,所述设置指示指定端口需要同步的信息的步骤包括:
将指定端口的同步sync标志置位,将指定端口的已同步synced标志复位。
上述方案中,所述后续处理过程为端口状态迁移过程,所述在端口角色迁移和后续处理过程中根据指示指定端口需要阻塞的信息将指定端口进行阻塞的步骤包括:
根据生成树协议对端口角色进行迁移,并在对端口角色进行迁移的过程中,根据sync标志和synced标志生成指示状态迁移的信息;在端口状态迁移过程中再根据指示状态迁移的信息将指定端口的状态迁移为阻塞状态。
上述方案中,所述对端口角色进行迁移的方法为:利用符合生成树协议的端口角色迁移状态机PRT对端口角色进行迁移;
所述对端口状态进行迁移的方法为:利用符合生成树协议的端口状态迁移状态机PST对端口状态进行迁移。
上述方案中,所述生成树协议报文为快速生成树协议RSTP报文,所述生成树的根为RSTP的根;或者,
所述生成树协议报文为多生成树协议MSTP报文,所述生成树的根为MSTP域根。
为了达到上述第二个发明目的,本发明提出的技术方案为:
一种处理生成树协议报文的交换机,该交换机包括:
生成树协议处理模块,用于按照生成树协议对接收到的生成树协议报文进 行处理;将在处理过程中获得的生成树原有的根标识信息和新的根标识信息传输给根切换判别模块;还用于在端口角色迁移和后续过程中根据设置的端口需要阻塞的指示信息将端口进行阻塞;
根切换判别模块,用于根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则将通知消息发送出去;
信息设置模块,用于在接收到通知消息时在生成树协议处理模块中设置端口需要阻塞的指示信息。
上述方案中,,所述信息设置模块为同步信息设置模块,所述端口需要阻塞的指示信息为同步信息设置模块设置的指示指定端口需要同步的信息。
上述方案中,,该交换机进一步包括:
第一判别模块,用于在接收到通知消息时,根据新的根标识信息和交换机自身标识判断交换机自身是否为生成树新的根,如果是,则将通知消息发送给同步信息设置模块。
上述方案中,,该交换机进一步包括:
第二判别模块,用于在接收到通知消息时,根据原有的根标识信息和交换机自身标识判断交换机自身是否为生成树原有的根,如果是,则将通知消息发送给同步信息设置模块。
综上所述,本发明提出的一种处理生成树协议报文的方法和交换机,由于在报文处理过程中可以获得生成树原有的根标识信息和新的根标识信息,在端口角色迁移之前根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,并在生成树的根发生了切换的情况下,将端口阻塞,从而可以在重新构造生成树的过程中避免环路的产生。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
在处理生成树协议报文的过程中,由于交换机在某个时刻将原来阻塞状态的端口直接迁移为转发状态,使处于环路上的所有端口都同时处于转发状态,从而导致环路的产生。那么,如果在导致环路产生的阻塞状态迁移为转发状态之前,将任何一个交换机中处于环路的端口阻塞,就可以按照生成树协议的规定,在此后构造生成树的过程中避免环路的产生。
为了更好地说明本发明方案,下面先分析将阻塞状态快速迁移为转发状态而引起环路的情况。另外,为了描述方便,下述内容都将生成树协议报文简称为报文。
交换机处理报文之前和处理报文之后有以下几种情况:
一、交换机在处理报文之前和处理报文之后都是非根桥。在这种情况下,如果在处理报文的过程中需要将端口的阻塞状态迁移为转发状态,生成树协议本身是可以保证不产生环路的。
二、交换机处理报文之前是非根桥,而在处理报文之后成为根桥。在这种情况下,处理完报文的交换机各个端口都应该为指定端口,那么,按照生成树协议规定,不存在将阻塞状态直接迁移为转发状态而产生环路的情况。
三、交换机处理报文之前是根桥,而在处理报文之后是非根桥。在这种情况下,交换机需要将某个端口作为根端口,并直接迁移为转发状态。
四、交换机处理报文之前和处理报文之后都是根桥。在这种情况下,处理完报文的交换机各个端口都应该为指定端口,那么,按照生成树协议规定,也不存在将阻塞状态直接迁移为转发状态而产生环路的情况。
从上述的分析可以看出,只有第三种情况才存在将端口状态直接迁移为转发状态的情况。也就是说,如果交换机在处理报文之前是根桥,并且某端口还处于阻塞状态,那么,处理完报文之后,如果将处于阻塞状态的端口作为根端口,并直接迁移到转发状态,就可能产生环路。而具有阻塞状态端口的交换机,在成为根桥之前必定为非根桥,否则,该交换机的所有端口都应该是处于转发状态的指定端口,而不可能存在阻塞状态的端口。
也就是说,第三种情况中所述的交换机必定存在“非根桥->根桥->非根桥”这样一个变化过程。如果在这个过程的端口状态迁移为转发状态之前,将交换机任何一个处于环路的端口进行阻塞就可达到避免环路的目的。具体地说,可以在“非根桥->根桥”的过程中将端口阻塞,也可以在“根桥->非根桥”的过程中将端口阻塞。但不管是哪个过程,都需要交换机在处理报文的过程中确定生成树的根发生了切换,才将端口进行阻塞。
另外,由于网络中所有交换机处理报文的方法是相同的,不属于第三种情况的交换机如果也在确定生成树的根发生切换时阻塞其端口,同样可以达到避免环路的目的。
需要注意的是,本发明所述在确定生成树的根发生切换时阻塞端口并不一定一直阻塞该端口。比如:阻塞的是指定端口,按照生成树协议的规定,生成树构造完之后的指定端口应该处于转发状态,所以,本发明中所述在生成树的根发生切换时阻塞的端口还可能需要在后续被迁移为转发状态。但至于被阻塞的端口是否应该被迁移,什么时候迁移为转发状态,以及如何迁移为转发状态等情况则可以按照现有的生成树协议来实现。总之,只要在上述第三种情况所述交换机将阻塞端口直接迁移为转发状态之前,将环路上任何一个交换机的处于环路的端口阻塞,就可以在重新构造生成树的整个过程中避免环路的产生。
按照以上的分析结果,本发明提出的技术方案可以为:
按照生成树协议对接收到的生成树协议报文进行处理,在处理过程中检测生成树的根是否发生切换,如果发生切换,则将端口进行阻塞;否则,继 续按照生成树协议进行处理。
实际应用中,可以在发现生成树的根发生切换时,直接阻塞端口,包括根端口、指定端口等等;也可以先设置端口需要阻塞的指示信息,再根据端口需要阻塞的指示信息将端口进行阻塞。
如果采用先设置端口需要的指示信息这种方法,那么,所述在处理过程中检测生成树的是否发生切换,并在发生切换时将端口进行阻塞的方法可以为:
在处理过程中获得生成树原有的根标识信息和新的根标识信息,并在端口角色迁移之前根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则设置端口需要阻塞的指示信息,并在端口角色迁移和后续处理过程中根据端口需要阻塞的指示信息将端口进行阻塞。
这里所述的根标识信息可以是根桥ID中的媒体接入控制(MAC)地址,即指示由哪个交换机作为生成树的根。实际应用中,交换机在对报文进行处理的过程中获得生成树原有的根标识信息和新的根标识信息的方法很多。比如:由于交换机在处理报文过程中端口角色选择时可能会切换生成树的根,而交换机中设置的根优先级向量实时记录了生成树最新的根标识信息,所以,交换机可以在进行端口角色选择之前从根优先级向量中获取原有的根标识信息,在进行端口角色选择之后从根优先级向量中获取新的根标识信息。又比如:交换机根端口的配置消息中也记录了生成树最新的根标识信息,所以,交换机可以在替换根端口优先级之前从根端口配置消息中获取原有的根标识信息,在进行端口角色选择之后从根端口配置消息中获取新的根标识信息。
这样,当交换机在处理报文的过程中获取生成树原有的根标识信息和新的根标识信息后,如果原有的根标识信息和新的根标识信息相同,则可以确定生成树的根没有发生切换,如果原有的根标识信息和新的根标识信息不相同,则可以确定生成树的根发生了切换。
确定生成树的根发生了切换后,交换机就可以将端口进行阻塞以达到避免环路的目的。这里所述被阻塞的端口可以为交换机的指定端口、根端口等等,只要可以避免环路即可。
上述方案是交换机确定生成树的根发生切换的情况下将端口进行阻塞的,以避免环路的产生。这样,即使生成树原有的根和新的根都不是处理报文的交换机自身,处理报文的交换机也需要将自身端口进行阻塞。在这种情况下,如果网络比较复杂,就可能有大量的交换机需要将自身端口进行阻塞。如果阻塞的是指定端口等,按照生成树协议规定,被阻塞的指定端口应该在网络允许的情况下迁移为转发状态。这就要求指定端口被阻塞的交换机不断向自身下游交换机发送握手消息,直到下游交换机同意转发或超过30秒延时后,该交换机才可能将指定端口从阻塞状态迁移为转发状态。也就是说,如果交换机仅仅在确定生成树的根发生切换就将指定端口进行阻塞,容易在网络中产生较多的握手消息,不但浪费网络资源,也会延缓重新构造生成树的速度。
为了进一步节约网络资源,提高重新构造生成树的速度,本发明在上述方案的基础上,还提出另外两种方案:
一种是在判断出生成树的根发生了切换时,还根据新的根标识信息和交换机自身标识判断自身是否为生成树新的根,如果是,则执行所述设置端口需要阻塞的指示信息的步骤;否则,执行所述继续按照生成树协议进行处理的步骤。
这里所述的交换机自身标识其实就是交换机的MAC地址,如果新的根标识信息和交换机自身标识相同,则可以确定当前生成树的根就是交换机自身。
另外一种是在判断出生成树的根发生了切换时,还根据原有的根标识信息和交换机自身标识判断自身是否为生成树原有的根,如果是,则执行所述设置端口需要阻塞的信息的步骤;否则,执行所述继续按照生成树协议进行处理的步骤。
同样,这里所述的交换机自身标识也是指交换机的MAC地址,如果原有的根标识信息和交换机自身标识相同,则可以确定生成树原来的根就是交换机自身。
上述两种方案比较相似,都是在确定交换机自身发生根切换时才将端口阻塞。这样,网络中需要发送握手消息的交换机就将大大减少,从而进一步节约网络资源,提高重新构造生成树的速度。
不管交换机采用上述哪种方案处理报文,如果需要阻塞的端口为指定端口,所述端口需要阻塞的指示信息就可以是指示指定端口需要同步的信息。按照生成树协议的规定,对指定端口进行阻塞之前,还可以设置指示指定端口需要同步的信息,比如:将指定端口的同步(sync)标志置位,同时将已同步(synced)标志复位。这样,在端口角色迁移和后续处理过程中,就可以根据sync标志和synced标志对指定端口进行阻塞,具体方法就可以为:
根据生成树协议对端口角色进行迁移,并在对端口角色进行迁移的过程中,根据sync标志和synced标志生成指示状态迁移的信息;端口状态迁移过程根据指示状态迁移的信息将指定端口的状态迁移为阻塞状态。
实际应用中,交换机通常利用各种状态机实现对报文的处理,比如:利用端口角色选择状态机(PRS)实现端口角色选择,利用端口角色迁移状态机(PRT)实现端口角色迁移,利用端口状态迁移状态机(PST)实现端口状态迁移等等。各种状态机都是符合生成树协议规定的,其相互关系和实现机制比较复杂,具体如何实现属于现有技术,此处不再赘述。
另外,本发明所述的生成树协议可以为快速生成树协议(RSTP),所述生成树的根可以为RSTP生成树的根;所述生成树协议也可以为多生成树协议(MSTP),所述生成树的根可以为MSTP生成树的域根。
为了更好地说明本发明方案,下面用一个较佳实施例进行详细描述。
本实施例中,假设生成树协议为MSTP协议,网络被划分为多个域,每一个域中可以独立构造生成树,生成树的根为域根,域内的每一个交换机都可以按照MSTP协议处理所接收到的MSTP报文。
图3是本实施例处理MSTP报文的流程图。如图3所示,本实施例包括:
步骤301:交换机接收MSTP报文。
步骤302:根据MSTP协议判断是否需要处理所接收到的MSTP报文,如果需要,则继续执行步骤303;否则,丢弃所接收到的MSTP报文,并退出本流程。
实际应用中,根据MSTP协议判断是否需要处理MSTP报文的情况比较多,比如:当MSTP报文中携带的优先级比接收该报文端口的优先级高,交换机就需要对接收到的MSTP报文进行处理。又比如:当MSTP报文中携带的优先级比接收该报文端口的优先级低,但MSTP报文中携带的指定桥MAC地址等信息与接收该MSTP报文端口所记录的指定桥MAC地址等信息相同,交换机也需要对接收到的MSTP报文进行处理。至于哪些报文需要处理,哪些报文可以丢弃则可以按照MSTP协议进行确定,此处不再一一列举。
步骤303:从交换机的根优先级向量中获取生成树原有的根标识信息并记录下来。
实际应用中,交换机中会设置一个根优先级向量,用于实时记录生成树当前最新的域根相关信息,如根桥ID等。那么,交换机就可以将从根优先级向量中获取的根桥ID中的MAC地址作为生成树原有的根标识信息。
步骤304:端口角色选择状态机PRS利用接收到的MSTP报文完成对交换机各个端口角色的选择。
本步骤所述端口角色选择就是确定交换机中哪个端口作为根端口,哪些端口作为指定端口,哪些端口作为备选端口等过程。当然,不同交换机中的端口角色可能是不同的,比如:如果交换机为根桥,所有端口都应该为指定端口;如果交换机为非根桥,可以有一个根端口,其它端口都为指定端口。总之,交换机中各个端口的角色可以利用PRS状态机实现,此处不再赘述。
另外,本实施例仅描述了交换机在端口角色选择后存在指定端口的情况。实际应用中,如果不存在指定端口,处于环路的交换机必定存在处于阻 塞状态的备选端口等情况,那么,构造生成树的过程中也不会出现环路,直接按照现有的生成树协议处理即可。
步骤305:从交换机根优先级向量中获取生成树新的根标识信息并记录下来。
执行步骤304之后,根优先级向量中的信息可能发生变化,记录的是生成树当前最新的域根相关信息。那么,交换机就可以将从根优先级向量中获取的根桥ID中的MAC地址作为生成树新的根标识信息。
步骤306:根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则执行步骤307;否则,执行步骤309。
本步骤中,判断生成树的根是否发生了切换就是判断原有的根标识信息是否与新的根标识信息相同,如果相同,则确定没有发生切换;否则,可以确定发生了切换。
步骤307:根据新的根标识信息和交换机自身标识判断交换机自身是否为生成树新的根,如果是,则执行步骤308;否则,执行步骤309。
本步骤所述交换机自身标识是事先记录在交换机中的,即交换机的MAC地址。如果新的根标识信息和交换机自身标识相同,就可以确定交换机当前为生成树的根,即被切换成了根桥。
另外,本步骤是在判断出接收MSTP报文的交换机自身被切换为生成树的根的情况下执行步骤308的。而实际应用中,也可以在判断出接收MSTP报文的交换机自身为生成树原有的根的情况下执行步骤308。也就是说,本步骤也可以替换为步骤307′,即:
根据原有的根标识信息和交换机自身标识判断自身是否为生成树原有的根,如果是,则执行步骤308;否则,执行步骤309。
步骤308:将交换机自身指定端口的sync标志置位,将synced标志复位。
步骤309:利用PRT状态机对选择的端口角色进行迁移,并在迁移的过程中,根据指定端口的sync标志和synced标志生成指示状态迁移的信息。
实际应用中,当利用PRS状态机实现端口角色选择后,还需要利用PRT状态机对选择好的端口角色进行迁移。比如:交换机某个端口原来的角色是备选端口,经过端口角色选择之后确定应该为根端口,那么,PRT状态机就可以将作为备选端口迁移为根端口。
同时,如果备选端口为阻塞状态,而根端口应该为转发状态,还需要利用步骤310将端口的状态从阻塞状态迁移为转发状态。当然,端口角色和端口状态之间并没有严格的对应关系,是否应该将一个状态迁移为另一个状态还需要由PRT状态机确定,至于PRT状态机如何确定则属于现有技术,此处不再赘述。
另外,按照MSTP协议规定,如果指定端口的sync标志置位,synced标志复位,就需要将该指定端口迁移为阻塞状态。那么,在PRT状态机对端口角色进行迁移的过程中,就可以生成指示状态迁移的信息,以便于后续PST状态机将指定端口的状态迁移为阻塞状态。
步骤310:PST状态机利用指示状态迁移的信息将交换机自身的指定端口迁移到阻塞状态。
本步骤中所述PST状态机是专门用于端口状态迁移的状态机。当然,如果指定端口原来的状态就是阻塞状态,PST状态机也可以不执行状态迁移的步骤。总之,不管PST如何处理,只要将指定端口的sync标志置位,synced标志复位,交换机在处理完接收到的MSTP报文后,其指定端口就必定为阻塞状态。
另外,本步骤仅描述了将指定端口迁移为阻塞状态,而实际应用,本步骤还可以按照实际情况对其他端口的状态进行迁移。
不管是可导致环路的交换机执行本实施例方案,还是其它交换机执行本实施例方案,都可以保证在某个可导致环路的端口直接迁移为转发状态时,环路中必定有指定端口被设置为了阻塞状态。那么,只要环路中存在阻塞状态的指定端口,如果按照MSTP协议的规定继续构造生成树,在构造生成树完毕之前都不可能产生环路。
本实施例中,步骤301、步骤302、步骤304、步骤309以及步骤310就是现有MSTP协议处理报文的简要过程。但实际MSTP协议处理报文的过程相当复杂,比如:在步骤304完成端口角色选择之后,还需要利用端口信息状态机(PIM)计算各个端口的优先级。至于MSTP协议如何处理报文则属于现有技术,此处不再详细描述。
本实施例是在步骤303中获取生成树原有的根标识信息,在步骤305中获取生成树新的根标识信息,但实际应用中,也可以不按照这样的流程进行处理。比如:交换机可以在步骤301和步骤302之间执行获取生成树原有的根标识信息,在步骤304之后先由PIM状态机计算各个端口的优先级,再获取生成树新的根标识信息。也就是说,本实施例中的步骤303、步骤305~步骤308与现有的MSTP协议的流程之间并没有严格的顺序关系,只要在报文处理过程中获得生成树原有的根标识信息和新的根标识信息,在端口角色迁移之前判断生成树的根是否发生了切换,并在确定发生切换时设置指示指定端口需要同步的信息即可。
本实施例是设置指示指定端口需要同步的信息,即将指定端口的sync标志置位,将synced标志复位,并且后续再利用sync标志和synced标志对指定端口进行阻塞。而实际应用中,交换机也可以不利用sync标志和synced标志,而是采用其它方法对端口进行阻塞。比如:利用reroot变量作为指定端口需要阻塞的信息,并在后续利用reroot变量对指定端口进行阻塞。实际应用中,也可以不设置端口需要阻塞的指示信息,而是在发现生成树的根发生切换时直接将端口进行阻塞。总之,究竟需要阻塞哪种端口,是否设置需要阻塞的指示信息,设置哪种端口需要阻塞的指示信息等情况可以由应用本发明方案的用户自行确定,只要在导致环路产生的端口从阻塞状态迁移为转发状态之前,可以将处于环路中的端口阻塞,避免环路的产生即可,此处不再赘述。
针对上述提出的方法,本发明还提出一种处理生成树协议报文的交换机。图4是本发明交换机的内部结构示意图。如图4所示,该交换机包括:
生成树协议处理模块401,用于按照生成树协议对接收到的生成树协议报文进行处理;将在处理过程中获得的生成树原有的根标识信息和新的根标识信息传输给根切换判别模块402;还用于在端口角色迁移和后续过程中根据设置的端口需要阻塞的信息将端口进行阻塞。
根切换判别模块402,用于根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则将通知消息发送出去。
信息设置模块403,用于在接收到通知消息时在生成树协议处理模块401中设置端口需要阻塞的指示信息。
也就是说,当交换机接收到生成树协议报文,可以由生成树协议处理模块401按照生成树协议对接收到的生成树协议报文进行处理,并在处理过程中获得的生成树原有的根标识信息和新的根标识信息传输给根切换判别模块402;根切换判别模块402根据原有的根标识信息和新的根标识信息判断生成树的根是否发生了切换,如果发生了切换,则将通知消息发送出去;信息设置模块403在接收到通知消息时,在生成树协议处理模块中设置端口需要阻塞的信息;生成树协议处理模块401在端口角色迁移和后续过程中根据设置的端口需要阻塞的信息将端口进行阻塞。当然,生成树协议处理模块401在将端口进行阻塞后,还需要按照生成树协议继续处理报文。另外,如果生成树的根没有发生切换,生成树协议处理模块401不会存在由信息设置模块403设置端口需要阻塞的信息,也不会根据设置的端口需要阻塞的信息将端口进行阻塞,而是需要按照生成树协议继续处理报文。
如果需要被阻塞的端口是指定端口,那么,所述的信息设置模块403就可以为同步信息设置模块403′,即:在接收到通知消息时在生成树协议处理模块中设置指示指定端口需要同步的信息。相应地,生成树协议处理模块401就需要根据设置的指示指定端口需要同步的信息将指定端口进行阻塞。当然,如果需要被阻塞的端口是其它端口,信息设置模块403就可以设置针对其它端口的指示信息,此处不再赘述。
由于交换机是在确定生成树的根发生切换的情况下将端口进行阻塞的, 以避免环路的产生。这样,即使生成树原有的根和新的根都不是处理报文的交换机自身,处理报文的交换机也需要将自身端口进行阻塞。在这种情况下,如果网络比较复杂,就可能有大量的交换机需要将自身端口进行阻塞。如果被阻塞的是指定端口,按照生成树协议规定,被阻塞的指定端口应该在网络允许的情况下迁移为转发状态。这就要求指定端口被阻塞的交换机不断向自身下游交换机发送握手消息,直到下游交换机同意转发或超过30秒延时后,该交换机才可能将指定端口从阻塞状态迁移为转发状态。也就是说,如果交换机仅仅在确定生成树的根发生切换就将指定端口进行阻塞,容易在网络中产生较多的握手消息,不但浪费网络资源,也会延缓重新构造生成树的速度。
为了进一步节约网络资源,提高重新构造生成树的速度,本发明在上述方案的基础上,还提出两个实施例:
图5是应用本发明方案的交换机实施例一的结构图。如图5所示,该交换机包括:生成树协议处理模块401、根切换判别模块402、同步信息设置模块403′、第一判别模块404a。
其中,生成树协议处理模块401、根切换判别模块402、同步信息设置模块403′与上述相应的模块相同,此处不再赘述。而第一判别模块404a则在接收到通知消息时,根据新的根标识信息和交换机自身标识判断交换机自身是否为生成树新的根,如果是,则将通知消息发送给同步信息设置模块403。也就是说,当同步信息设置模块403判断出生成树的根发生了切换时,同步信息设置模块403并不立即在生成树协议处理模块401中设置指示指定端口需要同步的信息,而是需要先由第一判别模块404a判断交换机自身是否为生成树新的根,只有在交换机是生成树新的根的情况下才在生成树协议处理模块401中设置指示指定端口需要同步的信息。
图6是应用本发明方案的交换机实施例二的结构图。如图6所示,该交换机包括:生成树协议处理模块401、根切换判别模块402、同步信息设置模块403′、第二判别模块404b。
其中,生成树协议处理模块401、根切换判别模块402、同步信息设置 模块403′也与上述相应模块相同,此处也不再赘述。
而第二判别模块404b则在接收到通知消息时,根据原有的根标识信息和交换机自身标识判断交换机自身是否为生成树原有的根,如果是,则将通知消息发送给同步信息设置模块403。也就是说,当同步信息设置模块403判断出生成树的根发生了切换时,同步信息设置模块403并不立即在生成树协议处理模块401中设置指示指定端口需要同步的信息,而是需要先由第二判别模块404b判断交换机自身是否为生成树新的根,只有在交换机是生成树新的根的情况下才在生成树协议处理模块401中设置指示指定端口需要同步的信息。
上述两个实施例是同步信息设置模块403′设置指示指定端口需要同步的信息,由生成树协议处理模块401利用指示指定端口需要同步的信息对指定端口进行阻塞。而实际应用中,也可以不利用同步信息设置模块403′设置指示指定端口需要同步的信息,而是采用其它方法对端口进行阻塞。比如:利用reroot变量作为指定端口需要阻塞的信息,并在后续利用reroot变量对指定端口进行阻塞。总之,究竟需要阻塞哪种端口,设置哪种端口需要阻塞的指示信息等情况可以参考现有的生成树协议,只要在导致环路产生的端口从阻塞状态迁移为转发状态之前,可以将处于环路中的端口阻塞,避免环路的产生即可,此处不再赘述。
下面以图1所示的生成树重新构造成图2所示的生成树为例来说明本发明实施例方案的效果:
如果在处理报文的过程中,交换机确定自身切换为生成树新根时才阻塞指定端口,那么,当取消A3作为域根的配置,恢复A3的默认优先级,A3将通过端口PA31向A1发送携带默认优先级信息的MSTP报文,通过端口PA32向A2发送携带默认优先级信息的MSTP报文;A1从端口PA12接收到来自A3的MSTP报文后,按照本发明实施例的方案对报文进行处理,A1确定自身的端口PA11和PA12为指定端口,判断出生成树的根发生了切换,并且A1自身为生成树新的根,从而将指定端口PA11和PA12的sync标志 置位,将synced标志复位,并在后续处理过程将指定端口PA11和PA12的状态迁移为阻塞状态。至此,由于环路上已经有指定端口被阻塞,按照MSTP协议规定,在后续构造生成树的过程都不可能出现环路。
相应地,如果在处理报文的过程中,交换机确定自身为生成树原有的根时才阻塞指定端口,那么,当取消A3作为域根的配置,恢复A3的默认优先级,A3将通过端口PA31向A1发送携带默认优先级信息的MSTP报文,通过端口PA32向A2发送携带默认优先级信息的MSTP报文;A1从端口PA12接收到来自A3的MSTP报文后,按照本实施例方案对报文进行处理,A1确定自身的端口PA11和PA12为指定端口,判断出生成树的根发生了切换,并且自身并不是生成树原有的根,在处理完报文之后指定端口保持转发状态;同样,A2从端口PA22接收到来自A3的MSTP报文,也按照本实施例方案对报文进行处理,A2确定自身端口PA21和PA22为指定端口,判断出生成树的根发生了切换,并且自身并不是生成树原有的根,在处理完报文之后指定端口PA21保持阻塞状态,PA22保持转发状态;A2再从端口PA21接收到来自A1的MSTP报文,按照本实施例方案对报文进行处理,A2确定端口PA21为根端口,PA22为指定端口,判断出生成树的根发生了切换,并且自身是生成树原有的根,从而将指定端口PA22的sync标志置位,将synced标志复位,并在后续处理过程将指定端口PA22的状态迁移为阻塞状态,将根端口PA21迁移为转发状态。至此,虽然原来阻塞的PA21被快速迁移为转发状态,但由于环路上已经有指定端口PA22被阻塞,按照MSTP协议规定,在后续构造生成树的过程都不可能出现环路。
从以上分析可以看出,图1所示的生成树重新构造成图2所示的生成树的过程中,由于在A2将PA21快速迁移为转发状态之前,环路上必定会存在处于阻塞状态的指定端口,从而可以避免环路的产生。
应用本发明方案,由于在生成树的根发生切换的情况下将指定端口进行了阻塞,从而可以在重新构造生成树的过程中避免环路的产生。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的 保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。