BGP的路径选择
- 1、BGP路径属性
- 1.1、路由选择
- 1.1.1、BGP路由选择过程
- 1.1.2、BGP选路参数
- 2、BGP的路由策略
- 2.1、Preferred-Value相当权重weight
- 2.2、local-preference本地优先级
- 2.3、AS_PATH经过的AS号 不常用
- 2.4、Origin起源属性修改
- 2.5、MED多出口鉴别器
- 3、BGP非策略性选路原则
- 3.1、EBGP对等体路由优于IBGP对等体
- 3.2、IGP cost Metric
- 3.3、Load-balance负载均衡
- 3.4、华为更老的BGP不生效
1、BGP路径属性
BGP是根据属性来选路的。
BGP路径属性可以被分为四大类:
-
公认必遵
(Well-known mandatory)
所有BGP路由器都可以识别,且必须存在于Update消息
中。如果缺少这种属性,路由信息就会出错。Origin、AS_PATH、Next hop。 -
公认任意
(Well-known discretionary)
所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况
来决定是否添加到Update消息中。Local-Preference\ Atomic-Aggregate原子聚合 -
可选过渡
(Optional transitive)
BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别
这种属性,可以转发
给邻居路由器,邻居路由器可能会识别并使用到这种属性。Aggregator\ Community -
可选非过渡
(Optional non-transitive)
BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别
这种属性,将丢弃
这种属性,不必再转发给邻居路由器。Originator-ID\ Cluster-List\ MED
常见的BGP属性:
BGP属性 | 描述 |
---|---|
Origin | 起源 |
AS_PATH | 经过的AS号 |
Next hop | 下一跳 |
MED | 多出口鉴别器[metric值] |
Local-Preference | 本地优先级 |
Atomic-Aggregaten | 原子聚合 |
Aggregator | 聚合者 |
Community | 团体属性[标准的、扩展的] |
Originator-ID | 起源ID 在RR里的 |
Cluster-List | 在RR里的 |
MP_Reach_NLRI | 多协议(ipv4\ipv6)可达的路由信息及下一跳信息。 |
MP_Unreach_NLRI | 多协议(ipv4\ipv6)撤销不可达的路由信息。 |
Extended_Communities | 扩展团体属性 |
BGP属性 | 类别 |
---|---|
Origin | 公认必遵 (Well-known mandatory) |
AS_PATH | 公认必遵 (Well-known mandatory) |
Next hop | 公认必遵 (Well-known mandatory) |
Local-Preference | 公认任意 (Well-known discretionary) |
Atomic-Aggregate | 公认任意 (Well-known discretionary) |
Aggregator | 可选过渡 (Optional transitive) |
Community | 可选过渡 (Optional transitive) |
MED | 可选非过渡 (Optional non-transitive) |
Originator-ID | 可选非过渡 (Optional non-transitive) |
Cluster-List | 可选非过渡 (Optional non-transitive) |
1.1、路由选择
Origin起源
通告、汇总产生的,他们代码是i;优先级i>?,i----IGP
重分布、引入产生的,代码是?,incomplete。
AS_PATH经过的AS号
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。
BGP的跳数就是AS。还有防环作用,当收到的路由有本AS号,路由将会拒绝接收该路由。
用来选路的,2、用来防环的。
Local-Preference
当BGP的设备通过不同的IBGP对等体得到到AS外的目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。
本地优先级越大越优先。
defaut local-preference 100 //缺省情况下,BGP本地优先级的值为100。
MED
- 多出口分离[metric值] 到达同一AS号多条入口链路,越小链路越优先。
- MED属性相当于IGP使用的度量值(Metrics),它用于判断流量进入AS时的最佳路由。
- 缺省情况下,BGP仅比较来自同一AS的路由的MED属性值。
default med 0 //配置缺省MED值。配置缺省MED值。
bestroute med-none-as-maximum //设置当路由没有MED值时将其作为最大值处理。当路由属性中没有MED值时,BGP在选路时将使用缺省MED值。
compare-different-as-med //允许BGP比较属于任意AS的EBGP对等体的路由的MED值。
deterministic-med //在路由选路时优先比较AS_Path最左边的AS号相同的路由。
bestroute med-confederation //比较联盟内路由的MED值。
1.1.1、BGP路由选择过程
1、如果此路由的下一跳不可达,忽略此路由。
是13条选路规则的前提
2、Preferred-Value值数值高的优先。
等于思科的weight 越大越优;
只在本地生效,不能跨设备。
[R1]dis bgp rou
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
3、Local-Preference值最高的路由优先
4、聚合路由优先于非聚合路由 忽略
5、本地手动聚合路由的优先级高于本地自动聚合的路由 忽略
6、本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由。忽略
7、AS路径的长度最短的路径优先
8、比较Origin属性,IGP优于EGP,EGP优于Incomplete i>e>?
9、选择MED较小的路由
10、EBGP路由优于IBGP路由
11、BGP优先选择到BGP下一跳的IGP度量最低的路径 比较metric值
当以上全部相同,则为等价路由,可以负载分担
注:AS_PATH必须一致
当负载分担时,以下3条原则无效
12,比较Cluster-List长度,短者优先,
13,比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径
14,比较对等体的IP地址,选择IP地址数值最小的路径
1.1.2、BGP选路参数
Preferred-Value、Local-Preference、AS_PATH、Origin、MED、EBGP/IBGP、IGP cost、Cluster-List、Community
2、BGP的路由策略
通过attribute(属性)来干预BGP的选路。
华为13条选路原则
BGP通过metric来干预选路(由上到下来选,如果第一条原则选出了路径,后续的无效)
记住属性的口诀:PL LAO MEN(漂亮老男人)
1、PrefVal(Preferred Value 优选值最高的路由,私有属性,本地有效)默认为0
2、LocPrf(Local Preference 优选本地优先级最高的路由)默认为100
3、本地起源属性(Local-origin),手动聚合路由>自动聚合路由>IGP>BGP
4、AS_Path(优选短的路由)
5、Origin i>e>?
6、MED(优选MED值小的)
7、EBGP>IBGP
8、在AS内优先选择IGP开销最小的路由
9、是否支持负载均衡 (默认不做,前8条选路原则要完全一样,AS-PATH 号也要一样)
R4宣告的4.4.4.4发送给EBGPAS123的R2,R2在IBGP内发送给下一跳R1、R3。
[R1-bgp]dis ip ro pro bgp
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Destination/Mask Proto Pre Cost Flags NextHop Interface
4.4.4.4/32 IBGP 255 0 RD 2.2.2.2 G0/0/0
RD D代表已经放入路由表,R代表中继。
2.1、Preferred-Value相当权重weight
华为设备私有的prevlue,仅仅在本地有意义
,不能跨设备。不会更新给邻居(不能用于出方向)
Preferred-Value默认值为0,越大越优先
。
A、 针对该邻居完全的修改(绝对的) 不建议
[R4-bgp]peer 3.3.3.3 preferred-value 10
[R4-bgp]dis bgp rout
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.3/32 3.3.3.3 0 100 10 100i
原来选择从R2学到11.1,现在改为从R3上学到11.1,所有从R1过来路由都选择从R3过来。
B、明细修改,调用route-policy
[R4]acl 2000
[R4-acl-basic-2000]rule 30 permit source 24.0.0.2 0
[R4-acl-basic-2000]q
[R4]route-policy pre permit node 50
Info: New Sequence of this List.
[R4-route-policy]if-match acl 2000
[R4-route-policy]apply preferred-value 20
[R4-route-policy]q
[R4]bgp 200
从2.2.2.2方向的权重增加
[R4-bgp]peer 2.2.2.2 route-policy pre import
[R4-bgp]dis bgp rout
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 20 100i
* i 3.3.3.3 0 100 10 100i
[R4-bgp]dis ip rout pro bgp 查看EBGP之间路由。
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 IBGP 255 0 RD 2.2.2.2 G0/0/0
RD D代表已经放入路由表,R代表中继。
Pre路由优选级:Direct0>OSPF10>IS-IS15>Static60>RIP 100>OSPF ASE、OSPF NSSA150>IBGP、EBGP255。
[R4]tracert -a 4.4.4.4 1.1.1.1
2.2、local-preference本地优先级
默认100,越大越优
仅仅用于IBGP
(不在EBGP之间传递)
通常用于数据包如何离开本AS。
[R4]dis bgp rout
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
A、 绝对的修改(绝对的) 不建议
[R3]bgp 200
[R3-bgp]default local-preference 200 //R3之后发给IBGP对等体的路由的LP属性都将被改为200
B、明细修改,调用route-policy
[R2]acl 2000
[R2-acl-basic-2000]rule 10 permit source 1.1.1.1 0
[R2]route-policy local permit node 10
Info: New Sequence of this List.
[R2-route-policy]if-match acl 2000
[R2-route-policy]apply local-preference 300
[R2-route-policy]route-policy local permit node 20 //允许其他
[R2-route-policy]q
<R4>dis bgp ro
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 300 0 100i
* i 3.3.3.3 0 100 0 100i
2.3、AS_PATH经过的AS号 不常用
- BGP路由每经过一个AS,就会将这个AS号加入自已的AS-Path中。AS_Path属性顺序的记录了某条BGP路由所经过的AS信息。
- BGP会优选AS_Path长度最短的那条路由。越短越优先。
- AS_Path还可以用来防止AS之间的路由环路。当路由器从EBGP邻居收到BGP路由时,如果该路由的AS_Path中包含了自己的AS编号,则该路由将会被直接丢弃。
如果路由聚合时,通过aggregate命令手动聚合路由,带AS-SET的汇总,还原本来的AS号码。{200 100}。
R5上查看BGP路由表:
<R4>dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.10.10.10/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
从上面BGP路由表中可以看到,10.10.10.10/32这条路由是从R2的到达R4。
使用Route-Policy对R2接收的10.10.10.10/32的路由信息中的AS_Path属性进行修改。增加一个AS123。
在R2对AS_Path修改配置:
ip ip-prefix AS permit 10.10.10.10 32
route-policy as_path permit node 10
if-match ip-prefix AS
apply as-path 123 additive
route-policy as_path permit node 20
bgp 200
peer 12.0.0.1 route-policy as_path import //从R1过来的入方向使用策略路由as-path
<R4>dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.10.10.10/32 3.3.3.3 0 100 0 100i
* i 2.2.2.2 0 100 0 123 100i
结果可以看出AS_Path属性中增加了AS123,R2的AS_Path属性为123 100i。R3上的属性还是原来的100i,根据BGP优选AS_Path长度最短的那条路由。R4的BGP路由表优选R3这条路由。走R2的路由变为无效路由。
2.4、Origin起源属性修改
起源码的优先级:I(通告、汇总产生的)>E(不再使用)>?(import重公布)。
I — 代表该路由信息起源于IGP协议(还有静态,直连),通过network发布出来的路由信息.
E — 代表该路由信息起源于EGP协议,现在不用了。
?—import 重发布导入的路由起源码都是?
一台BGP路由器存在多条去往同一目标网络的BGP路由时,根据前面所学的
首先比较Preferred Valu(权重);
再比较Local Preference(本地优先级);
再比较本源属性(手动聚合路由>自动聚合路由>IGP>BGP);
再比较AS_PATH属性(所经过的AS);
都还是一样,这时需要比较,起源码属性。依次优选Origin类型为IGP、EGP、Incomplete的路由。
1、R1对自身的10.10.10.10/32路由做origin的修改。
[R1]route-policy Ori permit node 10
Info: New Sequence of this List.
[R1-route-policy]apply origin ?
egp Remote EGP
igp Local IGP
incomplete Unknown heritage
[R1-route-policy]apply origin incomplete
[R1-route-policy]q
[R1]bgp 100
[R1-bgp]network 10.10.10.10 32 route-policy Ori
2、R1对发送给R2BGP邻居的10.10.10.10/32路由做属性的修改。
[R1]ip ip-prefix ori permit 10.10.10.10 32
[R1]route-policy gin permit node 10
Info: New Sequence of this List.
[R1-route-policy]if-match ip-prefix ori
[R1-route-policy]apply origin incomplete
[R1-route-policy]q
[R1]route-policy gin permit node 20
Info: New Sequence of this List.
[R1-route-policy]q
[R1]bgp 100
[R1-bgp]peer 12.0.0.2 route-policy gin export
<R4>dis bgp routing-table
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
*>i 10.10.10.10/32 3.3.3.3 0 100 0 100i
* i 2.2.2.2 0 100 0 100?
从上面可以看到从2.2.2.2过来的路由,Origin起源属性由AS100import重分布产生。
起源码的优先级:I(通告、汇总产生的)>?(import重公布),所以BGP优选3.3.3.3这条路由。origin属性对于选择路由有作用。
2.5、MED多出口鉴别器
前提条件:去往同一目标网络的多条路由来自同一个邻居AS
时,BGP才会比较这些MED值。MED只会影响相邻两个AS,收到MED属性的AS不会把此属性再继续传递给别的AS。
MED值小越优先
,常被称为Cost。MED的作用是控制邻居AS的流量从哪个入口进入到AS中 。
它是一个4字节的整数,取值范围为0~4294967295。
<R4>dis bgp routing-table
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.10.10.10/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
R4接收来自同一邻居AS200内的R2、R3发送的10.10.10.10/3路由,R1经过R2到达R4,通过修改MED属性,使得路由10.10.10.10/3通过R1经过R3到达R4。
R1上作修改
acl 2000
ru 5 permit source 10.10.10.10 0
route-policy Med permit node 10
if-match acl 2000
apply cost 15
route-policy Med permit node 30 //有ACL就要加上允许其它
route-policy Med10 permit n 20
if-match acl 2000
apply cost 10
route-policy Med10 permit n 30
bgp 100
peer 12.0.0.2 route-policy Med export
peer 13.0.0.3 route-policy Med10 export
<R4>dis bgp rou
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.10.10.10/32 3.3.3.3 10 100 0 100i
* i 2.2.2.2 15 100 0 100i
3、BGP非策略性选路原则
3.1、EBGP对等体路由优于IBGP对等体
选路原则:EBGP优于IBGP
原因:eBGP对等体到达外部比穿越整个AS再到达外部要更加优先。
10.10.10.10、1.1.1.1这两条路由,R4是从R5上学习到优选路由,R4发送数据会从R5到R1,不会选择IBGP内的R2和R3。
[R4]bgp 100
[R5-bgp]peer 14.0.0.1 as-number 100
[R1]bgp 100
[R1-bgp]peer 14.0.0.4 as-number 200
[R4-bgp]di bgp rout
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 14.0.0.1 0 0 100i
* i 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
*> 10.10.10.10/32 14.0.0.1 0 0 100i
* i 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
从上面可以看出R4是从R1上学习到两条路由,而不是从R2和R3上学习到。
3.2、IGP cost Metric
到下一跳的更新源(R4到2.2.2.和3.3.3.3)的IGP的metric值小的被优选。
这里IGP内运行的是OSPF。
[R4-bgp]di bgp rou
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
*>i 10.10.10.10/32 2.2.2.2 0 100 0 100i
* i 3.3.3.3 0 100 0 100i
从上面看出,数据流是由R4–>R2–>R1。
[R4]dis ip rout pro ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Destination/Mask Proto Pre Cost Flags NextHop Interface
2.2.2.2/32 OSPF 10 1 D 24.0.0.2 G0/0/0
3.3.3.3/32 OSPF 10 1 D 34.0.0.3 G0/0/1
在a 0区域内到R2和R3的开销值都是1。
通过调整OSPF链路中的开销值来改变路由,使得数据流从R4–>R3–>R1。
[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]ospf cost 10
再次查看BGP路由表,就会发现R4到R1的路由方向改变。
[R4]dis bgp rou
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 3.3.3.3 0 100 0 100i
* i 2.2.2.2 0 100 0 100i
*>i 10.10.10.10/32 3.3.3.3 0 100 0 100i
* i 2.2.2.2 0 100 0 100i
3.3、Load-balance负载均衡
到达同一目的地通常会存在多条有效路由,但是BGP只将最优路由发布给对等体,这一特点往往会造成很多流量负载不均衡的情况。通过配置BGP负载分担,可以使流量负载均衡,减少网络拥塞。
根据类型负载分担:
- 最优路由为iBGP路由,则只是iBGP路由形成负载分担;
- 若最优路由为eBGP路由,则只是eBGP路由形成负载分担;
- iBGP路由和eBGP路由不能形成负载分担;
- BGP只对AS_PATH属性完全相同的路由进行负载分担;
形成负载分担时可以不比较路由的AS_ PATH属性,通过命令load-balancing as path-ignore来实现,但是该方式可能会引起路由环路,需谨慎使用。
R1通过12.0.0.2和13.0.0.3这两条线路形成EBGP负载分担。R8宣告8.8.8.8/32的路由R4学习到,由R2和R3通告进AS100,R1到AS200有2条eBGP路由,通过R2和R3都可以到达。目前只有一条路由进入R的路由表。
<R1>dis bgp ro
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.8.8.8/32 12.0.0.2 0 200 800i
* 13.0.0.3 0 200 800i
在R1配置负载分担命令:
[R1]bgp 100
[R1-bgp]maximum load-balancing eBGP 2
查看BGP路由表没有变化,此时查看IP路由表会发现。
[R1]dis ip ro
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 Direct 0 0 D 127.0.0.1 LoopBack0
8.8.8.8/32 EBGP 255 0 D 12.0.0.2 G0/0/1
EBGP 255 0 D 13.0.0.3 G0/0/2
3.4、华为更老的BGP不生效
建立邻居的时间不一样,优选建立时间短的。