HCNA Routing&Switching之STP选举规则
前文我们了解了二层环路对网络带来的影响,以及STP工作流程和BPDU数据包结构和相关字段的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15121317.html;今天我们主要来讨论下STP具体选举流程相关话题;
我们知道STP主要是通过构造“一棵树”来消除二层网络中可能存在的环路,同时当活动链路发生故障,激活备份链路,从而实现网络的可靠性;它的工作过程过程如下

1、选举根桥的规则
根桥的选举规则很简单,在STP初始化时,每一台交换机都会认为自己是根桥,都会发送BPDU;根据各交换机发送的BPDU中BID,首先比较各自的BID中优先级,优先级最小对应设备就是根桥;如果优先级都一样,则比较BID中的mac地址,mac地址最小的设备成为根桥;根桥选举完成以后,非根桥设备不主动发送BPDU,只有根桥设备主动发送BPDU,非根桥设备转发BPDU;

提示:选举根桥只是比较各交换机发送的BPDU中的BID,BID最小为根桥(BID由优先级和mac地址组成,先比较优先级,再比较MAC地址);上图中swa的优先级最小,所以swa就是根桥;剩下的swb和swc就是非根桥设备;
2、在非根桥设备上选举根端口

提示:选举根端口是通过对应端口收到的BPDU中,根据端口的根路径开销(到达根桥最短路径开销)、对端BID、对端PID和本端PID;根路径开销最小的端口成为根端口;如果根路径开销一样,则比较对端BID(对应端口连接的设备);比较对端BID的规则是先比较优先级,优先级小者,对应端口成为根端口;如果对端BID中的优先级一样,则比较mac地址,对端mac地址小者成为根端口;如果对端的BID一样,则比较对端PID,比较对端PID的规则是,先比较优先级,再比较端口编号,对端pid中优先级小者为根端口;如果优先级一样,则端口编号小者为根端口;如果对端PID也一样,则比较本端PID,比较规则和比较对端PID一样,先比较优先级,优先级小者为根端口,如果优先级一样,则比较端口编号,端口编号小者为根端口;
实验:如下拓扑,三个交换机都运行STP,看看对应的根桥和根端口是怎么选举的;

分析:上述拓扑,首先三个交换机会选举根桥,根桥的选举只看BID;从上面的信息可以看到当三个交换机发送的BID中的优先级都有一样(默认都是32768),此时根桥的选举就比较那个mac较小了,最小的是根桥;很容易判断出s2就是根桥;那么s1的eth0/0/1就是根端口(因为在s1上eth0/0/1到达根桥的路径开销为200000,而eth0/0/2到达根桥的路径开销为400000);同样在s3上eth0/0/2是根端口;
验证:查看s2是否是根桥?

提示:可以看到在s2上查看stp接口信息,其中root的mac地址就是s2自己 ,说明s2就是根;
验证:在s1上查看对应根端口是否是eth0/0/1?

提示:可以看到在s1上,eth0/0/1是根端口;
验证:在s3上查看对应根端口是否是eth0/0/2?

提示:可以看到s3上eth0/0/2就是根端口;
上述实验选举根端口就是通过根路径开销来选举的;接下来我们来看看当到达根路径开销相等时,又该如何选举根端口呢?
实验拓扑

分析:从上面拓扑的bid可以看到,当前根桥还是s2;那么对于s3来说,eth0/0/1和eth0/0/2到达根路径开销都是400000,此时在s3上那个端口为根端口呢?从选举规则来讲,当根路径开销一样时,则看看对端的BID;那么确定s3的根端口就只需要比较eth0/0/1的对端s1的BID和eth0/0/2的对端s4的BID,谁小,对应的端口就是根端口;从上面的拓扑可以看到s4的BID要大于s1的BID,所以对应s3上的eth0/0/1就是根端口;
验证:在s3上查看是否是eth0/0/1为根端口?

提示:可以看到s3之前的eth0/0/1是阻塞的,新加了一个s4以后,对应端口的角色也发生了变化,从阻塞端口变为了根端口;其原因就是因为eth0/0/1的对端s1的BID要小于eth0/0/2的对端s4的BID;
当对端BID相同时?对应根端口该如何选择呢?

分析:如上拓扑,根桥还是s2;那么对于s1来说,到底那个端口才是根端口呢?首先看根路径开销都一样,都是200000;看对端BID,对端BID都一样,都是s2的BID;此时在s1上选举根桥会看对端PID,谁小谁就是根端口;
在s2上查看eth0/0/1和eth0/0/2的PID

提示:可以看到在s2上eth0/0/1的PID为128.1,eth0/0/2的PID为128.2;那么对于s1来说,此时根端口就应该是eth0/0/1(原因是它的对端是s2的eth0/0/1);
验证:在s1上查看对应的根端口

提示:可以看到s1上根端口为eth0/0/1;从上面的实验过程可以看到对端BID相同时,根端口的选举会根据对端PID,对端PID小者,对应本端端口就是根端口;
当对端PID相同时,根端口又将如何选择呢?

分析:从上面的拓扑可以确定根桥还是s2,对于s1来说eth0/0/1和eth0/0/2谁才是根桥呢?首先在s1上选举根端口,会看根路径开销,两个端口到根路径开销都是200000;当根路径开销相同时,比较对端BID,上图中s1的对端是s2,所以BID相同;当BID相同我们需要比较对端PID,从上图中我们可以看到s1的两个端口的对端都是s2的eth0/0/1,所以对端PID也相同;此时在s1上选举根端口就会看本端的PID,谁小谁就是根端口,默认情况端口的优先级都是默认值128,比较PID就是看那个端口的端口编号小;很显然eth0/0/1的端口编号要小一点,所以s1上的根端口为eth0/0/1;
验证:查看s1上的eth0/0/1,看看它是否是根端口?

提示:可以看到s1的eth0/0/1就是根端口;
3、在链路上选举指定端口
选择指定端口的规则是先看该端口转发出来的bpdu中根路径开销,开销小者为指定端口,如果开销一样则比较BID,BID小者为指定端口;如果BID相等则比较PID,PID小者为指定端口;
实验:根据以下拓扑图,选出指定端口

分析:根据stp选举根桥的规则,上述实验根桥一定是s3,因为根桥选举看BID,优先级一样比较mac大小,小者为根桥;其次选举根端口,根据根端口的选举规则,在s1上根端口是eth0/0/2(因为eth0/0/2到根桥的路径开销为200000,而eth0/0/1到根桥的路径开销为400000);对于s2上来说,根端口为eth0/0/2(因为eth0/0/1到达根桥的路径开销为400000);接下来选择指定端口,根据指定端口选举规则,先看发出bpdu中的根路径开销;对于s1的eth0/0/1和s2的eth0/0/1直连的链路上,s1的eth0/0/1发出的bpdu中根路径开销为200000,s2的eth0/0/1发出的bpdu中根路径开销为200000;所以根路径开销一样的情况,此时选举指定端口就需要比较BID;因为s1的BID要小于s2的BID,所以指定端口为s1的eth0/0/1;对于根桥上的端口来说,因为它发出的bpdu中根路径开销为0;所以根桥上的端口都是指定端口(排除自环,如果根桥上有端口自环,自环的两个端口中一定有一个端口处于阻塞,这样一来根桥的端口就不是都是指定端口);
验证:查看s3是否是根桥?

提示:可以看到在s3上的stp相关信息中,根桥的BID和s3的BID相同,说明s3就是根桥;
验证:查看s1的eth0/0/1是否是指定端口,eth0/0/2是否是根端口?


提示:可以看到s1上的eth0/0/1是指定端口,eth0/0/2是根端口;
验证:查看根桥的端口,看看是否都是指定端口?

提示:可以看到非自环的情况下,根桥上的所有端口都是指定端口;
实验:当BID相同时,看看对应指定端口该如何选举?

分析:从上面的BID就可以看到s1为根桥,s2为非根桥;对于s2来说,根端口是eth0/0/1(因为eth0/0/1、eth0/0/2和eth0/0/3的根路径开销都为200000,此时选举根端口就比较对端BID,eth0/0/1对端BID就是根桥,而eth0/0/2和eth0/0/3对端BID是s2,所以eth0/0/1为根端口)那么对于s2的eth0/0/2和eth0/0/3之间的链路选举指定端口该怎么选呢?从上面选举指定端口的规则来讲,首先比较发出bpdu中的根路径开销,这两个端口的发出BPDU中的根路径开销都是200000;如果发送的BPDU中根路径开销相同,则比较BID;eth0/0/2和eth0/0/3都是s2的端口,所以BID就是s2,两个端口的BID也相同;此时选举指定端口就需要比较pid;pid小者为指定端口;因为eth0/0/2的端口编号小于eth0/0/3的端口编号;所以eth0/0/2为指定端口;(因为默认PID中的优先级都一样,我们只需要判断端口编号大小即可);
验证:查看s2各端口情况?

提示:可以看到s2的1口为根端口,2口为指定端口,3口为阻塞端口,也叫备份端口;
4、预备端口的确定
通过上述的选举,最终没有被选举成为根端口或指定端口的端口,都会被确定为预备端口;该端口会一直处于阻塞状态,只接受BPDU,不转发数据;直到正常链路故障,该端口才有可能转变为其他角色和状态,进行数据转发;
HCNA Routing&Switching之STP选举规则的更多相关文章
- HCNA Routing&Switching之STP端口状态、计时器以及拓扑变化
前文我们了解了STP选举规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15131999.html:今天我们来聊一聊STP的端口状态.计时器.端口状 ...
- HCNA Routing&Switching之STP基础
前文我们了解了VLAN动态注册协议GVRP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15113770.html:今天我们来讨论下二层环路和STP相 ...
- HCNA Routing&Switching之动态路由协议OSPF DR和BDR
前文我们了解了OSPF建立邻居关系的条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15032907.html:今天我们来聊一聊OSPF中的DR和BDR: ...
- HCNA Routing&Switching之OSPF度量值和基础配置命令总结
前文我们了解了OSPF的网络类型,OSPF中的DR和BDR的选举规则.作用等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15054938.html: ...
- HCNA Routing&Switching之动态路由协议RIP
前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...
- HCNA Routing&Switching之动态路由协议OSPF基础(二)
前文我们主要了解了OSPF的区域.区域分类.路由器类型.OSPF的核心工作流程,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/15025533.html:今天 ...
- HCNA Routing&Switching之交换技术基础
什么是交换机?顾名思义,交换机就是用来数据包交换的:广泛用于终端接入:它的前身是hub(集线器),hub是一个古老的设备,它的作用也是用于终端接入,但hub有一个最大的缺点是它不能隔离冲突域:所谓冲突 ...
- HCNA Routing&Switching之动态路由基本概念
前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...
- HCNA Routing&Switching之静态路由
前文我们聊到了路由的相关概念和路由基础方面的话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14947897.html:今天我们聊聊静态路由相关话题: 回顾 ...
随机推荐
- 16、如何将安装在chrome上的插件(扩展程序)打包成".crx"文件
1.打开扩展程序: 2.打开开发者模式并选择要打包的插件: 3.打包扩展程序: (1) (2) (3)
- [源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案
[源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案 目录 [源码解析] 深度学习分布式训练框架 horovod (11) --- on s ...
- 1.6Java语言规范、API、JDK、和IDE
要点提示:Java语言规范定义了Java的语法,Java库则在JavaAPI中定义.JDK是用于开发和运行Java程序的软件.IDE是快速开发程序的集成开发环境. 计算机语言有严格的使用规范.
- 使用过redis做异步队列么,你是怎么用的?有什么缺点?
Redis设计主要是用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列. 它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列: 另外,做消息队列的其他特性例如FIF ...
- Jquery Validate自定义验证规则,一个汉字等于两个字符长度
使用Jquery validate时写的一些东西,在这里做个笔记 在使用 Jquery validate 的minlength和maxlength进行文本框内容长度验证的时候,对于一个汉字的长度检测结 ...
- 什么是BSE
BSE (bridge system engineer) 是外包开发人员和客户之前的桥梁. 主要是将客户的需求准确的理解并传达给外包的开发人员,一般情况下也兼开发的 leader 工作. 参考: ht ...
- vue3 script setup 定稿
vue script setup 已经官宣定稿.本文主要翻译了来自 0040-script-setup 的内容. 摘要 在单文件组件(SFC)中引入一个新的 <script> 类型 set ...
- java基础---类和对象(3)
一.Object类 java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类 如果定义一个Java类时没有使用extends关键字声明其父类,则 ...
- python 15篇 面向对象
1.面向对象编程概念 面向对象是包含面向过程 面向过程编程 买车: 1.4s看车,买车 2.上保险 保险公司 3.交税 地税局 4.交管所 上牌面向对象编程 卖车处: 1.4s 2.保险 3.交税 4 ...
- 常用js代码积累
1,js判断进入可视区,参考(亲测不行):https://www.cnblogs.com/Marydon20170307/p/8830069.html 重点学习的话,可参考: js计算元素距离顶部的高 ...