概述:
BGP相比IGP最大的优势在于路径的选择策略非常丰富,通过调整BGP的路由属性来决定选路。在使用这些路由属性的时候应该考虑顺序和规则,尤其是一台路由器到达目标有多条路径的时候,BGP需要根据下面的选路规则来优先选出一条最佳路径。BGP选路的“12条规则”如下:
具体规则:
1.下一跳可达。
说明:
下一跳可达作为BGP选路规则中第1条规则,如果BGP路由的下一跳IP地址不可达,那么该BGP路由将不会参与选路。
2.优选协议首选值( PrefVal)数值最高的路由。
说明:协议首选值(PrefVal) 是华为设备的特有属性,也在选路规则中位列第一位,因此最优先比较,该属性仅针对本路由器有意义,不会传递给其他设备。协议首选值越大越好默认首选值为0。不同厂商有自己的实现方式。
3.优选本地优先级(Local Pref) 数值最高的路由。
说明:
本地优先级属性在整个AS内传递,但不会传递到AS之外,值越大越优先,一般用作AS内路由器选择一个最优出口去往外部。如果路由没有设置本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。
4.本地起源优先顺序依次为:①手动聚合路由→②自动聚合路由→③network命令通告的路由→④import-route命令引入的路由→⑤从对等体学习的路由。
说明:
规则3指的是当前路由器产生的BGP路由中,本地产生的路由要优于邻居学来的路由,本地产生的路由分本地生成的聚合路由和IP 路由注入的路由。其中,聚合路由要优于不聚合的路由,而聚合可以分为手动聚合和自动聚合,且前者要优于后者;通过network命令通告进BGP的路由要优于通过import 方式引入进BGP的路由;其次是从邻居学习到的路由。BGP中的路由无非就是由以上几种产生,如果同一个目标前缀的路由同时通过以上方式进入到BGP,那么将根据上述优先顺序进行裁决。
5.优选AS路径(AS_PATH)最短的路由。
说明:
AS_ PATH属性是记录达到目标网络的AS路径列表,类似距离矢量协议中的hop概念,AS_ PATH长度短的路由优先。
6.依次优选Origin类型为IGP、EGP、incomplete 的路由。
说明:
origin为BGP的起源属性,指的是BGP路由的起源,成为BGP路由都会携带一个origin属性。如该路由是通过network的方式产生的路由,那么origin 类型为IGP (标识为i),如果是通过EGP协议学习到路由,origin 类型为EGP (标识为e),如果将外部路由引入进BGP的路由,origin 类型为incomplete (标识为? )。优先级顺序为i>e>?。
规则4比较的是路由的注入位置(本地注入的优于邻居学来的),用于在本地产生的多条路由中选出最优的路由来发给它的邻居;规则6比较的是路由的注入方式(network 或impot)。 起源代码则用于从不同的邻居收到多条一样的路由中选择出一条最优的。
7.优选MED (Multi Exit Discriminator) 值最低的路由。
说明:
MED默认比较来自相同邻居的路由的MED值,数值越小的路由越优先。如果是来自不同邻居AS的路由,MED不参与比较,除非开启compare-different-as-med 命令,才可以在来自不同邻居AS的路由间比较MED。
8.依次优选eBGP路由、iBGP路由。
说明:
如果路由分别通过eBGP和iBGP同时学习,在其他规则都一样的情况下,会优先选择eBGP对等体。理由很简单,eBGP连接外部AS,而iBGP 连接内部的AS。路由器认为既然通过eBGP学到该路由必然是来自外部的AS,因此直接选择eBGP对等体到达外部比穿越整个AS再到达外部要更加优先。
9.优选到BGP下一跳IGP度量值(Metric)最小的路由。
说明:
BGP的路由下一跳地址是通过IGP协议学习到的,根据路由表,计算到下一跳的度量
值,越小的越优先。
10.优选Cluster_ List 最短的路由。
说明:
- Cluster_ List为路由反射器中的属性,是由路由反射器来添加的,将Cluster_ ID添加到Cluster_ List中,用于记录被反射的BGP路由在AS内经过的Cluster 路径。类似AS_ PATH属性,Cluster_List越短的路由越优先。
- 如果参与比较的路由没有Cluster_List, 则越过规则9, 直接比较后面的规则。如果某条路由没有Cluster_List, 而其他路由有Cluster. List,则没有Cluster_ List属性的路由优先。
11. 优选Router_ID最小的设备发布的路由。
说明:
Router_ID最小的邻居通告的路由最优先:
- 如果路由携带Originator_ID属性,则选路过程中将比较Originator_ID 的大小,不再
比较Router_ID。其中,Originator. _ID最小的路由最优。 - 如果参与比较的路由Originator_ ID一样,也不再比较Router_ ID, 直接开始规则11.
12.优选从具有最小IP Address的对等体学来的路由。
说明:
最后一步将会比较邻居的IP地址,最小的最优先。
BGP的负载分担:
注意:配置为华为设备。
在大型网路中,到达同一目的地通常会存在多条有效路由,但是BGP只将最优路由发布给对等体,这一特点往往会造成很多流量负载不均衡的情况。通过配置BGP负载分担,可以使流量负载均衡,减少网络拥塞。
一般情况下,只有“BGP选择路由的策略”所描述的前8个属性(除去下一跳)完全相同,且AS_ PATH属性也相同时,BGP路由之间才能相互等价,实现BGP的负载分担。但路由负载分担的规则也可以通过配置来改变,如忽略路由AS_PATH属性的比较,但这些配置需要确保不会引起路由环路。
BGP可实现2种形式的负载分担:BGP路由的负载分担和下一跳路由的负载分担。
一、多条不同下一跳的BGP路由同时出现在IP路由表中
BGP默认仅下发一条最好的BGP路由到IP路由表。但这种行为可以通过maximumload-balancing [ eBGP | iBGP ] mumber 命令来配置BGP负载分担的最大等价路由条数。
BGP可以把“选路规则”中,前8条规则都一样的多条路由同时下发到IP路由表中。负载分担的条件是:“BGP选择路由的策略”的第1至8条规则中,需要比较的属性要“完全相同”。满足这个条件的多条路由,在maximum load-balancing 开启后,可下发多条路由到路由表。缺省情况下,BGP负载分担的最大等价路由条数为1,即不进行负载分担。
如果满足负载分担条件的BGP路由数大于定义的BGP负载分担规格时,按如下顺序优选:
- 优选Cluster_ List 最短的。
- 优选Router_ ID最小的路由器发布的:如果路由携带Originator_ ID属性,选路过程中将比较Originator_ ID 的大小(不再比较Router_ ID),并优选Originator_ ID最小的路由。
- 比较对等体的IP地址,优选从具有较小IP地址的对等体学来的路由。
在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。若最优路由为iBGP路由,则只是iBGP路由形成负载分担;若最优路由为eBGP路由,则只是eBGP路由形成负载分担。即公网中到达同一目的地的iBGP路由和eBGP路由不能形成负载分担。负载分担只对本设备有效,但是本设备还是会根据选路原则选出最优路由发给其他对等体,但在路由表里是显示负载分担的。
缺省情况下,路由在形成负载分担时会比较路由的AS_ PATH 属性,而BGP只对AS_PATH属性完全相同的路由进行负载分担,BGP负载分担特性同样适用于联盟内部的自治系统之间。配置路由在形成负载分担时不比较路由的AS_ PATH属性,可以通过命令load-balancing as path-ignore来实现,但是该方式可能会引起路由环路,需谨慎使用。
BGP由于本身并没有路由算法,不能根据一个明确的度量值决定是否对路由进行负载分担。但BGP有很多路由属性,这些属性在BGP选路策略中的优先顺序是不同的。对BGP负载分担的处理规则是加入到这些选路策略中的,即在所有高优先级路由属性相同的情况下,BGP路由属性相同的情况下,BGP根据所配置的最大负载分担的路由条数进行负载分担。
实验:
如图所示,AS 254通告了两条BGP路由100.1.1.0/24、 200.1.1.0/24,由R5/R6通告进AS 100,R1到AS200有2条eBGP路由,通过R5和R6都可以到达。目前这两条BGP路由默认仅一条路由进入R1的IP路由表:
在R1的BGP进程中负载分担命令: maximum load-balancing eBGP 2。
再次查看IP路由表,到达AS 254的两条路由各自有两个下一跳,同时进入到IP路由表:
二、下一跳路由的负载分担
BGP区别于IGP协议的一点是其下一-跳地址可以是非直连的路由器的接口IP。BGP在AS内的iBGP邻居间通告路由时,下–跳保持不变,数据流量按路由学来的方向转发数据。非直连的下一跳在路由器上会执行“迭代路由”进行查找路由表,BGP依赖于下一跳路由来转发数据,所以如果下一跳地址所对应路由在IP路由表中是负载分担的,则此处同样算得上BGP的负载分担。
这种负载分担的实现其实和BGP没有直接的关系,完全得益于IGP协议路由中ECMP ( Equal Cost Multiple Path)。IGP 根据本身的路由算法计算路由的度量值(Metric),在度量值相等的路由间进行负载分担,实际是IGP的负载分担。
实验:
如图所示,R6通告了一条BGP路由100.1.1.0/24, R5 访问该网段,数据流经过R1时会进行负载分担,由于R1与R4建立iBGP邻居,而R1的BGP表中到达100.1.1.0 网段的下一-跳为 R4的10.1.4.4 (loopback 0), 而AS 100内部运行的是OSPF协议,R1到达目标网段将会迭代到R4的10.1.4.4,而到达R4则有两条等价路径。
查看R1的BGP路由表,下一跳地址为10.1.4.4:
由于R1的IP路由表中到达10.1.4.4有两条等价路径,因此该BGP路由也会有两个下一跳:
整理资料来源:《HCIE路由交换学习指南》