Datacom-HCIP-16 BGP路由属性和选路


BGP是一个应用非常广泛的边界网关路由协议,在全球范围内被大量部署。BGP定义了多种路径属性,并且拥有丰富的路由策略工具,这使得BGP在路由操控和路径决策上变得非常灵活。
针对BGP路由的各种属性的操作都可能影响路由的优选,从而对网络的流量产生影响,因此掌握BGP路由的优选规则十分重要。
本文将会详细学习BGP路由的优选规则。

BGP控制的是边界出口,内部路由是通过IGP迭代选路

BGP路由属性简介

路径属性


任何一条BGP路由都拥有多个路径属性。
当路由器将BGP路由通告给它的对等体时,一并被通告的还有路由所携带的各个路径属性。
BGP的路径属性将影响路由优选。

路径属性分类


公认属性是所有BGP路由器都必须能够识别的属性
公认属性可以分为两类:
公认必遵(Well-known Mandatory):必须包括在每个Update消息里。
公认任意(Well-known Discretionary):可能包括在某些Update消息里。
可选属性不需要都被BGP路由器所识别
可选属性可以分为两类:
可选过渡(Optional Transitive):BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体。
可选非过渡(Optional Non-transitive):BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体。

BGP选路原则

BGP选路原则

当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:
0. 丢弃下一跳不可达的路由。

  1. 优选Preferred-Value属性值最大的路由。 ↑ 取值越大越优
  2. 优选Local_Preference属性值最大的路由。 ↑ 取值越大越优
  3. 本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。↓ 取值越小越优
  4. 优选AS_Path属性值最短的路由。↓ 取值越小越优
  5. 优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。↓ 取值越小越优
  6. 优选MED属性值最小的路由。↓ 取值越小越优
  7. 优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。↓ 取值越小越优
  8. 优选到Next_Hop的IGP度量值最小的路由。当前8条属性全部相同时可以形成路由负载分担↓ 取值越小越优
  9. 优选Cluster_List最短的路由。↓ 取值越小越优
  10. 优选Router ID(Orginator_ID)最小的设备通告的路由。↓ 取值越小越优
  11. 优选具有最小IP地址的对等体通告的路由。↓ 取值越小越优

拓扑说明


AS、设备互联地址如图所示,所有设备均创建Loopback0接口,IP地址为10.0.x.x(x为设备编号),所有设备使用环回口地址作为Router ID。
AS200内运行OSPF,在内部互联接口(不包含连接外部AS的接口)、Loopback接口上激活OSPF。


AS内部基于Loopback0接口建立IBGP对等体关系,AS之间基于直连接口建立EBGP对等体关系。
R4、R5上存在相同的网段:10.0.45.0/24,通过import-route命令将该网段的直连路由注入到BGP,用于验证BGP路由优选规则。

0. 丢弃下一跳不可达的路由


R4、R5将BGP路由10.0.45.0/24通告给AS200时Next_Hop属性值为10.0.24.4、10.0.34.5。
R2、R3将路由通告给R1时不修改Next_Hop属性值,R1学习到的两条BGP路由10.0.45.0/24下一跳为10.0.24.4、10.0.34.5。
R1进行BGP路由下一跳迭代查询时,由于R2、R3未在连接外部AS的接口上激活OSPF,导致路由迭代失败,R1上的BGP路由10.0.45.0/24下一跳不可达。
在R1上通过display bgp routing查看BGP路由表,此时BGP路由10.0.45.0/24为非有效路由条目。


在R2、R3上通过next-hop-local命令修改Next_Hop属性值为本地更新源地址。
R2、R3向R1通告BGP路由时Next_Hop属性值将会变为:10.0.2.2、10.0.3.3。
这两个下一跳地址在R1上能够成功进行路由迭代,BGP路由的下一跳地址将会变成可达。
如无特殊说明,后续所有案例的初始配置都为基础配置加R2、R3开启了next-hop-local

1. 优选Preferred-Value属性值最大的路由。

Preferred-Value介绍


在R2上部署路由策略(Import策略),将R1传递过来的10.0.13.0/24路由的Preferred-Value值设定为300,而R3传递过来的路由的Preferred-Value值设置为200。如此一来关于10.0.13.0/24,R2会优选R1传递过来的路由。
Preferred-Value(协议首选值)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时,将优先选Preferred-Value值高的路由。
取值范围:0~65535;该值越大,则路由越优先。
Preferred-Value只能在路由器本地配置,而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体。

修改Preferred-Value


使用preferred-value命令修改R3通告的BGP路由其Preferred-Value为100 ,优于R2通告BGP路由的默认Preferred-Value ,R1将会优选R3通告的BGP路由10.0.45.0/24。

[R1] display bgp routing-table
BGP Local router ID is 10.0.1.1
Status codes: * - valid, > - best, d - damped,
 h - history, i - internal, s - suppressed, S - Stale
 Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
 Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 100 300 i
* i 10.0.2.2 0 0 100 i

R3(10.0.3.3)通告的BGP路由拥有更高的Preferred-Value(100),因此R1将会优选R3通告的BGP路由10.0.45.0/24。

2. 优选Local_Preference属性值最大的路由。

Local_Preference介绍


在R3上对R1部署路由策略,使得R3发送给R1的10.0.45.0/24路由的Local_Preference为200,而R2则保持缺省,那么对于R1而言,会优选R3传递过来的10.0.45.0/24路由。
Local_Preference即本地优先级属性,是公认任意属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
Local_Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100。空值就是默认值100
该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。

修改Local_Preference


R3上执行如下操作:

ip ip-prefix local_pref index 10 permit 10.0.45.0 24
#
route-policy local_pref permit node 10
if-match ip-prefix local_pref
apply local-preference 200
route-policy local_pref permit node 20
#
bgp 200
peer 10.0.1.1 route-policy local_pref export

R3上通过路由策略修改通告给R1的BGP路由10.0.45.0/24其Local_Preference属性值。

下一跳可达、相同Preferred-Value的情况下将会比较Local_Preference,R3通告的BGP路由Local_Preference值为200,高于R2通告的BGP路由,R1将会优选R3通告的BGP路由。

3. 本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。

本地始发优先

本条规则可以概括为在相同条件下,优选本地生成的路由,从对等体学习到的路由条目为次优。
同时本地生成的路由也可能存在多种途径,当本地存在多种途径学习到相同路由时,从高到低优先级如下:
手动聚合:手动通过aggregate命令在BGP视图内聚合生成的聚合路由
自动聚合:Summary automatic命令生成的自动聚合路由
Network方式注入的路由
Import-route方式注入的路由

手动聚合


为了在R3上进行手动聚合,在R3上配置两条指向null0的静态路由,用于注入到BGP。
R3上执行如下操作:

ip route-static 10.0.45.0 255.255.255.128 null0
ip route-static 10.0.45.128 255.255.255.128 null0
bgp 200
aggregate 10.0.45.0 255.255.255.0 detail-suppressed
import-route static

R3上配置两条静态路由,将静态路由通过import-route注入到BGP,并通过aggregate命令进行手动聚合,同时增加关键字detail-suppressed抑制明细路由的对外通告。


R3上查看BGP路由表存在两条BGP路由10.0.45.0/24:
本地产生的:静态路由注入到BGP中,由手动聚合产生
对等体通告:由对等体R5(10.0.35.5)通告
在R3上这两条路由都不存在local_preference、Preferred-Value值,此时比较路由来源:手动聚合最优,R3将会优选本地手动聚合产生的BGP路由。

[R3]display bgp routing-table 10.0.45.0 24
BGP local router ID : 10.0.3.3
Local AS number : 200
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 10.0.45.0/24:
Aggregated route.
Route Duration: 00h00m14s
Direct Out-interface: NULL0
Original nexthop: 127.0.0.1
Qos information : 0x0
AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select, active,
pre 255
Aggregator: AS 200, Aggregator ID 10.0.3.3, Atomic-aggregate
Advertised to such 2 peers:
 10.0.35.5
 10.0.1.1

R3上通过display bgp routing-table 10.0.45.0 24查看BGP路由10.0.45.0/24的详细信息,存在两条有效路由,其中最优的为手动聚合产生的路由。
在本案例中我们验证了本地产生的BGP路由优于从对等体学习的BGP路由。

自动聚合


R3上执行如下操作:

ip route-static 10.0.45.0 255.255.255.128 null0
ip route-static 10.0.45.128 255.255.255.128 null0
bgp 200
summary automatic
import-route static

R3上配置两条静态路由,将静态路由通过import-route注入到BGP,并开启自动聚合,BGP将按照自然网段聚合路由(例如非自然网段A类地址10.1.1.1/24和10.2.1.1/24将聚合为自然网段A类地址10.0.0.0/8),并且BGP只向对等体通告聚合后的路由。
在R3上将会看到路由被聚合为10.0.0.0/8。
R5上又注入了路由10.0.0.0/8,并通告给了R3。
此时R1、R3、R5上的配置和手动聚合案例中已执行的配置无关。


R3上查看BGP路由表存在两条BGP路由10.0.0.0:
本地产生:静态路由注入到BGP中,自动聚合产生
对等体通告:由对等体R5(10.0.35.5)通告
在R3上这两条路由都不存在local_preference、Preferred-Value值,此时比较路由来源:本地产生优于从对等体学习到的,R3将会优选本地自动聚合产生的BGP路由。
在R3上执行手动聚合:

bgp 200
aggregate 10.0.0.0 255.0.0.0 detail-suppressed

查看R3的BGP路由表

Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.0.0 127.0.0.1 0 ?
* 127.0.0.1 0 ?
* 10.0.35.5 0 0 300?

优选的依旧是本地产生的BGP路由,但是可以看到本地产生的BGP路由有两条,从该表项无法判断出优选的为手动聚合还是自动聚合产生的BGP路由。

BGP local router ID : 10.0.3.3
Local AS number : 200
Paths: 3 available, 1 best, 1 select
BGP routing table entry information of 10.0.0.0/8:
Aggregated route.
Route Duration: 00h08m17s
Direct Out-interface: NULL0
Original nexthop: 127.0.0.1
Qos information : 0x0
AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select, active,
pre 255
Aggregator: AS 200, Aggregator ID 10.0.3.3, Atomic-aggregate
Advertised to such 2 peers:
 10.0.35.5
 10.0.1.1

R3上通过display bgp routing-table 10.0.0.0 查看BGP路由10.0.0.0/8的详细信息,存在三条有效路由,其中最优的条目
由聚合产生,并且存在Atomic-aggregate属性,由此可以看出该聚合条目为手动聚合产生的条目。
R3上相同的BGP聚合路由:手动聚合 > 自动聚合。
在该案例中我们验证了手动聚合产生的BGP路由优于自动聚合产生的BGP路由。

4. 优选AS_Path属性值最短的路由。

AS_Path介绍


该属性为公认必遵属性,是前往目标网络的路由经过的AS号列表;
作用:确保路由在EBGP对等体之间传递无环;另外也作为路由优选的衡量标准之一;
路由在被通告给EBGP对等体时,路由器会在该路由的AS_Path中追加上本地的AS号;路由被通告给IBGP对等体时,AS_Path不会发生改变。

AS_Path防止环路


R1从R4收到的BGP路由更新中AS_Path属性数值为:400 300 200 100,存在自身AS号,不接收该路由,从而
防止了路由环路的产生。

修改AS_Path

使用Route-Policy修改BGP路由的AS_Path属性时,可以使用以下三种方式:

优选AS_Path最短


5. 优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。

Origin介绍

起源名称 标记 描述
IGP i 如果路由是由始发的BGP路由器使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP
EGP e 如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP
Incomplete ? 如果路由是通过其他方式学习到的,则Origin属性为Incomplete(不完整的)。例如通过import-route命令引入到BGP的路由

该属性为公认必遵属性,它标识了BGP路由的起源。如上表所示,根据路由被引入BGP的方式不同,存在三种类型的Origin。
当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按如Origin的下顺序优选路由:IGP > EGP > Incomplete。

Origin属性验证


R4、R5上默认采用import-route方式将路由10.0.45.0/24注入到BGP,R1的BGP路由表中两条BGP路由10.0.45.0/24其Origin属性都是“?”,此时R1优选R4注入的BGP路由。
在R5上修改注入路由的方式为network之后在R1上再次查看BGP路由表。

此时R5注入的BGP路由10.0.45.0/24其Origin属性为“i”,在前几条优选规则相同情况下,起源类型为“i”的BGP路由成为优选路由。

6. 优选MED属性值最小的路由。

MED介绍


MED(Multi-Exit Discriminator,多出口鉴别器)是可选非过渡属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入的路径。
MED属性值越小则BGP路由越优。
MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。

  1. MED值在始发设备可以传递给任意的邻居,包括ibgp,ebgp
  2. 接受者只能传递给IBGP,如果传给EBGP,则MED值丢弃

优选MED最小


7. 优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。

优选从EBGP对等体学来的路由



8. 优选到Next_Hop的IGP度量值最小的路由。

IGP Cost

优选IGP Cost值最小


BGP routing table entry information of 10.0.45.0/24:
From: 10.0.2.2 (10.0.2.2)
Route Duration: 00h24m07s
Relay IP Nexthop: 10.0.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.2.2
Qos information : 0x0
AS-path 100, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 10, not preferred for IGP cost
Not advertised to any peer yet

R1上通过display bgp routing-table 10.0.45.0 24 查看BGP路由的详细信息,下一跳10.0.2.2的BGP路由其IGP cost值变为了10,而下一跳为10.0.3.3的BGP路由其IGP cost为默认值1,所以R1优选下一跳为10.0.3.3的路由。
在R1的路由详细信息中可以看到如下内容:not preferred for IGP cost表明该路由因为IGP cost未被优选。

BGP路由等价负载分担

在大型网络中,到达同一目的地通常会存在多条有效BGP路由,设备只会优选一条最优的BGP路由,将该路由加载到路由表中使用,这一特点往往会造成很多流量负载不均衡的情况。
通过配置BGP负载分担,可以使得设备同时将多条等代价的BGP路由加载到路由表,实现流量负载均衡,减少网络拥塞。
值得注意的是,尽管配置了BGP负载分担,设备依然只会在多条到达同一目的地的BGP路由中优选一条路由,并只将这条路由通告给其他对等体。
在设备上使能BGP负载分担功能后,只有满足条件的多条BGP路由才会成为等价路由,进行负载分担。

形成BGP路由等价负载分担的条件

Preferred-Value属性值相同。
Local_Preference属性值相同。
都是聚合路由或者非聚合路由。
AS_Path属性长度相同。
Origin类型(IGP、EGP、Incomplete)相同。
MED属性值相同。
都是EBGP路由或都是IBGP路由。
AS内部IGP的Metric相同。
AS_Path属性完全相同。

配置BGP路由负载分担


以这个拓扑为例,R1上两条BGP路由在不做任何路由策略、配置的情况下,前8条优选规则无法比较出优选路由。因此可以配置IBGP路由的负载分担。

[R1]display ip routing-table 10.0.45.0 24
Route Flags: R - relay, D - download to fib
-------------------------------------------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.45.0/24 IBGP 255 0 RD 10.0.2.2 GigabitEthernet0/0/0
 IBGP 255 0 RD 10.0.3.3 GigabitEthernet0/0/1

IP路由表中出现了到达10.0.45.0/24的等价路由、

[R1]display bgp routing-table
BGP Local router ID is 10.0.1.1
Status codes: * - valid, > - best, d - damped,
 h - history, i - internal, s - suppressed, S - Stale
 Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
 Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.2.2 0 100 0 45?
* i 10.0.3.3 0 100 0 45?

BGP路由表中依旧只有一条最优的路由

9. 优选Cluster_List最短的路由。

优选Cluster_List最短案例


对拓扑做如下修改:
只在R5上将10.0.45.0/24发布到BGP
配置R1为RR,R3为R1的客户端。
R2、R3之间基于环回口建立IBGP对等体关系R2上将收到R3通告的BGP路由10.0.45.0/24、R1反射的BGP路由10.0.45.0/24。
默认配置下,前面介绍的规则无法比较出优选路由,此BGP主动发送的路由更新 时将根据Cluster_List进行优选。

从BGP路由表中无法看出优选的是R1反射的BGP路由还是R3通告的BGP路由,此时可以通过命令display bgp routing 10.0.45.0 24查看BGP路由详细信息。

BGP routing table entry information of 10.0.45.0/24:
From: 10.0.1.1 (10.0.1.1)
Route Duration: 00h03m10s
Relay IP Nexthop: 10.0.12.1
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.3.3
Qos information : 0x0
AS-path 300, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 2, not preferred for Cluster List
Originator: 10.0.3.3
Cluster list: 10.0.1.1
Not advertised to any peer yet

经由R1反射的路由不是最优路由,原因也被标出:
not preferred for Cluster List
R3直接通告给R2的BGP路由因为没有经过路由反射器,不存在Cluster_List属性,即被认为Cluster_List长度为0,小于由R1反射的BGP路由其Cluster_List长度(1),所以R3通告的BGP路由为优选路由。

10. 优选Router ID(Orginator_ID)最小的设备通告的路由。

优选Router ID最小


在我们的讲解拓扑中,默认配置下R1从R2、R3都会收到BGP路由10.0.45.0/24,并且前面的优选规则无法比较出优选路由,最终将会根据本条规则,优选Router ID最小的对等体通告的BGP路由,在本案例中也就是R2通告的BGP路由。

BGP routing table entry information of 10.0.45.0/24:
From: 10.0.3.3 (10.0.3.3)
Route Duration: 00h40m15s
Relay IP Nexthop: 10.0.13.3
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 10.0.3.3
Qos information : 0x0
AS-path 300, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 1, not preferred for router ID
Not advertised to any peer yet

查看R1的BGP路由表详细信息,来自10.0.3.3的BGP路由因Router ID原因没有被优选:
not preferred for router ID

如果BGP路由携带Originator_ID属性,则在本条规则的优选过程中,将比较Originator_ID的大小,并优选Originator_ID最小的BGP路由。

11. 优选具有最小IP地址的对等体通告的路由。

优选具有最小IP地址的对等体


当前面所有规则都无法比较出优选路由时,此时会根据对等体地址大小来进行优选,对等体地址较小者发送的路由较优。
修改前一条规则的验证拓扑,R2、R3都与R4相连,R4作为RR客户端,只在R4上将路由发布到BGP,此时R2、R3反射的BGP路由将拥有相同的Originator ID:10.0.4.4。

posted @ 2024-12-03 23:00  Liam-Wu  阅读(29)  评论(0编辑  收藏  举报