BGP的基础知识

news2024/11/15 13:35:37

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状态,反复尝试连接
ActiveTCP连接没建立成功,反复尝试TCP连接
OpenSentTCP连接已经建立成功,开始发送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路由无效。默认处于关闭状态。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp优化h5项目-摇树优化,gzip压缩和删除console.log

1.摇树优化 勾选摇树优化,打包删除死代码 2.gzip压缩和删除console.log 安装插件webpack和compression-webpack-plugin webpack插件 npm install webpack4.46.0 --save-devcompression-webpack-plugin插件 npm install compression-webpack-plugin6.1.1 --save-devconst Com…

java+ 如何动态配置业务规则组

思路 1. 实现在页面上的动态配置规则组(2张数据表枚举类serviceimplaction) 2. 从数据库中表staffmoverules(规则明细表)或者staffmovetyperule(规则组表) ,根据传入类型,取出规则编…

[C/C++]数据结构 栈和队列()

一:栈 1.1 栈的概念及结构 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守先进后出的原则. 压栈:栈的插入操作叫做进栈/压栈/入栈,将数据插入栈顶 出栈:栈的删除操作也叫出…

自学嵌入式,已经会用stm32做各种小东西了

自学嵌入式,已经会用stm32做各种小东西了 1、stm32 工程中,定义一个变量,记录复位次数,即复位一次变量加一。要求不许用备份寄存器和 flash 保存信息。本题只讨论不断电热启动情况,至于冷启动,不在此讨论。…

整理MLAI学习路径图

干货分享: 下面给出一个笔者自己整理的GitHub仓库:https://github.com/isLinXu/awesome-road-map,里面包含了一些可供参考的学习路径和思维导图,并整理微软、meta、谷歌、Kaggle以及华为、百度、阿里、腾讯、讯飞等相关的学习资源…

stm32入门建议跳过固件库去学习hal库吗?

stm32入门建议跳过固件库去学习hal库吗? 如果要以单片机作为以后的工作方向,建议还是深入了解一下单片机的原理与机制,比如串口收发的时候,内部的寄存器是怎么工作的,中断又是怎么工作的,然后我们又是怎么进行中断处…

【广州华锐互动】自然灾害科普3D体验展厅:培养安全意识,共创美好未来

在人类历史的进程中,灾难始终是我们不可避免的挑战。地震、洪水、火灾等自然灾害无情地摧毁我们的家园,带走我们的亲人。然而,随着科技的进步,我们已经有了更多的手段来预防和应对这些灾难。在这个背景下,自然灾害科普…

嵌入式系统中相关的高质量开源项目

关于GitHub,可能很多人误以为这是互联网人的专属,其实并不是,那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目(像RT-Thread、AWTK等大家都熟知的就不介绍了):Avem 项目链接: ht…

实力进阶,教你使用thinkphp6开发一款商城系统

0.开篇 你好!很高兴你能点开这个教程,相信你对这个教程有了那么一点点兴趣,接下来占用你一点点时间,邀你浏览一下本章内容,希望能够让你更加有兴趣去学完这个教程。 作者我是一名九零后程序员,搬砖了好几…

山西电力市场日前价格预测【2023-11-19】

1.日前价格预测 预测说明: 如上图所示,预测明日(2023-11-19)山西电力市场全天平均日前电价为591.63元/MWh。其中,最高日前电价为1500.00元/MWh,预计出现在16:45~20:45。最低日前电价为268.57元/MWh&#x…

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…

美国经典人工智能教材第3版出版!

美国经典人工智能教材,人工智能的百科全书《人工智能》(第3版)出版!新增深度学习及人工智能编程等内容,理论阐释结合动手实践。 人工智能 第3版 关于作者 史蒂芬.卢奇(Stephen Lucci)拥有纽约…

FreeRtos 任务切换深入分析

一、背景知识: 1、任务切换包含三个基本流程:保护现场、更新TCB、恢复现场并跳转 2、freertos的任务切换是在xPortPendSVHandler 中断函数中完成的 3、中断函数在调用之前,硬件已经保存了r0,r1,r2,r3,r12,r14(LR),r15(pc),恢复…

深入理解Linux网络笔记(七):异常TCP连接建立情况、如何查看是否有连接队列溢出发生

本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source 5、深度理解TCP连接建立过程(二) 4&…

顺序表(数据结构与算法)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

【Spring】AOP进阶-JoinPoint和ProceedingJoinPoint详解

文章目录 1. 前言2. JoinPoint简介3. 获取被增强方法的相关信息4. ProceedingJoinPoint简介5. 获取环绕通知方法的相关信息6. 总结 1. 前言 在Spring AOP中,JoinPoint和ProceedingJoinPoint都是关键的接口,用于在切面中获取方法的相关信息以及控制方法的…

国科大数据挖掘期末复习——聚类分析

聚类分析 将物理或抽象对象的集合分组成为由类似的对象组成的多个类的过程被称为聚类。由聚类所生 成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。 聚类属于无监督学习(unsupervised learning&…

整形数据和浮点型数据在内存中的存储差别

愿所有美好如期而遇 我们先来看代码,猜猜结果是什么呢? int main() {//以整型数据的方式存储int n 10;float* m (float*)&n;//以整型数据的方式读取printf("%d\n", n);//以浮点型数据的方式2读取printf("%f\n", *m);printf(&…

揭秘“ChatGPT之父”突遭罢免内幕:从开发者大会起,几件事已有征兆

腾讯新闻《潜望》 纪振宇 发自硅谷 美国时间11月17日午间,OpenAI首席执行官,被称为“ChatGPT之父”的山姆奥特曼突遭董事会罢免。 OpenAI在当天发布的官方声明称,董事会启动了一项特别的调查,结论是奥特曼在与董事会沟通过程中没…

基于JAYA算法优化概率神经网络PNN的分类预测 - 附代码

基于JAYA算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于JAYA算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于JAYA优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…