用于防邻居震荡的方法和装置
技术领域
本发明涉及网络交换技术,特别涉及适用于网络交换设备的一种用于防邻居震荡的方法和一种用于防邻居震荡的装置。
背景技术
SPB(Shortest Path Bridging,最短路径桥接)是一种常用的以太网标准,也是STP(SpanningTree Protocol,生成树协议)的进一步延伸,旨在构建大型扁平的无阻塞二层网络。SPB存在两种模式,一种是VLAN(Virtual Local Area Network,虚拟局域网)模式、简称SPBV模式,另一种是Mac(Media Access Control,媒体接入控制)-in-Mac模式、简称SPBM模式。其中,SPBV模式的协议非常复杂,因而目前基本无应用;而SPBM模式则是目前主要使用的一种模式,因此,本文所提及的SPB网络主要是指SPBM模式。
参见图1,SPB网络通常包含两部分,其中一部分为骨干网络(Core Network)、另一部分为用户网络(Customer Network)。骨干网络由若干台BCB(Backbone Core Bridge,骨干网核心网桥)互连而成,并且,在骨干网络的边缘处还设置有用于用户网络接入核心网络的BEB(Backbone Edge Bridge,骨干网边缘网桥)。
其中,BCB设备和BEB设备均被运营商分配有各自的B-MAC(Backbone MAC,骨干网MAC地址)和B-VLAN(Backbone VLAN,骨干网VLAN),相应地,报文在骨干网络中的转发可以依靠B-MAC和B-VLAN来实现,具体说:
当两个用户网络之间需要通过核心网络交互用户报文时,用户报文首先到达源端用户网络所连接的源端BEB设备,并由源端BEB设备将其自身的B-MAC作为源B-MAC、将目的端BEB设备的B-MAC作为目的MAC封装至用户报文中,使用户报文被封装为MAC-in-MAC报文,然后核心网络中的BCB设备即可按照MAC-in-MAC报文所属的B-VLAN以及报文中封装的B-MAC将报文至目的端BEB设备,最终由目的端BEB设备将MAC-in-MAC报文中的B-MAC解封装,并将解封装后的用户报文转发至目的端用户网络。
如此一来,核心网络中的每台BCB设备就只需要学习骨干网络中与其属于相同B-VLAN的其他BCB设备的B-MAC、以及骨干网络边缘与其属于相同B-VLAN的BEB设备的B-MAC,而不再需要学习用户网络中的大量MAC地址,从而能够降低网络部署成本、并为骨干网络提供了更好的可扩展性。
在具体实现时:
由于MAC-in-MAC报文在核心网络的转发是基于B-VLAN来实现的,因此,各台BCB设备之间彼此互连的端口、以及BEB设备用于与BCB设备互连的端口均需要许可运营商为SPB网络所分配的B-VLAN;其中,运营商为SPB网络所分配的B-VLAN不具备普通的STP功能,而是仅对符合SPB规则的报文进行转发,符合SPB规则的报文包括但不限于MAC-in-MAC报文、以及ISIS(Intermediate system to intermediate system,中间系统到中间系统)协议报文;
而且,对于采用SPBM模式的情况,为了实现符合SPB规则的报文在核心网络中以SPBM模式进行转发,许可了B-VLAN的上述端口还需要使能SPBM功能;
以及,许可了B-VLAN并使能有SPBM功能的上述端口还需要通过交互ISIS协议的HELLO(招呼)报文来建立并维护邻居关系;其中,SPBM模式下的邻居关系是点对点的,即,每个端口只能够建立一个邻居,因此,每两个许可了B-VLAN并使能有SPBM功能的端口所交互的HELLO报文只能限制在这两个端口之间,相应地,SPBM功能会将端口接收到的HELLO报文上送至CPU、而不会再进行转发。
然而,在现有技术中,可能会出现端口的上送功能异常,从而导致该端口接收到的HELLO报文被透传转发,从而使得SPB网络中出现邻居震荡。具体请参见图2:
BCB设备1的端口Port12与BCB设备2的端口Port21均使能有SPBM功能、且彼此间已通过HELLO报文(如图2中在端口Port12和Port21之间的双向实线箭头线所示)建立并维护有邻居关系,BCB设备1的端口Port13与BCB设备3的端口Port31均使能有SPBM功能、且彼此间已通过HELLO报文(如图2中在端口Port13和Port31之间的双向实线箭头线所示)建立并维护有邻居关系;
此时,BEB设备1的端口Port01向BCB设备1的端口Port10发送HELLO报文、旨在与BCB设备1的端口Port10建立邻居关系;
而BCB设备1的端口Port10虽然处在Up(启动)状态、但其上送功能却发生了异常(可能是由于SPBM功能的使能过程尚未完成、或SPBM功能被去使能等原因所致),并且,BCB设备1的另外两个端口Port12和Port13与端口Port10许可了相同的B-VLAN,从而使得BCB设备1的端口Port10从BEB设备1接收到的HELLO报文未能上送至BCB设备1的CPU,从而导致本应被限制在端口Port01和Port10之间的HELLO报文从BCB设备1的另外两个端口Port12和Port13分别转发至BCB设备2的端口Port21和BCB设备3的端口Port31(图2中在端口Port01和Port10之间的双向实线箭头线示出了该HELLO报文正确的交互路径、图2中示出的两条单向虚线箭头线示出了该HELLO报文被错误透传的路径);
相应地,就导致BCB设备2的端口Port21不但会接收到BCB设备1的端口Port12所发出的HELLO报文,还会接收到BEB设备1的端口Port01所发出的HELLO报文,而且,BCB设备2的端口Port21会交替地接收来源不同的这两种HELLO报文,由此就会导致BCB设备2的端口Port21的邻居在BCB设备1的端口Port12与BEB设备1的端口Port01之间反复切换,从而在BCB设备2的端口Port21引发邻居震荡;同理,BCB设备3的端口Port31同样会产生类似的邻居震荡。
可见,现有技术会由于无法对HELLO报文实施有效的控制而导致SPB网络中发生邻居震荡。当然,对于除SPB网络之外的其他网络,同样有可能会由于无法对类似于HELLO报文的邻居报文实施有效控制而引发邻居震荡。
发明内容
有鉴于此,本发明提供了一种用于防邻居震荡的方法和一种用于防邻居震荡的装置。
本发明提供的一种用于防邻居震荡的方法,该方法应用于网络交换设备中、并包括在网络交换设备中运行的如下步骤:
a0、创建监控进程;
a1、利用创建的监控进程检查端口的驱动对邻居报文的上报功能是否正常;
a2、当所述步骤a1检查到所述上报功能异常时,利用监控进程通知该端口的驱动对邻居报文实施阻塞。
该方法进一步包括在网络交换设备中运行的如下步骤:
a3、当对端口实施阻塞的驱动向监控进程上报所述上报功能恢复正常时,利用监控进程解除该驱动对端口实施的阻塞。
应用该方法的网络交换设备为SPB网络中的BEB设备或BCB设备,所述邻居报文为ISIS协议的HELLO报文,以及:
当有STP实例被创建后,针对该STP实例触发所述步骤a0;
当创建的STP实例被配置B-VLAN后,所述步骤a0进一步利用创建的监控进程跟踪该STP实例所配置的B-VLAN、并用于监控许可该B-VLAN的所有端口;
当跟踪的B-VLAN被许可在任意端口后,针对该端口触发所述步骤a1;
当被实施阻塞的端口发生SPBM功能的使能事件后,该端口的驱动向监控进程上报所述上报功能正常、并触发所述步骤a3。
该方法进一步包括在网络交换设备中运行的如下步骤:
b0、分别为每个端口创建邻居缓存,用于存放端口接收到的邻居报文;
b1、当任意端口接收到来自新邻居的邻居报文后,监测该端口的邻居缓存中此后持续存放的邻居报文是否均来自该新邻居;
b2、若所述步骤b1的监测结果为是,则与该新邻居建立邻居关系;
b3、若所述步骤b1的监测结果为否,则丢弃来自该新邻居的邻居报文。
应用该方法的网络交换设备为SPB网络中的BEB设备或BCB设备,所述邻居报文为ISIS协议的HELLO报文,以及,所述步骤b0为每个端口创建的邻居缓存的大小为快速模式发送速率与普通模式发送速率的商加1。
本发明提供的一种用于防邻居震荡的装置,该装置应用于网络交换设备中、并包括在网络交换设备中运行的如下模块:
进程创建模块,创建监控进程;
端口检查模块,利用创建的监控进程检查端口的驱动对邻居报文的上报功能是否正常;
端口阻塞模块,当所述端口检查模块检查到所述上报功能异常时,利用监控进程通知该端口的驱动对邻居报文实施阻塞。
该装置进一步包括在网络交换设备中运行的如下模块:
端口恢复模块,当对端口实施阻塞的驱动向监控进程上报所述上报功能恢复正常时,利用监控进程解除该驱动对端口实施的阻塞。
应用该装置的网络交换设备为SPB网络中的BEB设备或BCB设备,所述邻居报文为ISIS协议的HELLO报文,以及:
当有STP实例被创建后,针对该STP实例触发所述进程创建模块;
当创建的STP实例被配置B-VLAN后,所述进程创建模块进一步利用创建的监控进程跟踪该STP实例所配置的B-VLAN、并用于监控许可该B-VLAN的所有端口;
当跟踪的B-VLAN被许可在任意端口后,针对该端口触发所述端口检查模块;
当被实施阻塞的端口发生SPBM功能的使能事件后,该端口的驱动向监控进程上报所述上报功能正常、并触发所述端口恢复模块。
该装置进一步包括在网络交换设备中运行的如下模块:
缓存分配模块,分别为每个端口创建邻居缓存,用于存放端口接收到的邻居报文;
邻居监测模块,当任意端口接收到来自新邻居的邻居报文后,监测该端口的邻居缓存中此后持续存放的邻居报文是否均来自该新邻居;
邻居有效模块,若所述邻居监测模块的监测结果为是,则与该新邻居建立邻居关系;
邻居无效模块,若所述邻居监测模块的监测结果为否,则丢弃来自该新邻居的邻居报文。
应用该装置的网络交换设备为SPB网络中的BEB设备或BCB设备,所述邻居报文为ISIS协议的HELLO报文,以及,所述缓存分配模块为每个端口创建的邻居缓存的大小为快速模式发送速率与普通模式发送速率的商加1。
由此可见,本发明能够利用监控进程对端口的驱动进行监控、并在监控到端口的驱动对邻居报文的上报功能异常时令该端口的驱动对邻居报文实施阻塞,因而能够避免邻居报文被错误地透传,进而能够有效减少由于邻居报文被错误透传所引发的邻居震荡。而且,本发明还能够由端口的驱动在上报功能恢复正常后主动通告监控进程、并由监控进程依此解除已实施的阻塞,因而能够在端口的上报功正常时确保邻居关系建立的正常实现。另外,本发明还可以通过邻居钝化处理来弥补监控进程可能存在的疏漏,以进一步降低发生邻居震荡的概率。
附图说明
图1为现有技术中的SPB网络架构示意图;
图2为如图1所示的网络架构中发生邻居震荡的示意图;
图3为本发明实施例中用于防邻居震荡的方法的主流程示意图;
图4为如图3所示主流程的一实例示意图;
图5为本发明实施例中用于防邻居震荡的方法的附加流程示意图;
图6为如图5所示附加流程的一实例示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
在本实施中,利用监控进程对各端口进行监控,当监控到任意端口的驱动对邻居报文的上报功能异常时,即可令该端口的驱动对邻居报文实施阻塞,以此来避免邻居报文被错误地透传,进而能够有效减少由于邻居报文被错误透传所引发的邻居震荡。其中,需要说明的是,本实施例所述的阻塞仅仅是针对邻居报文的阻塞,而并不是通过将端口置为Down(关闭)状态而阻塞所有报文。
而且,当端口恢复正常的上报功能时,端口的驱动能够主动向监控进程上报、并由监控进程依此解除已实施的阻塞,这样,在端口的上报功正常时即可确保邻居关系建立的正常实现。
另外,在监控进程命令上报功能异常的端口驱动实施阻塞之前,该端口有可能已经错误地透传了邻居报文,因此,为了避免这样的疏漏,本实施例还可以通过邻居钝化处理来进一步降低发生邻居震荡的概率。
基于上述原理,本实施例提供了一种用于防邻居震荡的方法、且该方法可以应用于网络交换设备中,下面对该方法进行详细说明。
请参见图3,为了通过监控进程的监控和驱动的阻塞来避免邻居报文被错误地透传、以及在端口恢复正成的上报功能时取消阻塞,本实施例所提供的用于防邻居震荡的方法包括在网络交换设备中运行的如下步骤:
步骤300,创建监控进程。
步骤301,利用创建的监控进程检查端口的驱动对邻居报文的上报功能是否正常;其中,对于上报功能异常的端口继续执行步骤302,而对于上报功能正常的端口可以直接结束流程。
步骤302,当步骤301检查到上报功能异常时,利用监控进程通知该端口的驱动对邻居报文实施阻塞,然后等待步骤303的执行。
步骤303,当对端口实施阻塞的驱动向监控进程通告上报功能已恢复正常时,利用监控进程解除该驱动对端口实施的阻塞。
至此,上述流程结束。
优选地,当上述流程可以应用在SPB网络中的网络交换设备,此时,应用该方法的网络交换设备可以为BEB设备或BCB设备,需要在上报功能异常时予以阻塞的邻居报文就为ISIS协议的HELLO报文,相应地,请参见图4,当如图3所示的流程应用在BEB设备或BCB设备时,各步骤在BEB设备或BCB设备的应用层的执行状态如下:
当在用户操作平台创建STP实例后,步骤300即可针对创建的该STP实例被触发运行。
当在用户操作平台为创建的STP实例配置B-VLAN后,步骤300此时可以进一步利用创建的监控进程跟踪该STP实例所配置的B-VLAN、用以监控许可该B-VLAN的所有端口(图4中以步骤300’来表示该处理过程)。
当在用户操作平台将监控进程所跟踪的B-VLAN许可在任意端口后,步骤301即可针对该端口触发运行。
此后,即可在用户操作平台对许可了B-VLAN的端口使能SPBM功能,其中,由于端口上报功能是依赖于SPBM功能的,因此:
若端口在步骤301检查时即完成了SPBM功能的使能过程,则步骤301能够检查出该端口的驱动的上报功能此时正常;
但若端口在步骤301检查时尚未完成SPBM功能的使能过程、或者已使能的SPBM功能又被去使能,则步骤301就会检查出该端口的驱动的上报功能此时异常。
如图4所示的实例属于上报异常的情况,因此,就会触发步骤302通知该端口的驱动对邻居报文实施阻塞。
相应地,当端口的SPBM功能的使能过程完成后,端口的驱动会由于发生了SPBM功能的使能事件而向监控进程主动通告上报功能已正常,此时,步骤303即可针对恢复正常的端口而被触发运行。
此后,该端口即可完成邻居的建立。
如前文所述,除了利用监控进程监控端口的驱动之外,本实施例还可以对端口进行钝化处理。因此,请再参见图5,为了对端口实施邻居钝化处理,本实施例所提供的用于防邻居震荡的方法还可以进一步包括在网络交换设备中运行的如下步骤:
步骤500,分别为每个端口创建邻居缓存,用于存放端口接收到的邻居报文。
步骤501,当任意端口接收到来自新邻居的邻居报文后,监测该端口的邻居缓存中此后持续存放的邻居报文是否均来自该新邻居,若是则执行步骤502,否则执行步骤503。
步骤502,认为新邻居是可以信赖的,并与该新邻居建立邻居关系。
步骤503,认为来自该新邻居的邻居报文是孤立的,因此丢弃来自该新邻居的邻居报文。
至此,上述流程结束。
与如图3所示的流程同理,如图5所示的流程也能够优选地应用在BEB设备或BCB设备,此时,可以进一步考虑如下的因素:
由不同端口发出的HELLO报文中,会携带有标识该端口所属设备的System-ID(系统标识),每当端口发现其接收到的HELLO报文中携带的System-ID与之前接收到的HELLO报文不同,就会认为有新邻居出现,但本实施按照如图5所示的流程,并不是发现新邻居之后立即进行邻居切换,而是将HELLO报文先存放至邻居缓存中,并继续监控后续接收到的HELLO报文中是否仍携带有表示该新邻居的相同System-ID;只有当连续若干个HELLO报文中携带相同的System-ID时,才认为该System-ID所表示的新邻居是可以信赖的、并进行邻居切换。如此一来,虽然降低了邻居变化的敏感性,但也同时降低了邻居震荡的风险。
请参见如图6所示的实例,假设有BCB设备1~BCB设备3,且BCB设备1~BCB设备3的System-ID依次为0000.0000.0001、0000.0000.0002、0000.0000.0003:
首先,BCB设备1与BCB设备2彼此互连的端口间正常交互HELLO报文(如图6中在BCB设备1与BCB设备2之间的双向实线箭头线所示),从而在BCB设备1的端口对应的邻居缓存中存放有System-ID为0000.0000.0002的HELLO报文;
然后,BCB设备3向BCB设备2发送System-ID为0000.0000.0003的HELLO报文,但由于BCB设备2连接BCB设备3的端口发生上报功能异常,因而导致System-ID为0000.0000.0003的HELLO报文被透传至BCB设备1(如图6中从BCB设备3指向BCB设备1的单向虚线箭头线所示),此时,BCB设备1并不急于进行邻居切换,而是将System-ID为0000.0000.0003的HELLO报文存入至邻居缓存中;
此后,BCB设备2利用如图3所示的流程在其连接BCB设备3的端口对HELLO报文实施阻塞,使得BCB设备1不再接收到由BCB设备3所发出的System-ID为0000.0000.0003的HELLO报文,从而,使得BCB设备1确认没有可信的新邻居出现、并将System-ID为0000.0000.0003的HELLO报文丢弃(图6中以图形“×”表示丢弃)。
另外,若将如图5所示的流程应用在BEB设备或BCB设备,则对于邻居缓存的大小可以考虑如下的因素:
对于每个端口来说,在其未收到对端的HELLO报文时通常会以速率为1packet/s(包/秒)的快速模式连续发出HELLO报文;但当端口收到对端的HELLO报文后,该端口就会改为以速率为0.1packets/s的普通模式发出HELLO报文。
因此,为了确保邻居缓存中所缓存的HELLO报文的数量足够判断出新邻居是否可信赖,可以设置缓存的大小为快速模式发送速率与普通模式发送速率的商+1,即,邻居缓存优选地具有1/0.1+1共11个HELLO报文的存放空间。
当然,在实际应用中,邻居缓存的大小是可以灵活变化的,当邻居缓存的大小改为1个HELLO报文的存放空间时,即视为无钝化处理,当邻居缓存的大小越大,钝化处理的敏感度越低。
以上是对本实施例中用于防邻居震荡的方法的详细说明。由于该方法能够以计算机程序来实现,因此,本实施例还对应地提供了一种用于防邻居震荡的装置。
该装置应用于网络交换设备中,并且,为了通过监控进程的监控和驱动的阻塞来避免邻居报文被错误地透传、以及在端口恢复正成的上报功能时取消阻塞,该装置包括在网络交换设备中运行的如下模块:
进程创建模块,创建监控进程;
端口检查模块,利用创建的监控进程检查端口的驱动对邻居报文的上报功能是否正常;
端口阻塞模块,当所述端口检查模块检查到所述上报功能异常时,利用监控进程通知该端口的驱动对邻居报文实施阻塞;
端口恢复模块,当对端口实施阻塞的驱动向监控进程上报所述上报功能正常时,利用监控进程解除该驱动对端口实施的阻塞。
与方法同理,该装置可以优选地于SPB网络中的BEB设备或BCB设备,且邻居报文就为ISIS协议的HELLO报文,相应地:
当有STP实例被创建后,可以针对该STP实例触发所述进程创建模块;
当创建的STP实例被配置B-VLAN后,进程创建模块可以进一步利用创建的监控进程跟踪该STP实例所配置的B-VLAN、并用于监控许可该B-VLAN的所有端口;
当跟踪的B-VLAN被许可在任意端口后,可以针对该端口触发所述端口检查模块;
当被实施阻塞的端口发生SPBM功能的使能事件后,该端口的驱动向监控进程上报所述上报功能正常、并触发端口恢复模块。
此外,为了对端口实施邻居钝化处理,该装置进一步包括在网络交换设备中运行的如下模块:
缓存分配模块,分别为每个端口创建邻居缓存,用于存放端口接收到的邻居报文;
邻居监测模块,当任意端口接收到来自新邻居的邻居报文后,监测该端口的邻居缓存中此后持续存放的邻居报文是否均来自该新邻居;
邻居有效模块,若所述邻居监测模块的监测结果为是,则与该新邻居建立邻居关系;
邻居无效模块,若所述邻居监测模块的监测结果为否,则丢弃来自该新邻居的邻居报文。
当应用该装置的网络交换设备为SPB网络中的BEB设备或BCB设备时,缓存分配模块为每个端口创建的邻居缓存的大小优选地可以为快速模式发送速率与普通模式发送速率的商加1。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。