CCNP7:BGP的 【特点、数据包、工作过程、路由黑洞、防环机制、配置、MA网络中下一跳问题】

CCNP7:BGP的【特点、数据包、工作过程、路由黑洞、防环机制、配置、MA网络中下一跳问题】

一、BGP、AS概述:

BGP网关路由协议是无类别路径矢量EGP协议。

在谈BGP之前我们谈一下AS自治系统,一个自治系统就是一个范围。之所以会出现这么一个东西,是因为我们不能将全球的网络运行在一个很大的网络中。

因此我们需要将这个很大网络划分为若干个小的区域,这个小区域就是AS,然后AS内部跑IGP协议,当需要访问外部的其它区域时,这时EGP登场了,它负责每个AS之间的通信。

因此当AS号少的时候就会导致网络面积大、网络延时、卡顿。
在这里插入图片描述

要区别AS,那么AS一定要有编号。编号范围:0-65535,其中1-64511为公有,64512-65535为私有

这个网站每天都会更新,这个网站可以查出AS号、IPv4、IPv6部署、规划情况:CIDR Report
最底下有一个搜索引擎,我们可以查出中国所拥有的AS号。
在这里插入图片描述
4134-中国第一个AS号,中国电信的第一个AS号。
9929-中国网通的第一个AS号。

EGP协议的三大特性
1、可控性:EGP协议共享其它协议产生的路由,正常不关注选路。
2、可靠性:EGP使用增量更新,依靠TCP的三次握手,使用单播非直连建邻,EGP承载于IGP之上
3、AS-BY-AS,以一个AS为一跳,一个条目在AS内部属性不变(保证BGP无环的最大意义)

我们可以理解BGP协议是一个公平的重发布协议,它不生产路由,它只是路由的搬运工

这是有关IGP、EGP的协议:

IGP OSPF、EIGRP、RIP、ISIS、IGRP
EGP EGP、BGP

我们说EGP,EGP是最早的AS间的协议,拥有两个版本,版本1、版本2。版本2之后就有了BGP,经过多年的使用,BGP已经到V4版本了。因此,我这里讲的也是BGPv4版。

二、BGP特点:

蓝色字体比较重要:

BGP特点:
1、无类别路径矢量,其实就是距离矢量(共享路由)的升级版,使用AS号作为跳数
2、使用单播更新来发送所有信息,基于TCP179端口工作
3、使用增量更新——仅触发无周期
4、具有丰富的属性来取代IGP中度量进行选路,使用多个参数控制协议
5、可控性——可以在进项和出项对流量实施强大的策略
6、默认BGP不被用于负载均衡,通过各种选路规则仅仅产生一条最佳路径
7、BGP支持认证和聚合(汇总)

三、BGP的数据包:

首先我们要知道的就是BGP所有的数据包是基于TCP传输。

包名 作用 详细
Open 建邻 存在hold time 和 RID,用于邻居关系建立,默认仅收发一次即可
Keeplive 保活 保活周期 1分钟,保活的是TCP会话,hold time 3分钟
Update 更新 更新包:包含路由条目:目标网络号+属性
Notification 报错 报错包会在错误信息出现时发送

四、BGP的工作过程:

BGP的工作过程:
1、首先要IP可达,也就是建邻设备间可以通讯
2、通过三次握手建立TCP的会话
3、收发BGP的Open报文,建立邻居关系生成邻居表
4、使用Update报文共享本地的路由信息给邻居,生成BGP表表中包含所有本地发出及接收到的路由信息
5、默认将BGP表中最优路径加载于路由表中,之后收敛完成,仅Keeplive周期保活即可。
6、若存在错误的配置或策略时,BP协议将使用Notification包来进行报错。
结构突变 调整
新增 最先学习到新增网段的BGP设备,使用Update包共享条目即可。
断开 最先知道断开网段的BGP设备,使用Update包共享信息即可。
无法通讯
(设备断电)
hold time 到时时,断开邻居关系和TCP会话,然后删除所有从该邻居学习到的信息。

用个图来说明一下:
在这里插入图片描述
有关名词注解:
对等体:peers,在BGP中因为可以非直连建邻,故邻居也被称为对等体。
EBGP:不同AS间的BGP邻居关系,管理距离为20

在这里插入图片描述
IBGP:同一AS内部建立的BGP邻居关系,管理距离为200
在这里插入图片描述

五、BGP的路由黑洞:

1、路由黑洞:

从这个图中,我们可以看到总共有3个AS自治系统,中间的自治系统中:B、E两台设备运行了BGP,而D、C并没有运行BGP。B和E之间通过非直连建邻,它们之间的关系是IBGP。
在这里插入图片描述
接下来说说路由黑洞是怎样产生的:
在这里插入图片描述
上图在说明一个问题:当A新出现一个环回(X网段)的时候,该环回被B学习到,B通过TCP单播发给E,进而被E学习到,之后F就有了去X的路由。

当F要访问X网段的时候,比如说F要ping X网段。F的下一跳是E,在BGP中E的下一跳是B,但是路由器查表的规则是递归查询,实际流量的下一跳是C、D,接着E把流量交给C、D。

但是问题来了,C、D根本没有学习到去往X的路由,流量就会被C、D所扔掉。此时路由黑洞出现,而C、D的存在就是造成路由黑洞的主要原因。

总结一下BGP的路由黑洞的出现原因:
因为BGP协议可以非直连建邻,这样在一个AS内部就运行出现不运行BGP协议的路由,导致BGP可以邻居间正常传递路由,实现控制层面可达,但数据层面在未运行BGP协议的设备上不可达。

2、解决方案:

序号 解决方案 评价
1 最佳方案:MPLS多协议标签交换
2 物理链路全连:所有BGP设备间直连,不存在非直连建邻(直接相连俩BGP设备) 如果可以,就可以
3 邻居关系全连:所有设备运行BGP 不现实
4 将BGP路由条目重发布到IGP(纯实验环境可以考虑) 更不现实
5 tunnel:在公网中,所有走BGP的时候加上一个包头,但这就会导致整个网络很差劲。 原理上可讲通,但实际不可行

六、BGP防环机制(水平分割):

1、EBGP水平分割:

EBGP水平分割,防止EBGP邻居间的环路。它在BGP协议的属性中存在一个AS-path属性,记录经过的每一个AS号。接收到的路由条目中,若存在本地的AS号将拒绝接收。
在这里插入图片描述

2、IBGP水平分割:

基于AS-BY-AS规则,一条路由在一个AS内部传递时,默认属性无变化。
IBGP水平分割规则:从一台IBGP邻居处学习到的路由不得传递给另一个IBGP邻居。
在这里插入图片描述
或者是下面这种情况:
在这里插入图片描述
注:该规则迫使全网所有BGP设备间均需要进行邻居关系建立配置,配置量几何增长,可以使用联邦、和路由反射器来打破。

七、BGP的配置:

下面的配置我会以这个图为依据,所有设备都有环回,均运行OSPF,且同在一个区域0。R5~R6之间有两根网线。
在这里插入图片描述

1、BGP建立邻居关系:

(1)直连的EBGP邻居关系建立:

因为单播建邻,因此建立邻居关系和宣告路由是分开进行的。

建邻是双向的,两边都要配置
//启动协议时携带真实的AS号,无多进程概念,一个设备只能配置一个AS
R1(config)#router bgp 1
//配置RID,如果不配置,则使用环回接口,最后为物理接口作为RID
R1(config-router)#bgp router-id 1.1.1.1
//直连的EBGP邻居关系建立:邻居接口的IP,及所在AS
R1(config-router)#neighbor 12.1.1.2 remote-as 2

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

R1#show tcp brief
TCB			Local Address		Foreign Address		(state)
6427FFF0	12.1.1.1.179		12.1.1.2.36113		ESTAB

两端均为向另一端发起TCP会话建立请求,但将随机断开一条,上面的信息说明R2是找R1建的邻。

TCP会话建立后,BGP协议将发出open报文,建立BGP的邻居关系生成邻居表

//查看BGP邻居表
R1#show ip bgp neighbors

在这里插入图片描述
但是由于此表过大,因此我们需要查看简表:

//查看bgp汇总信息
R1#show ip bgp summary

在这里插入图片描述
从图中可以看出它包含本地bgp RID,本地AS号,BGP的表版本为1,bgp 版本为4。
最右侧的State/PfxRcd表示状态:
此处的阿拉伯数字标识从该邻居处学习到的路由条目数量,此处(数字、Idle、active)若为数字也同时标识已经建立了邻居关系。

(2)IBGP邻居关系建立:

在实际网络中,IBGP邻居间一般存在多条路径,使用环回接口地址作为源、目标地址来建立邻居关系,可以同时基于多条路径传输,且邻居关系更稳定。

建邻是双向的,两边都需要配置:
R2(config)#router bgp 2 
R2(config-router)#neighbor 3.3.3.3 remote-as 2
//一旦将目标地址修改为对端环回接口,本地也需要将源地址修改为本地的环回接口。
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0

比如说下图,如果以两台边界设备的接口来建立IBGP,一旦物理链路一断,它们的邻居关系就会断开。
在这里插入图片描述
而使用环回,就是稳定。虽然bgp的下一跳只有一个,但是流量递归以后实际走的是两条链路,还提升了链路利用率。即使断一条也没有关系,邻居关系还存在。

(3)EBGP邻居间多条链路建邻:

为了保证EBGP邻居间关系的稳定,EBGP邻居间也会存在多条链路,为了同时使用这些链路,建议使用环回接口作为源、目IP地址建立邻居关系。
在这里插入图片描述
建邻过程分2步:
①IP可达:
但是这里存在一个问题,使用两台设备的环回建邻,但是大家都不在相同的AS中,一般为了使IP可达,常使用静态路由。

两边都要配置静态:
R5(config)#ip route 6.6.6.0 255.255.255.0 56.1.1.2
R5(config)#ip route 6.6.6.0 255.255.255.0 65.1.1.2

②使用环回建立BGP邻居关系:

两边都需要配置:
R5(config-router)#neighbor 6.6.6.6 remote-as 3
R5(config-router)#neighbor 6.6.6.6 update-source loopback 0

③修改TTL值:
默认IBGP邻居间数据包TTL=255,EBGP邻居间TTL=1,故一旦使用环回地址建立EBGP邻居关系,那么必须修改TTL值。

//后面的数字2即表示TTL值,如果不设置则默认为255
R5(config-router)#neighbor 5.5.5.5 ebgp-multihop 2

2、BGP的路由宣告:

R1(config)#router bgp 1 
R1(config-router)#network 1.1.1.0 mask 255.255.255.0

切记:BGP协议只能逐条宣告本地路由表中的内容(不关注路由条目的产生方式),宣告时必须和表中的记录完全一致

一旦进行了路由条目的宣告,本地就生成BGP表。BGP表中包含本地收发到的所有路由条目,基于Update发送

//查看BGP表
R1#show ip bgp

在这里插入图片描述
关于状态的想详细解释:

* 的位置显示 注解:
* 条目可用,可以加到路由表
r 条目不可用,不装载:标识本地路由表已经通过更好的方式获取路由。
s 条目不可用,被抑制:人为的策略限制条目的传递

在这里插入图片描述

其他位置 注解:
> 标识条目优秀:可以加载到路由表,可以传递给邻居。
i 该条目是从IBGP处学习到的路由。

注意:条目必须 即优且可用 才可以加表,仅优 便可传递。前提为不能被s抑制,就是没有做策略。

成为优秀的条件:
①同步问题:
本地IGP已经学习到了该BGP路由才能优,该规则的目的在于避免路由黑洞,但条件苛刻故在IOS版本12.2(8)T以上默认关闭

R3(config)#router bgp 2 
R3(config-router)#no synchronization

②下一跳可达问题:
因为AS-BY-AS,条目在传递给IBGP邻居时,属性默认不变,故从IBGP邻居学习到的路由,下一跳不变。当路由传递给EBGP邻居时,下一跳自动修改为本地。
在这里插入图片描述
当存在这个问题时,R3看到的路由的下一跳是12.1.1.1,但问题是R3根本没有去往该网段的路由。
在这里插入图片描述
此时我们就需要让R2把路由传递给邻居R3时,修改属性中的下一跳地址为本地R2。

R2(config)#router bgp 2  
R2(config-router)#neighbor 3.3.3.3 next-hop-self

这样R3就可以加表了。
注意:这样修改下一跳为本地,只是单方向的(R2给R3),如果是从R3给R2则需要在R3上配置到R2修改下一跳为本地。
在这里插入图片描述
它的路由表如下:注意IBGP的度量为200。
在这里插入图片描述
由于存在IBGP水平分割,因此虽然R3加了表,有了路由,但是它不会给R4。因此我们需要R2和R4之间建立一个IBGP

R2、R4之间建立了IBGP邻居后,同样的需要在R2上进行配置,告诉R4修改下一跳为本地。
在这里插入图片描述
同理,除之前所建邻居外,还有这张图中的其他邻居也要建邻,然后也要修改下一跳为本地。而R5和R6是不受水平分割限制的,R6肯定会优,因为R5会自动修改下一跳为自己,它们之间的关系是EBGP。

八、BGP在MA网络中的下一跳问题:

这张图中,黑色线条表明了物理链路,R3、R4之间使用串线,而R1、R2、R3之间使用以太网线,它们处在MA网段。绿色线条表明IBGP关系,而蓝色线条表明了EBGP关系。
在这里插入图片描述
R4把它的环回传给R3、R3再传给R2、R2再传给R1,根据水平分割来讲,R1去往R4的环回下一跳是R2,因为是R2给的。

但是我们将所有配置配置好后,然后发现R1的下一跳不是R2,而是R3,这就是MA网段中下一跳问题。
在MA网络中,ICMP重定向将帮助BGP学习到最佳的下一跳。

九、其他

1、软、硬重启:

配置 注解
R1#debug ip bgp updates 动态查看BGP更新包
R1#clear ip bgp * 硬重启(慎用),重启本地所有邻居间的TCP会话,重建TCP会话会很慢。
R1#clear ip bgp * soft [in/out] 软重启,仅和本地所有邻居间重新收发路由,不断开任何关系,做策略很有用。

后面加in表示收路由,而out表示发路由
R1#clear ip bgp 3.3.3.3 仅和3.3.3.3邻居进行硬重启
R1#clear ip bgp 3.3.3.3 soft 仅和3.3.3.3邻居进行软重启

2、查看本地发送、接收的路由信息:

之前我们也看到,BGP的表格过大,因此需要筛选,可以使用以下配置进行筛选。

//仅查看本地发送给邻居123.1.1.2的路由信息
R1#show ip bgp neighbors 123.1.1.2 advertised-routes  
//要想查看本地从xxx.x.x.x的接收的路由,也可以。但是我们知道路由会很多的,因此我们需要配置专门的储存空间来装载,建议查看完成后删除该空间
R1(config-router)#neighbor 123.1.1.2 soft-reconfiguration inbound
//查看本地从xxx.x.x.x的接收的路由
R1#show ip bgp neighbors 123.1.1.2 received-routes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章