目录

BGP简介

BGP概述

BGP工作原理-报文类型

BGP工作原理-状态机

BGP工作原理-对等体之间的交互原则

BGP的简单配置


BGP简介

BGP(border gateway protocol)动态路由协议

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

1、EBGP:运行于不同 AS 之间的 BGP 称为 EBGP。为了防止 AS 间产生环路,当 BGP 设备接收 EBGP 对等体发送的路由时,会将带有本地 AS 号的路由丢弃。

2、IBGP运行于同一 AS 内部的 BGP 称为 IBGP。为了防止 AS 内产生环路, BGP 设备不将从IBGP 对等体学到的路由通告给其他 IBGP 对等体,并与所有 IBGP 对等体建立全连接。为了解决 IBGP 对等体的连接数量太多的问题, BGP 设计了路由反射器和 BGP 联盟。

BGP概述

1、BGP可以在AS之间选择最佳路由和控制路由的传播

BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门的机制来确保连接的可控性

BGP为什么用TCP协议?

BGP进行域间路由选择,对协议的稳定性要求非常高,因此用TCP协议的高可靠性来保证BGP协议的稳定性

BGP的对等体之间必须在逻辑上联通,并进行TCP连接,目的端口号为179,本地端口号任意

2、路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在internet上传播大量的路由信息

3、BGP从设计上避免了环路的发生

AS之间:BGP通过携带AS路径信息来标记途径的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路

AS内部:BGP在AS内学到的路由不在通告给AS内的邻居,避免了AS内产生环路

4、支持CIDR无类域间路由

5、BGP提供了丰富的路由策略,提供了防止路由震荡的机制,BGP也易于扩展

BGP工作原理-报文类型

BGP 对等体间通过以下 5 种报文进行交互,其中 Keepalive 报文为周期性发送,其余报文为触发式发送:

Open 报文:用于建立 BGP 对等体连接。

Update 报文:用于在对等体之间交换路由信息。

Notification 报文:用于中断 BGP 连接。

Keepalive 报文:用于保持 BGP 连接。

Route-refresh 报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的 BGP 设备会发送和响应此报文。

BGP工作原理-状态机

BGP 全互联 RR bgp lp_BGP 全互联 RR

1、Idle 状态是 BGP 初始状态。在 Idle 状态下, BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。

2、在 Connect 状态下, BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接。

如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;

如果 TCP 连接失败,那么 BGP 转至 Active 状态;

如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在 Connect 状态。

3、在 Active 状态下, BGP 总是在试图建立 TCP 连接。

如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;

如果 TCP 连接失败,那么 BGP 停留在 Active 状态;

如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态。

4、在 OpenSent 状态下, BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查。

如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态;

如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态。

5、在 OpenConfirm 状态下, BGP 等待 Keepalive 或 Notification 报文。如果收到 Keepalive 报文,则转至 Established 状态,如果收到 Notification 报文,则转至 Idle 状态。

6、在 Established 状态下, BGP 可以和对等体交换 Update、 Keepalive、 Route-refresh 报文和Notification 报文。

如果收到正确的 Update 或 Keepalive 报文,那么 BGP 就认为对端处于正常运行状态,将保持 BGP 连接。

如果收到错误的 Update 或 Keepalive 报文,那么 BGP 发送 Notification 报文通知对端,并转至 Idle 状态。

Route-refresh 报文不会改变 BGP 状态。

如果收到 Notification 报文,那么 BGP 转至 Idle 状态。

如果收到 TCP 拆链通知,那么 BGP 断开连接,转至 Idle 状态。

BGP工作原理-对等体之间的交互原则

BGP对等体交互路由原则:

1、从IBGP对等体获得的路由,只发布给EBGP对等体;(防环)

2、从EBGP对等体获得的路由,发布给与所有的EBGP和IBGP对等体;

3、只将BGP最优路由发布给对等体;

4、只发送更新的BGP路由;

BGP的简单配置

最终配置信息图:

BGP 全互联 RR bgp lp_TCP_02

首先要先AR1和AR2之间要建立邻居关系

BGP 全互联 RR bgp lp_BGP 全互联 RR_03

具体配置如下:

BGP 全互联 RR bgp lp_TCP_04

ru

BGP 协议本身不发现路由,因此需要将其他路由引入到 BGP 路由表,实现 AS 间的路由互通。当一个 AS 需要将路由发布给其他 AS 时, AS 边缘路由器会在 BGP 路由表中引入 IGP 的路由。为了更好的规划网络, BGP 在引入 IGP 的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置 MED 值指导 EBGP 对等体判断流量进入 AS 时选路。

路由引入具体配置如下:

BGP 全互联 RR bgp lp_网络_05

通过两种方式引入的优先级不一样,会优先采用network引入的地址。

BGP 全互联 RR bgp lp_网络_06

我们在引入一个AR4,让AR4和AR2建立邻居关系

BGP 全互联 RR bgp lp_工作原理_07

具体操作如下:

BGP 全互联 RR bgp lp_BGP 全互联 RR_08

建立好关系之后,查看BGP下的路由表(bgp 100;  dis ip routing-table)发现并没有学到AR1下的10.0.12.1/24 这条路由,因为从IBGP对等体获得的路由,只发布给EBGP对等体,为了防环。

BGP 全互联 RR bgp lp_BGP 全互联 RR_09

此时一个AS之间的BGP邻居关系已经建立好了,我们再引入一个不同AS中的AR3

BGP 全互联 RR bgp lp_BGP 全互联 RR_10

AR2和AR3之间建立邻居具体配置如下:

BGP 全互联 RR bgp lp_工作原理_11

但此时AR2和AR3之间无法建立邻居关系,因为AR1和AR2之间是出于IBGP,TTL=255,但AR2和AR3处于EBGP,TTL=1,所以需要手动修改TTL值;

BGP 全互联 RR bgp lp_网络_12

问题1:如果在AR3上增加一个lookback 1 100.3.1.1/32模拟用户,观察其他的对等体是否会学习到该条路由信息?

此时AR2会通过EBGP学习到该路由信息,并且AR1和AR4也会学习到,但是AR1和AR4学习到的是无效的,因为他们无法找到怎么去该路由的信息,它显示的下一跳是3.3.3.3,但是AR1和AR4不怎么3.3.3.3怎么去。

解决方法:在AR2通告AR1和AR4的时候把下一跳一起改了

AR2:peer 1.1.1.1 next-hop-local (local表示的是AR2和AR1建立BGP时的源地址)dis bgp routing-table

问题2:如果在AR1上增加一个lookback模拟用户,如何让AR4学习到该路由信息?

解决方法:把中间的AR2设置成RR(路由反射器)角色,AR1和AR4设置成client;

BGP 全互联 RR bgp lp_BGP 全互联 RR_13