八、BGP
目录
一、为何需要BGP?
二、BGP
2.1、BGP邻居
2.2、BGP报文
2.3、BGP路由
2.4、BGP通告遵循原则
2.5、BGP实验
第一步:建立邻居
第二步:引入路由
BGP路由黑洞
路由黑洞解决方案
1、IBGP全互联
2、路由引入
3、MPLS 多协议标签交换
三、BGP路由反射器
路由策略:让自己不计算路由或者让自己不产生LSA发送给邻居
ospf:企业网
isis:运营商
一、为何需要BGP?
IGP:内部网关协议,ospf,isis等
1、IGP无法承载和计算庞大的路由条目,IGP能够处理的路由条目有限,OSPF10000条
2、同一批路由器运行了相同的协议,如OSPF,只有没有做策略,两两设备间都能相互通信,两个协议之间需要有限制的去传递路由信息
二、BGP
BGP基本原理:ASBR设备把想发布到其他AS的路由先引入到本设备运行的BGP中,再通过BGP报文发送到对等体中,最终实现跨AS的路由传递。
BGP:边界网关协议
AS:自治域系统
BGP工作在AS的边界上,采用TCP作为传输层协议,端口号179,触发式更新,而不是周期性更新。
BGP路由器(BGP发言者,BGPSpeaker):运行BGP的路由器
通过BGP的属性可以获悉路由传递过来经过的路径,这条路由从哪里产生,经过了哪些AS,经过了哪台设备的转发,开销是多少等,所以被称为路径矢量路由协议。
2.1、BGP邻居
BGP建立邻居关系(单播起邻居,前提是能够通信)的路由器分为两种:
- 不同AS之间建立的邻居关系称为EBGP peer(一般用物理口直连路由起邻居)
- 同一AS之间建立的邻居关系称为IBGP peer(一般用环回口起邻居,因为物理口down就没有邻居关系了,但其他路由能够通信),先跑IGP协议确保能够通信,再建立IBGP邻居关系,并且可以跨路由器建立邻居。
R1-R2-R3(R1的环回口1.1.1.1,R3环回口3.3.3.3)
R1和R3已建立IBGP邻居关系,R1向R3发送BGP路由(BGP封装在TCP+IP上)时,R2会不会学到BGP路由?不会!
R1-R2
        先启动BGP的一端先发起TCP连接,如上所示,R1先后动BGP,R1使用随机端口号向R2的179端口发起TCP连持完成TCP连接的建立。
         三次握手建立完成之后,R1、R2之间相互发送Open报文携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive(保活)报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。
2.2、BGP报文
open报文包含:
- My Autonomous System:自身AS号
- Hold Time:用于协商后续Keepalive报文发送时间
- BGP Identifier:自身Router ID
Update报文:发送BGP路由更新
Keepalive报文:标志对等体建立,维持BGP对等体关系,60s一次
Notification报文:报告错误信息,中止对等体关系
Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文
2.3、BGP路由
BGP并不会发现并计算产生路由,只是路由的搬运工
引入路由的前提以本设备的全局路由为准!
引入路由方式:
- network 192.168.1.0 24(逐个引入)
- import-route ospf/isis/direct(批量引入)
ASBR设备运行BGP引入所在AS的路由生成BGP路由后,将BGP路由通过update报文分享给对等体。
2.4、BGP通告遵循原则
- 只发布最优且有效路由
- 从EBGP对等体获取的路由,会发布给所有对等体
- IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
- BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。
四种情况:
- EBGP邻居—ASBR—EBGP邻居
- EBGP邻居—ASBR—IBGP邻居
- IBGP邻居—ASBR—EBGP邻居
- IBGP邻居—路由器—IBGP邻居(II不传)
- 前三种,左侧邻居把BGP路由引入到中间路由器,路由器会传递到右侧邻居;最后一种不可以。
思考:为什么第四种不可以?

如上图,四个路由器都运行了IBGP,假设第四种情况可以传递路由,就会形成路由环路,如果R1和R4链路,按照IBGP邻居建立规则,R1仍然和R4仍然可以建立IBGP邻居,仍然存在环路。
 如上图,R1和R2是EBGP邻居,R2和R3、R4、R5为IBGP邻居,R2收到EBGP路由后会发送给R3和R4,因为I和I不能传,所以R5也是由R1直接传递EBGP路由,也就是说IBGP邻居的BGP路由全都来自于ASBR,即IBGP水平分割。
        如上图,R1和R2是EBGP邻居,R2和R3、R4、R5为IBGP邻居,R2收到EBGP路由后会发送给R3和R4,因为I和I不能传,所以R5也是由R1直接传递EBGP路由,也就是说IBGP邻居的BGP路由全都来自于ASBR,即IBGP水平分割。
2.5、BGP实验

需求:1.1.1.1和5.5.5.5能够通信
第一步:建立邻居
R1和R2采用物理口直连路由起EBGP邻居
##R1
bgp 100router-id 1.1.1.1##告知对等体的ip和as号peer 12.1.1.2 as-number 200##无需手工自动生成的配置ipv4-family unicast##支持ipv4地址族单播路由undo synchronization##淘汰的功能,忽略peer 12.1.1.2 enable##自动在ipv4地址族下建立了指定的邻居##R2
bgp 200router-id 2.2.2.2##告知对等体的ip和as号peer 12.1.1.1 as-number 100R4和R5采用环回口起EBGP邻居,前提确保路由互通
##R4
int lop10ip add 10.4.4.4 32
ip route-static 10.5.5.5 32 45.1.1.5##AS号200
bgp 200router-id 4.4.4.4peer 10.5.5.5 as-number 300##修改建立邻居的通信接口为环回口,默认情况采用直连物理口peer 10.5.5.5 connect-interface lop10##默认情况下,EBGP只能有一跳(即直连起邻居),用环回口就多了一跳peer 10.5.5.5 ebgp-max-hop 2##R5
int lop10ip add 10.4.4.4 32
ip route-static 10.4.4.4 32 45.1.1.4bgp 300router-id 5.5.5.5peer 10.4.4.4 as-number 200##修改建立邻居的通信接口为环回口,默认情况采用直连物理口peer 10.4.4.4 connect-interface lop10##默认情况下,EBGP只能有一跳(即直连起邻居),用环回口就多了一跳peer 10.4.4.4 ebgp-max-hop 2R2和R4采用环回口起IBGP邻居,前提确保路由互通
##用ospf路由保证互通,别忘了配置环回口和在ospf内激活环回路由,因为要用环回路由建立邻居
##R2
bgp 200router-id 2.2.2.2peer 4.4.4.4 as-number 200peer 4.4.4.4 connect-interface lop10##IBGP默认路由跳数为255,所以不用修改##R4
bgp 200router-id 4.4.4.4peer 2.2.2.2 as-number 200peer 2.2.2.2 connect-interface lop10##IBGP默认路由跳数为255,所以不用修改第二步:引入路由
注:引入路由后对本设备全局路由表(dis ip routing-table)无影响,对bgp路由有影响(dis bgp routing-table)
##R1
bgp 100network 1.1.1.1 32dis bgp routing-table:带*为有效路由;下一跳0.0.0.0代表本地始发;bgp中认为下一跳是属性,所以在IBGP内传递的过程中不会被修改,但因为在R4上12.1.1.1不可达,所以变为无效路由,此时,R4不会把该BGP路由发给R5,如下图:


综上,所以需要添加策略,当R2把BGP路由发送给R4的时候让它修改下一跳
##R2
bgp 200##发路由时启用的策略,作用是发给4.4.4.4的所有路由下一跳属性改为本地(即peer 4.4.4.4 connect-interface lop10中的lop10)peer 4.4.4.4 next-hop-local此时再在R4上查看bgp路由发现下一跳为2.2.2.2

disp fib:转发表,会把需要递归的路由简化
到此为止时,1.1.1.1的路由发布到R5上了,但5.5.5.5的路由还没发布到R1上,所以不能互通.
##R5
bgp 300network 5.5.5.5 32##R4
bgp 200peer 2.2.2.2 next-hop-local到此为止时,1.1.1.1和5.5.5.5仍然不能互通,因为在R3上没有二者的路由,该现象称之为BGP路由黑洞。
BGP路由黑洞
BGP路由黑洞产生原因
路由从R1到R5和R5到R1时经过R3可以传送,但数据包却不能转发?
路由从R2到R4时,sip为2.2,dip为4.4,R3上是有2.2.2.2和4.4.4.4的路由的。
而R1pingR5时,sip为1.1,dip为5.5,R3上没有理由,所以丢弃。
路由黑洞解决方案
1、IBGP全互联
让AS内部所有路由器运行BGP,并且,全部建立IBGP邻居关系。
缺点:如果AS内设备较多,就要建立很多很多IBGP邻居关系,配置很复杂;而且会要求内部所有设备都学习外部路由。
2、路由引入
注:IBGP传入的路由不能引入IGP
        在ASBR上,把BGP引入到IGP中,使得AS内部路由通过IGP学习到外部路由。
         缺点:BGP路由条目很多,有可能IGP协议无法承载,内部路由器都要学习外部路由。
##R2
ospf 1import-route bgp如下图,R2的BGP路由有两个:1.1.1.1(EBGP传入)和5.5.5.5(IBGP传入),所以R3的路由表只学到1.1.1.1的路由。


所以,R3想要学到5.5.5.5的路由,需要在R4引入
##R4
ospf 1import-route bgp3、MPLS 多协议标签交换
使用MPLS直接建立ASBR之间的隧道,使得内部路由器无需学习任何外部路由,即可完成转发。
完美解决路由黑洞,将来使用BGP,几乎必然配合MPLS使用,解决其路由黑洞问题。
三、BGP路由反射器
IBGP内ASBR数量多时,需要单个ASBR分别与其他的ASBR起邻居,导致建立邻居关系过多。
作用:简化邻居关系
打破II不传原则
反射:不会改变路由内容;直接给邻居;
传递:会对路径进行优选,并修改相关属性传递给邻居;

R3收到R1反射的R2的路由,R3会认为是R2发给它的,在R1上配置反射器的时候告知R1客户端为R2,但是R2不知道自己是客户端,也不知道谁是反射器。
引入路由反射器之后存在两种角色:
         RR(Route Reflector):路由反射器
         Client:RR客户端
         RR会将学习的路由反射出去,从而使得IBGP路由在AS内传递,无需建立IBGP全互联。
         将一台BGP路由器指定为RR的同时,还需要指定其Client。至于Client本身,无需做任何配置,它并不知晓网络中存在RR。
反射规则:IBGP邻居之间反射
- client—RR—client
- client—RR—No client
- No client—RR—client
- No client—RR—No client
- 前三种可以反射,最后一种不可以(非非不传)
路由环路隐患

        RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
         Originator_ID:发起者ID
将R1的router-id写在R2发给R1的路由条目中,反射器R2收到后将router-id改写为OID属性:2.2.2.2,且反射给R3时OID仍为2.2.2.2,R3收到后与自己router-id比较,一致丢弃,不一致传递。当同一AS内有多个RR,OID由第一个RR为路由条目写上OID。

如图,R1、R3、R4都为反射器,OID防环失效。
Cluster_List:簇ID列表,类似水印
    R2发送给R1的路由,经过R1反射给R3时除了添加Originator_ID之外还会添加Cluster_List:10.0.1.1。R3再次反射给R4时,Cluster_List值为:10.0.3.3 10.0.1.1,R4再次反射给R1时Cluster_List值:10.0.4.4 10.0.3.3 10.0.1.1。
         当R4将路由反射给R1时,R1发现Cluster_List包含了自身Cluster_ID,判断存在环路,从而忽略该路由更新。
         这两个属性不会传递给EBGP邻居,即都属于可选过渡类型。
同级反射器:两个反射器配置相同的簇ID,避免路由在两个反射器之间互相反射,节约设备性能。

##R2、R3、R4ospf协议互通,确保环回口路由激活
##R2和R3、R3和R4建立IBGP邻居第一种方法:在反射器上配置对方为客户端
##R3
bgp 200router-id 3.3.3.3peer 2.2.2.2 as-number 200peer 2.2.2.2 connect-interface LoopBack0peer 4.4.4.4 as-number 200peer 4.4.4.4 connect-interface LoopBack0##配置2.2.2.2和4.4.4.4为反射器客户端peer 2.2.2.2 reflect-clientpeer 4.4.4.4 reflect-client  第二种方法:
bgp 200##ibgp 为名字,internal代表ibgpgroup ibgp internalpeer ibgp as onnect-interface LoopBack0peer ibgp reflect-client  ##将邻居加入ibgp组peer 2.2.2.2 group ibgppeer 4.4.4.4 group ibgp相关文章:
 
八、BGP
目录 一、为何需要BGP? 二、BGP 2.1、BGP邻居 2.2、BGP报文 2.3、BGP路由 2.4、BGP通告遵循原则 2.5、BGP实验 第一步:建立邻居 第二步:引入路由 BGP路由黑洞 路由黑洞解决方案 1、IBGP全互联 2、路由引入 3、MPLS 多协…...
 
有监督学习——支持向量机、朴素贝叶斯分类
1. 支持向量机 支持向量机(Support Vector Machine, SVM)最初被用来解决线性问题,加入核函数后能够解决非线性问题。主要优点是能适应小样本数量 高维度特征的数据集,甚至是特征维度数高于训练样本数的情况。 先介绍几个概念&am…...
自动化测试文档
自动化测试文档的类型 自动化测试方案: 目的:描述自动化测试的目标、范围、方法、资源等。内容:通常包含测试计划、测试用例设计、测试环境配置、测试执行策略、预期结果、风险评估等。自动化测试脚本: 目的:用于执行…...
 
vue-i18n使用步骤详解(含完整操作步骤)
开篇 下面是从创建vue项目开始,完整使用i18n实现国际化功能的步骤,希望对您有所帮助。 完整步骤 创建项目 创建项目,并在创建项目的时候选择vuex,router 选择3.x版本 后面随意选即可,下面是完整的代码结构 安装vue-i18n,并封装…...
XXE漏洞修补:保护您的系统免受XML外部实体攻击
引言 XML外部实体(XXE)漏洞是一种常见的网络安全问题,它允许攻击者通过XML文档中的实体引用读取服务器上的文件或发起远程服务器请求。这种漏洞可能被用于数据泄露、拒绝服务攻击(DoS)甚至远程代码执行。本文将探讨XX…...
去除upload的抖动效果
title: 去除upload的抖动效果 date: 2024-06-15 20:16:51 tags: vue3 在使用vue3element-plus框架的时候,常常会使用到el-upload方法。其中如果做了翻页效果可以发现图片过度方式是集中到左上角进行的翻页,这种效果不是很好,我们还是想让这中…...
什么是 Linux ?(Linux)
系列文章目录 第一章 什么是Linux? 文章目录 系列文章目录一、什么是 Linux ?二、Linux 的发行版本总结 一、什么是 Linux ? Linux(Linux Is Not UniX),是一种免费使用和自由传播的类UNIX操作系统&#x…...
 
uni-app 怎么在tabbar使用阿里图标库
提示:微信小图标不支持使用字体图标的方式,只能下载png 方法一:直接下载png图片 我们首选打开阿里矢量图标库 链接在下方 👇 iconfont-阿里巴巴矢量图标库iconfont-国内功能很强大且图标内容很丰富的矢量图标库,提供矢…...
 
勒索病毒剖析
2016年不自己勒索了 卖病毒 让别人勒索 傻瓜式勒索 黑客用的是非对称加密 全世界只有黑客有那把私钥 反向解密不了 传统爆破容易被检测,黑客慢速爆破,利用超级多的僵尸进行试错,慢慢试出来账号密码 因为一般运维设备在防火墙的白名单里&…...
 
【C++11】第一部分(一万六千多字)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 C11简介 统一的列表初始化 {}初始化 std::initializer_list 声明 auto decltype 右值引用和移动语义 左值引用和右值引用 左值引…...
 
FPGA专项课程即将开课,颁发AMD官方证书
社区成立以来,一直致力于为广大工程师提供优质的技术培训和资源,得到了众多用户的喜爱与支持。为了满足用户需求,我们特别推出了“基于Vitis HLS的高层次综合及图像处理开发”课程。 本次课程旨在帮助企业工程师掌握前沿的FPGA技术ÿ…...
C++ shared_ptr
shared_ptr共享它指向的对象,多个shared_ptr可以指向(关联)相同的对象,在内部采用计数机制来实现。 当新的shared_ptr与对象关联时,引用计数增加1。 当shared_ptr超出作用域时,引用计数减1。当引用计数变为…...
2024.6.15
2024.6.15 【夜幽幽,月优优,曲悠悠,吾忧忧。】 Saturday 五月初十 <theme oi-“DP”> 看几道DP基础题, 巩固一下DP思路和基础 Coin Combinations I //2024.6.15 //by white_ice //Coin Combinations I CSES - 1635 #i…...
 
堆栈溢出的攻击 -fno-stack-protector stack smash 检测
在程序返回的一条语句堆栈项目处,用新函数的起始地址覆盖,将会跳转到执行新函数。 现在系统对这个行为做了判断,已经无法实施这类攻击或技巧。 1,测试代码 #include <stdio.h> void cc() {printf("I am cc( )\n"…...
 
掌握特劳特定位理论核心,明晰企业战略定位之重
在当今瞬息万变的市场环境中,企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键,更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特(Michael Porter)指出战略就是形成一套独具的运营活动&a…...
RAGFlow 学习笔记
RAGFlow 学习笔记 0. 引言1. RAGFlow 支持的文档格式2. 嵌入模型选择后不再允许改变3. 干预文件解析4. RAGFlow 与其他 RAG 产品有何不同? 5. RAGFlow 支持哪些语言? 6. 哪些嵌入模型可以本地部署? 7. 为什么RAGFlow解析文档的时间比…...
使用Docker-Java监听Docker容器的信息
使用Docker-Java监听Docker容器的信息 Docker作为一种轻量级的容器化平台,极大地方便了应用的部署与管理。然而,在实际使用过程中,我们常常需要对运行中的容器进行监控,以确保其健康状态,并能及时响应各种异常情况。本…...
 
Spring Boot + Mybatis Plus实现登录注册
Spring Boot 实现登录注册 1. 注册 业务逻辑 客户端输入注册时需要的用户参数,比如:账户名、密码、确认密码、其他服务端接收到客户端的请求参数进行校验,然后判断是否有误,有误的地方就将错误信息抛出将密码进行加密之后存储到…...
 
IDEA创建web项目
IDEA创建web项目 第一步:创建一个空项目 第二步:在刚刚创建的项目下创建一个子模块 第三步:在子模块中引入web 创建结果如下: 这里我们需要把这个目录移到main目录下,并改名为webapp,结果如下 将pom文件…...
 
二手物品交易系统的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,商家管理,用户管理,商品管理,用户咨询管理 商家账户功能包括:系统首页,个人中心,商品管理,用…...
 
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
 
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了  先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
 
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
 
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
