小何要努力

小何要努力

BGP--->基础理论、邻居建立、邻居状态

848
2023-12-20

BGP--->基础理论、邻居建立、报文类型、邻居状态

为什么需要BGP?

在EBGP协议中,引入了AS(自治系统的概念)。(AS是指由同一个技术管理机构管理,使用同一的选路策略的一些路由器的集合。)

AS内部使用IGP来计算和发现路由,不同的AS之间的连接需求推动了BGP的出现。BGP作为外部网关协议,用于在不同AS之间进行路由控制和优选。

BGP基础理论

BGP是一种基于TCP协议的应用层路由协议,所以邻居关系不会自动建立,需要手动配置。

BGP使用的TCP 179端口进行工作。

BGP是一种单播通信,DIP是要事先知道的。

BGP的建立邻居的地址,要保证其互通性。

BGP邻居建立

BGP邻居类型

1、EBGP邻居:运行在不同AS之间的BGP邻居建立的邻居关系

EBGP邻居建立:

①直连物理接口配置EBGP邻居

bgp 1

peer 10.1.12.2 as-number 2 使用物理接口与as 2建立邻居

邻居的地址是本端向该邻居发送BGP报文的目的地址,同时这个地址也是对端向本端发送BGP报文的源地址

注意:

源地址默认情况下是去往邻居地址路由的出接口IP

默认情况,EBGP邻居之间发送的BGP报文的TTL=1,即强制要求EBGP邻居直连

特殊情况:

当用多条物理链路建立连接时,R1上引入的路由信息发送给R2时,会从上下两条链路分别发送,R1收到的路由信息翻倍,当路由条目十分巨大时会导致R2增加了性能负担。(此时应该选择用loopback接口建立邻居,保障bgp邻居可靠性的同时也不会产生过多路由信息)

②用loopback接口配置EBGP邻居

bgp 1

peer 2.2.2.2 as-number 2 使用环回口与as 2建立邻居

peer 2.2.2.2 connect-interface LoopBack0 指定向邻居发送BGP报文的源地址为loopback0的源地址。(默认的源地址时出接口IP)

peer 2.2.2.2 ebgp-max-hop 10 当EBGP邻居之间存在多跳时,指定EBGP邻居发送BGP报文的TTL值。 (仅在EBGP邻居使用,默认TTL=1;IBGP邻居默认TTL=255)

2、IBGP邻居:运行在相同AS之间的BGP邻居建立的邻居关系

IBGP邻居建立:

bgp 1

 peer 2.2.2.2 as-number 1 使用环回口与as 1建立邻居

 peer 2.2.2.2 connect-interface LoopBack0 指定向邻居发送BGP报文的源地址为loopback0的源地址。(默认的源地址时出接口IP)

IBGP邻居不用考虑TTL值,因为IGP默认TTL=255

BGP邻居的建立过程:

报文类型

OPEN报文

邻居建立和能力参数的协商(至少有一个地址族能力要一致。)

1、邻居参数协商

①自身AS号:要和邻居指定的AS号一致,否则邻居无法建立

②BGP router id:不能冲突,否则邻居关系无法建立

③hold time:邻居失效时间,默认是180s,如果不一致,则协商小的时间

④BGP version:默认目前运行的BGPv4,一般不存在版本不同的情况

2、BGP邻居能力的协议

①地址族协商一致,不一致导致邻居无法建立,默认IPv4单播地址族

②路由刷新能力,即手动触发更新能力

③是否支持4字节AS号的能力

keepalive报文

默认每隔60s周期性发送,如果180s没有收到keepalive报文,则认为BGP邻居失效,断开TCP连接

updata报文

BGP路由传递以及撤销

updata消息主要用来公布可用路由和撤销路由,Updata中包含以下信息:

①网络层可达信息(NLRI):用来公布IP前缀和前缀长度

②路径属性:为BGP提供环路检测,控制路由优选

③撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度

router-refresh报文

用于手动进行BGP路由的触发跟新,或者用于ORF(依赖于路由刷新功能)功能

notification报文

通知报文用于报错,收到该报文只有一个结果就是断开TCP连接

邻居状态

邻居建立流程图:

BGP的TCP连接建立过程

查看是那个路由器先发起的TCP连接,因为BGP使用的179端口号是被动等待连接的,所以哪个地址后面跟着 :179 端口,就证明是被连接的一方

(下图是2.2.2.2路由器先发起的tcp连接,1.1.1.1路由器是被动接收 )

Idle(空闲)

Idle是BGP连接的第一个状态,在空闲状态,BGP在等待一个启动事件,启动事件出现以后,BGP初始化资源,复位连接重试计时器,发起一条TCP连接,同时转入Connect(连接)状态。

一直停在Idle状态的原因:

①没有去往邻居地址的路由,无法发起TCP三次握手,也无法完成TCP的3次握手。

②邻居发起的TCP握手,被本端拒绝,拒绝的原因是邻居发起的TCP报文的源地址,不是本端指定的邻居地址。

Connect(连接)

在connect状态,BGP发起第一个TCP连接,如果连接重试计时器超时,就重新发起TCP连接,并继续保持在connect状态。

如果TCP连接成功,就转入Opensent状态;如果TCP连接失败,就转入Active状态。

一直停在connect状态的原因:

①由于邻居缺乏到本端的路由,无法回复本端的TCP连接

②邻居的BGP进程还未启动,未开放TCP 179端口,导致邻居无法回复本端的TCP连接

③或者是应答报文中途被丢弃

Active(活跃)

当发送TCP连接的路由器,能收到相应的邻居应答报文,代表2台路由器能正常交互报文,但是依然无法建立起TCP的3次握手,将进入到Active,在Active状态,BGP总是试图建立TCP连接,如果连接重试计时器超时,就退回Connect状态。

如果TCP连接成功,就转入Opensent状态;如果TCP连接失败,就继续保持Active状态,并继续发起TCP连接。

一直停在Active状态的原因:

邻居之间地址可达,但建立的BGP邻居的源目地址不匹配导致。

Opensent

代表已经成功建立起了TCP连接,且发送了open报文给邻居,并等待接受邻居发来的open报文

Openconfirm

代表收到邻居的open报文,且发送keepalive报文,等待邻居发来的keepalive报文

Established(邻居关系已建立)

在这个状态中,EGP邻居关系已经建立,BGP将和它的邻居们交换Updata报文,同时复位保持计时器