超详细的--STP理论
前言
为了提高网络可靠性,交换网络中通常会使用冗余链路,然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树STP(Spanning Tree Protocol ) 可以在提高可靠性的同时又能避免环路带来的各种问题。
二层网络设计需求和问题:
为了提高可靠性,交换机之间会通过多条链路相连,从而避免单点故障
但同时会带来一些灾难性的环路问题。
环路问题:
广播风暴
MAC地址表产生震荡
在广播风暴的同时,MAC地址表也一直在变换,
如下图的信息提示,MAC地址对应的接口发生了震荡,从2口变到了1口。
STP
STP: Spanning Tree Protocol, 生成树协议,提供两大功能:
- 消除环路:通过阻断冗余链路来消除网络中可能存在的环路,就可以消除刚刚上面碰到的问题
- 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。
STP 操作
:通过构造一棵树来消除网络中的环路。( STP发明于80年代,那时候的网桥就是现在的交换机)
STP选举
STP选举是以各自发送BPDU数据包中的字段来相互比较来决定谁是根桥。
BPDU:Bridge Protocol Data Unit – 桥协议数据单元(STP工作协议)
使用组播: 01-80-C2-00-00-00 ( 可以记忆一下,面试小细节)
BPDU包含桥ID,路径开销,端口ID,计时器等参数。
BPDU类型:
配置BPDU:
- 选举根交换机以及确定每个交换机端口的角色和状态
- 在初始化过程中,每个桥都主动发送配置BPDU。
- 在网络拓扑稳定以后,只有根桥主动发送BPDU,其它交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- 发送周期为Hello time
- 老化时间为MAX-Age
ensp 默认开启 MSTP
- 拓扑变更通告BPDU-TCN BPDU
- 下游交换机感知到拓扑发生变化时向上游发送的拓扑变换通知
Topology Change 拓扑变化
BPDU字段详解
字段中重要且用于根桥选举的4个字段:
桥ID: BID - Bridge ID
- 用于在STP中唯一标识一个交换机,由两部分组成:
- 桥优先级:高16位
- 桥MAC地址:低48位
- 用于在STP中唯一标识一个交换机,由两部分组成:
端口ID : PID - port ID
用于在STP中唯一标识一个交换机上的端口,由两部分组成:
- 端口优先级:高8位
- 端口编号:低8位
路径开销:Path Cost
- 路径开销用于衡量桥与桥之间路径的优劣,越低越好
- STP中每条链路都具有开销值
两个标准下的开销值:(802.1D-1998 标准是 98年的标准,所以它的开销是较小的,随着技术的跟进,带宽逐渐增大,所以 标准 也会与时俱进的)
- 根路径开销:Root Path Cost
- 确定到达根桥的最短路径,并生成无环树状网络
- 到根桥的路径上所有的路径开销之和
STP中端口的角色
根端口:去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据。在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
根端口保证了交换机与根桥之间工作路径的唯一性和最优性。
指定端口:
向下行网桥转发BPDU的端口。
根桥上的所有端口均为指定端口。
阻塞端口:非根端口和非指定端口的其余端口被会进行逻辑上的阻塞,只能接受根桥发送来的STP协议数据帧。
STP选举过程
根桥选举
每一台交换机启动STP后,都认为自己是根桥
BID 最小的成为根桥(先比较优先级,再比较MAC)
根端口选举
是在一个非根交换机上选根端口 注意是 在一个(它自己)!!!!!
非根交换机在选择根端口时分别根据该端口的
- 根路径开销 | 比
- 对端BID | 较
- 对端PID | 方
- 本端PID V 向
以刚刚的拓扑为例:我们已经知道LSW3是根桥,先根据规则来判断选举出哪些口是根端口。
根桥上(LSW3) 上的端口都为指定端口
先看LSW1 , 交换机上有两个口,一个是G0/0/1,一个是G0/0/2,在它们之中选出根端口
首先比较它们端口的根路径:
同理算出LSW2的G0/0/3口 也为根端口,验证查看
指定端口选举
非根交换机在选择指定端口时分别根据该端口的
根路径开销 | 比较
本端BID | 方
本端PID V 向
- 指定端口的责任是向下行路由器发送BPDU
- 现在要从LSW2和LSW1中的G0/0/2 、G0/0/1 选出 指定端口
- 查看这两个口的根路径开销都为20000,
- 往下,比较 本端BID
验证
预备端口
未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
所以根据规则,LSW1的G0/0/1就为预备端口并给予堵塞。
STP 端口状态 & 计时器
STP 端口状态
disabled port: 端口没有接线
blocking: 阻塞
Listening: 监听
STP的计时器
Max Age :
- 最长未接受BPDU时间
- 所连的交换机不能超过20台。
所以不建议在二层网络中连续的接多个交换机,一是不利于STP协议的计算降低效率,二是大于20台时,非根桥会丢弃BPDU。
链路中根桥会一直发送BPDU,如果被阻塞端口的交换机超过 Max Age 时间没有收到,则会认为自己就是根桥,端口就不会被堵塞了,然后如下图改变状态。(这也是刚开始启动交换机时,各个端口的状态变化)
15s 监听 – > 15s 学习 – > 转发
STP拓扑变化
根桥故障
交换机出现故障时,当前二层网络下的设备恢复网络一共需要50 S 。
直连链路故障
我们测试一下:
- 查看LSW3的端口
关闭 G0/0/1 口, 查看 状态变化。
时间是 STP 的缺点之一
非直连链路故障
同样测试一下;
- 开始时
- 关闭LSW2的g0/0/1的端口后
根据Message的大小(经过一台交换机加1) 证明 BUPD是从LSW3那边发过来的
拓扑改变导致MAC地址表错误
拓扑如下:
STP正常运行,PC1 ping PC2 通过ARP询问MAC地址后正常通信,LSW1也记下了所对应的MAC地址。
–> 所以有了 TCN
- 检测到拓扑改变的交换机通过根端口向根桥发送TCN,上游交换机收到TCN后回应TCA,让后下游交换机停止发送TCN,再通过根端口发送TCN直到根桥收到,根桥通过制定端口发送TC通知所有下游交换机把MAC地址表记录老化时间从300s变为15s
如:
关掉后:
超详细的--STP理论相关推荐
- 超详细讲解CTC理论和实战
CTC理论和实战 CTC简介 CTC算法详解 对齐 损失函数 预测 CTC算法的特性 条件独立 对齐 使用CTC进行变长验证码识别 问题描述和解决方法 安装WarpCTC 得到tensorflow源代 ...
- ELK日志分析系统 超详细!!理论+实操讲解!!
文章目录 一.ELK日志分析系统简介 1.1日志处理的步骤 1.2 ELK日志分析系统三部分 1.3日志服务器(一般) 二.Elasticsearch介绍 2.1 Elasticsearch概述 2. ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (八)————最优性条件
陈宝林<最优化理论与算法>超详细学习笔记 (八)----最优性条件 无约束问题的极值条件 必要条件 二阶充分条件 充要条件 约束极值问题的最优性条件 不等式约束的一阶最优性条件 无约束问题 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (七)————第五章 运输问题
陈宝林<最优化理论与算法>超详细学习笔记 (七)----第五章 运输问题 第1节 运输问题的数学模型 第2节 表上作业法 2.1 确定初始基可行解 2.2 最优解的判别 2.3 改进的方法 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (四)————第四章 对偶理论
陈宝林<最优化理论与算法>超详细学习笔记 (四)----第四章 对偶理论 1. 对偶问题的提出 2. 线性规划的对偶理论 2.1 原问题与对偶问题的关系 2.2 对偶问题的基本性质 3. ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (一)————第十章 使用导数的最优化方法(最速下降法、牛顿法、阻尼牛顿法)
陈宝林<最优化理论与算法>超详细学习笔记 (一)----第十章 使用导数的最优化方法(最速下降法.牛顿法.阻尼牛顿法) 写在前面 第十章 使用导数的最优化方法 最速下降法 牛顿法 阻尼牛顿 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (五)————最优性条件 之 KKT条件
陈宝林<最优化理论与算法>超详细学习笔记 (五)----最优性条件 之 KKT条件 Lagrange对偶问题 原问题 Lagrange函数 Lagrange对偶函数 强/弱对偶性 弱对偶性 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (二)————补充知识(凸集) 第二章 线性规划的基本性质
陈宝林<最优化理论与算法>超详细学习笔记 (二)----补充知识 凸集 & 第二章 线性规划的基本性质 补充知识 凸集 方向与极方向 表示定理 择一定理 第一章 线性规划的基本性质 ...
- 一份超详细的数据科学路线图!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:魔王.陈萍,来源:机器之心 从头开始学习数据科学的免费资源. 如何 ...
最新文章
- java 学习 --------接口概念
- 多线程生产者和消费者
- wxWidgets:更新到最新版本的 wxWidgets
- 扩展thinkphp5的redis类方法
- 在 docker中 运行 mono /jexus server 并部署asp.net mvc站点
- P1423 小玉在游泳(python3实现)
- Mr.J--JS学习(Clone)
- java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈
- 拒绝低效办公,9个超实用职场必备国产软件推荐
- python手写数字识别实验报告_机器学习python实战之手写数字识别
- Google浏览器Chrome,永久开启flash支持的办法
- crmeb重新安装_CRMEB
- 学点负面情绪的抗争能力
- 知乎 | 大家都见过哪些让你虎躯一震的代码?
- 4.Scanner类、Random类、ArrayList 类
- Word不计算封面、目录页数将正文页码修改为第几页共几页的格式
- go mysql报错Error 1406: Data truncation: Data too long for column ‘content‘ at row 1
- nginx 配置网站通用的伪静态代码
- 【关于NI CAN USB-8473在实际应用中的案例分析】
- 【数据库SQL实战】将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005