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路由携带多种路径属性
对等体关系
TCP连接源地址
默认使用本地的连接接口
IBGP,建议使用环回口作为更新源地址,但要注意EBGP多跳问题
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):用于同一自治系统内的路由交换。
报文类型
BGP 邻居状态
BGP 邻居状态转换流程
- IDLE → CONNECT(BGP 路由器开始连接)
- CONNECT → OPEN SENT(BGP 路由器发送 OPEN 报文)
- OPEN SENT → OPEN CONFIRM(对等体收到 OPEN 并进行确认)
- OPEN CONFIRM → ESTABLISHED(成功建立 BGP 会话)
- 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状态
---------------------------------------------------------------------------------------------------------------------------------
亲爱的读者朋友们,我在发布的博客中可能存在一些不足之处,如果您发现了任何错误或有改进建议,恳请不吝赐教,您的反馈对我非常重要。谢谢!