STP详解-STP、RSTP、MSTP
STP详解
01
冗余链路中存在的问题
如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断,但在此之前有下面三个问题需要考虑。
广播风暴
以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live),如果有环路存在第二层帧不能被适当的终止,他们将在交换机之间永无止境的传递下去。结合交换机的工作原理,来看一下上面这张拓扑中广播风暴是如何形成的:
1. PC1发出一个广播帧(可能是一个ARP查询),LSW1收到这个广播帧,LSW1将这个广播帧从除接收端口的其他端口转发出去(即发往G0/0/2、G0/0/3、G0/0/4)。
2. LSW2从自己的G0/0/1和G0/0/2都会收到SW1发过来的相同的广播帧,LSW2再将这个广播帧从除接收端口外的所有其他接口发送出去(LSW2将从G0/0/2接收的广播帧发往其他三个端口G0/0/1、G0/0/3、G0/0/4,从fa0/24接收到的也会发往其他三个端口G0/0/1、G0/0/3、G0/0/4)。
3. 这样这个广播帧又从G0/0/1以及G0/0/2传回了LSW1,LSW1再用相同的方法传回LSW2,除非物理线路被破坏,否则PC1-4将不停的接收到广播帧,最终造成网络的拥塞甚至瘫痪。
MAC地址表不稳定
广播风暴除了会产生大量的流量外,还会造成MAC地址表的不稳定,在广播风暴形成过程中:
1. PC1发出的广播帧到达LSW1,LSW1将根据源MAC进行学习,LSW1将PC1的MAC和对应端口G0/0/1写入MAC缓存表中。
2. LSW1将这个广播帧从除接收端口之外的其他端口转发出去,LSW2接收到两个来自LSW1的广播(从G0/0/1和G0/0/2),假设G0/0/2首先收到这个广播帧,LSW2根据源MAC进行学习,将PC1的MAC和接收端口G0/0/2存入自己的MAC缓存表,但是这时候又从G0/0/1收到了这个广播帧,LSW1将PC1的MAC和对应的G0/0/1接口存入自己的MAC缓存表。
3. LSW2分别从自己的这两个接口再将这个广播帧发回给LSW1,这样PC1的MAC地址会不停的在两台交换机的G0/0/1和G0/0/2(G0/0/3、G0/0/4)之间波动,MAC地址缓存表也不断的被刷新,影响交换机的性能。
重复帧拷贝
冗余拓扑除了会带来广播风暴以及MAC地址的不稳定,还会造成重复的帧拷贝:
1. 假设PC1发送一个单播帧给PC3,这个单播帧到达LSW1,假设LSW1上还没有PC3的MAC地址,根据交换机的原理,对未知单播帧进行泛洪转发,即发往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
2. LSW2分从自己的G0/0/1和G0/0/2接收到这个单播帧,LSW2知道PC3连接在自己的G0/0/4接口上,所以LSW1将这两个单播帧都转发给PC3。
3. PC1只发送了一个单播帧,PC3却收到了两个单播帧,这会给某些网络环境比如流量统计带来不精确计算等问题。
STP介绍
基于冗余链路中存在的这些问题STP被设计出来用来解决这些问题,下面介绍STP的工作原理。
交换机上有默认的stp版本为mstp(多实例生成树)、stp(生成树)、rstp (快速生成树)。
01
工作原理
STP通过拥塞冗余路径上的一些端口,确保到达任何目标地址只有一条逻辑路径,STP借用交换BPDU(Bridge Protocol Data Unit,桥接数据单元)来阻止环路,BPDU中包含BID(Bridge ID,桥ID)用来识别是哪台计算机发出的BPDU。
在STP运行的情况下,虽然逻辑上没有了环路,但是物理线上还是存在环路的,只是物理线路的一些端口被禁用以阻止环路的发生,如果正在使用的链路出现故障,STP重新计算,部分被禁用的端口重新启用来提供冗余
STP使用STA(Spanning Tree Algorithm,生成树算法)来决定交换机上的哪些端口被堵塞用来阻止环路的发生,STA选择一台交换机作为根交换机,称作根桥(Root Bridge),以该交换机作为参考点计算所有路径。
02
选举:根网桥、根端口、指定端口、非指定端口
① 根网桥(根交换机)—在一棵生成树实例中,有且仅有一台交换机为root
选举:
比较每台交换机的网桥id (优先级+MAC地址) 越小越优先
默认优先级:32768
修改优先级的时候要改成4096的倍数
[系统]stp mode stp 修改stp的模式
Stp priority 4096 修改优先级
② 根端口—在每台非根网桥上,有且仅有一个接口;本地离根网桥最近的接口(最短、星型),接收来自根网桥的BPDU,转发用户的流量(该接口不阻塞)
选举:
1 路径开销值:比较从根网桥发出后,通过该接口进入时最小的cost值;
2 对端网桥id:入向cost值相同,比较该接口对端设备的BID,小优
3 对端端口id:对端BID也相同,比较该接口对端设备的接口的PID
4 本端端口id(hub):小优
端口ID 接口优先级(0-240,步长16,默认128)接口编号
③ 指定端口—在每一段存在STP的物理链路上,有且仅有一个;转发来自根网桥的BPDU,同时可以转发用户流量(不阻塞);默认根网桥上所有接口为指定端口;
选举:
1 路径开销:比较从根网桥发出后,通过该接口进入这段链路时的cost值最小(出向)
2 本端网桥id
3 本端端口id (端口优先级和端口编号)端口优先级默认是128 接口编号
4 本地端口id,相同,直接阻塞该端口;
④ 非指定端口----剩下的端口就叫做阻塞端口。该接口逻辑阻塞,实际可以接收到信息,但不转发。
03
STP中的报文交互
BPDU 桥协议数据单元
两种BPDU:
① 配置BPDU
作用:用于角色(端口)选举
维护网络拓扑,2秒1次,最多20秒,20秒没有根的回应,则认为根down掉。
只有根网桥可以发送,在交换网络初始状态时,所有交换机均定义本地为根网桥,进行BPDU的发送;使得网络所有交换机均收到其他设备的BPDU,之后基于数据中的参数进行比对,选举出根网桥;再所有非根网桥不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time 20s。
② TCN BPDU—拓扑变化bpdu
作用:当拓扑发生变化时,会发tcn bpdu
本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;使所有交换机临时将MAC表的老换时间修改为15s(默认的,转发延时)。
04
BPDU字段
1 BPDU Flags 标识字段
Tca位 拓扑变化确认位
Tc位 拓扑变化位
发生变化时置1
2 root identifier 根网桥id (Root ID)
3 cost of path 到达根的开销值
4 Bridge ID 本交换机的网桥ID
5 Port ID 端口ID
0x8001 前面的80 代表优先级128 , 01代表端口号
6 message age 消息寿命 每经过一台交换机 message age+1
7 max age 最大寿命 20秒
8 hello time 2秒
9 forward delay 转发延迟15秒
BPDU的时间有三种:Hello Time、Max Age、Forward Delay:
- Hello时间控制了发送配置BPDU的时间间隔,默认2秒。这是根交换机生成BPDU并向非根交换机发送的间隔。
- 非根交换机接收到根交换机发送来的BPDU,再从除接收端口以外的其他端口转发出去,如果在2-20秒里面由于网络故障没有新的BPDU从根交换机发送过来,非根交换机将停止向外发送从根交换机接收到的BPDU。如果这种情况持续20秒,也就是最大存活期,非根交换机就使原储存的BPDU无效,并开始寻找新的根端口。所谓最大存活期就是非根交换机丢弃BPDU前用来备份储存它的时间。
- 转发延时是交换机在侦听状态到学习状态所花的时间,默认是15秒。
05
端口的状态变化
disable 开启stp时 特点:不进行stp计算。
blocking 阻塞端口直接进入blocking 状态。
listening 非阻塞端口才进入侦听状态 特点:加速mac地址表老化。
所有交换机进行BPDU收发,选举所有角色;接口角色为非指定端口直接进入阻塞状态;若为指定端口和根端口进入下一状态。
中间有15秒的间隔时间,目的是为了加速mac地址表老化,mac地址表老化时间300秒
learning 学习状态
指定端口和根端口学习所有接口连接设备的MAC地址,生成MAC表;之后进入下一状态。
中间有相隔15秒的时间,加速mac地址表的学习。
forwarding 转发状态
注:只有到接口进入到转发状态后,才能为用户转发数据报文,之前的30s不能转发任何数据。
收敛时间:
初次收敛—30s = 15侦听+15s学习
结构变化:
1. 存在直连检测:
本地存在阻塞端口,若其他端口断开,该阻塞端口马上进入15是侦听(选举);结果若为启用,那么将再进入15s学习—总30s。
当阻塞端口感觉到拓扑发生变化,发送tcn BPDU,对端会回复一条tca=1拓扑变化确认;当交换机收到根交换机范洪的网络变化tc=1的配置BPDU才能老化原来的路径,学习新的路径。
2. 没有直连检测:
本地不存在阻塞端口,若某个端口断开,将发送次优BPDU(以本地为根)给其他邻居交换机,其他交换机无视该数据,进行20s hold time计时,到时时阻塞接口进入15s侦听,15s学习=总50s。
由于线路故障,Sw2 20s后老化了源路径,认为自己是根,向sw3发送bpdu,sw3收到两条bpdu,因此会检测到链路变化,由于链接s1的路径最优,所以向s1发送tcnBPDU,s1回复一条tc=1的配置bpdu,交换机将原来的路径老化,并学习新的路径。
06
STP的缺点
1. 收敛慢
learning到forwarding需要15s学习mac地址,
Listening到learning需要15s 加速老化时间,
无论上述用了多少秒,最大等待时间总是15s,
发送tcnBPDU的时间过长。
2. 链路利用率低
RSTP 快速生成树
备份端口只在华为中提出。
备份端口备份成为指定端口。
预备端口将来预备成为根端口。
预备端口和备份端口的相同点,正常情况下都不进行数据转发。
RSTP中端口状态变成了三种,将stp状态前三种合成一种,因为不学习mac也不转发数据。
三种状态:
discarding 不学习mac也不转发数据。
learning 不转发数据但是学习mac。
forwarding 即学习mac也转发数据。
BPDU stp和rstp的区别:
stp:配置BPDU TCN BPDU
rstp:RST BPDU(快速生成树bpdu)
标志位
Tca位(topology change acknowledgement)拓扑变化确认位。
同意位(agreement)。
转发位(Forwarding)。
学习状态(learning )中间有相隔15秒的时间,加速mac地址表的学习
端口角色(port role)端口角色是11,证明这个端口是指定端口,如果是10则代表是根端口,01代表预备端口或者备份端口,00代表保留。
提议位(proposal)。
拓扑变化位(topology change)
RSTP快速生成树:
收敛速度快:
1. 边缘端口:连接终端设备的端口
优点:不会进行端口角色计算,直接变成forwarding状态
配置边缘端口
Interface g0/0/3
Stp edged-port enable
2. P/A机制 提议/同意机制
前提条件:点到点链路(全双工链路)交换机先发送一个RST BPDU给根,根收到后作比较,将自己的发给交换机,交换机发现网桥id比自己小比自己优先,就会发一个同意位给根交换机,根交换机上的接口变为指定接口,并直接变为forwarding状态。
Sw3当网络发生变化,马上启动一个TC while计时器:2倍的hellp时间,直接发送tcBPDU给s2,四秒内,老化原来的mac地址,形成新的地址,s2收到后重复上述动作直到发给根交换机。
MSTP多实例生成树
多个rstp的集合就是mstp
Instance 实例:rstp
单个实例树的弊端:
一部分vlan路径不同
无法使用流量分担
会产生次优的二层路径
建立两棵树,pc1发数据时,lsw4是根,pc2发数据时,lsw5是根从而解决单个实例树的弊端。
配置步骤
创建vlan基本操作修改stp版本Stp region-configuration 创建域的范围Region-name Huawei 域的名字Revision-level 1(保证都相同)Instance 1 vlan 10Instance 2 vlan 20Active region-configuration激活mstp的配置每台交换机上都要配置只要修改就要重新激活设置实例的根Stp instance 1 root primary/secondary(主根/备份根)默认交换机上有实例0Mstp和arrp做联动时,mstp的主根一定是arrp的主
当网络中有mstp、stp rstp时,最后会以stp运行,他们的模式依旧是mstp和rstp,但是发的bpdu报文是stp。
当mstp的交换机和stp的交换机相连时,发送的是stp的报文,当stp迁移走了,换了一个mstp的交换机时,不会自动回到mstp。
【swb】stp mcheck手动迁移回mstp。
配置mstp最大跳数
默认最大跳数20跳
Stu max-hops 30 修改最大跳数
四个保护
边缘端口保护(BPDU保护)
为什么会有BPDU保护-----从边缘端口收到bpdu,会直接将边缘端口阻塞掉。
【系统】Stp bpdu-protection(stp,bpdu保护开启)
指定端口保护(根的保护)
从指定接口收到一个优先级比指定端口还低的端口pbdu,则交换机进入阻塞状态,保护自己永远为根。
【指定接口】Stp root-portection 在指定端口下开启根的保护
环路保护
三个交换机之间使用光钎连接,由于光纤是由两条线路构成,一条收一条发,一旦收的根端口down掉,发的线路没有问题,此时阻塞端口启用,会形成环路。
解决方法,长时间收不到bpdu ,就把该端口阻塞掉。
TC-BPDU保护 TC
如果恶意用户一直发送tc-bpdu,那么链路中的路径就会一直老化,此时设置一个阈值,超过上限就会丢弃该bpdu。
默认接受tc上限为1
修改命令:stp tc-portection threshold 2
推荐阅读
>>>【必备干货】网工入门必会桥接教程,外网+GNS3+Vmware
网工界市场认可度极高的华为认证,你考了吗?
拿下华为HCIE认证之后,你可以:
跨越90%企业的招聘硬门槛
增加70%就业机会
拿下BAT全国TOP100大厂敲门砖
体系化得到网络技术硬实力
技术大佬年薪可达30w+
资源放送
2022新版华为思科双厂商认证18集小白入门到进阶实战课,扫描下方二维码,即可观看:
STP详解-STP、RSTP、MSTP的更多相关文章
- STP详解
STP详解 Write From YangWj Wednesday, March 5, 2014 一. 生成树协议 STP的主要任务是阻止在第2层网络(网桥或交换机)产生网络环路,它警惕的监视着网络中 ...
- 计算机网路中CDP,LLDP,STP的详解
CDP,LLDP,STP知识详解 (1) CDP CDP(Cisco Discovery Protoco:Cisco发现协议)是Cisco专有的用来发现邻接点的协议 ,所有的Cisco产品都支持CDP ...
- TCP-IP详解学习笔记2
TCP-IP详解学习笔记2 链路层 链路层的目的是为IP模块发送和接收IP数据报: TCP/IP支持多种不同的链路层,依赖于使用网络硬件类型:有线局域网(以太网,城域网(MAN),有线语音网络).无线 ...
- 《TCP/IP 详解 卷1:协议》第 3 章:链路层
在体系结构中,我们知道:链路层(或数据链路层)包含为共享相同介质的邻居建立连接的协议和方法,同时,设计链路层的目的是为 IP 模块发送和接受 IP 数据报,链路层可用于携带支持 IP 的辅助性协议,例 ...
- brctl创建虚拟网卡详解
brctl创建虚拟网卡详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 很久之前我分享过一篇关于搭建Openvpn的笔记,在笔记的最后我分享了一个脚本,是用来创建虚拟网卡的,今天 ...
- ISO七层模型详解
ISO七层模型详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我刚刚接触运维这个行业的时候,去面试时总是会做一些面试题,笔试题就是看一个运维工程师的专业技能的掌握情况,这个很 ...
- Docker详解
一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docke ...
- (转)CentOS7安装KVM虚拟机详解
原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...
- CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)
摘要:KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式.Bridge方式的配置原理和步骤.Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. NAT的网络结构图: ...
随机推荐
- Java BigDecimal 的舍入模式(RoundingMode)详解
BigDecimal.divide方法中必须设置roundingMode,不然会报错. ROUND_UP:向正无穷方向对齐(转换为正无穷方向最接近的所需数值) ROUND_DOWN:向负无穷方向对齐 ...
- Cell的重用原理
iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableViewC ...
- 常用汉字大全:汉字读音表GB2312版(共7809个汉字)
转载请注明来源:https://www.cnblogs.com/hookjc/ 常用汉字:a1:阿啊呵腌吖锕a2:啊呵嗄a3:啊呵a4:啊呵ai1:哀挨埃唉哎捱锿ai2:呆挨癌皑捱ai3:矮哎蔼霭嗳a ...
- JMeter压力测试简单使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11915535.html JMeter压力测试简单使用: 我们可以使用JMeter来测试一下自己 ...
- AttributeText创建多彩文字Label --- hl
一般用富文本实现多种花样的Label文字,下图是利用UILabel分类快速创建的多彩多样lable文字,快速简单,自定义性强,更重要的是无代码污染,特别适合轻量级使用 https://github.c ...
- 问题描述 ens33 不见了
事情是这样紫的 我今天用Xshell 连接Linux 发现连接不上去百思不得其解,然后就去Linux里看 ifconfig 的配置,然后发现 ens33居然不见了,就只有lo 和 virbr() , ...
- Hadoop启动错误——ERROR: Attempting to operate on hdfs namenode as root but there is no HDFS_NAMENODE_USER defined. Aborting operation.
错误如下所示; [root@localhost sbin]# start-all.sh Starting namenodes on [192.168.71.129] ERROR: Attempting ...
- SQL性能优化技巧
作者:IT王小二 博客:https://itwxe.com 这里就给小伙伴们带来工作中常用的一些 SQL 性能优化技巧总结,包括常见优化十经验.order by 与 group by 优化.分页查询优 ...
- postman常用测试脚本
测试脚本: 设置环境变量 var jsonData = JSON.parse(responseBody); postman.setGlobalVariable("5KMST", j ...
- 《PHP程序员面试笔试宝典》——什么是职场暗语?
本文摘自<PHP程序员面试笔试宝典> 文末有该书电子版下载. 随着求职大势的变迁发展,以往常规的面试套路因为过于单调.简明,已经被众多"面试达人"们挖掘出了各种&quo ...