BGP详解

简介:

BGP:

BGP是建立在TCP之上的  端口号为179

AS:(两者是区分开来的)特指被相关机构管理  运行相同路由协议的一组路由器(中国人只能和中国人说,外国人和外国人说)

BGP是运用在AS之间的

BGP的前身是EGP,EGP只能在AS之间简单的传递路由信息,不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题,BGP一般运营在运营商的核心网

BGP的邻居发现:

wKioL1mbycPBpwz4AABChgVkIys122.png-wh_50

先启动BGP的一端先发起TCP连接,如图所示,RTB先启动BGP协议,RTB使用随机端口号向RTA的179端口发起TCP连接。

路由器是通过物理口去建立邻居的;Loopback也能建立,前提是必须要有路由,需要建立一个动态路由或者静态路由。

源是12.1.1.1 目的2.2.2.2

源是2.2.2.2 目的 10.1.1.1

没有匹配,即三次握手没有成功


AS号的分类:

1-64511 由IANA统一分配

64512-65535 私有企业或者自行分配

特点:BGP可以跨越多跳路由器建立邻居关系,非常吊

邻居关系:

EBGP(外部网关边界协议):运行在不同AS之间的BGP路由器建立的邻居关系,默认的优先级是225,默认的TTL是1

IBGP(内部BGP协议):运行在相同AS之间BGP路由器建立的邻居关系,默认的优先级是225,默认的TTL是255

[R1]router id 1.1.1.1   (标识路由器)

[R1]bgp 100 (配置邻居关系)

[R1-bgp]peer 2.2.2.2 as-number 100 (peer后面是对端邻居的接口地址,as-number后面是邻居路由器所在的AS号,AS号相同,就是IBGP邻居关系,AS号不同,就是EBGP邻居关系)

PS:建立IBGP邻居关系是时,一般使用loopback接口的IP地址,因为loopback接口开启后一直处于UP状态,只要保证路由可达,邻居关系就会处于稳定状态。而建立EBGP邻居关系时,一般使用直接接口的IP地址,因为EBGP是跨AS建立邻居关系,邻居关系建立之前非直连接口之间的路由不可达

BGP邻居关系配置的优化

在路由器上敲

[R1]router id 1.1.1.1   (标识路由器)

[R1]bgp 100 (配置邻居关系)

[R1-bgp]peer 2.2.2.2 as-number 100

[R1-bgp]peer 2.2.2.2 connect-interface LoopBack 0 (修改更新源,路由器默认是物理口建立可连接)


报文:

Open keeplive update route-refresh notification

open:邻居建立发送的第一个报文 协商参数

keeplive:周期性发送,去看链路是否正常

update:去更新路由信息

①更新路由属性相同的多个路由条目

②更新路由不可达的路由条目(删除)

route-refresh:当路由策略改变的时候会发送该报文去请求新的路由条目

notification:当邻居失效就会发送这个报文

一:Idle:BGP的初始状态,不会去接受任何邻居发来的任何请求

二:connect:如果成功了就进入OPEN SENT状态,如果失败了会根据重传计时器重新发起链接,同时切换到Active状态。也就是说,只要在Connect状态,就证明BGP正在试图建立连接,而不是等候。

①连接成功

②连接不成功

③请求超时

三:active:请求连接,向邻居去请求连接的,在OPENSENT的时候,如果BGP链接忽然丢失,也会进入这个状态。

第一种 请求成功 connect

第二种  请求不成功

第三种  请求超时

四:opensent

对收来的open报文进行检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive 报文,并复位Keepalive 计时器,开始计时。协商成功  进入下一个状态

五:opencomfirm:如果收到了一个Keepalive 报文,就转入Established 阶段,BGP邻居关系就建立起来了。如果TCP连接中断,就退回到Idle 状态。

六:establish:BGP 邻居关系已经建立,这时,BGP将和它的邻居们交换Update 报文

TTL:经过一台路由器,并且经过解封装和重新封装以后的源地址和目标地址不变,这时候,TTL减1

BGP通告原则之一:仅将自己最优的路由发给邻居

wKioL1mbyeqj1NopAAAoGxJNue4427.png-wh_50

将10.1.1.0/24这个路由发布给邻居

下一跳自我:

看上图可知,10.1.1.0/24的下一跳是1.1.1.1,他就会把1.1.1.1发送给邻居,其他路由器也就接受到了这个1.1.1.1,但是,这些路由器并不能直接通信,因为下一跳是直接到达1.1.1.1了,所以,不是最优的路由,没有到达直连的那个路由器,所以,需要修改下一跳,把下一跳设置为从传到他的那个路由

wKioL1mbygPyQ8mSAAAUC72Dulw324.png-wh_50

如上图所示,它的下一跳就改变了,他就能把这个最优路由发布给其他的邻居,其他的路由器通过这个直连的下一跳,也就能通信了。

配置命令:[R2-bgp]peer 4.4.4.4 next-hop-local

BGP通告原则之二:通过EBGP获得的最优路由发布给所有BGP邻居

BGP通告原则之三:从IBGP学到的最优路由不会发给其他的IBGP邻居、(也是IBGP的水平分割)

wKioL1mbyiKzadjBAAB4d1ZahNQ311.png-wh_50

R3从R1通过EBGP学来的10.1.1.0/24的路由发送给R2,但是R2不会通过IBGP把10.1.1.0/24学来的路由发送给R4,所以,R4是不会接收到10.1.1.0/24这条路由的

BGP通告原则之四:BGP与IGP的同步

也就是把BGP的路由表和IGP的路由表同步

华为默认关闭

wKioL1mbyjqDUVqtAAAQNhaNsjk046.png-wh_50

IBGP水平分割:从IBGP学到的最优路由不会发给其他的IBGP邻居、

路由黑洞

解决:

1.全互联(TCP会话过多,资源占用就大了)

2.路由的引入,把BGP的路由引入到IGP中

前两个不是太靠谱,因为BGP有上万个路由条目,IGP只有几千个

3.MPLS

BGP路由信息处理

wKiom1mbylzyvgtdAABD89axTTk522.png-wh_50

当从BGP邻居接收到Update报文时,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径

得出的最佳路径被存储到本地BGP路由表(local_RIB)中,然后被提交给本地IP路由表

BGP的属性

wKioL1mbymrQ0qNcAAA_aqw-rJI001.png-wh_50

公认:在Update报文当中,可以支持和识别的属性

①公认必遵:在Update报文当中,必须携带的属性

②公认任意:可以不携带在update报文当中

可选:在update报文当中,可以不识别的属性

可选过渡:本BGP路由器不识别的属性,但是可以把该属性传递给邻居

可选非过渡:本BGP路由器忽略的属性,并且不传递给邻居

BGP属性-Origin

Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的

orgin的三种属性:

i表明BGP路由通过network命令注入

wKioL1mbypCjL8paAAAQbHNygzQ875.png

e表明BGP路由是从EGP学来的(现在EGP不用了,但是可以通过路由的策略修改为e)

?即incomplete(路由引入)表明BGP路由通过其他方式学来的路由信息

三种Origin属性的优先级为:i>e>Incomplete(?)

通过EGP学习来的   E

incomplete(路由引入)

AS-PATH:记录了路由经过的所有AS的编号

规定AS_PATH越短(记录的AS编号越少),路径越优

BGP属性-Next_hop

1.EBGP邻居之间采用直连接口建立邻居关系,EBGP邻居在相互通告路由时会修改Next-hop为自己的出接口IP;

2.IBGP邻居通常采用Loopback接口建立邻居,当路由时本路由器起源的,在发送给邻居之后Next-hop该为自己的更新源地址,这样即使网络中出现链路故障,只要Next-hop可达,同样可以访问目的网段,提高网络稳定性

MED(以小为优)

仅在相邻的两个AS之间传递,收到此属性的AS不会再通告给任何第三方AS,用于判断流量进入AS时的最佳路由 和Local_Preference一样,也是设置怎么走

Local_Preference(以大为优)

Local_Preference属性仅在IBGP邻居之间有效,不通告给其他的AS。它表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由 设置怎么走,往哪里走,控制往哪里走,默认是100


BGP路由优选原则

BGP路由器将路由通告给邻居后,每个BGP邻居都会进行路由选择,路由选择有三种情况

1.该路由到达目的地唯一的路由,直接优选

2,对到达同一目的地的路由多条路由,优选优先级最高的

3.对到达同一目的地具有相同优先级的多条路由,必须用更细的原则去选择一条最优的

一般来说,BGP计算路由优先级的规则如下

1.丢弃下一跳不可达的路由

2.优选Preference_Value值最高的路由(私有属性,进本地有效)

3.优选本地优先级最高的路由

4.优选手动聚合>自动聚合>network>import>从对等体学到的

5.优选AS_Path最短的路由

6.起源类型IGP>EGP>Incomplete

7.对于来自同一AS的路由,优选MED值最小

8.优选从EBGP学来的路由(EBGP>IBGP)

9.优选AS内部IGP的Metric最小的路由

如果前九条都是一样的话,就会出现负载分担

但是,BGP不会让他出现负载分担的

10.优选Cluster_List最短的路由

11.优选Orginator_ID最小的路由

12.优选Router_ID最小的路由器发布的路由

13.优选具有较小的IP地址的邻居学来的路由


Preference_Value是BGP的私有属性(华为的私有属性),Preference_Value相当于BGP选路规则的Weight值,仅在本地路由器生效,Preference_Value值越大,越优先


引入一个默认路由

第一种方式

[R1]bgp 100

[R1-bgp]peer 2.2.2.2 default-route-advertise

第二种方式

[R1]ip route-static 0.0.0.0 0.0.0.0 NULL 0(目的是让默认路由出现在igp路由表里)

[R1-bgp]network 0.0.0.0 0


手工汇总:

第一种:

[R1]ip route-static 123.0.0.0 8 NULL 0

[R1-bgp]network 123.0.0.0 8

第二种:

aggregate 123.0.0.0 8

收到的是明细路由和汇总路由



路由反射器(RR)

1.客户机

2.服务器

3.非客户机

相当于一面镜子,通过这面镜子进行反射

[R2-bgp]peer 3.3.3.3 reflect-client

怎么改最优

①从EBGP学来的路由会发给所有的客户机和非客户机

②从非客户机学来的路由会发给所有的客户机

③从客户机学来的路由会发给除了该客户机以外的所有客户机和非客



本文转自 towardly 51CTO博客,原文链接:本文转自 towardly 51CTO博客,原文链接:

相关文章
|
5月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
604 0
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模板),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、丰富的组件库和灵活的布局设计,适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业快速实现数字化转型。
完全开源!国内首个完全开源JAVA企业级低代码平台
|
8月前
|
存储 人工智能 Cloud Native
“爆款”批量生成,如何实现一键创作 AI 有声绘本?
“爆款”批量生成,如何实现一键创作 AI 有声绘本?
202 0
|
11月前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
305 6
【AI系统】QNNPack 算法
WK
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
465 2
|
Java 关系型数据库 MySQL
JDBC数据库驱动的下载与安装与连接
在使用 JDBC 之前,需要下载相应的 JDBC 驱动程序,该驱动程序应该与你使用的数据库的版本相对应。可以在数据库官网上找到相应的 JDBC 驱动程序。
768 0
|
Web App开发
PCIe TLP Prefix & PASID TLP Prefix介绍
PCIe TLP Prefix & PASID TLP Prefix介绍
2976 0
PCIe TLP Prefix & PASID TLP Prefix介绍
|
运维 Kubernetes 负载均衡
ASM 助力商米科技服务网格技术落地周期缩短,提升更新迭代效率70%
基于服务网格ASM提供的免运维、易升级以及产品丰富支持能力,让产研团队集中享受ServiceMesh带来的价值。ASM缩短了服务网格技术落地周期75%(由月缩短为周),提升更新迭代效率70%,缩短异常排错成本80%以及控制面资源成本100%节省。
2791 1
ASM 助力商米科技服务网格技术落地周期缩短,提升更新迭代效率70%
|
前端开发 rax JavaScript
使用跨端解决方案Rax编写鸿蒙应用
华为的鸿蒙系统自发布以来,便广受关注。它支持 JavaScript 编写应用的特性,对于前端开发者来说意义非凡。跨端解决方案Rax的团队也于8月份开始与HarmonyOS JS UI框架团队合作,旨在支持使用Rax编写HarmonyOS应用。经过几个月的实践之后,他们决定将内部细节的技术实现带到第十六届 D2 的舞台上与大家分享,让我们人手都能开发一款属于自己的 HarmonyOS 应用。
841 0
使用跨端解决方案Rax编写鸿蒙应用