由于整个互联网的BGP路由表有超过20万个路由,同时一个BGP路由器可能从多个来源收到多份的路由表,因此肯定会有一种方法可以比较不同的BGP路由表,并从中选择最佳的路由方案。这种方法就是BGP最佳路径选择算法。
可能你会注意到,CiscoBGP路由器会将应用权重(weight)作为路由表的第一标准,而其它品牌的路由器则不是这样。Cisco的官方BGP最佳路径选择算法文档中详细列明了所参考的各项标准。接下来我会列出每种标准并给出解释和范例。
默认情况下,BGP最佳路径都是基于最短自治系统(AS)的原理得出的。不过很多时候,诸如weight,localpreference以及MED这样的标准都是网络管理员自行设定的。
接下来我们就按照BGP选择最佳路径的参考顺序将这几项标准介绍一下:
#1 Weight —权重是Cisco为本地路由器设定的自定义参数,并不随路由器更新而变化。如果指向某一IP地址的路径有多条(这很常见),那么BGP会寻找权重最高的路径。设定权重的参考因素很多,包括邻居命令,as-path访问列表,或者路由镜像等。
#2 Local Preference — 本地出口优先级参数会告知AS哪条路径具有本地优先,数值越高优先级越高。默认为100。比如:
bgp default local-preference 150
#3 Network or Aggregate—这个参数会选择本地发起的网络或聚合作为路径。将特定的路径加入路由中,会让路由更有效率,同时也节省了网络空间。更多有关聚合的信息,可以参考Cisco的文章“UnderstandingRouteAggregation in BGP.”
#4 Shortest AS_PATH — BGP 只有在weight, localpreference和locallyoriginated相当接近的时候才使用这个参数。
#5 Lowest origin type — 这个参数处理Interior Gateway Protocol(IGP)协议的优先级低于 Exterior Gateway Protocol (EGP)协议。
#6 Lowest multi-exit discriminator (MED) — 较低的MED值要优于较高的MED值。
#7 eBGP over iBGP — 类似于#5, BGP AS Path 更倾向 eBGP 而不是 iBGP。
#8 Lowest IGP metric — 这个参数倾向于采用最低IGP作为BGP下一跳。
#9 Multiple paths — 这个参数决定是否要在路由表中装入多个路径。可以参考 BGPMultipath获取更多信息。
#10 External paths — 当所有路径都为外部路径时,选择首先接收到的路径(较老的路径)。
#11 Lowest router ID — 选择来自具有最低路由器ID的BGP路由器的路径。
#12 Minimum cluster list — 如果多个路径的originator或路由器ID相同,选择cluster列表长度最短的路径。
一、BGP路由信息决策过程
1、Adj-RIB-In 存放从对等体接收到的更新
当从对等体接收到Update报文时,路由器会把Update报文存储到路由信息库RIB,并指明是来自哪个对等体的;
Update报文经过BGP输入策略引擎路由过滤或修改属性;
路由器执行路径选择算法,来为每一条前缀确定最佳路径;
2、Loc-RIB 存放经过输入策略引擎、路径选择处理过的路由
得出的最佳路径被存储到本地BGP RIB中,然后将loc-RIB的路由加载到IP-RIB中;
3、Adj-RIB-Out 存放经过输出策略引擎处理过的路由
Loc-RIB中的路由在被通告给其他对等体之前,必须通过输出策略引擎,只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB中;
二、BGP选路规则
1、忽略下一跳不可达的路由;
2、优选prefer-value数值大的路由; 缺省值0
3、优选Local-preference数值大的路由; 缺省值100
----------------------------------------------------4、5、6三条规则用于比较自身产生的路由
4、聚合路由优于非聚合路由;
5、手工聚合路由优于自动聚合路由;
6、network发布的路由优于import发布的路由;
7、优选as-path长度短的路由;
8、IGP起源的路由优于EGP起源的路由优于未知起源的路由;
9、优选MED数值小的路由; 缺省值0,命令compare-different-as-med修改缺省比较行为
10、EBGP路由优于IBGP路由;
11、优选下一跳IGP开销小的路由;
============================满足以上条件可选实现负载分担;
12、优选cluster-list长度短的路由; 有的有,有的没有,没有的优先
13、优选Originator-ID或RouterID小的路由; 二选一,优先比较Originator-ID
14、优选对等体地址小的路由;
三、BGP的负载分担
1、BGP路由的负载分担
到达同一目的地通常会存在多条有效路由,但是BGP只将最优路由发布给对等体;
前11个属性完全相同的情况下,可通过命令maximum load-balancing ebgp|ibgp配置BGP负载分担的最大等价路由条数,实现下发多条不同下一跳的BGP路由到IP路由表中,缺省值为1,不进行BGP路由负载分担;
如果满足负载分担条件的BGP路由数大于定义的BGP负载分担规格,继续从第12条规则比较下去;
到达同一目的地的eBGP路由和iBGP路由不能形成负载分担,如果最优路由是ibgp路由,则只是ibgp路由形成负载分担;如果最优路由是ebgp路由,则只是ebgp路由形成负载分担;
缺省情况下,BGP只对AS-path属性完全相同的路由进行负载分担,也适用于联盟内部的自治系统之间,可通过命令load-balancing as-path-ignore配置路由在形成负载分担时不比较路由的as-path属性,但是该方式可能会引起路由环路;
2、下一跳路由的负载分担
BGP区别于IGP协议的一点是其下一跳地址可以是非直连路由的接口IP,非直连的下一跳在路由器上会执行迭代路由进行查找路由表,BGP依赖下一跳路由来转发数据,所以如果下一跳地址所对应路由在IP路由表中是负载分担的(IGP的ICMP),也就间接实现了BGP报文转发的负载分担;
BGP同步
在华为VRP平台中,BGP同步默认是关闭的,并且不能手动开启;
BGP同步指BGP路由器必须与IGP同步,AS内的路由器不仅要通过BGP学习到此路由,并且要从IGP协议学习到该路由,才会将该路由通告给eBGP邻居;
除了BGP同步外,避免路由黑洞问题的方法还有IBGP全互连、RR、联盟、MPLS VPN;
四、BGP路由及默认路由
1、生成BGP路由,BGP协议自身是不能发现路由的
(1)通过network方式生成来自IGP的路由
将IP路由表中存在的路由注入进BGP,注入的路由要和IP路由表中路由的前缀和掩码一致;
network方式注入的路由,origin属性为igp;
(2)通过import-route方式引入外部路由
import-route方式引入外部路由,origin属性为incomplete;
(3)通过aggregate进行聚合的路由
自动聚合
自动聚合只能对import引入的路由进行有类聚合,不能对network方式注入的路由进行自动聚合;
自动聚合通过命令summary automatic实现,只能在引入路由的设备上生效,缺省未启用;
手动聚合
手动聚合通过命令aggregate可以对BGP路由表中的路由进行聚合;
如果聚合路由中所包含的明细路由的origin属性各不相同,那么聚合路由的origin属性按照优先级incomplete>egp>igp
聚合路由会继承原明细路由中的所有团体属性;
聚合时可以携带关键字:
detail-suppressed 缺省手工聚合后通告所有明细路由,此参数抑制明细路由;
suppress-policy 用来实现部分抑制,部分不抑制,匹配route-policy的明细才抑制;
as-set 聚合路由as-path继承成员明细路由的AS号,缺省聚合路由会丢失明细的AS信息;
与普通as-path的segment类型as-sequence不同的是,as-set类型是一种AS号的无序集合;
对明细路由做聚合时,把所有明细路由AS-Path由前向后相同的部分放在()的前面,其余部分去重后放入();
origin-policy 有条件的聚合,只有满足route-policy匹配条件时,才生成聚合路由;
attribute-policy 用来修改聚合路由的属性;
2、默认路由
如果一台设备在网络中有多个EBGP邻居,或者存在多个路由反射器,那么该设备将会从邻居或者反射器接收全网的路由,该设备也会向本AS内的IBGP对等体发布路由,这样会极大地增加路由表的容量,通过向对等体发布缺省路由,减少对等体路由表的数量。
通过命令peer x.x.x.x default-route-advertise向对等体发布一条默认路由,可以通过route-policy来设置默认路由的属性;
参数conditional-route-match-any/all用来设置匹配条件,如果满足条件则发布默认路由;
(1)any指当匹配任一条件时,发布默认路由;
(2)all指当匹配所有条件时,发布默认路由;
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)