面向逻辑谈bgp选路原则(第二部)
终于到了BGP终极解析的第二部曲——BGP选路原则。与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类。因为只有从这种角度才能让大家更好的记忆。
IGP的选路原则就是我们都知道的比较metric度量值,包括跳数带宽延迟等等。但是BGP的选路原则总共有13条!其中只有两条是关于传统的跳数和开销!正因如此BGP选路在时间复杂度上要远远高于IGP选路。但这些都是合情合理的,毕竟IGP是给BGP打工的,BGP不得表现的“高级”点怎么镇得住这个位置呢?
官方教材上列出的选路顺序队列是这个样子的:
1 最高有weight优先
2 本地优先级高的优先
3 起源本地的路由优先
4 as-path最短的优先
5 最小的起源代码优先
6 最低的med优先
7 ebgp比ibgp优先
8 最近BGP邻居优先
9 如果配置了maixmum-path,就负载均衡。
10 最老的EBGP路由优先
11 更低的router-id优先
12 cluster-list短的优先
13 最低邻居地址的路径优先
然而这张列表是有瑕疵的,正确的步骤应该是:
1 最高有weight优先,默认为0
2 本地优先级高的优先//与第一条属于同一类
3 起源本路由器上的路由(也叫比较下一跳)
4 as-path最短的优先
5 最小的起源代码
6 最低的med
7 ebgp>ibgp
8 通过最近BGP邻居的路由
9 如果配置了maixmum-path,就负载均衡。
10 最老的EBGP邻居学到的路由,是路由最老.
11 更低的router-id//与13条属于同一类,都是因为BGP默认不负载均衡。
12 始发路由器ID相同,那么选择 cluster-list短的
13 优选来自于最低的邻居地址的路径,是BGP的neigbor配置中地址
第三条应该单独拉出来放一旁,就是AS内路由就从内部走,而不该啊放在13条顺序队列中。正常情况下不会有走其他AS的路径到达内部网络(因为bgp的防环),但是恰恰出现了这条选路原则,这时为什么呢?这里有两个原因,其一,万一网络bug产生了导致环路,其二,程序员逻辑:给bgp表中所有条目都附上一个比如权重值(起源本地的为32768),管他需不需要选路(因为通常本地的路由只有一条路可走)。而这里的第三条原则其实只一种概念,就是内部ip就走内部,别多想了!
一、weight自己影响自己
定义:
1.优选有最大Weight的路由 (范围0-65535) weight是CISCO私有的参数,路由器配置了Weight在本地有效。
2.缺省情况下,通过本路由器宣告、重分布或者汇总的路由的weight为32768,从BGP邻居学习到的路由的weight为0
3:只在本地(影响自己一个路由器)有用,影响本路由的选路.
修改方法:
1、neighbor 对等体地址 weight 值 (从该对等体学到的所有的路由都会加上设定的权重值)
2、route-map 名字 permit 10
Set weight 值
只能在本路由器的入方向上做.
二、local preference本地优先级//被本AS的ibgp peer影响
起源本地的路由没有LP!!!也就是AS内路由跳过这一条原则!!
定义:
1.通过第一条选路原则不能选出最优BGP条目的情况下,优选有最大local preference值的BGP条目。
2.local preference值只可以在IBGP邻居之间传递,在EBGP邻居之间不能传递,也就是说不能在EBGP的出方向上做,因为只在本AS内生效。
3.对于从EBGP邻居学习到的BGP条目,local preference缺省值为100,这个值可以通过命令bgp default local-preference修改
修改方法:
第一种:bgp default local-preference xxx
修改后,对IBGP学来的路由不起作用,只对EBGP传来的和自己产生的路由起作用。
第二种:
route-map xxx permit 10
set local-preference xxx
不能在EBGP邻居关系的出方向做修改。
注:local-preference的默认值是100
在show ip bgp 中看到是空,其实也是100,
show ip bgp xxxx 看明细的时候可看见路由的local-preference
三、起源本路由器上的路由//下一跳是0.0.0.0!!
优选从本路由器始发的路由(包括本地network配置的重分布,或者在IGP表中已经有一些需要被配置路由聚合的地址,在BGP中用aggregate-address命令配置的路由聚合)
注:对于思科设备来说,如果是从本地往BGP里注入一条路由,缺省的weight值为32768,由于这个weight值很大,对于该注入路由,会根据第一条选路原则成为最优BGP条目。因此对于思科设备,第三条选路原则作用不大。然而考虑到第一条选路原则为思科私有,不是所有厂家都支持,第三条选路原则的作用就显现出来了。
四、AS-path属性
在通过!本地优先级!不能选出最优BGP条目的情况下,优选AS path长度短的路由条目
注意:修改AS path长度只能在EBGP邻居关系之间进行,IBGP邻居关系是不可以的
1、as-path只可以在EBGP邻居关系的out方向和in的方向去修改
out方向做:加在本来AS号的前面(右边)
in方向做: 加在本来AS号的后面(左边)
2、last-as 表示在离这个路由器最近的AS号,重复加次数
3、当写下面两个命令时,哪个先生效?
set as-path prepend 数值
set as-path prepend last-as 数字(1-10)
入/出方向的时候,as-path prepend与last-as同时使用,都是last-as先生效,然后as-path prepend才生效
5、如何跳过as-path选路原则
bgp bestpath as-path ignore
五 起源代码(没什么用!!!),还可以修改。。。
在通过前四条选路原则不能选出最优BGP条目的情况下,优选最低起源类型的BGP路由
从同一个peer可以传来同一目标网络的两个不同更新,就是所谓的启源代码不同。。。这时唯一的的特殊情况。,也就是在同一个下一跳上还要进行选择。
最低起源类型的顺序是 IGP 优先 EGP 优先 incomplete,其中EGP的方式现在已经不用了。
通过Network,aggregate方式产生的BGP路由的起源属性是i,通过重分布产生的BGP路由的起源属性是incomplete。
1:
i-------igp network xxxxx
e-------egp (没有了)
?-------重分发
2、origin在 EBGP/或IBGP的in和out方向都可以做!!!
route-map xxx permit 10
match ip address pre 1
set origin 属性
六 MED值//邻居AS上做,影响本AS
MED值的的比较是前面的五条选路原则都不能选出最优的情况下才起作用。
MED值的用途:在两个相临AS之间有多个BGP连接的情况下,MED值用于影响从相邻AS到本AS的路由选择,即用于影响邻居AS到本AS的流量从哪个接口进来,这是通过向相邻AS的EBGP邻居发送具有不同MED值的路由条目来实现的,但是需要注意选路过程的实现是相邻AS的路由器自身根据13条选路原则独立完成。
MED的生成:
1本地network方式生成的BGP条目,会带上IGP的metric,(同时也会带上路由的下一跳,开启汇总后会被取消)会传给所有邻居。
2:如果从EBGP邻居学习到的BGP条目的metric值传递给其他IBGP邻居,但不传给EBGP。
3:如果从IBGP邻居学习到一条BGP条目的metric为0或者其他值,缺省不会传给给EBGP邻居,显示为空
4汇总方式生成的BGP条目,metric值为空
5重分布方式生成的BGP条目,metric值为IGP的cost、metric、hop,如果开启自动汇总会被清除。
6:缺省情况下,空的metric当0看待
优选最小MED 值的路由(范围 0到4294967295).
7只能在相邻的AS传递,一般在EBGP邻居的OUT方向的做。影响入站的流量。(IBGP之间是可以修改的)
七 EBGP优于IBGP//开始瞎比较了。。
与EBGP的AD小于IBGP的AD是无关的
八 通过最近bgp的路由//继续瞎玩。。
指的去往BGP邻居用的IGP路由的metric值最小
对EBGP,IBGP邻居都会有效。
九 配置了maximum-paths命令,会产生负载均衡
其实这不算选路的原则,是指当前面的八条选不出最优路由时,在BGP 的进程下配置maximum-paths 命令后,会产生负载均衡
十 存在时间最长的EBGP路由优先
优选最老的路由(最先被学习到的路由).
可以用bgp bestpath compare_routerid命令语句关闭。
bgp bestpath compare-routerid
这句命令的意思是指,选路是前8条都选不出来时,跳过第十条最老的EBGP邻居,直接选最小的ROUTE-ID
注:如果路由器标志是一样的,此步骤可以忽略,因为这说明路由器正在从自己那里接收路由。
如果当前没有最优路由器,此步骤可以被忽略
十一 最小的IBGP邻居route-id//实在没得比较了比这个
如果在同一时间学习到多条到同一目的地的路由,优选最小BGP-router-ID的路由
注:在有RR的情况下不比邻居的route-ID,起源ID将代替route-id在路径选择过程中起作用。将不会用到第11条选路原则,会用到12或者13条选路原则。
一个路由器从多个RR收到相同路由进行最优路径选择时,第11条选路原则用的Router-ID被更改为originator ID(起源ID就是在本AS学得路由的第一跳路由器的Router-ID,是RR的一个client),而不是RR的Router-ID,因此如果BGP路由只是从一个ASBR学习到然后传入AS内部,将不会用到11条选路原则,会用到12或者13条选路原则。
十二 cluster-id 的长度
多条路径的始发路由器ID相同,那么选择 cluster-list短的,因为每经过一个RR, cluster-list会加上这个RR的 cluster-id
十三 BGP优选来自于最低的邻居地址的路径,是BGP的neigbor配置中地址//实在没得比了比较这个