当到达同一目的地存在多条路由时,BGP 依次对比下列属性来选择路由:
(1)优选协议首选值(PrefVal)最高的路由。协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。
(2)优选本地优先级(Local_Pref)最高的路由。如果路由没有本地优先级,BGP 选路时将该路由按缺省的本地优先级100 来处理。
(3)依次优选手动聚合路由、自动聚合路由、network 命令引入的路由、 import-route 命令引入的路由、从对等体学习的路由
(4)优选 AS 路径(AS_Path)最短的路由。
(5)依次优选 Origin 类型为 IGP、EGP、Incomplete 的路由。
(6)对于来自同一AS的路由,优选MED值最低的路由。
(7)依次优选 EBGP 路由、IBGP 路由、LocalCross 路由、RemoteCross 路由。
(8)优选到 BGP 下一跳 IGP 度量值(metric)最小的路由。
(9)优选 Cluster_List 最短的路由。
(10)优选 Router ID 最小的设备发布的路由。
如果路由携带 Originator_ID 属性,选路过程中将比较 Originator_ID 的大小
(不再比较 Router ID),并优选 Originator_ID 最小的路由。
(11)优选从具有最小 IP Address 的对等体学来的路由
BGP的选路规则,举例说明每条规则的具体使用
首先,路由的下一跳必须可达:
(1)prefer-value
首选值,默认为0,数值越大越优先,本地有效
(2)local-pre
本地优先级,数值越大越优先,可传递给IBGP邻居,如果没有配置默认为100
(3)本地始发
本地生成路由优先,aggregate手工生成聚合路由>summary automatic自动聚合路由>network命令宣告路由>import-route引入的路由>从邻居学习到的路由。
如上图,如果R1,R2都将10.1.12.0/24宣告进BGP的话,R2能收到R1发过来的10.1.12.0的路由,prefer-value和local-preference都一样,但是本地发起的优先,
所以bgp表中自己宣告的路由为最优路径。
(4)as-path
as-path最短的路由(单个AS计数为1)。AS_CONFED_SEQUENCE和AS_CONFED_SET(联盟内部AS号)不计入as-path长度。AS_SET长度计为1。(此条选路法则可以用命令忽略: bestroute as-path-ignore)
上图左侧路径路由传递过来as-path为200, 100 长度为2,右侧传递过来as-path为400, 长度为1。优选右侧传递过来的路由为最优路径。
(5)origin(i>e>?)
IGP>EGP>Incomplete
(6)med
数值越小越优先,默认为0。(bestroute med-none-as-maximum可以将med默认值改到最大4294967295)
默认只比较as-path中最近一个as号相同的路由,否则忽略此条。
compare-different-as-med命令后,强制比较不同as的路由med。
(7)ebgp>ibgp
ebgp>ibgp>localcross路由>remotecross路由
(8)优选BGP的下一跳在IGP中metric值小的
II、是否支持负载均衡<maxmum load-balance>
前8条一样,且as-path完全相同(都是聚合路由或都不是)。如果配置了多路径负载均衡的话,进行负载均衡(默认IBGP和EBGP路由都参与负载均衡)
(9)cluster-list
每一个cluster-id计数为1,长度最小的优先
(10) 优选Router ID最小的设备发布的路由。
1、如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由
as外部路由,originator-id就是边界路由器5和6,这里虽然邻居R3路由器ID小,但是由于originator-id是4那边小,所以选择右侧过来的路由为最优。
2、router-id越小越优先。
(11)peer ip address
peer命令后的地址,地址小的发来路由优先。
如图,下方路由器与上面路由器的2个地址10.1.12.2和10.1.22.2分别建立2个邻居,2个链路igp开销也相同,由于这2个邻居其实是同一个路由器,所以路由器id一样,至此前面所有的法则都无法打破僵局,最终只能根据建邻居地址越低越优先,选择了10.1.12.2的邻居关系发来的BGP路由。
问题1:如图所示,控制AS10访问AR4的lo0,Local-preference可以怎么配置,有什么区别?
比如在R2上,
1.可以peer R4的import加上router-policy。改变local-preference,这样可以影响整个AS的选路;
2.可以peer R1的export加上router-policy,改变local-preference,这样影响AS内除R2外的所有路由器。
问题2:第3条选路原则和第5条选路原则有什么区别?
第3条选路原则,是针对自己产生的路由,当设备通过network和import产生相同的路由时,只会将network产生的路由发给BGP对等体。
第5条选路原则,是针对邻居产生的路由,路由器从两个不同的邻居处收到,通过network和import产生相同的路由,那么路由器会优选network产生的路由。
问题3:来自不同AS的相同BGP路由,会比较MED值吗?
不会比较MED。当然也可以通过配置一条命令:compare-different-as-med使设备即使从不同AS收到相同路由时,也会比较MED值;
问题4:BGP比较到哪一条就可以实现负载分担?
如果在前八条都一致,配置maximum load-balancing >=2 命令后,满足如下所有条件的多条BGP路由会成为等价路由,形成负载分担:
- 原始下一跳不相同。
- 都是聚合路由,或者都不是聚合路由;
- AS_Path属性完全相同;
问题5:为什么设计者要让EBGP优于IBGP?
此时属于选路规则第7条,证明上面的选路规则是一样的。
IBGP过来的路由是在本AS内传递了之后才传递给本台路由器的,(经过域内其他
设备)
EBGP邻居传来的路由是离目的网络更近的路径,
而就是说,这样设计,可以在一定程度上防止次优路径
问题6:为什么负载均衡要求as-path的内容一定要相同,为什么负载均衡默认不开启?
保证数据在传递的时候经过的AS相同,如果负载经过的AS不同,不同AS内的路径开销以及经过设备的数量不同,可能会导致次优路径;
BGP的路径属性不代表链路的开销及带宽情况(以及延迟和抖动);
环境描述:R1、R2、R3都属于AS10,R4、R5属于AS40,R1、R2、R3和R4建立
EBGP,R4和R5建立IBGP,R1、R2、R3上宣告了网络10.10.10.0/24,R4上的
maximum load-balancing为2,
问题:
此时R4会选择哪两条路由下放到路由表?
R4是否会把所有的路由都通告给R5?
R4会根据选路规则往下比,选择router-id小的那两条BGP路由放到路由表,R4
不会通告所有的路由给邻居,当R4使用命令maximum load-balancing后,R4会
把下一跳改为自己的更新源,所以只会传递一条最优的路由给R5。
问题7:如图所示,R1去往10.1.4.4/32的下一跳分别为R2(10.1.2.2)、R3(10.1.3.3),此时R1和R2之间运行ospf,cost=10。R1和R3之间运行rip,metric=1,那么R1去往10.1.4.4/32的下一跳是谁?
R1去往10.1.4.4/32时,下一跳为R3。
根据BGP选路规则,比较到第八条,metric值小的(不关心路由协议优先级)。
因此R1去往10.1.4.4/32时,下一跳为R3。