BGP知识点

BGP

边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,BGPV4+在BGPV4的基础上支持多个地址族,如IPv6。

AS—自治系统   全球

网络—范围、管理域   

AS号 – 标准  16位二进制构成  0-65535 其中1-64511公有   64512-65535私有

        扩展  32位二进制构成

BGP特性

  • BGP协议是无类别的路径矢量协议。无类别即BGP在传递路由时会携带子网掩码;路径矢量,不同与距离矢量,路径矢量是以一个AS为单位,而距离矢量是以一个路由为单位,距离矢量是一种路由算法,而BGP不需要计算路由,它只需将以计算好的路由传递给了邻居即可。
  • 我们对IGP(内部网关协议)和EGP(外部网关协议)的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需传递AS以计算好的路由,所以我们对EGP的可控性、可靠性要求更高。
  • EGP的追求:可控性: AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做策略,以弥补重发布的不足。为了保证路由传递的可控性,更方便干涉选路,BGP协议舍弃了开销值,取而代之的是他为路由信息设计了很多路径属性。可以通过属性进行选路,是的选路过程更加灵活,可控性更高。
  • EGP的追求:可靠性:BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;又为了保证传输的可靠性,直接选择TCP协议作为传输层的协议来完成数据收发,使用的是TCP 179号端口。但使用TCP协议通讯也会造成一些问题,传输效率降低,只能单播通讯(TCP需要去建立会话),占用资源会加大 ,用TCP之后,便不能通过广播或者组播去自动发现邻居进行通信了。
  • 由于BGP依靠TCP协议传输数据,BGP协议可以实现非直连建邻,非直连建邻的前提条件是邻居双方网络可达, BGP的非直连建邻是建立在IGP的基础上。
  • BGP的邻居更准确的说是BGP的对等体,我们可以根据邻居关系的建立情况,将BGP的邻居关系分为两种:
  • 因为EBGP对等体之间一般采用直连建邻的方法,所以,我们将EBGP对等体之间的数据包中的TTL值设置为1;而IBGP对等体之间往往需要非直连建邻,所以,IBGP对等体之间的数据报中的TTL值我们设置为255;当然,如果EBGP对等体之间需要非直连建邻,则需要手工修改TTL值。
  • EGP的追求::AS-BY-AS:BGP将一个AS作为一个单位来看待,以一个AS为一跳,

BGP分类

BGP按照运行方式分为EBGP(External/Exterior BGP)和IBGP(Internal/Ir terior BGP)

  • EBGP:运行于不同As之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
  • IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟。



BGP五种报文
 

报文名称  作用发包
Open报文协商BGP对等体的各项参数,建立BGP对等链接 Open是TCP连接建立后发送的第一个报文
Update报文用于在对等体之间交换路由信息 建立连接后,有路由需要发送或路由变化时,发送Update通告对端可达或者撤销路由信息及路径属性
Notification报文用于中断BGP连接当BGP在运行中发现错误时,发送Notification报文通告BGP对端,随后与之相关的邻居关系将被关闭
Keepalive报文用于保持BGP定时发送Keepalive报文以保持BGP对等体关系的有效性。相应收到的正确Open报文
Router-refresh报文用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新能力的BGP设备会发送和相应此报文当路由策略发生变化时,触发请求对等体重新通告路由

BGP的工作过程

1、配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输;

会话建立后,邻居间正常收发一次open报文建立BGP的邻居关系,生成邻居表

BGP协议的open报文中将携带本地的RID—生成方式和OSPF一致;仅需要本地及本地所有邻居唯一即可;

邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系(周期保活TCP会话)

2、邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP;--- 装载本地发出及接收到的所有路由条目;

默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)

3、收敛完成,仅keeplive周期保活即可;

4、若出现错误信息,邻居间将使用Notification报文进行报错操作

5、结构突变

1)新增  --- 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含

2)断开  --- 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含

             只有到聚合条目中包含的所有明细路由均在本地失效,才告知邻居删除聚合条目

3)无法沟通 --- hold time为3min,连续3次未收到邻居的keeplive;断开邻居关系、TCP会话,删除从该邻居处学习到的所有路由;

BGP的路由黑洞

  • AS间通过EBGP对等体交换路由信息,然后通过单播将获取到的路由信息发送给IBGP对等体,使AS所有运行BGP的设备拥有了所有AS的路由信息,如下:R3从R1学到AS100的1.0.0.0/8的路由信息,然后通过单播传给R7,R7传给R2,所有AS内运行BGP的路由器都学到了1.0.0.0/8的路由信息

  • 矢量协议的特点是谁发给我这条路由,我到这条路由就找谁,如果R7想ping1.0.0.0/8,那R7就会将ping包发送给R3,由R3转发。在R7发送ping包时,它首先查看路由表查找R3的位置,假设R7通过R4找R3,那R7就会将ping包发给R4,当这个ping包来到R4上,R4看二层是找自己的,解封装看三层,发现这个ping包的DIP为1.0.0.0/8网段的,但R4上没有运行BGP,没有收到关于1.0.0.0/8网段的路由信息,所以R4就会把这个ping包丢弃,虽然R7上有1.0.0.0/8的网段路由信息,但无法与R1通信,这就是BGP的路由黑洞。
  • BGP的路由黑洞:由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,显示控制层面可达,但是,数据层面,流量经过未运行BGP协议的路由器时,无法通过,形成路由黑洞。

 

解决路由黑洞

  • AS内的设备全部运行BGP:既然路由黑洞是未运行BGP协议的路由器导致的,那就让AS内所有的设备都运行BGP获取路由信息。但这个方法是不现实的,可以承载越多路由信息的路由器其价格也就越昂贵,每一台运行BGP的路由器需要承载所有AS的路由信息,可以承载世界上几万几十万的路由信息的路由器价格也是上百万的,所以,是不可能让AS内的设备拥有全部路由信息的。

 

  • AS内运行BGP的设备将从BGP重发布到AS内运行的IGP协议里:通过重发布将BGP所有路由导入到IGP协议里,同样需要AS内所有设备可以承载所有AS的路由信息,同第一条一样不现实。
  • 物理、逻辑拓扑全连:直接让AS内运行BGP协议的所有设备互相连接,使IBGP间通信不需要经过未运行BGP协议的设备,但由一个AS地理范围可能很大,IBGP间距离较远,所以使用真实链路连接IBGP也不现实,所以我们可以用GRE/MGRE等vpn技术,通过虚拟链路连接IBGP对等体

BGP的防环机制—水平分割


EBGP水平分割

  • 下图中有三个AS,其中AS:1的一条路由信息传给了AS:2,AS:2将这条路由信息传给AS:3,如果AS:3又将这条路由信息传回给AS:1且AS:1将这条路由信息加表,就会导致路由环路。
  • BGP协议在路由条目中有一条专门记录所经过的AS编号的路径属性,在上图中AS:1发出的路由信息会携带编号1,AS:2将这条路由信息转发给R3时,添加编号2;AS:3将这条路由信息转发给AS:1时,也会添加编号3;最终AS:1收到这条路由信息的AS_PATH属性记录了1、2、3,R1发现该属性中有自己的编号则拒绝接受这条路由信息,避免环路产出。

 


IBGP水平分割

  • 下图在AS:64513内,R2、R3、R4两两建邻,如果R2发布一条路由信息由R4到R3,再到R2,并且R3转发给R2的路由信息改变了R2的路由表,则会形成环路。
  • 因为BGP的AS-BY-AS的特性,导致AS内部被认为是一个整体,在默认情况下,路由的属性是不会发生变化的,所以,无法通过属性来进行防环。
  • IBGP水平分割:当一个路由器从一个IBGP对等体出学习到某一条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。
  • IBGP水平分割可以有效的解决IBGP对等体之间路由回传造成的环路问题,但是,也会引发路由信息传递障碍问题。如下图中,如果R1学到其他AS的路由信息,它会将这些路由信息传递给R2,但由于IBGP水平分割,R2不能将这些路由信息传递给R3,R3就无法获取R1收集到的路由信息。
  • 想要避免IBGP水平分割带来的问题,可以让所有AS内部运行BGP的路由器均建立IBGP对等体关系, 这种建立全连的IBGP对等体的方案并不是最佳解决方案,因为,当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系,将造成大量的资源浪费,并且降低网络的可扩展性。
  • BGP存在两个技术专门用于解决IBGP水平分割带来的问题:1.路由反射器,2.联邦。

BGP基本配置 

建邻

  1. BGP邻居关系建立,与路由条目宣告是分开的配置的
  1. 直连的EBGP邻居关系建立

[r1]bgp 1   启动BGP协议,启动时需要键入AS号;没有多进程概念

[r1-bgp]router-id 1.1.1.1   建议配置RID;若不配置将自动生成—规则同OSPF相同

[r1-bgp]peer  12.1.1.2 as-number 2  对端IP地址,及对端所在的AS编号

  1. IBGP邻居关系建立,在一个AS内部,拓扑正常较为复杂;建议使用环回接口地址作为源、目标ip地址;存在备份链路,同时可以多条物理链路传递;

[r2]bgp 2

[r2-bgp]peer  3.3.3.3 as-number 2

           对端环回接口ip地址,及对端所在AS号

切记:一旦使用环回接口建立BGP的邻居关系;必须将源地址也修改为环回接口

[r2-bgp]peer  3.3.3.3 connect-interface LoopBack 0

3)EBGP邻居间存在多条物理链路时,也建议使用环回接口地址来建立

{1}IP可达,建议静态路由

{2}正常环回做为源、目ip地址建立邻居关系

{3}默认IBGP邻居间数据包的TTL值为255,EBGP邻居间TTL为1;故一旦使用环回建立ebgp邻居关系,必须修改TTL值,否则无法建立

[r4-bgp]peer  5.5.5.5 ebgp-max-hop 2

当建邻配置完成后,邻居间通过三次握手,建立TCP的会话

 

宣告

BGP的宣告;运行BGP协议的路由器可以宣告本地路由表中通过任何协议获取到的路由条目—静态、IGP、直连; 而本地通过BGP协议学习到的路由,只要在本地依然优秀,将继续将向本地的其他BGP邻居传输;

注意:宣告时,宣告的条目必须同本地路由表中的记录完全一致

[r1-bgp]network 1.1.1.0 24

一旦进行宣告配置,条目将加载于本地的BGP中;--装载本地发出及接收到的所有路由信息

[r1]display  bgp routing-table 查看BGP表

基于AS-BY-AS规则,条目在一个AS内部传递时将不修改条目属性;导致通过IBGP邻居学习到的BGP路由可能出现下一跳不可达;导致条目不优;

[r2-bgp]peer  3.3.3.3 next-hop-local  将BGP路由传递给本地的邻居3.3.3.3时修改下一跳地址为本地与3.3.3.3建立邻居关系的源ip地址

当路由条目传递给本地的EBGP邻居时,属性将自动发生变化,包括下一跳地址;

备注:在BGP协议中,若通过本地传递过来的路由条目,与本地路由表中已经存在且用于建立BGP邻居关系的路由相同时,该条目将不能优秀;

路由传递干涉策略

抑制列表

 先让设备将所有路由传递出去,再调用抑制策略

[r5]ip ip-prefix a permit 100.100.1.0 24

[r5]route-policy a permit node 10

[r5-route-policy]if-match ip-prefix a

[r5-route-policy]q

[r5]bgp 3

[r5-bgp]aggregate 100.100.0.0 22 suppress-policy a

被抑制调用时,表中允许的流量最终反而被抑制传输

Route-map  

在BGP中将route-map当分发列表用

[r5]ip ip-prefix b permit 100.100.1.0 24      

[r5]route-policy b deny node 10

[r5-route-policy]if-match ip-prefix b

[r5-route-policy]q

[r5]route-policy b permit node 20

[r5-route-policy]q

[r5]bgp 3

[r5-bgp]peer 4.4.4.4 route-policy b ?

  export  Specify export policy  控制层面的出项

  import  Specify import policy  控制层面的入向

[r5-bgp]peer 4.4.4.4 route-policy b export

分发列表

[r5]ip ip-prefix c deny 100.100.1.0 24

[r5]ip ip-prefix c permit 0.0.0.0 0 le 32

[r5]bgp 3

[r5-bgp]filter-policy ip-prefix c export(控制层面方向)

前缀列表

BGP协议中可以直接将前缀列表作为分发列表调用

[r5]ip ip-prefix d deny 100.100.1.0 24

[r5]ip ip-prefix d permit 0.0.0.0 0 le 32

[r5]bgp 3

[r5-bgp]peer  4.4.4.4 ip-prefix d export

BGP的属性

—基础属性

1、PrefVal(优先级) 

该属性为私有属性(华为)

[r3]bgp 2

[r3-bgp]peer  4.4.4.4 preferred-value 1   

本地所有通过4.4.4.4邻居学习到的BGP路由,优先级全部修改为1;

负载分担:访问不同目标时,让路由器选择不同的路径;起到所有路径被使用效果;

路由策略来实现—在BGP路由控制层面传递的过程中,抓取路由修改属性

[r3]ip ip-prefix p permit 1.1.1.0 24   抓住网络号

[r3]route-policy p permit node 10    定制策略

[r3-route-policy]if-match ip-prefix p    匹配流量

[r3-route-policy] apply preferred-value 1   修改优先级属性

[r3-route-policy]q

[r3]route-policy p permit node 20    由于路由策略存在分发列表的功能,必须考虑空表

[r3-route-policy]q

[r3]bgp 2

[r3-bgp]peer 4.4.4.4 route-policy p import   和邻居传递路由的控制层面方向调用;

优先级不传播的特性,只能在本地的入方向调用;

2、LocPrf 本地优先级  

 整个AS内部-IBGP邻居间     100(0-255)          大

用于干涉IBGP邻居关系下选路最常用属性

[r4-bgp]default local-preference 1   本地传递路由给本地所有IBGP邻居时,修改属性为1;

负载分担:

[r3]ip ip-prefix l permit 1.1.1.0 24

[r3]route-policy l permit node 10      

[r3-route-policy]apply local-preference 101

[r3-route-policy]if-match ip-prefix l

[r3-route-policy]q

[r3]route-policy l permit node 20

[r3-route-policy]q

[r3]bgp 2

[r3-bgp]peer  4.4.4.4 route-policy l import    可以在IBGP邻居关系间的出或入方向调用

3、优先本地下一跳      

本地在bgp协议中宣告本地路由表中的IGP路由时,在本地的BGP表中下一跳地址为0.0.0.0;

而通过BGP从其他邻居处学习到的路由,下一跳地址正常不为0.0.0.0;本地优选0.0.0.0的路由传递给本地的其他BGP邻居;

4、AS-PATH

– 记录条目经过的所有AS编号   

注意AS号的添加,一定是在EBGP邻居间进行的;   

优选经过的AS号数量最少的路径;同时该属性用于EBGP水平分割,接收到路由条目中若存在本地的AS号将拒绝接收;

可以人为的在EBGP邻居关系间,增加AS号的数量来干涉选路;修改A路径,优选B路径;

因为人为操作只能添加,不能减少;

可以干涉到EBGP关系/IBGP关系选路,但只能在EBGP关系设备间配置;

ip ip-prefix as index 10 permit 1.1.1.0 24

route-policy as permit node 10

 if-match ip-prefix as

 apply as-path 3 4 5 additive

#

route-policy as permit node 20

bgp 2

peer 12.1.1.1 route-policy as import

出向调用为  x 3 4 5   X代表实际经过过的AS

入向调用为  3 4 5 X   X代表实际经过过的AS

新增AS号处于列表的最左端;

注:以上配置方式,若网络后端真实存在AS3/4/5.那么由于EBGP水平分割,将导致这些路由无法被学习;

解决方案:重复添加实际已经经过的AS编号来增加数量

[r2-route-policy]apply  as-path  1 1 1 additive

5、起源属性

– 该条目的来源—通过什么方法进入到BGP协议的

BGP宣告本地路由表中路由                     i   

将本地路由表中IGP路由重发布到BGP协议      ?

将本地路由表中EGP路由重发布到BGP协议      e

规则 i优于e优于?

[r3]ip ip-prefix o permit 1.1.1.0 24

[r3]route-policy o permit node 10

[r3-route-policy]if-match  ip-prefix o

[r3-route-policy]apply origin egp 2    编写对端设备的AS号

[r3-route-policy]q

[r3]route-policy o permit node 20

[r3-route-policy]q

[r3]bgp 2

[r3-bgp]peer  2.2.2.2 route-policy o import

控制层面流量的入或出接口调用均可;

6、MED

-多出口鉴别属性    

BGP协议默认没有度量值,没有cost;所谓的MED就是人为的在路由条目中编写一个cost数值,干涉选路;

可用于干涉EBGP/IBGP关系下的选路;最常用于干涉EBGP关系选路

常常用于AS1干涉AS2对AS1的选路;

<r1>ping -r -a 1.1.1.1 3.3.3.3

[r1]ip ip-prefix med permit 1.1.1.0 24

[r1]route-policy med permit node 10

[r1-route-policy]if-match ip-prefix med

[r1-route-policy]apply cost 2

[r1-route-policy]q

[r1]route-policy med permit node 20

[r1-route-policy]q

[r1]bgp 1

[r1-bgp]peer  12.1.1.2 route-policy med export

BGP选路规则

比较前提,多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)

  • 优选Preference_Value值最高的路由(私有属性,仅本地有效)。
  • 不传递  权限最高属性    可以干涉EBGP/IBGP选路优选本地优先级(Local_Preference)最高的路由。
  • IBGP邻居关系间传递    只能,最常干涉IBGP关系的选路优选手动聚合>自动聚合>network>import>从对等体学到的。
    • 优选AS_Path短的路由。
  • EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改;起源类型IGP>EGP>Incomplete。
  • 起源属性 i优于e优于?; 可在控制层面任意接口修改;对于来自同一AS的路由,优选MED值小的。
  • 默认为0,宣告或重发布(关闭自动汇总)路由时携带本地到达目标的cost
  • 最常用于干涉EBGP选路的属性优选从EBGP学来的路由(EBGP>IBGP)。
    • 优选AS内部IGP的Metric最小的路由。
    • 优选Cluster_List最短的路由。
    • 优选Orginator_ID最小的路由。
    • 优选Router_ID最小的路由器发布的路由
  • 优选具有较小IP地址的邻居学来的路由。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值