HCIP —— BGP 基础 (下)

BGP 的状态机

--- 建立对等体之间的TCP会话:指定建立对等体的对象

六种状态机

Idle状态

Idle 等待状态(相当于OSPF的down状态)--- 采用TCP单播建邻

Idle 状态下,启动BGP协议后必须指定建立对等体的目标之后,才能进入下一个状态(依靠IGP协议:静态、直连等

Connect 状态

Connect 状态下,BGP对等体之间开始建立TCP会话连接

Opensent 状态

如果TCP会话建立成功则进入到OpenSent状态。

Active 状态

如果TCP会话建立失败则进入Active状态(尝试状态)。

OpenConfirm 状态

如果认可对等体发过来的Open报文中的参数,首先会回复一个Keepalive报文用来确认Open报文中的参数已近被我认可,并且进入OpenConfirm 状态。

OpenSent 状态

如果TCP会话(三次握手)建立成功则进入OpenSent 状态,在OpenSent状态下,开始发送Open报文去建立BGP对等体关系

Established 状态

如果收到对等体发送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报文进行对等体之间的周期保活,默认的保活时间为 180 S (hold time), 发送周期为 60 S
  7. 如果这个过程中出现任何问题,都将使用Notification报文进行 告警
  8. 如果拓扑结构出现突变(增加/删除),则将使用Update报文来进行触发更新,并通告给其他的对等体。

BGP的机制

BGP的路由黑洞

存在问题:控制层面的可达数据层面实际不可达

IGP内部没有运行BGP的设备,当访问BGP网段流量来到这些设备之后,由于控制层面可达,数据层面不可达(因为这些设备没有运行BGP,没有BGP的网段的路由信息),那么将丢弃这些流量。

解决方法:

  1. 所有设备均运行BGP
  2. 重发布
  3. MPLS (Multi-Protocol Label Switching 多标签交换协议)--- 最早用来专门解决BGP路由黑洞,运用MPLS - VPN 广泛。

原理:MPLS是根据标签来转发的,而不是路由条目。只要边界路由器上有BGP路由,接下来路由传播在内部路由器走MPLS,通过标签转发,即使路由有黑洞,也可以通,因为我内部走的是标签。

同步机制  --- 当设备学习到一条BGP路由时,如果本地的IGP路由不可达,则将视该BGP路由无效。  首先 可以先通告命令 查看路由条目:display ip routing-table 。  ---- 默认关闭的

BGP的防环 --- 水平分割

EBGP的水平分割

BGP 为了解决EBGP路由环路的问题,设计了一个AS - PATH的属性,设备在发出AS 时会携带本AS的AS号,当路由信息携带该AS号,那么对应该AS的设备不会接受该路由

同时AS - PATH 属性也是BGP的一个选路依据,当其他属性一致时,会选择AS - PATH属性 更短的路径。

IBGP的水平分割

当运行BGP的设备 从IBGP对等体处学习到一条IBGP路由,那么将不再转发给其他的IBGP对等体。

解决方案  --- 在IBGP对等体直接构建全连的IBGP对等体关系

引起两个问题:

1.增加拓扑的复杂性导致网络的可拓展性差。

2.增大了资源的占用。

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

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

相关文章

python中getattr

一、getattr的基本概念 getattr是python的一个内置函数,说白了也很简单,就是判断一个方法或者属性是否存在于一个对象中若是存在则运行这个属性或者方法。 getattr(object, name[, default])object:对象名称 name:属性或者方法名…

uniappp框架——初始化vue3项目(搭建ai项目第一步)

文章目录 ⭐前言💖 小程序系列文章 ⭐uniapp创建项目💖 初始化项目💖 uni实例生命周期💖 组件生命周期💖 页面调用💖 页面通讯💖 路由 ⭐搭建首页⭐form表单校验页面⭐总结⭐结束 ⭐前言 大家好…

6.题目:编号2490 小蓝的括号串1

题目: ### 这道题主要考察stack #include<bits/stdc.h> using namespace std; const int N105; stack<char> stk; char s[N]; int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;cin>>s1;bool anstrue;for(int i1;i<n;i){…

Verilog基础:$random系统函数的使用

相关阅读 Verilog基础​编辑https://blog.csdn.net/weixin_45791458/category_12263729.html $random系统函数语法的BNF范式如下所示&#xff0c;有关BNF范式相关内容&#xff0c;可以浏览以往文章Verilog基础&#xff1a;巴科斯范式(BNF)。 $random系统函数在每次调用时返回一…

第四节JavaScript 条件语句、循环语句、break与continue语句

一、JavaScript条件语句 在通常的代码中&#xff0c;我们有一些需要决定执行不同动作&#xff0c;这就可以在代码中使用条件语句来完成。 下面是我们常使用的条件语句&#xff1a; if语句&#xff1a;只有当指定条件是true时&#xff0c;执行条件内代码。if…else语句&#…

【Unity动画】什么是任意状态(Any state)

&#xff08;Any state&#xff09;可以从某个状态A直接切换到另一个状态 B\C\D\E\F 比如A到C的过渡&#xff0c;直接设置从Any state 到C的过渡线触发参数即可。而不需要让A到C直接在连接&#xff0c;同样&#xff0c;B到C之间也无需直接链接。 这样设计是在每一个动画之间都…

Redis 持久化 —— 超详细操作演示!

四、Redis 持久化 四、Redis 持久化4.1 持久化基本原理4.2 RDB持久化4.3 AOF持久化4.4 RDB与AOF对比4.5 持久化技术转型 五、Redis 主从集群六、Redis 分布式系统七、Redis 缓存八、Lua脚本详解九、分布式锁 数据库系列文章&#xff1a; 关系型数据库: MySQL —— 基础语法大全…

kotlin - ViewBinding

前言 为什么用ViewBinding&#xff0c;而不用findViewById()&#xff0c;这个有很多优秀的博主都做了讲解&#xff0c;就不再列出了。 可参考下列博主的文章&#xff1a; kotlin ViewBinding的使用 文章里也给出了如何在gradle中做出相应的配置。 &#xff08;我建议先看这位博…

windows 10多用户同时远程登陆配置【笔记】

系统环境&多用户访问情况&#xff1a; 1、【win】【R】键入【gpedit.msc】 2、依次选择【计算机配置】→ 【管理模板】 → 【Windows组件】 → 【远程桌面服务】 → 【远程桌面会话主机】 →【连接】 2.1、右键 【允许用户通过使用远程桌面服务进行远程连接】 编辑 …

Python字典去重竟然比集合去重快速40多倍

这里写目录标题 对比代码结果图代码解析 对比代码 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任务组_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

基于SpringBoot 2+Layui实现的管理后台系统源码+数据库+安装使用说明

springboot-plus 一个基于SpringBoot 2 的管理后台系统,包含了用户管理&#xff0c;组织机构管理&#xff0c;角色管理&#xff0c;功能点管理&#xff0c;菜单管理&#xff0c;权限分配&#xff0c;数据权限分配&#xff0c;代码生成等功能 相比其他开源的后台系统&#xff0…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束&#xff0c;虽然我的水平和很多大佬还有比较大的差距&#xff0c;但所有奖也算是拿满了&#xff1a; 专家评选前三名&#xff0c;以及投票榜前十&#xff1a;~ 每周的阶段性获奖者&#xff1a; 下面…

c++实现ros通信

这里用的到是自定义的msgcpp发布消息 主要包括两个msg&#xff0c;一个订阅者和一个发布者&#xff0c;以及cmakelists的相应修改。 首先是自定义的msg&#xff0c;功能包里面来自定义msg也是可以的&#xff1a; 新建功能包 catkin_create_pkg pkg roscpp std_msgs message_g…

模块一——双指针:611.有效三角形的个数

文章目录 题目描述算法原理解法一&#xff1a;暴力求解(超时&#xff09;解法二&#xff1a;排序&#xff0b;双指针 代码实现 题目描述 题目链接&#xff1a;611.有效三角形的个数 算法原理 解法一&#xff1a;暴力求解(超时&#xff09; 三层for循环枚举出所有的三元组&…

一款基于ESP32的迷你四足机器人

一、软件介绍 增加自定义动作模式&#xff0c;可以在小程序中自定义一个最多10个步骤的动作。 附件中&#xff1a;带自定模式固件bin.zip esp32c3固件文件 烧录下图设置 无串口版本esp32c3开发板烧录前先按住BOOT键再插线进入烧录模式&#xff0c;LoadMode选择USB。 二、AP…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本课目标&#xff08;Objective&#xff09; 掌握CSS三大特性理解什么是盒子模型掌握内边距padding的用法掌握外边距margin的用法 1. CSS的层叠&#xff0c;继承&#xff0c;优先级 1.1 CSS层叠 层叠&#xff1a;是指多个CSS样式叠加到同一个元…

详解ZNS SSD基本原理

ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;降低整体的SSD成本 降…

自治调优!人大金仓解放DBA双手

数据库系统的性能是确保整个应用系统高效运转的关键因素&#xff0c;因此数据库性能调优工作至关重要。KingbaseES通过将人工调优过程内化为数据库内核&#xff0c;成功实现了自治调优。这种创新的调优方案为DBA提供了更高效且准确的性能调优途径&#xff0c;同时也显著降低了数…

下划线css

思路&#xff1a; Q1:为什么下划线不用边框border 而使用背景色呢&#xff1f; 要实现动画效果&#xff0c;随着行盒的方向走 新知识点 线性渐变&#xff1a;linear-gradient 方法&#xff1a;linear-gradient(direction, color-stop1, color-stop2, ...) 详情见&#xff1a…

MySQL- in(集合) 和 not in(...) 的使用和练习

1. 基础用法 mysql中in常用于where表达式中&#xff0c;其作用是查询某个范围内的数据。 select * from where field in (value1,value2,value3,…) 当 IN 前面加上 NOT 运算符时&#xff0c;表示与 IN 相反的意思&#xff0c;即不在这些列表项内选择 select * from where …