发明内容
本发明提供一种基于路由控制策略的报文发送方法和设备,以减少链路负担,并减少CPU的损耗。
为了达到上述目的,本发明实施例提供一种基于路由控制策略的报文发送方法,应用于包括边界网关协议BGP路由交换设备和BGP对等体的网络中,所述BGP路由交换设备上配置有向所述BGP对等体发送BGP路由的路由控制策略,该方法包括以下步骤:
所述BGP路由交换设备在需要向所述BGP对等体发送BGP路由时,利用所述路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到处理后的BGP路由属性,并更新所述处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,以及向所述BGP对等体发送携带所述当前BGP路由属性的更新update报文;
在所述路由控制策略发生变化时,所述BGP路由交换设备重新向所述BGP对等体发送所述BGP路由,且所述BGP路由交换设备利用变化后的路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到对应所述变化后的路由控制策略的处理后的BGP路由属性;
所述BGP路由交换设备判断所述对应变化后的路由控制策略的处理后的BGP路由属性与所述当前BGP路由属性是否相同;如果否,所述BGP路由交换设备更新所述对应变化后的路由控制策略的处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,并向所述BGP对等体发送携带所述当前BGP路由属性的update报文;如果是,所述BGP路由交换设备拒绝向所述BGP对等体发送携带所述当前BGP路由属性的update报文。
发送或拒绝发送update报文的过程,进一步包括:
在判断结果为是时,所述BGP路由交换设备设置发送标志位send_flag为第一标识,在判断结果为否时,所述BGP路由交换设备设置send_flag为第二标识,且所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;
所述BGP路由交换设备查询send_flag的标识,如果send_flag为所述第一标识,则所述BGP路由交换设备拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为所述第二标识,则所述BGP路由交换设备向所述BGP对等体发送携带当前BGP路由属性的update报文。
在所述BGP路由交换设备需要向所述BGP对等体发送多条BGP路由时,发送或拒绝发送update报文的过程,进一步包括:
当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性不同,则针对所述多条BGP路由,所述BGP路由交换设备均需要向所述BGP对等体发送携带当前BGP路由属性的update报文;
当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性相同,则针对所述多条BGP路由,所述BGP路由交换设备均需要拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文。
所述方法进一步包括:所述BGP路由交换设备在向所述BGP对等体发送所述多条BGP路由中的第一条BGP路由时,所述BGP路由交换设备判断所述第一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与所述第一条BGP路由的当前BGP路由属性是否相同;如果否,则设置send_flag为第二标识,并向所述BGP对等体发送携带当前BGP路由属性的update报文;如果是,则设置send_flag为第一标识,并拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文;其中,所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;
所述BGP路由交换设备在向所述BGP对等体发送所述多条BGP路由中的其它BGP路由时,所述BGP路由交换设备查询send_flag的标识,如果send_flag为第一标识,则所述BGP路由交换设备拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为第二标识,则所述BGP路由交换设备向所述BGP对等体发送携带当前BGP路由属性的update报文。
所述路由控制策略包括以下之一或任意组合:
ORIGIN策略;
AS_PATH策略;
NEXT_HOP策略;
MULTI_EXIT_DISC策略;
LOCAL_PREF策略;
Community策略;
Extcommunity策略。
本发明实施例提供一种边界网关协议BGP路由交换设备,应用于包括所述BGP路由交换设备和BGP对等体的网络中,所述BGP路由交换设备上配置有向所述BGP对等体发送BGP路由的路由控制策略,该BGP路由交换设备包括:
第一处理模块,用于在需要向所述BGP对等体发送BGP路由时,利用所述路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到处理后的BGP路由属性,并更新所述处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,以及向所述BGP对等体发送携带所述当前BGP路由属性的更新update报文;
第二处理模块,用于在所述路由控制策略发生变化时,确定重新向所述BGP对等体发送所述BGP路由,且利用变化后的路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到对应所述变化后的路由控制策略的处理后的BGP路由属性;
判断模块,用于判断所述对应变化后的路由控制策略的处理后的BGP路由属性与所述当前BGP路由属性是否相同;
发送模块,用于当判断结果为否时,更新所述对应变化后的路由控制策略的处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,并向所述BGP对等体发送携带所述当前BGP路由属性的update报文;当判断结果为是时,拒绝向所述BGP对等体发送携带所述当前BGP路由属性的update报文。
所述发送模块,进一步用于在判断结果为是时,设置发送标志位send_flag为第一标识,在判断结果为否时,设置send_flag为第二标识,且所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;以及,查询send_flag的标识,如果send_flag为所述第一标识,则拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为所述第二标识,则向所述BGP对等体发送携带当前BGP路由属性的update报文。
在所述BGP路由交换设备需要向所述BGP对等体发送多条BGP路由时;
所述发送模块,进一步用于当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性不同,则针对所述多条BGP路由,均需要向所述BGP对等体发送携带当前BGP路由属性的update报文;
当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性相同,则针对所述多条BGP路由,均需要拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文。
所述判断模块,进一步用于在向所述BGP对等体发送所述多条BGP路由中的第一条BGP路由时,判断所述第一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与所述第一条BGP路由的当前BGP路由属性是否相同;
所述发送模块,进一步用于在判断结果为否时,设置send_flag为第二标识,并向所述BGP对等体发送携带当前BGP路由属性的update报文;在判断结果为是时,设置send_flag为第一标识,并拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文;其中,所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;以及,
在向所述BGP对等体发送所述多条BGP路由中的其它BGP路由时,查询send_flag的标识,如果send_flag为第一标识,则拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为第二标识,则向所述BGP对等体发送携带当前BGP路由属性的update报文。
所述路由控制策略包括以下之一或任意组合:
ORIGIN策略;
AS_PATH策略;
NEXT_HOP策略;
MULTI_EXIT_DISC策略;
LOCAL_PREF策略;
Community策略;
Extcommunity策略。
与现有技术相比,本发明至少具有以下优点:本发明实施例中,在路由控制策略发生变化时,可以减少不必要的update报文的发送,从而减少链路负担,提高链路安全性,并减少CPU的损耗。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
本发明实施例提出一种基于路由控制策略的报文发送方法,该方法应用于包括BGP路由交换设备(如BGP路由器,后续以BGP路由器为例进行说明)和BGP对等体的网络中,且BGP路由器和BGP对等体是相对的;以图1为本发明实施例的应用场景示意图,BGP路由器B和BGP路由器C是BGP路由器A的BGP对等体,且BGP路由器A是BGP路由器B的BGP对等体,且BGP路由器A是BGP路由器C的BGP对等体。
需要注意的是,如果BGP路由器上配置有向BGP对等体发送BGP路由的路由控制策略,则执行本发明实施例后续过程;如果BGP路由器上未配置有向BGP对等体发送BGP路由的路由控制策略,则不执行本发明实施例后续过程;因此,如果BGP路由器上配置有向BGP对等体发送BGP路由的路由控制策略,则如图2所示,该方法包括以下步骤:
步骤201,BGP路由器在需要向BGP对等体发送BGP路由时,利用路由控制策略对BGP路由对应的BGP路由属性进行处理,得到处理后的BGP路由属性(以BGP路由属性1为例),并更新BGP路由属性1为BGP路由对应的当前BGP路由属性(BGP路由器上会记录当前BGP路由属性),以及向BGP对等体发送携带当前BGP路由属性的update报文。
需要注意的是,在利用路由控制策略对BGP路由属性进行处理时,得到的BGP路由属性1可以与BGP路由对应的BGP路由属性相同(即未利用路由控制策略对BGP路由属性进行修改);BGP路由属性1也可以与BGP路由对应的BGP路由属性不同(即利用路由控制策略对BGP路由属性进行修改)。
步骤202,在路由控制策略发生变化时,BGP路由器需要重新向BGP对等体发送BGP路由,并利用变化后的路由控制策略对BGP路由对应的BGP路由属性进行处理,得到对应变化后的路由控制策略的处理后的BGP路由属性(以BGP路由属性2为例)。
步骤203,BGP路由器判断BGP路由属性2与当前BGP路由属性(即BGP路由属性1)是否相同;如果否,执行步骤204;如果是,执行步骤205。
需要注意的是,BGP路由器可以将当前BGP路由属性(即BGP路由属性1)存储在属性hash表中,且在获得BGP路由属性2之后,通过将BGP路由属性2的每个属性指针与BGP路由属性1的每个属性指针进行比对,以提高比较速度(其速度比字符串比较更快)。
步骤204,BGP路由器更新BGP路由属性2为BGP路由对应的当前BGP路由属性(即将记录的当前BGP路由属性由BGP路由属性1修改为BGP路由属性2),并向BGP对等体发送携带当前BGP路由属性的update报文。
步骤205,BGP路由器拒绝向BGP对等体发送携带当前BGP路由属性的update报文,即不发送update报文,以减少链路负担,并减少CPU的损耗。
本发明实施例的一种优选实施方式中,在判断结果为是时,则BGP路由器设置send_flag(发送标志位)为第一标识(如0),在判断结果为否时,则BGP路由器设置send_flag为第二标识(如1);且第一标识表示不需要发送update报文,第二标识表示需要发送update报文;进一步的,BGP路由器通过查询send_flag的标识,如果send_flag为第一标识,则BGP路由器拒绝向BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为第二标识,则BGP路由器向BGP对等体发送携带当前BGP路由属性的update报文。
本发明实施例中,上述路由控制策略包括但不限于以下之一或任意组合:ORIGIN策略,用于指明路由的来源,可来自自治域内、自治域外、或通过其它途径得到;AS_PATH策略,即路由经过的自治域的列表;NEXT_HOP策略,即路由的下一跳地址;MULTI_EXIT_DISC策略,即来自自治域外的路由的权值,在进行路由选择时,MED值较低的路由被优先选择;LOCAL_PREF策略,本自治域内路由的优选等级,进行路由选择时,此值较高的路由被优先选择;Community策略,即团体属性;Extcommunity策略,即扩展团体属性。
以下结合图1所示的应用场景对本发明实施例进行详细说明。
首先需要定义路由控制策略,例如,将ORIGIN、AS_PATH、NEXT_HOP、LOCAL_PREF、MULTI_EXIT_DISC、Community和Extcommunity中的一种或几种属性作为路由控制策略。
基于路由控制策略,当BGP路由器A需要向BGP路由器B和BGP路由器C发送BGP路由时,利用该路由控制策略检查BGP路由对应的BGP路由属性,并根据检查结果修改或不修改BGP路由对应的BGP路由属性,得到处理后的BGP路由属性(以BGP路由属性1为例,BGP路由属性1可以与BGP路由对应的BGP路由属性相同,也可以与BGP路由对应的BGP路由属性不同);之后,BGP路由器A向BGP路由器B和BGP路由器C分别发送携带BGP路由属性1的update报文,对BGP路由的发送过程在此不再赘述。
进一步的,在路由控制策略发生变化时,变化后的路由控制策略如图3所示,假设在变化后的路由控制策略中添加有local_pref200,且local_pref200与本自治域相关,即当BGP路由器与BGP对等体之间是IBGP(内部BGP)邻居关系时,local_pref200会发生作用,当BGP路由器与BGP对等体之间是EBGP(外部BGP)邻居关系时,local_pref200不会发生作用;以图1所示的应用场景为例,BGP路由器A与BGP路由器B之间是EBGP关系,BGP路由器A与BGP路由器C之间是IBGP关系;在路由控制策略发生变化时:
BGP路由器A需要重新向BGP路由器B发送BGP路由,由于BGP路由器A与BGP路由器B之间是EBGP关系,且当BGP路由器与BGP对等体之间是EBGP邻居关系时,local_pref200不会发生作用,因此在利用变化后的路由控制策略检查BGP路由对应的BGP路由属性时,得到的处理后的BGP路由属性仍然为BGP路由属性l,即路由控制策略修改前后得到的BGP路由属性并未发生变化,此时不需要向BGP路由器B发送update报文。
BGP路由器A需要重新向BGP路由器C发送BGP路由,由于BGP路由器A与BGP路由器C之间是IBGP关系,且当BGP路由器与BGP对等体之间是IBGP邻居关系时,local_pref200会发生作用,因此在利用变化后的路由控制策略检查BGP路由对应的BGP路由属性时,得到的处理后的BGP路由属性不再是BGP路由属性1,即路由控制策略修改前后得到的BGP路由属性将会发生变化,此时需要向BGP路由器B发送update报文。
综上所述,本发明实施例中,在路由控制策略发生变化时,可以合理的确定发送update报文或者不发送update报文,减少无用的update报文的发送和处理,从而可以减少链路负担,提高链路安全性,减少CPU损耗。
本发明实施例中,在路由控制策略发生变化时,如果需要发送的BGP路由较多,则对每条BGP路由均按照上述方式进行处理时,比较耗时且浪费BGP路由器的处理开销;且需要注意的是,针对向同一BGP对等体发送的多条BGP路由,当确定有一条BGP路由在路由控制策略变化前后对应的BGP路由属性相同(即步骤201中得到的BGP路由属性1和步骤202中得到的BGP路由属性2相同),则所有BGP路由在路由控制策略变化前后对应的BGP路由属性均相同;当确定有一条BGP路由在路由控制策略变化前后对应的BGP路由属性不同,则所有BGP路由在路由控制策略变化前后对应的BGP路由属性不同。
因此,在BGP路由器需要向BGP对等体发送多条BGP路由时,当确定有一条BGP路由(例如,需要重新向BGP对等体发送的第一条BGP路由)在路由控制策略变化前后对应的BGP路由属性不同,则针对多条BGP路由,BGP路由器均需要向BGP对等体发送携带当前BGP路由属性的update报文;当确定有一条BGP路由(即第一条BGP路由)在路由控制策略变化前后对应的BGP路由属性相同,则针对多条BGP路由,BGP路由器均需要拒绝向BGP对等体发送携带当前BGP路由属性的update报文,即不发送update报文。
进一步的,针对上述BGP路由器需要向BGP对等体发送多条BGP路由的过程,在路由控制策略发生变化后,本发明实施例的一种优选实施方式为:
BGP路由器在向BGP对等体发送多条BGP路由中的第一条BGP路由时,判断第一条BGP路由在路由控制策略变化前后对应的处理后的BGP路由属性是否相同;如果否,则设置send_flag为第二标识,并向BGP对等体发送携带当前BGP路由属性的update报文;如果是,则设置send_flag为第一标识,并拒绝向BGP对等体发送携带当前BGP路由属性的update报文;其中,第一标识表示不需要发送update报文,第二标识表示需要发送update报文;
之后,BGP路由器在向BGP对等体发送多条BGP路由中的其它BGP路由时,查询send_flag的标识,如果send_flag为第一标识,则拒绝向BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为第二标识,则向BGP对等体发送携带当前BGP路由属性的update报文。
基于与上述方法同样的发明构思,本发明实施例还提出了一种边界网关协议BGP路由交换设备,应用于包括所述BGP路由交换设备和BGP对等体的网络中,且所述BGP路由交换设备上配置有向所述BGP对等体发送BGP路由的路由控制策略,如图4所示,该BGP路由交换设备包括:
第一处理模块11,用于在需要向所述BGP对等体发送BGP路由时,利用所述路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到处理后的BGP路由属性,并更新所述处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,以及向所述BGP对等体发送携带所述当前BGP路由属性的更新update报文;
第二处理模块12,用于在所述路由控制策略发生变化时,确定重新向所述BGP对等体发送所述BGP路由,且利用变化后的路由控制策略对所述BGP路由对应的BGP路由属性进行处理,得到对应所述变化后的路由控制策略的处理后的BGP路由属性;
判断模块13,用于判断所述对应变化后的路由控制策略的处理后的BGP路由属性与所述当前BGP路由属性是否相同;
发送模块14,用于当判断结果为否时,更新所述对应变化后的路由控制策略的处理后的BGP路由属性为所述BGP路由对应的当前BGP路由属性,并向所述BGP对等体发送携带所述当前BGP路由属性的update报文;当判断结果为是时,拒绝向所述BGP对等体发送携带所述当前BGP路由属性的update报文。
所述发送模块14,进一步用于在判断结果为是时,设置发送标志位send_flag为第一标识,在判断结果为否时,设置send_flag为第二标识,且所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;以及,查询send_flag的标识,如果send_flag为所述第一标识,则拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为所述第二标识,则向所述BGP对等体发送携带当前BGP路由属性的update报文。
在所述BGP路由交换设备需要向所述BGP对等体发送多条BGP路由时;所述发送模块14,进一步用于当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性不同,则针对所述多条BGP路由,均需要向所述BGP对等体发送携带当前BGP路由属性的update报文;
当确定有一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与该条BGP路由的当前BGP路由属性相同,则针对所述多条BGP路由,均需要拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文。
所述判断模块13,进一步用于在向所述BGP对等体发送所述多条BGP路由中的第一条BGP路由时,判断所述第一条BGP路由的对应变化后的路由控制策略的处理后的BGP路由属性与所述第一条BGP路由的当前BGP路由属性是否相同;
所述发送模块14,进一步用于在判断结果为否时,设置send_flag为第二标识,并向所述BGP对等体发送携带当前BGP路由属性的update报文;在判断结果为是时,设置send_flag为第一标识,并拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文;其中,所述第一标识表示不需要发送update报文,所述第二标识表示需要发送update报文;以及,
在向所述BGP对等体发送所述多条BGP路由中的其它BGP路由时,查询send_flag的标识,如果send_flag为第一标识,则拒绝向所述BGP对等体发送携带当前BGP路由属性的update报文,如果send_flag为第二标识,则向所述BGP对等体发送携带当前BGP路由属性的update报文。
本发明实施例中,所述路由控制策略包括以下之一或任意组合:
ORIGIN策略;
AS_PATH策略;
NEXT_HOP策略;
MULTI_EXIT_DISC策略;
LOCAL_PREF策略;
Community策略;
Extcommunity策略。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。