BGP基础

简述
在EGP协议中,引入了AS(Autonomous System,自治系统)的概念。AS是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合。AS的内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是相互信任的,因此IGP的路由计算和信息泛洪完全处于开放状态,人工干预很少。不同AS之间的连接需求推动了外部网关协议的发展,BGP作为一种外部网关协议,用于在AS之间进行路由控制和优选。

BGP的前身EGP设计得非常简单,只能在AS之间简单地传递路由信息,不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题,因而EBP最终被BGP取代。

相比于EGP,BGP更具有路由协议的特征,如下:邻居的发现与邻居关系的建立;路由的获取,优选和通告;提供路由环路避免机制,并能够高效传递路由,维护大量的路由信息;在不完全信任的AS之间提供丰富的路由控制能力。

使用BGP作为传递路由的协议,则用户的路由域被作为一个整体和其他路由域进行路由交换,这个路由域即AS。AS的概念是若干台路由器以及这些路由器组成的网络集合,这些路由器均属于同一个管理机构,并执行统一的路由策略。运行BGP协议需要一个统一的自治系统号来标识路由域,即AS编号。每个自治系统都有唯一的一个编号,这个编号由IANA分配。

协议特点
因为是在AS之间传递路由,为保证数据的可靠性, BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。AS之间的路由器是不完全相互信任的,为实现路由按需求进行控制和优选,BGP设计了诸多属性。BGP不产生路由,是路由的搬运工

邻居类型
在这里插入图片描述
EBGP
EBGP只用于不同AS之间传递路由。如图,AS 100内的RTB与BTC分别从AS 200与AS 300学习到不同的路由,怎么实现AS 200与AS 300之间路由在AS 100内的交换?
在AS 100内实现将学到的AS 200和AS 300路由进行交换,可以在拓扑中的RTB与RTC路由器上将BGP的路由引入IGP协议(图中为OSPF协议),再将IGP协议的路由在RTB与RTC路由器上引入回BGP协议,实现AS 200与AS 300路由的交换。
上述方法存在以下几个缺点:
公网上BGP承载的路由数目非常大,引入IGP协议后,IGP协议无法承载大量的BGP路由;
BGP路由引入IGP协议时,需要做严格的控制,配置复杂,不易维护;
BGP携带的属性在引入IGP协议时,由于IGP协议不能识别,可能会丢失。
因此我们需要设计BGP在AS内部完成路由的传递。

IBGP
BGP使用TCP作为其承载协议,所以可以跨设备建立邻居关系。RTB与RTC之间建立IBGP邻居关系,并各自将从其他AS学到的路由传递给对端,实现BGP路由在AS内的传递。

邻居关系建立
BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。

Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。
Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。一条Update报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update报文里的路由属性适用于该Update报文中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。一条Update报文可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚地定义了BGP路由器之间先前通告过的路由。一条Update报文可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。
Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。
Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。

BGP路由器报文交互过程:Idle状态是BGP初始状态。在Idle状态下,BGP路由器拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态。

在Connect状态下,BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。
如果TCP连接失败,那么BGP路由器转至Active状态。
如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。
在Active状态下,BGP路由器总是在试图建立TCP连接。
如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
如果TCP连接失败,那么BGP路由器停留在Active状态。
如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器转至Connect状态。
在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。
如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。
在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。
在这里插入图片描述
BGP路由生成
生成BGP路由的方式有两种:第一种是使用配置命令network,第二种是使用配置命令import。
在这里插入图片描述
display bgp routing-table 查看是否学到BGP引入的路由条目

在这里插入图片描述
BGP的update报文
BGP通过Network和Import两种方式生成BGP路由,BGP路由封装在Update报文中通告给邻居。BGP在邻居关系建立后才开始通告路由信息。Update消息主要用来公布可用路由和撤销路由,Update中包含以下信息:
网络层可达信息(NLRI):用来公布IP前缀和前缀长度。
路径属性:为BGP提供环路检测,控制路由优选。
撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度。

在通告BGP路由时,由于各种因素的影响,为了避免路由通告过程中出现问题,BGP路由通告需要遵守一定的规则,下面进行详细介绍。

通告原则
1、存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。

BGP路由表中的状态含义:
Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network:显示BGP路由表中的网络地址
NextHop:报文发送的下一跳地址
MED:路由度量值
LocPrf:本地优先级
PrefVal:协议首选值
Path/Ogn:显示AS路径号及Origin属性
Community:团体属性信息
2、BGP路由器通过EBGP获得的最优路由会发布给所有的BGP邻居(包括EBGP邻居和IBGP邻居)。

3、BGP路由器通过IBGP获得的最优路由不会发布给其他的IBGP邻居。

4、BGP与IGP同步。

BGP的路由黑洞
BGP路由黑洞产生的原因是针对传统IP路由查找,它是逐跳查找,通俗一点就是当数据包到达路由设备的时候,每一台设备都要查找路由表,并且在路由设备有路由的前提下才能转发报文 。对BGP来说由于存在iBGP水平分割规则-只把路由传递一跳(如果AS200内的三台设备都运行BGP,现在的邻居关系是R2和R3有BGP论据,R3和R4有BGP邻居,如果有路由从R2传递给R3,但是R3不会再传递路由给R4,这是一种防环机制)。所以在BGP的设计上有些设备就不会运行BGP。BGP是一种TCP的连接或者说是一种host-to-host的连接(可以跨越设备进行连接),所以路由传递是没有问题的,但是数据包的路由却是有问题的。

解决方案
方案1 : IBGP全互联
在AS内部所有路由器全部启用BGP ,且两两之间都建立ibgp邻居关系。

方案2 :路由引入
在R2和R4_上,将bgp引入ospf。
BGP自动过滤掉ibgp邻居的路由下只把ebgp邻居的路由引入到ospf中。

方案3:MPLS

实验
在这里插入图片描述
要求
本实验模拟ISP网络拓扑,运行BGP。
如图所示配置各设备IP地址,完成以下需求:
1.R1属于AS100,R2/3/4属于AS200,R5属于AS300

2.AS200内运行OSPF,进程号为1。
2.1 手动指定Loopback0的IP为RID。
2.2 全部属于区域0
2.3 network命令全部使用通配符0.0.0.0
2.4 R2/4上不宣告与其他AS互联的接口。

3.建立IBGP邻居
3.1 R2与R4使用环回口Loopback0建立IBGP邻居关系
3.2 为保证BGP路由可达,修改下一跳为本地。

4.建立EBGP邻居
4.1 R1与R2使用直连物理接口建立EBGP邻居关系
4.2 R4/5新建环回口:
R4使用Loopback1:10.4.4.4/32
R5使用Loopback1:10.5.5.5/32
4.3 R4/5分别配置32位静态路由,使得双方的环回口Loopback1可达。
4.4 R4与R5使用环回口建立EBGP邻居关系,并修改EBGP跳数为2.
5.BGP发布路由
5.1 在R1上使用network命令发布1.1.1.1/32
5.2 在R5上使用network命令发布5.5.5.5/32
5.3 确认R1/2/4/5都有1.1.1.1/32和5.5.5.5/32的路由

6.路由黑洞
由于R3没有运行BGP,导致无法收到R1和R5路由。
6.1 在R2将BGP引入OSPF,确认R3获得1.1.1.1/32的路由。
6.2 在R4将BGP引入OSPF,确认R3获得5.5.5.5/32的路由。
6.3 确认1.1.1.1和5.5.5.5可以互通。

具体过程
本实验模拟 ISP 网络拓扑,运行 BGP。
如图所示配置各设备 IP 地址,完成以下需求:
1.R1 属于 AS100,R2/3/4 属于 AS200,R5 属于 AS300
2.AS200 内运行 OSPF,进程号为 1。
2.1 手动指定 Loopback0 的 IP 为 RID。
2.2 全部属于区域 0
2.3 network 命令全部使用通配符 0.0.0.0
2.4 R2/4 上不宣告与其他 AS 互联的接口。
R2:
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 23.1.1.2 0.0.0.0

R3:
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 23.1.1.3 0.0.0.0
network 34.1.1.3 0.0.0.0

R4:
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 34.1.1.4 0.0.0.0

3.建立 IBGP 邻居
3.1 R2 与 R4 使用环回口 Loopback0 建立 IBGP 邻居关系
3.2 为保证 BGP 路由可达,修改下一跳为本地。
R2:
bgp 200
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 4.4.4.4 next-hop-local

R4:
bgp 200
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 2.2.2.2 next-hop-local

4.建立 EBGP 邻居
4.1 R1 与 R2 使用直连物理接口建立 EBGP 邻居关系
4.2 R4/5 新建环回口:
R4 使用 Loopback1:10.4.4.4/32
R5 使用 Loopback1:10.5.5.5/32
4.3 R4/5 分别配置 32 位静态路由,使得双方的环回口 Loopback1 可达。
4.4 R4 与 R5 使用环回口建立 EBGP 邻居关系,并修改 EBGP 跳数为 2.
R1:
bgp 100
peer 12.1.1.2 as-number 200

R2:
bgp 200
peer 12.1.1.1 as-number 100

R4:
Int lo1
Ip add 10.4.4.4 32
ip route-static 10.5.5.5 32 45.1.1.5
bgp 200
peer 10.5.5.5 as-number 300
peer 10.5.5.5 ebgp-max-hop 2
peer 10.5.5.5 connect-interface LoopBack1

R5:
Int lo1
Ip add 10.5.5.5 32
ip route-static 10.4.4.4 32 45.1.1.4
bgp 300
peer 10.4.4.4 as-number 200
peer 10.4.4.4 ebgp-max-hop 2
peer 10.4.4.4 connect-interface LoopBack1

5.BGP 发布路由
5.1 在 R1 上使用 network 命令发布 1.1.1.1/32
bgp 100
network 1.1.1.1 255.255.255.255
5.2 在 R5 上使用 network 命令发布 5.5.5.5/32
bgp 300
network 5.5.5.5 255.255.255.255
5.3 确认 R1/2/4/5 都有 1.1.1.1/32 和 5.5.5.5/32 的路由

6.路由黑洞
由于 R3 没有运行 BGP,导致无法收到 R1 和 R5 路由。
6.1 在 R2 将 BGP 引入 OSPF,确认 R3 获得 1.1.1.1/32 的路由。
ospf 1 router-id 2.2.2.2
import-route bgp
6.2 在 R4 将 BGP 引入 OSPF,确认 R3 获得 5.5.5.5/32 的路由。
ospf 1 router-id 4.4.4.4
import-route bgp
6.3 确认 1.1.1.1 和 5.5.5.5 可以互通。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值