当前位置: 首页 > news >正文

BGP协议

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

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

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

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

原文地址:https://blog.csdn.net/m0_63197559/article/details/144516565
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/80607.html

相关文章:

  • Spring框架IOC
  • vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,
  • 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测
  • 三相异步电动机如何调试?
  • HarmonyOS(72)事件拦截处理详解
  • 由popover框一起的操作demo问题
  • SimAI万卡集群模拟器,LLM大模型训练通信计算模拟
  • C++ __attribute__((constructor))使用介绍
  • LearnOpenGL学习(高级OpenGL - - 实例化,抗锯齿)
  • 计算机网络-网络层
  • c++:STL:string
  • Pytorch | 从零构建GoogleNet对CIFAR10进行分类
  • Eureka学习笔记-服务端
  • Frida进行Android dex文件整体脱壳
  • 【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string,垃圾回收( GC)
  • Java函数式编程【三】【Stream终止操作】【上】之【简单约简】
  • ElasticSearch 数据聚合与运算
  • 基础开发工具-编辑器vim
  • 005 QT常用控件Qwidget_上
  • linux0.11源码分析第一弹——bootset.s内容
  • kali Linux 2024.3安装教程2024(图文超详细)
  • LED 灯实验
  • C# WinForm移除非法字符的输入框
  • 四、CSS3
  • Java集合 HashMap 原理解读(含源码解析)
  • 灵当crm pdf.php存在任意文件读取漏洞