1.须知

1.1.角色

首先了解STP运行中使用的角色

1.2.STP运行的接口状态

2.ROOT根桥设备怎么选出来?

为了达到了解整个二层交换的情况,STP会让设备产生一种特殊的报文BPDU在交换中进行流转,BPDU携带很多信息,比如COST值,ROOT ID,MAC地址,优先级等等。

每台设备都会产生BPDU,然后选举一个主要设备,相当于主要所有交换的脑子设备,这个设备我们叫做根桥(ROOT),这个设备产生的BPDU我们叫做最优的BPDU(后面都叫做BPDU)。

2.1.优先级

0-61440,以4096的倍数为优先级,默认为32768

越小越优,比如4096就比32768来的优。

2.2.MAC地址

越小越优

选举出来ROOT设备,选完ROOT之后正常情况下就只有ROOT发送BPDU了,相当于整个网络中的所有人都要听老大的话

3.RP端口(根端口)怎么选出来?

根端口在每台非ROOT设备上只有一个,选举ROOT端口的目的是为了能选出最快的一条链路来收到老大(ROOT)发送的命令(BPDU)以下是选举规则

3.1.Cost Path Root 根路径开销

这个属性表示了从本身的某个接口出发到ROOT的距离,当然是越小越优先,毕竟开销是体现链路质量的一种参考值。

文中开销值计算方式

带宽

COST

10M

100

100M

19

1000M

4

例如:

此时网络中的根桥为SW1

SW2直连SW2的端口到达根桥开销最小所以成为SW2的RP端口

SW3直连SW1的端口到达根桥的开销大于SW3直连SW2的端口到达根桥的开销,所以SW3直连SW2的端口成为RP端口

3.2. 上游桥ID(MAC地址)

这个属性用于当我们发现有两条以上链路开销相同的时候,到达root经过的第一台设备的桥ID值,越小越优先

例如:

SW4左右两边到达根桥SW1经过的开销一致,选择经过SW2到达根桥的接口成为RP端口,因为SW2的桥ID小于SW3的桥ID

3.3.上游端口ID(接口大小)

如果两台设备连接两条链路,这时候两个接口到根桥的路径开销和上游桥ID是相同的,所以此时我们要用接口优先级来判断,当然不能判断自己的接口,要判断上游接口,且默认情况下接口的编号越小优先级就越小。

例如:

SW2到达根桥的两条链路开销和经过的设备都是一致的,所以这时候要判定上端设备的端口哪个比较小,G1的端口优先级小于G2的端口优先级,所以SW2连接G1的G4端口成为了RP端口。

4.选举DP、NDP端口

RP端口用来接收BPDU信息,那对应的就需要有接口发送BPDU信息,发送BPDU指定(DP)端口,此时RP选择完成后可以同时确定,RP对端的接口就是DP接口,同时因为根桥是整个网络的BPDU发送者,所以根桥上有所端口都是DP端口。那么STP解决环路就在这一步进行,因为如果有环路风险的链路上会碰到两端的接口都要成为DP端口的情况,此时根据前和RP端口选举相同的规则就可以判定哪个接口能成功成为DP接口,成为DP接口失败的就是阻塞端口我们可以称为非DP接口或者备份端口(AP)。

4.1.COST值

根据到达根桥的开销选举DP口和阻塞口

例如:

此时由于SW2和SW3的RP口已经确定,RP端口的对端成为DP接口,由于一台设备只能有一个RP端口其他只能DP接口或者非DP接口,SW1和SW3互联的接口都想要成为DP接口,此时SW1的接口到达根桥开销0(到自己),SW3从RP口出发到根桥开销38,所以SW1连接SW3的接口成为DP接口,SW3的接口成为了阻塞端口。

4.2.MAC地址

根据桥ID(MAC地址)大小选举DP口和阻塞口

例如:

此时由于SW2和SW3的RP口已经确定,RP端口的对端成为DP接口,由于一台设备只能有一个RP端口其他只能DP接口或者非DP接口,SW2和SW3互联接口都想要成为DP接口,且两台设备从RP出发到达根桥的开销相同,所以此时比较SW2和SW3的桥ID大小,SW2更优先,所以SW2的接口成为DP端口,SW3的端口成为阻塞端口。

4.3.接口ID

根据接口ID大小选举DP口和阻塞口

这种情况往往只会发生在交换机的两个接口接环时

例如:

此时SW1自身两条链路接入HUB,或者认为一根网线连自己两个端口也行,此时G1端口编号小默认端口优先级小,所以G1成为DP,G2成为NDP

5.端口状态

STP在一个网络中收敛需要时间,这个时间大概是35s左右,在选举的过程中二层依然存在环路,此时如果进行数据转发,任然产生数据环路,当交换机性能较差时,可能导致交换机直接宕机;

为了防止上述情况发生,将端口分为多个状态,只有当STP将产生环路的端口阻塞完成之后,才将端口数据放行;

STP的端口状态如下:

Disable

不转发任何信息

Listening

接收且发送BPDU信息,不学习MAC地址,不转发数据

Learning

接收且发送BPDU信息,学习MAC地址,不转发数据

Forwarding

接收且发送BPDU信息,学习MAC地址,转发数据

Blocking

接收但不发送BPDU信息,不学习MAC地址,不转发数据

注意:STP端口状态中Listening与Learning两个状态有固定等待时间,这个固定等待时间称为:Forwarded delay(转发延迟) 默认15 s,这就是为什么STP收敛时间大概需要经过35s的原因;

Blocking状态的接口会继续监听BPDU信息,如果超过连续的20s时间仍然没有收到来自root的最优BPDU信息,端口将开始进入listening,进行STP重新计算;

STP端口状态迁移过程;

6.故障恢复过程

当STP网络中的接口发生故障或者新接入接口的时候都会触发网络的重新计算,我们可以分成三种情况讨论

6.1.案例一,连接PC场景

不影响故障前的STP网络环境

像交换机连接电脑、打印机、路由器等,这些不需要参与生成树计算的端口产生了UP/DOWM的情况,不需要进行STP的重新计算。

什么是边缘端口?:

如何使端口不参与STP计算,在STP中有一种端口称为边缘端口(edge),主要用于交换机连接终端设备,默认所有交换机端口需要参与生成树计算,那么无论任何端口需要经过30s的时间才能进入转发状态,但是终端设备不需要进行STP计算,所以将连接终端的设备置为边缘端口,可以直接进入转发状态,不需要参与端口状态的迁移,从而加速收敛时间,并且,该端口的UP/DOWM不会影响到STP的计算;

6.2.案例二,单向链路故障

情况2:接口灯不灭但是数据无法正常发送的故障

由于网络中单向链路故障(SW1无法发送信息到SW2,SW2成功发送信息到SW1),但是端口处于up状态,无法直接检测到网络端口发生变化,需要等待老化时间,才能开始进行STP的计算,这种故障发生的情况大概率是物理层故障,比如光纤问题,光模块问题,网线问题等;

1、SW2产生单向链路故障,无法接收到由root发送的最优BPDU信息,SW2无法触发向下游交换机转发最优的BPDU,开始进入最优BPDU老化周期20s,同时由于SW2DP端口无法继续发送BPDU信息,Blocking端口无法继续接受到任何的BPDU信息,也开始等待20s老化时间;

2、SW2 20s老化时间结束,将从root接收的最优BPDU删除,认为自身为根桥,发送以自己为根的BPDU信息,同时SW3的 AP端口已经经过20s等待,进入Listening 状态;

3、SW3收到同时两个root信息,由 SW1通告的root具有最小桥ID,由SW2通告的root具有次优桥IDS,SW3进行对比,发现,最优的root为SW1,SW3将最优的根桥信息转发给SW2,并且产生TCN BPDU信息从RP端口持续转发,上游交换机收到TCN BPDU信息,会立即回应一个TCA BPDU,确认对方的TCN BPDU,通时阻止对法继续发送TCN BPDU,其他交换机继续向root,当root收到TCN BPDU,立即回应TCA,并且开始向网络中发送TC BPDU,网络中所有交换机收到TC BPDU后,将MAC地址表老化时间设定为15s(默认为300s) ,进行MAC地址的重新学习;

4、等待NDP端口迁移到Forwarding状态,网络即可正常进行数据转发;

拓扑收敛时间:

6.3.案例三,物理接口down

  1. 当运行稳定的STP网络中,SW2检测到自身参与STP计算的端口从Forwarding状态迁移到disable,SW2检测到自身端口状态发生改变,从可以转发端口不间断(2s/次)发送TCN BPDU,通告给其他交换机;

  2. 若其他交换机正常端口收到TCN BDPU,直接回应TCA BPDU以阻止TCN BPDU,且向上游的root方向转发TCN BPDU给其他交换机;若收到TCN BDPU消息由NDP端口收到,NDP端口立即从Blocking进入listening,并回复TCA BPDU 终止TCN BPDU的发送,并向上游的root方向转发;

  3. Root收到TCN BPDU,立即回应TCA BPDU阻止对方继续发送TCN BPDU,然后root立即发送TC BPDU 通告网络中的所有交换机,网络拓扑发生变化,将MAC地址老化时间设定为15s(默认300s),让MAC地址15s后可以重新学习;

  4. 等待NDP端口迁移至转发状态,网络即可恢复正常的通讯;

拓扑收敛时间:

7.总结

生成树原理虽然多,但配置简单,可以说生成树算是交换内容里面比较难理解的,越难理解的技术越能拉开差距,希望大家好好研究,尽早成才。

-------------------------------------------

关注微信公众号从此学网络不迷路

funnetyoo

让人脑壳疼的STP是如何做到防止环路?-理论相关推荐

  1. 左手忙工作,右手忙版权,真让人脑壳疼

    这是学习笔记的第 2129 篇文章 最近两天找到了一些小小的成就感,那就是拖延很久的事情终于被我拿下了. 说事情的难度吧,有点,也不是那么难,但是脑子里面就是没有太当回事,结果时间匆匆而过,就差点烂尾 ...

  2. 前端基本功(三):javascript中让人脑壳疼的this关键字

    javascript 的this关键字 1. this是什么 this是javascript中的关键字之一.他是使用对象自动生成的一个内部对象,只能在对象内部使用.它会根据上下文而进行变化,并且会在不 ...

  3. java多态优化多个if_脑壳疼!代码中那么多“烦人”的if else

    if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到脑壳疼. 图片来自 Pexels 例如下面这个伪代码: 是不是很崩溃?虽然他是伪代码,并且看起来也 ...

  4. 剑灵灵动区服务器位置,《剑灵》这波电二合区,属实让我脑壳疼

    公长少苍:第一次玩剑灵我还是阴阳道仙的,第一次回坑的时候就变成花样年华了 发布于 2020-08-16 23:03:32 涵畅1:这都无所谓 主要是自打合完区就没有不卡过 发布于 2020-08-16 ...

  5. java 不要使用魔法值_可别在代码中写那么多魔法值了,脑壳疼!

    1. 前言 重构老代码中遇到了不少类似下面这种写法: public void attend(string value) { if ("0".equals(value)) { //t ...

  6. 没有人会疼自己没人会懂,会理解:伤感空间日志

    没有人会疼自己没人会懂,会理解:伤感空间日志 - 没有人会疼自己没人会懂,会理解:伤感空间日志 [文字控] 她从来不会接受任何不美好的东西 她要的一切都必须是最完美的 可是这么久,她却从来不记得,自己 ...

  7. 20220512之脑壳疼

    个人博客地址:http://www.ltang.me/2022/05/12/20220512/ 最近的工作,包括但不限于: 评需求.评工作量.定排期, 跟人家说:不要再变啦再变自杀 沟通.看文档.写接 ...

  8. Android Q 存储新特性适配脑壳疼?指南来了!

    码个蛋(codeegg)第 692 次推文 原文: https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg 简单回顾下:Android Q 适配 之 存储新 ...

  9. 月亮在没人看时存在吗?实在性和量子理论

    这是一篇翻译的老资料,鉴于"博客大巴"删掉了很多帖子,这里再重发一次,作为存档! 完整翻译在这里,奇迹号提供 这是一篇非常美妙的文章[N. David Mermin, Is the ...

最新文章

  1. 为什么安装的是gpu版本训练时还是用的cpu?_免费GPU哪家强?谷歌Kaggle vs. Colab | 硬核评测...
  2. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
  3. HDU1160:FatMouse's Speed(最长上升子序列,不错的题)
  4. 关于系统用户数,并发用户数,在线用户数,吞吐量
  5. Angular中使用双向数据绑定操作表单的input、checkboc、radio、select、textarea实现简单的人员登记系统实例
  6. qpython numpy_Python-Numpy全面精简教程
  7. 前端学习(529):等分布局存在间距得实现得解决方案
  8. STM32工作笔记001---认识开发板资源-以正点原子战舰版开发板为例
  9. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
  10. SNIP物体检测算法理解
  11. 牛客网——程序员代码面试指南(更新ing)
  12. Axure中级教程:管理后台内容模板(中继器全交互详解)
  13. 黑盒测试AND白盒测试
  14. ζ(2)的夹逼代数证明
  15. 修真院七种教学工具之学习日报
  16. Web开发技术课程设计
  17. Android攻城狮AsyncTask
  18. 嵌入式 Linux平台 C程序 交叉编译技术
  19. 最新QQ辅助任务平台悬赏接单源码+支持商家等功能
  20. 给chrome浏览器设置壁纸

热门文章

  1. python处理ps_python中怎么像PS一样处理图像
  2. Android项目打包生成apk文件
  3. poj 1228 Grandpa's Estate
  4. 信息网络传播中的服务器标准,信息网络传播行为的界定标准研究
  5. php云片网api的运用,如何实现php调用云片网接口发送短信
  6. nextcloud+onlyoffice 打开wps方法,亲测方案。
  7. spark shell 启动 出现org.apache.spark.SparkException: Found both spark.executor.extraClassPath and SPARK
  8. 开发都有那些岗位呢?
  9. 首席信息官将被首席数据官取代?
  10. Linux内核相关论坛问题回复(1)