BGP详解(BGP的多个属性、BGP多种选路规则)

  • Post author:
  • Post category:其他




BGP



概述:

EGP协议 管理as之间路由传递的问题 距离矢量型 分布式计算

用tcp来传递路由信息(端口179) 保证可靠性丧失邻居自动发现,只能单播建立邻居

设计用来处理AS之间的路由所以该协议重点处理的AS之间路由,AS之内的路由不作为重点

BGP使用AS号作为识别不同AS路由的标识,该AS号需要具有唯一性

BGP的最小使用单位是一个路由器所以每个路由器只能使用一个BGP的进程

由于BGP管理的路由信息非常庞大,不能使用周期更新,只能使用触发更新,并且会认定一条路由时间越久越稳定,在这种情况下bgp必然不会使用复杂的算法来处理bgp收到的路由信息,又由于每个AS情况不一致,管理范围也有限,它必然需要丰富的管理参数(不能只依赖metric)宗上所述BGP必然需要多种参数共同决定路由的选择,并且不能依赖某种特定的全局算法,只能单独去计算某一条路由不能全盘考虑,并且需要依赖所属AS管理员手动设置。 BGP 路径优先协议,通过给每个路由设置大量的属性参数来进行灵活的管理或者选路,并且这些属性参数大量的都需要人为的操控



BGP的数据包:

1.初始(Open):TCP三次握手之后,双方路由器发出初始报文

2.存活(Keeplive):BGP路由器收到初始消息后发出的确认

3.更新(Update):一条更新消息中只包含一条路径信息,如果需要更新多条路径信息,就需要多个更新消息

4.通知(Notification):BGP路由器在检测到错误时发送通知消息

5.reflush 刷新BGP路由



特性:

1、可靠性–不能周期更新,增量更新;-TCP

2、可控性–该协议的真正意义,在于AS间共享路由条目时更加方便快捷的干涉选路

3、AS-BY-AS 以一个AS为单位进行计数 IGP -hop-by-hop 一个路由器为一个单位


BGP是怎样收集并存储路由信息的?

  • 建立邻居关系(信任关系) + 自动建立 + 局限性 + 只能直连建立邻居 + 会带来可靠性的问题 + 可控性差,安全性不佳 + 手动建立 * 可以跨网段建立邻居 * 可靠性好 * 可控性好
  • 选择tcp作为传输协议 bgp的路由传递数目大,tcp可以有滑动窗口机制,弥补ospf和eigrp这种协议传递路由的停顿,同时 也带来了高可靠性。
  • bgp在生成路由的时候先把路由放在bgp的路由表中
  • bgp得益于TLV的数据结构,并且没有确定长度具有很强的扩展性。 type length value



邻居之间路由传递规则



Bgp俩种邻居关系

IBGP 邻居关系 //相同as的路由器建立的邻居关系

EBGP 邻居关系 //不同as路由器建立的邻居关系

  • 1.GBP不管什么邻居关系只传递最优路由(不由不传,标题是> ,也就是不带>的路由不会被BGP传递)
  • 2.EBGP 邻居关系路由传递: 只要不违背环路原则或人工策略EBGP邻居传递无限制的(前提必须优),EBGP之间传递路由会更新next-hop为自己的更新源地址
  • 3.IBGP邻居关系路由传递:IBGP自己产生的路由(自己宣告的 自己重发布进来的)和EBGP邻居传递的路由都可以传递给他的IBGP邻居,但不可以在IBGP之间中转(也就是不饿能传递到邻居的邻居)

    IBGP之间传递路由不会更新next-hop(只有next-hop为0.0.0.0的情况才会更新,或者建立邻居的时候输入neighbor

    x.x.x.x next-hop-self更新为自己的更新源地址)

    这个设定的好处:IBGP之间拥有了水平分割从而避免了IBGP环路的产生,IBGP也不必设置放环算法

    这个设定的坏处:IBGP之间路由传递必须直接建立邻居,导致IBGP邻居关系是一种全互联状态



BGP建立邻居失败的场景:



参数与配置

1.neighbor 10.1.1.1. //代表向该地址发送TCP端口位179的数据。并且自己也需要在发出地址上打开TCP 179 的监听。该配置可以指定源地址也可以不指定源地址,不指定就是出接口地址(意味着打开该出接口关于tcp 179的监听)

本端指的地址需要是对方的源地址,对方指的地址需要是本段的源地址

2.neighbor 10.1.1.1remote route-as xx

对端建立邻居的AS号必须和本端remote-as xx号一致

双方建邻保障数据tcp 179能够发送,不丢失,不被拦截、



BGP的属性

一共10条,Cisco有11条,weight是Cisco私有属性

1、公认必遵:Origin,AS-path,Next-hop

2、公认可遵:local-pref,auto-aggregate

3、可选传递:aggregator,community

4、可选非传递:MED,Originator-ID,cluster-list,weight


1.weigth

cisco私有属性,对于离开AS的路由在路由器选择那一条最优,本台路由器产生为32768,学习的为0 不能传递,适用于一台路由器在多条路径下的选路,无视邻居属性

Weight值的修改只能影响本路由器,不能影响其他路由器,意味着AS只有一个出口weight选路是适用的,但是有多个出口路由器的情况下weight就不太适用

1.Router BGP 2

Neighbor 10.1.34.3 weight 1 修改该邻居所有传递过来的路由weight为1

2.使用前缀列表抓取路由

Neighbor 10.4.34.3route-map a in 只针对某一个路由修改weight 只能用in方向

Route-map a permit 10

Match ip address prefix-list a

Set weight 1

Route-map a permit 20

Ip prefix-list a permit 10.1.1.1/32


2.origin


起源属性,标识改路由的来源方式,0表示宣告(i) 1表示EGP学到(E)3表示其他手段得到(重发布?) 用i > E > ? 选路

该属性可以选路,但一般不用于选路

R(config)#Router bgp 2

R(config)#Neighbor 10.1.24.2 route-map org in 用in和out方向都行,适用于任何邻居之间

R(config)#Route-map org permit 10

R(config-route-map)#match ip address prefix-list a

R(config-route-map)#Set origin ?

Igp local IGP

Incomplete unknown heritage

R(config-route-map)#Set origin incomplete


3.next-hop


到达路由的下一跳路由器IP地址,IBGP之间传路由next_hop不变,为0的时候会修改更新源地址,EBGP之间传路由next_hop修改为更新源地址

选路:下一跳为0的优于其他路径

修改:

Router bgp 2

Neighbor 10.1.24.2 route-map 1

Route-map K permit 10

Match ip address prefix-list a

Set ip next-hop 1.1.1.1

方向无所谓,邻居无所谓,都可以


4.AS-PATH


一条路由在传输过程中经历了哪些AS(不算自己)顺序是最近经过的as排前面,一个AS的路由器拒绝接受携带有自己AS号的路由,可用来防环,越短越好 也可用于选路

Route-map org permit 10

Match ip address prefix-list a

Set origin incomplete

Set as-path prepend 2 3 4

Route-map org permit 20

Router bgp 2

Neighbor 10.1.24.2 route-map org in

allowas-in 允许和具有自己相同AS的路由进入本AS 打破防环 本路由器使用

as-override 把具有和其他AS相同AS号的路由放入这个AS 邻居路由器使用

一般在选路当中添加AS会重复添加已经历的as,一般不会添加没有经历的AS,适用于任何邻居之间,in 和 out方向都行。

**注:**调用时,控制层面的出或入接口都可以,但必须是EBGP邻居关系

入向调用—3 4 5 x,X为真实经过过的编号

出向调用—X 3 4 5 ; 最前端AS为最新经过的编号;

又因为AS-PASH属性还用于防止EBGP环路,故添加的属性中若存在后方AS号,将导致这些路由无法进入这些AS;故可重复使用已经经过的AS号


5.local-pref


与weight一样也是选路属性

不能在EBGP邻居之间传递,可以在IBGP邻居之间传递,值越高越优(默认100),常用于当本AS有多个出口路由器时,选择拥有local值大的路由器作为出口路由器,也可以是到达一个网段有多个出口路径时,选择local值大的路径

修改方式:

1.修改路由器的默认local_pref值,该路由器通告给IBGP邻居的路由都会携带local_pref值

Router bgp 1

Bgp default local-preference 120 修改默认值

2.通过route_map修改路由某路由的local_pre值,EBP只能在in方向,IBGP可以是in也可以是out方向

Route-map k permit 10

Match ip address prefix-list k

Set local-preference 120

Route-map k permit 20

Router bgp 1

Neighbor 10.1.34.4 route-map k in


6.MED


选路属性 本质就是metric 默认为0,一般只能用于自同一个AS发出路由的不同路径med值比较

用于选择流入AS的入口路由器,只能在俩个AS之间传递,不能传递给其他的AS

一般用于影响对方AS(out),如果在本AS使用(in),和local-pre等同(注意med不能在路由器上修改默认值)

Route-map k permit 10

Match ip address prefix-list k

Set local-preference 120

Route-map k permit 20

Router bgp 1

Neighbor 10.1.34.4 route-map k in

Bgp always-compare-med 开启比较不同as的med


注意

:med只能用于俩个AS之间的选路,超过俩个AS该参数无效。可以打开多AS的med比较 always-compare-med

Bgp always-compare-med 开启比较不同as的med


7.auto-aggregate


用来警告下游路由器聚合产生的路由器路径丢失

As-set 命令会使得该属性消失

BGP支持向BGP邻居传递重叠路由可以选择多种方式

1.明细和粗略的都公布 aggregate-address 10.0.0.0 255.0.0.0

2.只公布明细 aggregate-adress 10.0.0.0 255.0.0.0 suppress-map

3.只公布没有重叠的as-path agregate-address 10.0.0.0 255.0.0.0 summary-only as-set

4.聚合后公布聚合后的路由 agregate-address 10.0.0.0 255.0.0.0 summary-only


8.aggregator



用来通告汇总路由的汇聚路由器BGP_ID(cisco),方便寻找


9.community



团体属性 为了更好的标识BGP路由,标识格式为X:Y

团体值的设置不能在EBGP之间(ibgp之间可以),它的传递可以在IBGP之间也可以在EBGP之间

设置:

Route-map p permit 10

Match ip address prefix-list p

Set community 111

Route-map p permit 20

Router bgp 1

Neighbor KKK route-map p out

设置必须在IBGP之间可以用in也可以用out

传递设置:

Neighbor 10.1.24.4 send-community both/standard/extended 团体属性需要传递必须开启该指令

匹配设置:

IP bgp-community new-format 开启扩展工具匹配

用community-list匹配完成之后route-map调用即可

查看:

R# show ip bgp community 该指令可以查看所有具有团体值的路由

R#show ip bgp community 111 查看某团体值的所有路由

Standard(做路由标识) extended (MPLS VPN ) 可读性好

子属性

1.Internet 默认属性,可以给任何BGP发送,不对携带团体值的路由做任何限制

2.No_export 只能在一个AS内传递,可以在联盟内传递,该属性就是限制携带团体值的路由传递给EBGP邻居,联盟的EBGP除外

3.No_advertise 不在IBGP,EBGP邻居间传递,禁止传递给任何邻居

4.Local-as 不向任何EBGP邻居发送包括联盟的EBGP邻居


10.Originator-ID


路由反射使用,是路由发起者产生的一个32比特的值,该值是本地路由发起则的RID,如果路由发起者的RID,如果路由发起者从属性上看到自己的RID,说明有环路就忽略

IBGP下服务器会选择出一条最优路径,若开启反射器,则会将最优路径反射给非客户端,而从客户端得到的俩条或多条到达同一目标的路径,无法都反射到非客户端,使得非客户端丧失了选择最优的权力


11.Cluster-list


路由反射器使用,是路由进过反射器簇ID的一个序号,如果反射器在属性里看到自己的簇ID就说明有环路,忽略



路由决策

根据选路参数来做决策,参数又有优先级之分,决策结果放置bgp的路由表。



防环

ibgp通过水平分割,ibgp邻居之间路由不可中转。

ebgp通过as-path属性来防止,也是水平分割,as之间传递路由不能接收自己as发出的路由


反射防环


originator-id

由自己发出的路由不会反射回自己,自己发出的路由携带originator-id(默认为自己的rid),回程的时候检测路由是否和自己的originator-id一致。


cluser-list

由反射器自己反射出去的路由不会反射回本发射器。当一条路由被反射器反射的时候反射器会把自己的cluster-id(默认为rid)添加在cluster-list中,每经过一个反射器该反射器都会添加自己cluster-id到cluster-list中

当一条路由需要被反射器接收时反射器会查看该路由的cluster-list,如果发现有自己的cluster-id则不接收该路由。



什么时候使用BGP ?

  • 当一个AS有一个运营商出口的时候不推荐使用BGP。
  • 当有个AS有俩个及以上运营商出口的时候推荐使用BGP,并且这些运营能够友好协商传递其他运营商关于这个as 的路由。/19
  • 当有多个AS经过本区域传递路由



BGP属于什么路由协议?

大的角度是距离矢量,一般的距离矢量生成的是一个路由的最短路径树。而bgp生成的是一个AS的最短路径树。



BGP的防止拓扑震荡

connectretry 计数器

浮动惩罚 bgp damponping



BGP的选路规则



BGP选路要求:

  • 无环(AS转发路由)
  • 路由优化(IBGP同步已解决;下一跳可达)
  • 路由不能是被惩罚状态

1、最高weight值 (选最高weight值的路由,Cisco私有,默认为0,如果是BGP本地发起路由,weight值32768)

2、最高Local-pref值(若weight值相同,则选择拥有最高local-pref值的路由,默认100)

3、本地发起(起源)路由(若local-pref值相同,则选择BGP本地发起的路由:也就是下一跳为0.0.0.0的路由。本地发起的路由有多种方式:network命令引入,重发布,汇总。)

4、最短AS-path(若本地发起路由无法比出最有路径,则选择拥有最短AS-path的路由。可以使用bgp bestpath as-path ignore 命令来忽略对AS-path的比较,而直接比较下一属性。)

5、最低origin类型(若AS-path无法比较出最优路径,则选择拥有最低origin类型的路由。origin记录了路由是如何进入路由表的,有三种方法:从IGP导入,从EGP导入,以及重发布。优先级:IGP > EGP > Incomplete)

6、最小MED值(若origin类型无法比较出最优路径,则选择拥有最小MED值的路由,并且只有当多个下一跳邻居在同一个AS时,才能比较MED值。如果在多个不同AS的下一跳中比较MED,可使用命令bgp always-compare-med,需注意此命令在整个AS的路由器上配置,否则可能产生环路。MED默认值为0,如果收到一条没有MED值的路由,也认为是0)

7、EBGP优于IBGP(若MED无法比较出最优路径,则选择下一跳为EBGP的邻居。EBGP的路由AD为20,而IBGP的路由AD为200,但BGP并不在EBGP与IBGP间比较AD值,比到此步时,是邻居类型影响了最优路径的选择,而不是AD值的影响。注意:BGP联邦内部没有改规则)

8、在下一跳地址中,选择拥有IGP metric最小的路由

9、如果配置了maximum-path,若存在多条等价路径,会同时进路由表,即负载均衡

10、若下一跳都为EBGP,则选择最早学习到的路由,即时间最长的路由。(前提必须是external路由,联邦内的EBGP路由当做IBGP处理)

11、选择拥有最低router-id的下一跳路由

12、选择拥有最短cluster-list的路由

13、选择下一跳邻居拥有最小IP地址的路由



BGP的默认路由


精确默认


neighbor X.X.X.X default-originate


全局默认

–给所有邻居下发默认条件

全局 default-information originate

全局路由表中有默认路由

network 0.0.0.0 或者 重发布该全局路由表的默认给bgp


过滤


基于邻居的过滤

neighbor X.X.X.X prefix-list XX in/out //匹配前缀使用

neighbor X.X.X.X route-map XX in/out //route-map匹配的条件多(下一跳,属性,community-list,ip as-path )

基于bgp路由表的过滤 distribute-list ACL/route-map in/out


as欺骗配置


通过neighbor x.x.x.x local-as xx 我们可以实现让对方路由器认为本方as为xx这个as号


关闭as-path的水平分割


as-override用于让对方接收含有其as号的路由

allowas-in 用于让自己接收含有与自己一致as号的路由

SoO site of orgin 这个属性用来防止关闭水平分割以后双点bgp出现的环路问题



版权声明:本文为weixin_43165742原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。