BGP知识点整理

BGP介绍
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,BGPV4+在BGPV4的基础上支持多个地址族,如IPv6。

 BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路

AS-自治系统

 
AS(自治系统),由单一的机构或组织所管理的一系列IP网络及设备所构成集合。
划分AS的原因:1.整个地球上的网络范围太大,单个网络收敛很慢且网络延迟大;2.每个网络可能是某个组织或公司组建的,他们并不想将自己辛苦组建的网络交给别人管理,所以需要自治管理
为了方便对自治系统进行管理,给每一个自治系统设计了一个号,即AS号。AS号由16位二进制构成,取值范围:0 - 65535,其中1 - 64511号为公有AS号, 64512 - 65534被设定为私有AS号。
因为传统的AS号存在不够用的情况,所以,目前大部分设备均支持拓展的AS号,由32位二进制构成。中国由于加入互联网较晚,所以中国的AS号大多都是扩展AS号。
BGP原理概述
想要AS之间互相通信,我们可以使用重发布,通过重发布将AS的路由信息导入到其他AS以达到AS间的互通,和重发布类似,BGP也是通过发送AS的路由信息以实现全网可达。那为什么AS间更多的是使用BGP而不是重发布呢?

BGP和重发布的区别
重发布要求AS间需要有ASBR,ASBR同时具有两个AS的路由信息,通过ASBR实现路由共享;而BGP是没有ASBR的,由于AS是自治系统,如果有ASBR,那这个ASBR归谁管理?如果只归一方管理,那他可以通过路由策略提高自己AS的流量的转发速度,所以BGP是AS间各出一个或多个运行BGP的路由器,让这些运行BGP的路由器建立邻居关系后交换路由信息。


重发布在导入路由时会洗掉开销值,会造成选路不佳的问题,而BGP具备强大的路由策略,BGP为路由信息设计了路径属性,通过属性进行选路,是的选路过程更加灵活,可控性更高。

 

BGP特性
BGP协议是无类别的路径矢量协议。无类别即BGP在传递路由时会携带子网掩码;路径矢量,不同与距离矢量,路径矢量是以一个AS为单位,而距离矢量是以一个路由为单位,距离矢量是一种路由算法,而BGP不需要计算路由,它只需将以计算好的路由传递给了邻居即可。

我们对IGP(内部网关协议)和EGP(外部网关协议)的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需传递AS以计算好的路由,所以我们对EGP的可控性、可靠性要求更高。

EGP的追求:可控性: AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做策略,以弥补重发布的不足。为了保证路由传递的可控性,更方便干涉选路,BGP协议舍弃了开销值,取而代之的是他为路由信息设计了很多路径属性。可以通过属性进行选路,是的选路过程更加灵活,可控性更高。

EGP的追求:可靠性:BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;又为了保证传输的可靠性,直接选择TCP协议作为传输层的协议来完成数据收发,使用的是TCP 179号端口。但使用TCP协议通讯也会造成一些问题,传输效率降低,只能单播通讯(TCP需要去建立会话),占用资源会加大 ,用TCP之后,便不能通过广播或者组播去自动发现邻居进行通信了。

由于BGP依靠TCP协议传输数据,BGP协议可以实现非直连建邻,非直连建邻的前提条件是邻居双方网络可达, BGP的非直连建邻是建立在IGP的基础上。

BGP的邻居更准确的说是BGP的对等体,我们可以根据邻居关系的建立情况,将BGP的邻居关系分为两种:


因为EBGP对等体之间一般采用直连建邻的方法,所以,我们将EBGP对等体之间的数据包中的TTL值设置为1;而IBGP对等体之间往往需要非直连建邻,所以,IBGP对等体之间的数据报中的TTL值我们设置为255;当然,如果EBGP对等体之间需要非直连建邻,则需要手工修改TTL值。

EGP的追求::AS-BY-AS:BGP将一个AS作为一个单位来看待,以一个AS为一跳,


BGP特点总结
无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
使用单播更新来发送所有信息;基于TCP 179端口工作
增量更新,仅触发更新,无周期更新
具有丰富的属性来取代IGP中度量进行选路,有多个参数控制协议
可以在进项和出项对流量实施强大的策略,可控性非常强大
默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
BGP支持认证和聚合(将现有的IP地址合并成较大的、具有更多主机地址的路由域)
BGP的数据包
BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障。

Open包
Open包主要用来建立邻居关系,正常进收发一次即可,Open包会携带一些建邻需要协商的参数,邻居互相认同对方的参数才可以建立邻居关系。以下为Open包会携带的一些参数:

AS号:在手工建立邻居关系需要时声明邻居的AS号。对端收到后会检查声明的AS号是否和本地的AS号一致,一致才可以建立邻居关系。
认证:BGP在建邻时如果做认证的话,需要比对双方认证口令,不一致则无法建立邻居关系。
Router-ID:主要区分和标定路由器。OPEN报文中携带RID的目的是为了确保双方的RID不一致。确保其唯一性,如果相同,则无法正常建立邻居关系。
这里的RID和OPSF的格式一致,也是由32位二进制构成,并且遵循IP地址的格式。也可以通过两种方法获取,一种是手工配置;另一种是自动获取(先在自己路由器的环回接口中选择最大的IP地址作为RID,如果没有环回接口,则在自己物理接口中选择IP地址最大的作为RID)。
注意:在接收邻居数据包时,其中的源IP地址和手工指定的邻居的IP地址一致才可以正常建立邻居关系。

holdtime:保活时间, 这个参数默认值为 180S,即180S内若收不到对方发送的keeplive或者UPdate包则将判定BGP链接中断。双方建邻时携带这个值,但是并不要求必须相同。但是,执行时必须相同,所以,将会选择二者中较小的作为执行时间
keeplive包
用来保活邻居关系,默认周期1min查询邻居关系是否存在;实际保活TCP会话。
Keeplive报文的发送周期为保活时间(hold time)的1/3,保活时间默认为180S,则周期发送时间默认为60S。
KeepLive包还有一个作用:在收到对方发送的OPEN报文后,临时充当确认包的作用。
TCP本身具有确认机制,可以确保传输的可靠性,这里的确认主要是确认OPEN报文中携带的参数,如果认同对方的参数,则将回复Keeplive包进行确认。

Update包
BGP中的更新包,用来携带路由条目,包括目标网段,子网掩码信息以及BGP的各种属性
在UPdate包中存在撤销路由字段,我们可以直接将不可达的路由信息放在该字段下进行通告,以达到传递失效信息的目的。而不需要像RIP那样采用带毒传输的方式。
Notification包
BGP设计的一个告警机制,出现错误数据时收发,当BGP检测到一个错误的时候,将会用这个包进行告警,告知对端错误点在哪
Route-refresh包
用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方均支持路由刷新
BGP的状态机
BGP的状态机仅描述BGP对等体建立过程中的状态变化。因为BGP可以做到建立邻居关系和发布路由分开完成。
idle状态:空闲状态,一旦指定邻居,就处于idle状态,然后BGP会首先检查指定的IP地址在本地路由表中是否可达,如果可达,则开始尝试建立TCP会话,进入下一个状态;如果不可达,则将停留在idle状态
connect状态: 进行TCP会话连接的状态。如果TCP会话建立成功,则进入下一个状态;如果TCP会话建立失败,则进入Active状态,该状态会反复尝试TCP连接,如果尝试超时,则放弃重连,退回到idle状态。

注意:在建立TCP会话连接时,双方都会尝试建立连接,一方建立成功,则将创建一个双向的TCP会话通道;双方都建立成功,则将会出现两个双向通道。则需要关闭一个TCP通道。后面开始发送OPEN报文,其中会携带RID,双方将比较RID,仅保留RID大的一端发起的TCP连接,RID小的一端发起的TCP连接通道将被断开。

OpenSent: 开始发送OPEN报文,报文中携带建立邻居关系所需的参数。当收到对端发送的OPEN报文后,并且报文里的参数没有问题,则将回复一个keeplive作为确认,进入下一个状态;

 

OPENConfirm:在该状态,本段在等待对端keeplive包,当对端收到本端的Open报文且确认参数无误,发送keeplive包进行确认进入下一个状态。
Established : 建立完成状态 ,标志着对等体关系的建立。
BGP的工作过程
配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输
会话建立后,邻居间正常收发一次open报文,并互发keeplive包进行确认建立BGP的邻居关系,并生成邻居表
邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系,周期保活TCP会话
邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;
本地对BGP表中的路由进行选择,默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
若出现错误信息,邻居间将使用Notification报文进行报错操作
收敛完成,仅keeplive周期保活即可,默认保活时间为180S,周期发送时间为60S。
若发生结构突变,则将直接发送UPdate报文进行触发更新。
BGP的路由黑洞
AS间通过EBGP对等体交换路由信息,然后通过单播将获取到的路由信息发送给IBGP对等体,使AS所有运行BGP的设备拥有了所有AS的路由信息,如下:R3从R1学到AS100的1.0.0.0/8的路由信息,然后通过单播传给R7,R7传给R2,所有AS内运行BGP的路由器都学到了1.0.0.0/8的路由信息

 

矢量协议的特点是谁发给我这条路由,我到这条路由就找谁,如果R7想ping1.0.0.0/8,那R7就会将ping包发送给R3,由R3转发。在R7发送ping包时,它首先查看路由表查找R3的位置,假设R7通过R4找R3,那R7就会将ping包发给R4,当这个ping包来到R4上,R4看二层是找自己的,解封装看三层,发现这个ping包的DIP为1.0.0.0/8网段的,但R4上没有运行BGP,没有收到关于1.0.0.0/8网段的路由信息,所以R4就会把这个ping包丢弃,虽然R7上有1.0.0.0/8的网段路由信息,但无法与R1通信,这就是BGP的路由黑洞。
BGP的路由黑洞:由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,显示控制层面可达,但是,数据层面,流量经过未运行BGP协议的路由器时,无法通过,形成路由黑洞。
解决路由黑洞
AS内的设备全部运行BGP:既然路由黑洞是未运行BGP协议的路由器导致的,那就让AS内所有的设备都运行BGP获取路由信息。但这个方法是不现实的,可以承载越多路由信息的路由器其价格也就越昂贵,每一台运行BGP的路由器需要承载所有AS的路由信息,可以承载世界上几万几十万的路由信息的路由器价格也是上百万的,所以,是不可能让AS内的设备拥有全部路由信息的。


AS内运行BGP的设备将从BGP重发布到AS内运行的IGP协议里:通过重发布将BGP所有路由导入到IGP协议里,同样需要AS内所有设备可以承载所有AS的路由信息,同第一条一样不现实。

 

物理、逻辑拓扑全连:直接让AS内运行BGP协议的所有设备互相连接,使IBGP间通信不需要经过未运行BGP协议的设备,但由一个AS地理范围可能很大,IBGP间距离较远,所以使用真实链路连接IBGP也不现实,所以我们可以用GRE/MGRE等vpn技术,通过虚拟链路连接IBGP对等体


MPLS:当前工程中主要使用的解决BGP路由黑洞方案,MPLS后续会讲。

BGP为了防止BGP路由黑洞的产生,提出了BGP同步机制:即当一台路由器从自己IBGP对等体学习到一条BGP路由时,他不能将这条路由通告给自己的EBGP对等体,除非他又从IGP协议中(包含静态路由)学习到这条路由。也就是要求IBGP路由和IGP路由同步。
同步要求将BGP路由重发布到IGP协议中,但我们已经说过这种方法并不现实,所以华为设备默认关闭同步机制。

注意:在目前我们的学习情况下,我们在做BGP实验时都是用第一种方法解决路由黑洞

BGP的防环机制—水平分割
EBGP水平分割
下图中有三个AS,其中AS:1的一条路由信息传给了AS:2,AS:2将这条路由信息传给AS:3,如果AS:3又将这条路由信息传回给AS:1且AS:1将这条路由信息加表,就会导致路由环路。


BGP协议在路由条目中有一条专门记录所经过的AS编号的路径属性,在上图中AS:1发出的路由信息会携带编号1,AS:2将这条路由信息转发给R3时,添加编号2;AS:3将这条路由信息转发给AS:1时,也会添加编号3;最终AS:1收到这条路由信息的AS_PATH属性记录了1、2、3,R1发现该属性中有自己的编号则拒绝接受这条路由信息,避免环路产出。
IBGP水平分割
下图在AS:64513内,R2、R3、R4两两建邻,如果R2发布一条路由信息由R4到R3,再到R2,并且R3转发给R2的路由信息改变了R2的路由表,则会形成环路。

 


因为BGP的AS-BY-AS的特性,导致AS内部被认为是一个整体,在默认情况下,路由的属性是不会发生变化的,所以,无法通过属性来进行防环。

IBGP水平分割:当一个路由器从一个IBGP对等体出学习到某一条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。


IBGP水平分割可以有效的解决IBGP对等体之间路由回传造成的环路问题,但是,也会引发路由信息传递障碍问题。如下图中,如果R1学到其他AS的路由信息,它会将这些路由信息传递给R2,但由于IBGP水平分割,R2不能将这些路由信息传递给R3,R3就无法获取R1收集到的路由信息。

 
想要避免IBGP水平分割带来的问题,可以让所有AS内部运行BGP的路由器均建立IBGP对等体关系, 这种建立全连的IBGP对等体的方案并不是最佳解决方案,因为,当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系,将造成大量的资源浪费,并且降低网络的可扩展性。

BGP存在两个技术专门用于解决IBGP水平分割带来的问题:1.路由反射器,2.联邦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25

文章目录 1、简介2、GitHub地址3、环境信息4、安装5、访问Grafana1、简介 Prometheus-operator帮助我们快速创建Prometheus+Grafana+Alertmanager等服务,而kube-prometheus更加完整的帮助我们搭建全套监控体系,这包括部署多个 Prometheus 和 Alertmanager 实例, 指标导出器…

分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测

分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测 目录 分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.BWO-TCN-Attention数据分类预测程序; 2.无Attention适用于MATLAB 2022b版及以上版本&#xf…

【CHI】(十三)链路层

本章介绍了链路层,链路层为节点之间的基于数据包的通信和跨链路的互连提供了一种简化的机制。它包含以下几部分: IntroductionLinkFlitChannelPortNode interface definitionsIncreasing inter-port bandwidthChannel interface signalsFlit packet defi…

【0基础入门Python Web笔记】二、python 之逻辑运算和制流程语句

二、python 之逻辑运算和制流程语句 逻辑运算控制流程语句条件语句(if语句)循环结构(for循环、while循环)continue、break和pass关键字控制流程语句的嵌套以及elif 更多实战项目可进入下方官网 逻辑运算 Python提供基本的逻辑运算…

JavaScript基础(Dom操作)

目录 一,BOM模型1.1,BOM可实现功能 二,Window对象的常用属性2.1,Window对象的常用方法2.1-1,open()和close()方法 三,History对象四,Location对象五,Document对象的常用方法六&#…

el-table 实现动态表头 静态内容 根据数据显示动态输入框

直接放代码了 <el-table:data"form.tableDataA"borderstripestyle"width: 100%; margin-top: 20px"><el-table-columnv-for"(category, categoryIndex) in form.tableDataA":key"categoryIndex":label"category.name&qu…

软考高级架构师下篇-12层次式架构设计理论与实践

目录 1. 考情分析2. 层次式体系结构概述3. 表现层框架设计4. 中间层框架设计5. 数据访问层设计6. 数据架构规划与设计7. 物联网层次架构设计8. 前文回顾1. 考情分析 根据考试大纲,层次式架构设计理论与实践知识点会涉及单选题型(约占2~5分)和案例题(25分),本小时内容偏重于方…

Postman接口自动化测试实例

一.实例背景 在实际业务中&#xff0c;经常会出现让用户输入用户密码进行验证的场景。而为了安全&#xff0c;一般都会先请求后台服务器获取一个随机数做为盐值&#xff0c;然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器&#xff0c;后台服务器接到…

【MySQL系列】ALTER语句详解,以及UPDATE,DELECT,TRUNCATE语句的使用+区别

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

PHP数组

数组是一个能在单个变量中存储多个值的特殊变量。 数组的英文是array,可以存入多个不同类型的数据&#xff0c;是一个复合数据类型。 在 PHP 中&#xff0c;有三种类型的数组&#xff1a; 索引数组 - 带有数字 ID 键的数组关联数组 - 带有指定的键的数组&#xff0c;每个键关…

ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况

有时我们在家办公&#xff0c;需要控制实验室的笔记本&#xff0c;因此好用的远程控制软件会让我们的工作事半功倍&#xff01; 常用的远程控制软件有ToDesk&#xff0c;向日葵&#xff0c;以及TeamViewer&#xff0c;但是为感觉ToDesk更流畅一些&#xff0c;所以这里介绍一下…

系统报错mfc100u.dll丢失的解决方法(完美解决dll问题)

系统文件mfc100u.dll丢失和出错&#xff0c;极有可能是盗号木马、流氓软件等恶意程序所导致&#xff0c;其感染相关文件并加载起来&#xff0c;一旦杀毒软件删除被感染的文件&#xff0c;就会导致相关组件缺失&#xff0c;游戏等常用软件运行不起来&#xff0c;且提示“无法启动…

QT 使用图表

目录 1、概念 1.1 坐标轴-QAbstractAxis 1.2 系列-QAbstractSeries 1.3 图例-Legend 1.4 图表-QChart 1.5 视图-QChartView 2、 QT 折线图 2.1 Qt 折线图介绍 2.2 Qt 折线图实现 Qt 图表是专门用来数据可视化的控件 Qt 图表包含折线、饼图、棒图、散点图、范围图等。…

【工具】 删除Chrome安装的“创建快捷方式”

创建Chrome的快捷方式&#xff0c;可以放在桌面&#xff0c;想用时双击就可以打开网页&#xff0c;比书签&#xff08;brookmark&#xff09;结构化管理更方便。 但是&#xff0c;安装一时爽&#xff0c;卸载有问题。 如果用 windows 控制面板\所有控制面板项\程序和功能 卸载…

Redis五大基本数据类型及其使用场景

文章目录 **一 什么是NoSQL&#xff1f;****二 redis是什么&#xff1f;****三 redis五大基本类型**1 String&#xff08;字符串&#xff09;**应用场景** 2 List&#xff08;列表&#xff09;**应用场景** 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合…

Window下部署使用Stable Diffusion AI开源项目绘图

Window下部署使用Stable Diffusion AI开源项目绘图 前言前提条件相关介绍Stable Diffusion AI绘图下载项目环境要求环境下载运行项目打开网址&#xff0c;即可体验文字生成图像&#xff08;txt2img&#xff09;庐山瀑布 参考 本文里面的风景图&#xff0c;均由Stable Diffusion…

VM部署CentOS并且设置网络

最近在准备学习k8s&#xff0c;需要部署服务器&#xff0c;所以需要在虚拟机中部署centOS服务&#xff0c;接下来我们将一步一步到操作来&#xff0c;如何在VM中不是CentOS系统。 一&#xff1a;环境 VMware Workstation Pro 链接&#xff1a;https://pan.baidu.com/s/1hSKr…

积跬步至千里 || 矩阵可视化

矩阵可视化 矩阵可以很方面地展示事物两两之间的关系&#xff0c;这种关系可以通过矩阵可视化的方式进行简单监控。 定义一个通用类 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pdclass matrix_monitor():def __init…

Spring Clould 搜索技术 - elasticsearch

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识ES-什么是elasticsearch&#xff08;P77&#xff0c;P78&#xff09; 1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…

java学习004

常用数据结构对应 php中常用的数据结构是Array数组&#xff0c;相对的在java开发中常用的数据结构是ArrayList和HashMap&#xff0c;它们可以看成是array的拆分&#xff0c;一种简单的对应关系为 PHPJAVAArray: array(1,2,3)ArrayListlArray: array(“name” > “jack”,“…