当前位置: 首页 > news >正文

1、HCIP之RSTP协议与STP相关安全配置

目录

RSTP—快速生成树协议

STP

STP的缺点:

STP的选举(Listening状态中):

RSTP

P/A(提议/同意)机制

同步机制:

边缘端口的配置:

RSTP的端口角色划分:

ensp模拟器BUG:

Topology Change

STP的安全设置:

BPDU保护:

BPDU过滤:

根保护:

TC-BPDU泛洪保护:


RSTP—快速生成树协议

STP

STP的缺点:

        收敛慢,从初始状态到完全收敛至少需要经过30S的时间(Listening—learning—forwarding,三个阶段,每个阶段需要15S的时间)

STP的选举(Listening状态中):

BPDU的四个参数:

1、ROOT ID:根桥(ROOT)的桥ID(Bridge ID)

2、COST:到达根桥(ROOT)的开销值,G口默认为2000,越小越优先

3、Bridge ID:优先级+实例编号+MAC地址,其中优先级默认为32768,实例编号默认位0。优先级在设置的时候必须是4096的整数倍且越小越优先

4、Port ID:优先级+端口编号,优先级默认为128

根桥的选举规则:

对比自身和收到的Bridge ID,也就是优先级➕MAC地址

1、先比较优先级,越小越优先;

2、当优先级一样时对比MAC地址,越小越优先;

3、根桥上的端口都是指定端口

根端口(非根交换机)的选举规则:

1、比较到达根桥的开销COST,越小越优先;

2、比较接口对端交换机的BID,越小越优先;

3、比较对端接口的PID,越小越优先;

4、比较本设备上的PID,越小越优先;(少见)

指定端口(非必须)的选举规则:

1、根桥的所有接口都是指定接口;

2、比较接口去往根桥的开销,越小越优先;

3、比较接口对端交换机的BID,越小越优先;

4、比较本端接口的PID,越小越优先;(少见)

堵塞端口(Blocked port):

1、如果不是以上阐述的三者之一,就堵塞该端口,此时环路被消除;

2、如果两交换机的两条或以上的端口互联,则选出一个根端口后剩下都是阻塞端口;

RSTP

P/A(提议/同意)机制

        为了加快指定端口和根端口互联链路上的两端口快速进入转发状态(避免30秒的等待)而采取的机制。

        P/A协商要求在点对点全双工链路。

 P/A机制的过程:

1、当两设备的RSTP功能启动时都认为自己是根桥且会向对方发送一份BPDU,其中的P位值会设置为1(提议),A位也是1(同意)

2、当B收到对方的BPDU后与自己的“四个参数”作对比,如果选举失败就会向A发送一个A位为1的BPDU,且立即将自己端口中选举成功的一方设置为RP(根端口),选举失败的端口设置为AP(阻塞端口)

3、A收到B发送的同意BPDU后会立即将自己的端口都设置为DP(指定端口)

这里假设A的桥ID最大,B次之。

以上过程为秒级切换,但会有环路风险问题,因此需要引入同步机制

 

同步机制:

在对端设备接受同意前会将其他接口全部阻塞,会造成网络的一个中断但是周期很短,如下:

 以上拓扑中各角色的选举过程:

1、设备RSTP功能启动时都认为自己是根桥切会向对方发送一份BPDU,其中的P位值会设置为1(提议),A位也是1(同意)

2、当B收到A发送的BPDU后与自己的“四个参数”作对比,如果选举失败就会向A发送一个A位为1的BPDU,且立即将自己端口中选举成功的一方(G0/0/1)设置为RP(根端口),选举失败的端口(G0/0/2)会暂时阻塞直到A收到同意消息后,才会继续向C发送提议消息

3、当C收到A发送的BPDU后与自己的“四个参数”作对比,如果选举失败就会向A发送一个A位为1的BPDU,且立即将自己端口中选举成功的一方(G0/0/1)设置为RP(根端口),选举失败的端口(G0/0/2)会暂时阻塞直到A收到同意消息后,才会继续向B发送提议消息

4、当A收到了BC的同意后,此时B和C会互相发送提议消息但是各自也都已经同意了A的提议不能在将对方认为是ROOT。此时BC之间的线路不会立即收敛,但并不会影响网络之间正常的通信

这里假设A的桥ID最大,B次之,C最小

以上可以解决拓扑变化后收敛速度慢的问题,但是还会出现一个问题:

        如果此时C上连接了一个主机PC,C会向PC发送提议消息但是PC是没有回复功能的,所以会导致连接PC的接口收敛速度为30秒,如下图:

解决方法:

        在C连接终端的接口G0/0/24上配置边缘端口,边缘端口会直接进入转发状态而不协商,但是也发送BPDU报文,需要管理员手动配置;

        当边缘端口收到BPDU报文的时候就会放弃边缘端口的特性,重新进行生成树的计算。

边缘端口的配置:

全局下(推荐):

stp edged-port default 

接口上:

int g0/0/1
stp edged-port enable 

还有一种情况:

以上拓扑中各角色的选举过程:

1、A和B互相发送携带提议字段(P=1)的BPDU报文,由于A的桥ID大于B的,所以会忽略B的BPDU并向B发送同意消息且立即将G0/0/1接口设置为DP(指定接口)

2、B在发现A应该是根桥后发送同意消息并立即将自己的G0/0/1接口设置为RP(根接口)同时阻塞G0/0/2接口

3、当B收到A的同意消息后将G0/0/2接口打开向C发送A的提议消息

4、当C收到A的提议消息后向A发送同意消息同时立即将G0/0/2接口设置为RP(根接口)

这里假设A的桥ID最大,B次之,C最小

RSTP的端口角色划分:

STP的三种角色:根端口、指定端口和阻塞端口

RSTP定义了两种心的端口角色:备份端口(Backup Port)和预备端口(Alternate Port),其中备份端口是备份指定端口的,经常用在有集线器的拓扑上;而预备端口也叫替代端口,是用于替代根端口的,当根端口失效时,替代端口秒级替换上

RSTP中端口状态的重新划分:

以上可以分为两种情况:

1、有P/A机制的话端口会直接从Discarding状态到Forwarding状态;

2、如果没有P/A机制就会正常的经过两个周期才能转换到Forwarding状;

ensp模拟器BUG:

        无法模拟设备的自动刷新MAC地址表,会导致网络中拓扑结构发生变化时无法及时更新MAC地址表而造成的网络中断,需要手动刷新或者从另一端重新PING一下进行MAC地址表的更新。

        真机不会出现这个问题,因为真机会对拓扑的变化而做出相应的处理:Topology Change消息

Topology Change

        当交换机发现某个端口发生故障而阻塞后,会将MAC地址表中相应的MAC与端口绑定的表项删除,且会向网络中发送一条TC消息(拓扑变化消息),当其他设备接受到后会触发MAC地址表的更新,会将除了接受TC消息以外的所有端口的MAC地址表项删除(边缘端口除外),完成后会将TC消息发送给下一个设备。

STP的安全设置:

BPDU保护:

        当我们要求边缘端口只允许连接主机不能连接交换机时会进行配置BPDU保护(默认情况下边缘端口可以连接交换机,但会放弃边缘端口的特性),当启用BPDU保护的时候,如果边缘端口收到了BPDU消息,则会立即关闭该接口

配置方法:

stp bpdu-protection

        BPDU保护的功能依赖于边缘端口的设置,输入以上命令后,所有边缘端口都会自动开启BPDU保护,收到BPDU消息后会关闭接口

        注意:如果是边缘端口检测到BPDU后重新进行生成树计算的端口,也会被关闭,应该进入该接口下关闭边缘端口功能

BPDU过滤:

        当收到BPDU消息后不会关闭接口,而是丢弃BPDU消息

配置方法:

stp bpdu-filter default

根保护:

        当我们在原有的网络拓扑上新接入一台交换机且不希望它成为根桥时会配置根保护(一般在核心交换机或汇聚交换机上)

        根保护功能会继续接收BPUD消息,但是不接受会抢占自己根位置的BPDU

        注意:不能在根端口(RP)启用!!!

配置方法:

int g0/0/1
stp root-protection

        此时,G0/0/1接口的另一端如果接入了优先级更高的交换机,会拒绝接受它的BPDU信息并把接口设置为丢弃状态,就相当于将其隔离在这个网络之外了,只能修改优先级比根桥小才能让其重新加入这个网络

TC-BPDU泛洪保护:

        限制拓扑变化消息的发送次数,防止不断地恶意TC-BPDU消息,当TC-BPDU消息在两秒内(默认)的次数达到我们设置的上限时就会拒绝此类BPDU

stp tc-protection threshold 

相关文章:

1、HCIP之RSTP协议与STP相关安全配置

目录 RSTP—快速生成树协议 STP STP的缺点: STP的选举(Listening状态中): RSTP P/A(提议/同意)机制 同步机制: 边缘端口的配置: RSTP的端口角色划分: ensp模拟…...

Linux云服务器docker使用教程

诸神缄默不语-个人CSDN博文目录 我用的是腾讯云服务器,操作系统是OpenCloudOS 9,基本上可以当特色版CentOS用。 docker安装跟各个系统关系太大了,我就不写了。OpenCloudOS 9安装docker见这篇博文:腾讯云服务器使用教程 文章目录 …...

如何从android的webview 取得页面上的数据

要从Android的WebView中获取页面上的数据,通常有几种常见的方法: JavaScript Interface:通过JavaScript和Android Interface进行通信。这种方法允许你在JavaScript中调用Android的方法,反之亦然。 Evaluate JavaScript&#xff…...

VTK知识学习(12)- 读取PNG图像

1、代码 private void ShowPngImage(){vtkPNGReader pngReader vtkPNGReader.New();pngReader.SetFileName("D:\\图像\\boxes\\cardboard_boxes_01.png");pngReader.Update();vtkImageActor imageActor vtkImageActor.New();imageActor.SetInputData(pngReader.Get…...

Springboot项目搭建(3)-更改用户信息与文件上传

1.概要 前一章节完成了用户信息的注册、登录、详细信息查询,以及线程池与拦截器技术。 这一章完善了用户信息更新/更改功能,包括昵称、邮箱、头像、密码等... 而后接触到了本地上传和云上传,其二者区别: 选择本地上传还是云上…...

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析

目录 python成绩分级 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python成绩分级 2024年6月 python编程等级考试二级编程题 一、题目要求 …...

android 如何获取当前 Activity 的类名和包名

其一:getClass().getSimpleName() public static String getTopActivity(Context context){ ActivityManager am (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); ComponentName cn am.getRunningTasks(1).get(0).topAct…...

Spring Boot 项目 myblog 整理

myblog 项目是一个典型的 Spring Boot 项目,主要包括用户注册、登录、文章管理(创建、查询、更新、删除)等功能。 1. 项目结构与依赖设置 项目初始化与依赖 使用 Spring Initializr 创建项目。引入必要的依赖包: Spring Boot W…...

uniapp 城市选择插件

uniapp城市选择插件 如上图 地址 完整demo <template><view><city-selectcityClick"cityClick":formatName"formatName":activeCity"activeCity":hotCity"hotCity":obtainCitys"obtainCitys":isSearch&quo…...

测试工程师如何在面试中脱颖而出

目录 1.平时工作中是怎么去测的&#xff1f; 2.B/S架构和C/S架构区别 3.B/S架构的系统从哪些点去测&#xff1f; 4.你为什么能够做测试这一行&#xff1f;&#xff08;根据个人情况分析理解&#xff09; 5.你认为测试的目的是什么&#xff1f; 6.软件测试的流程&#xff…...

Mesh路由组网

Mesh无线网格网络&#xff0c;多跳&#xff08;multi-hop&#xff09;网络&#xff0c;为解决全屋覆盖信号&#xff0c;一般用于家庭网络和小型企业 原理 网关路由器&#xff08;主路由&#xff0c;连接光猫&#xff09;&#xff0c;Mesh路由器&#xff08;子路由&#xff0c;…...

LeetCode131:分割回文串

题目链接&#xff1a;131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a; class Solution { private:vector<vector<string>> result;vector<string> path; // 放已经回文的子串void backtracking (const string& s, int s…...

详细解析 devmem 命令:在 Linux 系统中直接访问内存的利器

目录 什么是 devmem&#xff1f;为什么需要 devmem&#xff1f;devmem 命令的基本语法devmem 在硬件调试中的应用安全性与风险devmem 的常见应用示例结论 在嵌入式系统开发和硬件调试中&#xff0c;开发者经常需要直接与硬件打交道&#xff0c;访问和修改内存中某些特定区域的内…...

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…...

【前端知识】nodejs项目配置package.json深入解读

package.json详细解读 文件解读一、文件结构二、字段详解三、使用场景四、注意事项 组件版本匹配规则 文件解读 package.json 文件是 Node.js 项目中的一个核心配置文件&#xff0c;它位于项目的根目录下&#xff0c;并包含项目的基本信息、依赖关系、脚本、版本等内容。以下是…...

XGBOOST算法Python实现(保姆级)

摘要 XGBoost算法&#xff08;eXtreme Gradient Boosting&#xff09;在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。 目录 0 绪论 一、材料准备 二、算法原理 三、算法Python实现 3…...

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境&#xff0c;使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载&#xff1a; MAVEN下载传送…...

输出比较简介

输出比较简介 主要是用来输出PWM波形&#xff0c;这个波形是驱动电机的&#xff08;智能车和机器人等&#xff09;必要条件 OC&#xff08;Output Compare&#xff09;输出比较&#xff0c;还有IC&#xff0c;全称是Input Capture&#xff0c;意为输入捕获&#xff0c;还有CC…...

什么是反向 DNS 查找以及它的作用是什么?

反向DNS查询&#xff08;rDNS&#xff09;是一种技术&#xff0c;用于确定与某个IP地址对应的域名。当我们对一个IP地址进行反向DNS查询时&#xff0c;实际上是向域名系统&#xff08;DNS&#xff09;的特殊部分请求信息&#xff0c;这部分被称为PTR记录。PTR记录会返回与这个I…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...