BGP的基础知识
BGP——边界网关协议
IGP——内部网关协议——OSPF、RIP、ISIS
EGP——外部网关协议——EGP、BGP
边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,是在BGPV4的基础之上支持了更多的地址族,例如IPV6。
AS自治系统
由单一的组织或者机构独立维护的网络设备以及网络资源的集合。
划分AS的原因
- 整个世界网络范围过大,单一网络收敛很慢且延迟较大。
- 每个网络可能是某个组织或公司建立的,它们并不想将自己辛苦建立的网络交给别人管理,所以需要进行自治。
AS号
为了区分不同的AS,网络世界IANA组织提出了AS号——0-65535,0和65535一般作为保留AS号来使用,1-64511作为公有AS号使用,64512-65534作为私有AS号使用。
拓展AS号——将原本16位的AS号拓展到32位。

BGP的一些特性
- 高可控性——路径属性
- 高可靠性——TCP
- AS-BY-AS——BGP把一个AS看作一个整体
BGP设计了很多路径属性,可以通过调用路由策略关联这些属性,达到路由控制的效果。
我们对IGP和EGP的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需要传递AS已经计算好的路由,所以我们对EBP的可控性、可靠性要求更高。
BGP传递的一定是路由条目信息
BGP没有使用周期更新传递路由信息
BGP存在触发更新
BGP在传输层使用TCP进行传输:端口号——179
BGP在建邻时必须指定建邻的对象,BGP技术支持非直连建邻
RIP是无类别的距离矢量路由协议,BGP是无类别的路径矢量协议,无类别——在传递路由条目信息时携带子网掩码,从而减少路由黑洞的产生。
BGP默认情况下不支持负载均衡,BGP会根据传递过来的路由信息中携带的路径属性选择最优的路径信息加载到路由表中。
BGP把AS看作一个整体
RIP/IGP实际上是一个算法的概念,BGP不是一个算法的概念,BGP也不需要计算路由信息,只负责转发路由即可。
EBGP对等体——一般建议采用直连建立对等体关系
IBGP对等体——一般采用非直连建邻
BGP为了实现这两个原则:BGP规定EBGP对等体之间发送数据包中携带的TTL值为1,而IBGP对等体之间传递的数据包TTL值为255。
BGP的数据包
| 报文名称 | 作用 | 发送时刻 |
|---|---|---|
| Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP建立连接成功之后 |
| Update | 发送BGP路由更新 | BGP对等体关系建立之后又路由需要发送或路由变化时向对等体发送Update报文 |
| Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误信息通告给BGP对等体 |
| Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
| Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
BGP的公共头部

Open包

作用:用来建立BGP对等体关系的数据报文。
- AS号:自身的AS号,对比逻辑——对等体发过来的Open报文中携带的AS号必须和指定建邻的AS号一致,否则会导致建邻失败。
- RID:建邻双方的RID不能一致,如果相同,会导致建立对等体失败。
- 认证:BGP在建邻时如果做认证的话,需要对比双方认证口令,不一致则无法建立邻居关系。
- 保活时间:类似于OSPF的死亡时间,默认180s,如果对等体双方保活时间不一致,会按照时间更小的去执行。
Keepalive包
- 用来周期保活BGP的邻居关系,默认是1/3的保活时间——60s
- 用来做Open报文的临时确认包
Update包
传递BGP路由信息的数据包。

BGP中的更新包,用来携带路由条目信息,包括目标网段、子网掩码以及BGP的各种属性。
在Update包中存在撤销路由字段,我们可以直接将不可达的路由信息放在该字段下进行通告,以达到传递失效信息的目的。而不需要想RIP那样采用带毒传输的方式。
Notification包
告警报文,在BGP工作过程中如果出现故障出现问题,会发送Notification报文告知对等体问题的原因。
Toute-refresh包
一种刷新机制,用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方均支持路由刷新。
BGP状态机
建立对等体之间TCP会话,指定建立对等体的对象。
BGP在建立对等体过程中,会建立两次TCP会话,会保留RID大的设备发起的TCP会话。
BGP一共存在6种状态机
| Peer状态名称 | 用途 |
|---|---|
| Idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
| Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的,如果TCP连接建立失败则进入Active状态,反复尝试连接 |
| Active | TCP连接没建立成功,反复尝试TCP连接 |
| OpenSent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立 |
| OpenConfirm | 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包 |
| Established | 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
Idel状态下,启动BGP协议后,必须指定建立对等体的目标之后,进入下一个状态。
必须路由可达(依靠IGP协议或者静态、直连)
Connect状态下,BGP对等体之间开始建立TCP会话连接。如果TCP会话建立成功,则进入OpenSent状态,如果TCP会话建立失败,则进入Active状态。
如果TCP会话(三次握手)建立成功,则进入OpenSent状态,开始发送Open报文,去建立BGP对等体关系。
如果认可对等体发过来的Open报文中的参数,首先会回复一个Keepalive报文,用来确认Opne报文中的参数我已经认可,并且进入下一个OpenConfirm状态。
OpenConfirm状态下,如果收到对等体发送的Keepalive报文,则进入最终状态Established。

BGP的工作过程
1、基于IGP(静态、直连、RIP、OSPF...)实现路由可达,原因:BGP需要建立TCP会话(单播)。
2、指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。之后所有BGP通信都将基于TCP会话通道来进行传输。并且依据TCP提供传输的可靠性。
3、使用Open报文和Keepalive报文进行邻居关系的建立。Open报文用来携带建邻使用的参数,Keepalive报文用于Open报文参数的确认。最终完成对等体关系的建立,生成邻居表,存储BGP对等体关系信息。
4、建立邻居关系后,使用Update报文来共享路由条目信息。信息中将携带目标网络号,掩码几路径属性;之后,将发送以及收集到的路由信息记录在一张表中——BGP表。
5、之后,会将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
6、收敛完成后,将使用Keepalive报文进行对等体之间的周期保活,默认保活时间为180s(hole time),发送周期为60s。
7、如果这个过程出现任何问题,都将使用Notification报文进行告警。
8、如果出现结构突变(网段消失或者新增网段),则将使用Update报文进行触发更新,并通告给其他对等体。
BGP的路由黑洞

控制层面的可达
数据层面实际不可达——中间设备没有运行BGP
IGP内部存在没有运行BGP的设备,当访问BGP网段的流量来到这些设备之后,由于控制层面可达,数据层面不可达(这些设备没有运行BGP,没有BGP网段的路由信息),那么将丢弃这些流量。
解决方案:
- 所有设备均运行BGP
- 重发布
- MPLS——最早专门用来解决BGP路由黑洞研发的一种路由协议。
同步机制——当设备学习到一条BGP路由,如果本地IGP路由表不可达,将视该BGP路由无效。默认处于关闭状态。
BGP防环——水平分割
EBGP水平分割

BGP为了解决EBGP路由环路问题,设计了一个AS-PATH属性,设备在发出AS时会携带本地的AS号,当路由信息携带该AS号,那么对于AS的设备不会接收该路由。后转发的AS号在前面。
同时AS-PATH属性也是BGP的一个选路依据,当其他属性一致时,会选择AS-PATH属性最短的路径。
IBGP水平分割

当运行BGP的设备从IBGP对等体处学习到一条IBGP路由,那么将不再转发给其他IBGP对等体。
解决方案:在IBGP对等体之间构建全连的IBGP对等体关系。但是会增加拓扑的复杂性导致网络可拓展性变差,并增大了占用资源。
我们可以通过联邦、反射器来结局以上问题。
BGP的基础配置

1、配置个接口的IP地址及环回地址





2、启动OSPG协议



使得AS200内部全网可达。
3、启动BGP协议
启动BGP协议,并指定自身AS号。
直接建邻,并指定建邻的IP地址和对应的AS号


查看BGP邻居关系(BGP的邻居表)

IBGP之间使用环回建邻



注意环回建邻必须改变更新源,更新源地址不一致将导致建邻失败。
EBGP之间用环回建邻
建议使用静态路由,实现路由可达。
![]()

用环回建邻,并修改EBGP数据包的TTL值,默认直接回车将修改TTL值为255


4、路由发布
宣告含义仅发布路由信息,并且注意:只能发布路由表中存在的路由信息


查看BGP表——记录发布的和接收到的所有BGP路由信息

Network——接收到的网段信息
NextHop——下一跳,如果是本地始发的BGP路由信息该字段为0.0.0.0
*> ——状态码
*valid——有效,当BGP设备接收到一条BGP路由信息,首先将验算下一跳是否可达,如果下一跳可达则代表该路由可用,如果下一跳不可达则认为该路由无效。注意:只有可用的路由信息才会参与BGP路由的选举,并加载到路由表中。
>best——最优的路由信息最终根据路径属性选择的结果,只有最优的路由信息才会加载到路由表中,并且只有最优的路由才会被BGP传递。
i——internal内部通过IBGP对等体学到的

[R2-bgp]peer 3.3.3.3 next-hop-local——当IBGP对等体学到一条EBGP路由,对于AS-BY-AS属性导致下一跳不可达,协议在传递这条IBGP路由的IBGP设备上修改下一跳为本地
![]()

BGP不能发布建邻的网段。
5、宣告BGP网段的方法——重发布


重发布的路由信息本地下一跳也是0.0.0.0相当于本地始发。
Ogn——起源码:象征该路由通过何种方式学习到的
- I——表示该路由是通过IBGP对等体学到的路由信息,包括Network宣告的路由
- E——表示该路由是由EBGP协议处学习到的路由信息,保留仅为了兼容
- ?——除了前两种都是?

BGP的路由聚合
- 自动聚合
- 手工聚合
1、创建前缀列表抓取想要发布的路由网段
![]()
2、创建路由策略

匹配前缀列表抓取的流量
![]()

相关文章:
BGP的基础知识
BGP——边界网关协议 IGP——内部网关协议——OSPF、RIP、ISIS EGP——外部网关协议——EGP、BGP 边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4&…...
2023.11.18 每日一题(AI自生成应用)【C++】【Python】【Java】【Go】 动态时间序列分析
目录 一、编程挑战:动态时间序列分析 实际应用: 实现提示: 二、实现 1. C 2. Python 3. JAVA 4. Go 一、编程挑战:动态时间序列分析 问题描述: 假设你是一名软件工程师,需要开发一个应用来分析和预…...
uniapp相关记录
一、自定义我的物品组件 my_goods.vue <template><view class"goods-item"><!-- 左侧 --><view class"goods-item-left"><radio :checked"goods.goods_state" color"#c00000" v-if"showRadio" …...
优质猫罐头有哪些品牌?分享5款宠物店自用值得推荐的猫罐头!
不知不觉已经开宠物店7年啦,店里的猫猫大大小小也算是尝试过很多品牌的猫罐头了。优质猫罐头有哪些品牌?在猫罐头的选购上一开始我也是踩了很多坑,各种踩雷。我深知猫罐头的各种门道,新手一不小心就会着道了。 优质猫罐头有哪些品…...
HTML新手入门笔记整理:HTML基本标签
结构标签 <html> </html> 告诉浏览器这个页面是从<html> 开始,到 </html>结束 <head> </head> 网页的头部,用于定义一些特殊内容,如页面标题、定时刷新、外部文件等。 <body> </body> …...
Redis高级特性和应用(发布 订阅、Stream)
目录 发布和订阅 操作命令 发布消息 订阅消息 查询订阅情况 查看活跃的频道 查看频道订阅数 使用场景和缺点 Redis Stream Stream总述 常用操作命令 生产端 消费端 单消费者 消费组 创建消费组 消息消费 在Redis中实现消息队列 基于pub/sub 基于Stream Re…...
RoCE、IB和TCP等网络的基本知识及差异对比
目前有三种RDMA网络,分别是Infiniband、RoCE(RDMA over Converged Ethernet)、iWARP。 其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 ,技术先进,但是成本高昂。 而RoCE 和 iWARP都是基于以太网的…...
c语言-操作符详解(含优先级与结合性)
文章目录 了解什么是操作数、操作符操作数:操作符 操作符详解:1.算术操作符: 、- 、* 、/ 、%2.移位操作符: << >>3.位操作符: & | ^4. 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^5. 单⽬操…...
ubuntu安装nvm
需求 在 virtualbox 虚拟机上运行的 ubuntu (22.04.3)里安装 nvm (Node Version Manager) 简述 官网文档 (github地址)上有提到两种安装方式,一种是直接 curl | wget 命令安装,一…...
opengl制作天空盒
首先创建顶点数组 unsigned int m_uiVaoBufferID; glGenVertexArrays(1, &m_uiVaoBufferID); 然后创建顶点缓冲区 float skyboxVertices[] {// positions-1.0f, 1.0f, -1.0f,-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, 1.0f, -1.0f,-1.0f, 1.…...
单片机和FreeRTOS上跑机器人ROS的应用
机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。 目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基…...
Spring Cloud学习(十一)【深入Elasticsearch 分布式搜索引擎03】
文章目录 数据聚合聚合的种类DSL实现聚合RestAPI实现聚合 自动补全拼音分词器自定义分词器自动补全查询completion suggester查询RestAPI实现自动补全 数据同步数据同步思路分析实现elasticsearch与数据库数据同步 集群搭建ES集群创建es集群集群状态监控创建索引库1)…...
【gitlab初始密码登录失败】
gitlab初始密码登录失败 修改密码 修改密码 [rootlocalhost ~]# gitlab-rake "gitlab:password:reset[root]" Enter password: Confirm password: Password successfully updated for user with username root. # 再重新配置gitlab [rootlocalhost ~]# gitlab-ctl…...
2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
文章目录 2017 级考研管理类联考数学真题解析一、问题求解(本大题共 5 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2017-…...
2、基础入门——web应用架构搭建漏洞HTTP数据包代理服务器
Web应用环境架构类 开发语言:php、java、python、ASP、ASPX等程序源码:用的人多了,就成CMS了。中间件容器:IIS、Apache、Nginx、Tomcat、Weblogic、Jboos、glasshfish等数据库类型:Access、Mysql、Mssql、Oracle、Red…...
【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码
1.研究背景与意义 随着计算机视觉和图像处理技术的快速发展,人们对于多摄像头拼接行人检测系统的需求日益增加。这种系统可以利用多个摄像头的视角,实时监测和跟踪行人的活动,为公共安全、交通管理、视频监控等领域提供重要的支持和帮助。 …...
力扣算法练习BM45—滑块窗口的最大值
题目 给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针…...
最小二乘估计及与极大似然估计的关系
最小二乘估计(Least Squares Estimation)和极大似然估计(Maximum Likelihood Estimation)是统计学中常用的参数估计方法,它们在某些情况下是等价的,但在一般情况下并不总是相同的。 最小二乘估计ÿ…...
02房价预测
目录 代码 评分算法: 代码 import numpy as np from sklearn import datasets from sklearn.linear_model import LinearRegression# 指定版本才有数据集 # C:\Users\14817\PycharmProjects\pythonProject1\venv\Scripts\activate.bat # pip install scikit-le…...
【Springboot】pom.xml中的<build>标签详解
默认值及其标签解释 <build><!-- 指定最终构建产物的名称, 例如生成的 JAR 文件的名称 --><finalName>${artifactId}-${version}</finalName><!-- 指定源代码文件的目录路径 --><sourceDirectory>src/main/java</sourceDirectory>&l…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

