BGP协议

发布于:2024-12-20 ⋅ 阅读:(10) ⋅ 点赞:(0)

BGP(Border Gateway Protocol,边界网关协议)是一种用于在不同网络之间传输可达性信息的路由协议。它是互联网上使用的主要协议之一,用于连接不同的自治系统(AS),即由单个实体控。边界网关协议_百度百科

概述

EGP高级路径矢量协议,优先级155,度量值:是以哦那个路径属性,通过连接对方TCP 179端口与对方通信,核心3张表(邻接表、BGP路由表、全局路由表),目前为BGP V4。

AS:BGP协议自治系统分配规则,公有1-64511,私有64512-65534(16bit);公有1-4199999999私有4200000000-4294967294(32bit)。

BGP特征

发起方使用随机端口号向对端的TCP179端口发起连接

BGP发言者(Speaker):运行BGP协议的路由器

BGP路由增量更新

BGP路由携带多种路径属性

对等体关系

对等体是否在同一个AS内
EBGP External,要求路由可达,且TCP能正确建立
IBGP Internal
建立TCP 3次握手,三次握手建立完成后,相互发送open报文协调参数;周期性发送keepalive报文用于保持连接,默认60s发送 一次(如果两个对等体的keepalive时间不一致,则协商选择keepalive时间小的作为共同遵守的)

TCP连接源地址

默认使用本地的连接接口

IBGP,建议使用环回口作为更新源地址,但要注意EBGP多跳问题

EBGP,通常使用直连接口的IP地址作为源地址

BGP工作原理

1、BGP会话建立

建立 TCP 连接:两台路由器之间首先会建立一个可靠的 TCP 连接(TCP 端口 179)。
交换 OPEN 消息:建立连接后,BGP 会交换 OPEN 消息,包含版本号、自治系统号、BGP标识符等信息。成功交换 OPEN 消息后,两台路由器进入 BGP Established 状态,表示会话建立成功。


2、 路由信息的交换

一旦 BGP 会话建立,路由器就会交换路由信息:

UPDATE 消息:包含了路由信息的变化,比如新增、删除、修改某个网络的路由。UPDATE 消息会包含网络前缀(IP 地址段)和相关的路径信息(如 AS 路径)。
路由选择:BGP 使用复杂的规则来选择最优的路由。路径选择的优先级通常按照以下顺序判断:
1.优先选择最短的 AS 路径(即路径包含最少的 AS 数量)。
2.优先选择具有较低的 BGP 优先级。
3.路由器的本地策略,例如选择出口路由、策略路由等。
4.路由的下一跳(Next-hop)是否可达。

3、 路由更新和撤销
路由的撤销:如果某条路由不可达,BGP 会通知邻居撤销该路由。
增量更新:BGP 不会频繁地交换完整的路由表,而是通过发送增量更新来减少带宽消耗,只传输发生变化的部分。

4、 BGP的路由选择规则
BGP 的路由选择过程复杂,通常遵循以下规则(从上到下,优先级依次减小):

1.优先选择路由的路径长度(AS路径),即选择经过最少 AS 的路径。
2.选择路由的最小 BGP 路由优先级(根据 BGP 优先级和本地配置)。
3.选择路径的最短网络前缀(例如,长的子网比短的子网优先)。
4.选择下一跳(Next Hop)可达的路由,保证数据包能到达目标。
5.选择最低的 MED(Multi-Exit Discriminator)值:MED 是一个用于标识多条出口路径的参数,较低的 MED 值意味着该路径更优。

5. BGP的类型
BGP 协议有两种主要的类型:

EBGP(External BGP):用于不同自治系统之间的路由交换。
IBGP(Internal BGP):用于同一自治系统内的路由交换。

报文类型

1、Open:协商BGP对等体参数,建立对等体关系;BGP TCP 连接建立成功之后发送
2、Update:发送BGP路由更新;BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文
3、Notification:报告错误消息,中止对等体关系;当BGP在运行中发现错误时,发送Notification报文,将错误通告给BGP对等体
4、Keepalive:标志对等体建立,维持BGP对等体关系,周期性默认60s发送一次;如果超过180s没有收到对等体的keepalive报文,则认为该对等体不存在
5、Route-refresh::用于改变路由策略后,请求对等体重新发送路由信息;当路由策略发生变化时,出发请求对等体重新通告路由

BGP 邻居状态

1、 Idle:开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源,初始状态(类似down状态)
2、 Active:TCP连接没建立成功(失败状态),反复尝试TCP连接(失败达到一定次数进入Idle状态);如果出错,直接到Idle状态
3、 OpenSent:TCP连接已经建立成功,开始发送Open包;如果出错,直接到Idle状态
4、OpenConfirm:收到了正确的Open报文,已发送Keepalive报文,等待对方的Keepalive包;如果出错,直接到Idle状态
5、 Established:已经收到对方的Keepalive包,BGP邻居建立成功;如果出错,直接到Idle状态。进入OpenConfirm状态之后,BGP路由器如果收到了对端发送的Keeaplive报文,则进入Established状态,对等体关系建立过程就此完成。

BGP 邻居状态转换流程

  1. IDLE → CONNECT(BGP 路由器开始连接)
  2. CONNECT → OPEN SENT(BGP 路由器发送 OPEN 报文)
  3. OPEN SENT → OPEN CONFIRM(对等体收到 OPEN 并进行确认)
  4. OPEN CONFIRM → ESTABLISHED(成功建立 BGP 会话)
  5. ESTABLISHED → IDLE(连接中断或错误发生,结束会话)

BGP状态总结

状态 描述 动作 / 转换
IDLE BGP 邻居初始化,未开始连接。 开始连接,进入 CONNECT 状态。
CONNECT 路由器正在尝试建立 TCP 连接。 接收到 OPEN,进入 OPEN SENT;失败则回 IDLE
OPEN SENT 已发送 OPEN 报文,等待对方回应。 接收到有效 OPEN,进入 OPEN CONFIRM
OPEN CONFIRM 收到对方的 OPEN 报文,确认连接。 收到 KEEPALIVE 报文,进入 ESTABLISHED
ESTABLISHED BGP 会话成功建立,开始交换路由信息。 持续交换路由信息,保持连接。
ACTIVE TCP 连接未能成功建立。 继续尝试连接,失败则回到 IDLE

BGP状态介绍

BGP对等体的交互过程存在6种状态机Idle(空闲)、Connect(连接)、Active(活跃)、OpenSent(Open报文已发送)、OpenConfirm(Open报文已确认)和Established(已建立)。

在BGP对等体建立的过程中,常见的3中状态是Idle、Active和Established。

Idle:初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其他的BGP对等体进行TCP连接,并转至(Connect连接)状态。Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。

Connect:BGP等待TCP连接的建立。Connect正在进行TCP连接(三次握手)等待过程中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接,如果出错,直接到Idle状态。

Active:TCP连接失败,重新建立TCP连接

OpenSent:TCP建立成功,发送open报文

OpenConfirm:收到正确的open报文

Established:BGP邻居建立成功

BGP状态机详述

1、Idle状态是BGP初始状态。任何状态中收到Notificaation(通告)报文或者TCP拆链通知等Error事件后,BGP都会转至Idle状态。

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

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

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

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

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

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

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

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

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


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

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

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

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状态

---------------------------------------------------------------------------------------------------------------------------------

亲爱的读者朋友们,我在发布的博客中可能存在一些不足之处,如果您发现了任何错误或有改进建议,恳请不吝赐教,您的反馈对我非常重要。谢谢!