BGP 的路径属性
- BGP 的度量是属性
- 属性分为:4类
{ 强制
公认 {
{ 自由决定
{ 传递
可选 {
{ 非传递
公认属性:每个运行BGP的路由器都必须支持和识别的;
传播给其他邻居
公认强制属性:在更新消息中必须有的
AS-path next-hop origin(路由怎样加入到BGP)
公认自由属性:在更新消息中可以没有
local preference (本地优先级) atomiic aggregate(链路聚合)
可选属性:是公认属性的补充(可能是私有),但是可以不必被所有BGP路由器所支持
可用属性根据其含义来传递给其他邻居
可选传递属性:如果不支持,原封不动的传给其他邻居
aggregator community
可选非传递属性:如果不支持,就忽略此属性;并且次路由不传递给邻居
MED
BGP 属性:
- AS path *
- next-hop *
- origin *
- local preference
- MED
- others
AS-Path
- 就是一个到达目的地所有要经过的自治系统列表(每离开一个AS就加上一个AS-path属性)
next-hop
- EBGP之间传递时才会改变(下一跳指向EBGP邻居的IP)IBGP传递不改变next-hop,可以用
next-hop-self 使得路由再IBGP传递时也更改下一跳
origin 起源属性
- IGP (i)
network 命令宣告的
聚合产生
- Incomplete(?)
从IGP或静态路由重分布过来的
- 起源属性,用来告知AS内 所有路由器,一个网络前缀是如何引入BGP的
以上属性 可以通过 sho ip bgp查看
local preference 本地优先级属性
- 选择local preference 高的路径
@ local preference 通告给本地IBGP邻居,指导数据如何离开本AS
@ 指向 IBGP 邻居发送(即只在AS内部)
@ local preference 默认为100
@ 公认自由决定属性,选路用
MED
- 选择MED 低的路径(可以想象为度量值)
- 通告给相邻EBGP邻居,指导数据如何进入本AS
- 默认 0
- 可选非传递属性
通过本地设置来影响EBGP邻居到达本地路径选择
上图,A发送给B C的路由带上MED值,数据从B到A路径就是B->A,从C到A路径 就是C->B>A
weight 属性(cisco私有)
- 选择 weigh 高的路径
@ 不发送给任何BGP 邻居;路由器本地有效
BGP路径选择
- 在BGP表通常有很多到达同一目的地的路径
- BGP 默认不负载均衡
路径选择基于属性
并不基于带宽等因素
- BGP根据属性在很多路径选择一条最佳路径
- 最佳路径提交到路由表管理进程。并对其他路由协议同样到达相同目的地的路由进行评价 (根 据 AD值)
路径决策过程
1,更高的 weigh (本地路由器)
2,更高的 local preference (本AS)
3,起源于自己的路由 (下一跳=0.0.0.0)
4,更短的 AS-path 列表
5,最小的起源代码 (IGP < EGP < incomplete)
6,更小的MED (比较相邻AS之间)
7, EBPG 比 IBGP 更好
8,选择最近的 BGP 邻居路由
9,如果配置了 maximum-path ,会负载均衡
10,对应 EBGP 路径 ,选择最老路由
11,更低的邻居 IBGP 路由器ID
12,更短的 cluster-list
13,更低的邻居IP,是BGP的neighbor配置的地址
一,weight (cisco 私有)
理论简介:
1,优选有最大的weight路由(范围 0--65535),cisco私有。路由器配置了weight在本地有效
2,缺省下,通过本地路由器宣告、重分布或者汇总的路由weight=32768,从BGP邻居学到的路 由weight=0
3,只在本地(只影响自己一台路由器),影响本路由的选路
修改方法:
1,neighbor xxx weight xxx (从此xxx邻居学到的路由都加)
2,route-map xxx permit 10
set weigh xxx
3, 本地路由器产生的路由的weight-32768 (0-65535)
4,只能在本路由器的入方向做(因为不传递,只在本地有效)
weight属性实验
如图,R1 R2通过loopback0 建立IBGP,同时运行OSPF
R1R3 R2R3用物理口建立EBGP
1,R3宣告loopback口
router bgp 200
net 33.1.1.0 mask 255.255.255.0
sho ip bgp
2,R1 R2分别从IBGP和EBGP学到33.1.1.0路由,sho ip bgp summary
例如从R1看,分别从R2和R3学到,且从R3学到的最优,
方法1,修改:
R1: router bgp 100
nei 22.1.1.1 weight 200
sho ip bpg (clear ip bgp * soft in刷新会更快看到效果)
R2:此时R2只能看到一条33的路由,因为IBGP水平分割
此种设置,会使得R1从R2学到的所有路由的weight都增加
方法2,
R1:router bgp 100
nei 22.1.1.1 route-map test in(注意只能in方向)
route-map test permit 10
mathc ip add prefix-list test
set wei 200
exi
route-map test permit 9999(设置不影响其他路由)
ip prefix-list test permit 33.1.1.1/24
clear ip bgp * soft in
sho ip bgp
此种设置可以精确匹配33的路由
二,local-preference
2.1 理论简介:
1,通过第一条选路原则不能选出最优BGP路径的情况下,优选最大local-preference的路径
2,可以在 IBGP 邻居之间传递,不能在 EBGP 邻居间传递。即不能再EBGP的out方向做,只在 本AS内有效
3,对于从EBGP学到BGP路由,loca-preference=100,
可以用“bgp default local-preference”修改
2.2 修改方法:
1,bgp default local-prefrence xxx
修改后,对IBGP 学来的路由不起作用,只对EBGP传来的和自己产生的路由起作用
默认下 R1 sho ip bgp 的33路由来自R3,此时R2做修改local-preference
R2:
router bgp 100
bgp default local-prefrence 1000
local-preference会在IBGP内传递,所以R1从R3收到是100(默认)从R2收到是 1000,并且,整个AS内的路由器都会从R2去往R3
2,route-map xxx permit 10
set local-prefrence xxx
R2:
router bgp 100
neighbor test 23.1.1.3 route-map test in
route-map test permit 10
match ip address prefix-list test
set local-prefrence 1000
exit
route-map test permit 9999
prefix-list test permit 33.1.1.0/24
clear ip bgp * solft in
sho ip bgp
R1:
sho ip bgp
2.3 local-prefrence 的默认值是100
show ip bgp 中看到的是空,其实也是100
show ip bgp xxx 看明细的时候可看见路由的local-preference
三 起源于本路由器上的路由
优选从本路由器始发的路由(包括本地network配置,重分布,或者在IGP 表中有一些需要被配 置路由聚合的地址,在BGP中用 aggregate-address 命令配置的路由聚合)
注意:对于cisco IOS,如果从本地网BGP里注入一条路由,缺省的weight值为32768,由于这个 weight值很大,对于该注入路由,会根据第一条选路原则成为最有BGP路由。因此对 cisco IOS来说,第三条选路原则作用不大,然而考虑到第一条选路原则为cisco私有, 不是所有厂家都支持,第三条作用就显现出来了
四 AS-PATH
在通过前三条选路原则不能选出最优BGP条目的情况下,优选AS-path 长度最短的
注意:修改AS-path长度,只能在EBGP邻居之间进行
1,AS-path 在EBGP邻居的out方向和in方向都可以做
1.1 out方向做:在发出去之前加上AS-path,再加上本身的AS
1.2 in 方向做:在收进来之前加上AS-path,再加上本身的AS
实验:
1,R3out方向做
R1:sho ip bgp
router bgp 200
nei 12.1.1.1 route-map test out
route-map test permit 10
match ip add prefix-list test
set as-path prepend 200(此处数值最好写自己的AS)
也可加多个set ip as-path prepend 200 200
prefix-list test permit 33.1.1.0/24
route-map test permit 9999
R1:看效果
sho ip bgp
2,last-as 表示子啊离这个路由器最近的AS号,重复加次数
route-map xx permit 10
match ip address 1
set as-path prepend last-as xx(数字,加多少次)
实验:
R3: route-map test permit 10
set as-path prepend last-as 2(但是不生效,因为没有与R3相连的其他AS)
---------------------------------------------
R3: router bgp 200
no neighbor 13.1.1.3 route-map test out
R1: no route-map test
router bgp 100
nei 13.1.1.3 route-map test in
route-map permit 10
match ip address prefix-list 10
set as-path prepend last-as 2
prefix-list test permit 33.1.1.0/24
查看,sho ip bgp
3,当写下面两个命令时 ,哪个生效
set as-path prepend 23
set as-path prepend last-as 数字
入/出方向的时候,as-path prepend 与 last-as同时使用,都是last-as 先生效,然后as- path prepend才生效
4,删除私有的AS号,起源于本AS无效,在出方向做
neighbor xxx remot-privat-as
5,如何跳过 as-path 选路原则
bgp bestpath as-path ignore
R1:
router bgp 100
bgp bestpath as-path ignore
五 起源代码 origin (公认必遵)
在通过前四条选路原则都不能选出最有BGP路由的情况下,优选最低起源类型的BGP路由
最低起源类型的顺序:IGP < EGP < incomplete,其中EGP的方式已经不用了
通过network ,aggregate方式产生的BGP 路由的起源属性是IGP,通过重分布产生的BGP路由的起源属性是incomplete
实验:
R3:
router bgp 200
nei 23.1.1.2 route-map test out
route-map test permit 10
match ip add prefix-list test
set origi incomlete
route-map test pemit 9999
prefix-list test permit 33.1.1.0/24
clear ip bgp * soft out
R2: 看现象
sho ip bgp
六 MED
mED作用:在两个AS之间有多个BGP连接的情况下,MED用于影响从相邻的AS到本AS的路由选择,即影响邻 居AS到本AS的流量从哪个接口进来,这是通过向相邻AS的EBGP邻居发送具有不同MED值的路由条 目来实现的,但要注意:选路过程中的实现是相邻AS的路由器自身根据13条选路原则独立完 成,MED值的比较式前面5个都不能选出最优情况下才起作用
就是R3把33.1.1.0/24路由通告给R1时med=1000,通告给R2时med=2000,就影响了数据从AS100进入 AS200时,会都从R1-->R2的路径进来
实验:
R3:
router bgp 200
nei 23.1.1.2 route-map test-med-r2 out
net 13.1.1.1 route-map test-med-r1 out
route-map test-med-r2 permit 10
match ip add prefix-list test
set metric 2000
route-map test-med-r2 pemit 9999
route-map test-med-r1 permit 10
match ip add prefix-list test
set metric 1000
route-map test-med-r1 permit 9999
prefix-list test permit 33.1.1.0/24
clear ip bgp * sloft out
R1:看效果
sho ip bgp
R1 去往33.1.1.0/24 下一跳是R3
R2:看效果
sho ip bgp
R2 去往33.1.1.0/24 下一跳是R1
in方向也可以!!!!!!!!!!!!!!!!
MED 生成条件:
1,本地network方式生成的BGP条目,会带上IGP的metric。会传给所有邻居
2,若果从IBGP邻居学到一条BGP条目的metric=0或其他值,默认不传给EBGP邻居,显示为空
3,从EBGP邻居学到的BGP条目的metric传给其他IBGP邻居,但不传给EBPG
4,汇总方式生成BGP条目,metric为空
5,重分布生成的BGP条目,metric值为IGP的cost,metric,hop。汇总也会清楚
6,缺省,空的metric视为0
优选最小的MED值的路由(范围 0-4294967295)
-A 只有通过两条路径得到第一个AS(对等体)是同一个AS时才进行MED比较;任何自治域的联盟系统都会被忽略。就是说,只有在AS序列号中第一个AS号码一致时,才进行MED比较;任何联盟AS序列号(AS_CONFED_SEQUENCE)都会被忽略。
-B 如果路由器上配置了bgp always-compare-med,在全部的路径进行MED比较。但是这需要全体AS都同时启用这个功能,否则,有可能发生环路。
-C 如果路由器上配置了bgp bestpath med confed,将对所有只包含AS_CONFED_SEQUENCE的路径进行MED比较(即路径是起源于本地联盟)
-D 如果接收的路径没有分配MED值,则将此路径分配为0,除非路由器上配置了 bgp bestpath med missing-as-worst,将被看做MED值为4294967295的路由将在诸如到路由选择之前被改为 4294967295。
-E BGP 明确的MED值9也可影响此步骤。
1,只能在相邻的AS传递,一般在out方向做,影响入站的流量。
2,MED默认值
- 本地产生的路由 0
- IBPG 0
- EBGP 直连的 0
非直连 空(此时把空的按0 计算)
当有以下命令时,空的值为4294967294
bgp bestpath med meissing-as-worst为空的MED值最大为4294967294
即,当一个设置MED值之后,另一个不设置时,打上命令后变成最大值
3,bgp alway-compare-med 总是比较MED值
BGP一般是不比较来自两个不同AS的MED值,当打上这个命令后就会比较
5,bgp bestpath med confed
是指只在联盟内,比较联盟内的MED
如果路由器上配置了bgp bestpath med confed,将对所有只包括AS_CONFED_SEQUENCE的路径进行MED比较(即路径起源于本路由器)