文章目录
协议的介绍
STP(Spanning Tree Protocol)生成树协议(IEEE 802.1D)是一种网络协议,用于在网络拓扑中防止环路的产生。它通过在网络中选择一些端口进行阻塞,从而消环路。STP协议的缺点是收敛速度慢,因为它需要等待端口状态的转换。
RSTP(Rapid Spanning Tree Protocol)快速生成树协议(IEEE 802.1W)是STP协议的改进版本。它通过减少端口状态转换的时间来提高收敛速度。RSTP协议的优点是收敛速度快,但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,还有可能造成部分VLAN内的报文无法转发。
MSTP(Multiple Spanning Tree Protocol)多生成树协议(IEEE 802.1S)是一种可以在单个网络中支持多个VLAN的生成树协议。它允许管理员为每个VLAN配置一个生成树实例,从而提高网络的可靠性和性能。
一、原理解析
1. STP
根桥(ROOT):在一个交换网络中,有且只能有一个根桥(根交换机),STP的主要作用就是在一个交换网络中计算出一棵无环的STP树;
非根桥:只要不是根桥,就是非根桥(非根交换机);
桥ID(Bridge ID):优先级+MAC地址组成;
端口ID(Port ID):优先级+端口号组成;
根路径开销(Root Path Cost):根路径成本就是到根网桥的路径中所有链路的路径成本的累计和;
BPDU(Bridge Protocol Data Unit):桥协议数据单元,用于网桥之间传递BPDU来交互协议信息。
1.1 端口角色
端口角色 | 说明 |
---|---|
根端口(Root Port) | 每一个非根交换机都需要选举一个RP(基于设备选举),用于接收根桥发出的BPDU |
指定端口(Designated Port) | 每条链路都会选举一个DP,在一条链路中,离ROOT根桥交换机最近的就是DP(基于链路选举) |
候补端口(Alernate Port) | 为根端口(RP)的备份端口 |
1.1.1 选举顺序和规则
- 根桥的选举(ROOT)
通过BID进行选举
①2字节的桥优先级(越小越优先)
②6字节的MAC地址(越小越优先) - 根端口选举(RP)
每个非根交换机都要选择一个根端口,用来接收ROOT根桥的BPDU
①RPC根路径开销(越小越优)
②比较发送者的桥ID(越小越优)
③比较发送者的端口ID(越小越优)
④比较接受者的端口ID(越小越优) - 指定端口选举(DP)
每条链路都会选举一个DP,根交换机上所有接口都是指定端口,根端口的对端端口一定都是指定端口
①RPC根路径开销(越小越优)
②发送者的桥 ID(越小越优)
③发送者的端口ID(越小越优) - 候补端口
非指定端口,都是候补端口
1.2 端口状态
Disable:禁用,接口为down;
Blocking:阻塞,只会持续监听BPDU,不能发送BPDU,不会进行MAC地址学习,不能收发业务数据帧;
Listening:侦听,接口可以收发BPDU,不会进行MAC地址学习,不能收发业务数据帧;
Learning:学习,会侦听业务数据帧,会进行MAC地址学习,不能收发业务数据帧;
Forwarding:转发,可以进行BPDU处理,学习MAC地址,也能收发业务数据帧。只有根接口或指定接口才能进入转发装态。
各端口状态变化过程和收敛时间(链路一定要是up状态):
Blocking------(30s)----->Listening------(15s)----->Learning------(15s)----->Forwarding
2. RSTP
RSTP在STP基础上进行了改进,实现了网络拓扑的快速收敛。
2.1 端口角色
端口角色 | 说明 |
---|---|
根端口(Root Port) | 每一个非根交换机都需要选举一个RP |
指定端口(Designated Port) | 每条链路都会选举一个DP,根交换机上所有接口都是指定端口 |
替代端口AP(Alternate port) | 为根端口的备份端口。如果一个端口在一条链路上收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口 |
备份端口BP(Backup port) | 为指定端口的备份端口。由于学习到自己发送的配置BPDU报文而阻塞的端口 |
2.1.1 选举规则
根端口和指定端口与STP选举规则类似
替代端口:根端口的备份端口,连接另外一条通过选举出的次优链路
备份端口:指定端口的备份端口,始终处于阻塞状态,只有指定端口故障才被启用
2.2 端口状态
端口状态 | 说明 |
---|---|
转发(Forwarding) | 端口既转发用户流量又处理BPDU报文 |
学习(Learning) | 这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。Learning状态的端口处理BPDU报文,不转发用户流量 |
丢弃(Discarding) | 端口只接收BPDU报文 |
2.3 收敛机制:
- 边缘端口(Edge port)
边缘端口会节省30S的延时,端口UP后会立即进入转发状态,且端口的Up/Down不会触发拓扑变更,他不参与生成树的计算,主要用于连接PC;
当收到BPDU报文会马上变为一个普通端口,加入到生成树的计算中,这样会导致网络震荡 - 根端口快速切换机制
如果RSTP网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口并直接进入Forwarding状态 - Proposal/Agreement 机制
简称P/A机制,其协商机制可以使交换机上的指定端口尽快进入Forwarding状态,同时也是避免环路的一种机制(AP端口是堵塞状态,EP端口不参与生成树计算,都不会出现环路,只有DP Forwarding端口转发才可能出现环路,所以会逐一向下同步端口状态)
3. MSTP
3.1 基本概念
MSTP兼容STP和RSTP,并且可以弥补STP和RSTP的缺陷。MSTP既可以快速收敛,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个MST域。
每个VLAN只能对应一个MSTI,即同一VLAN的数据只能在一个MSTI中传输;而一个MSTI可能对应多个VLAN
名称 | 说明 |
---|---|
MST域 | 一个具有相同域名、修订级别和摘要信息的网桥或交换机构成的集合,一个域可以包含多个实例 |
MSTI | 多生成树实例,实例号从1开始 |
MSTI域根 | 每一个MSTI实例上优先级最高的网桥 |
IST | 内部生成树,是MST域内的一颗生成树,每颗生成树对应一个实例。实例号为0,一定存在的 |
CST | 公共生成树,是网络内所有MST域通过计算得到的一棵树 |
CIST | 公共与内部生成树,是整个网络所有设备经过生成树计算得到的一棵树。由IST和CST共同构成 |
CIST总根 | 是整个网络中优先级最高的桥,是CIST的根桥 |
CIST域根 | IST的根桥即为CIST的域根,是MST域内距离总根最近的桥,也称为Master桥 |
3.2 端口角色
注意:技术都是一步步迭代,重复的端口角色就不多做赘述,这里就只解释新增端口的特性
-
指定端口
-
边缘端口
-
Alternate端口
-
Backup端口
-
Master端口
Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是交换机上连接MST域到总根的端口 -
域边缘端口
位于MST域的边缘并连接其他MST域的端口;或连接运行STP、RSTP的区域的端口。
在进行MSTP计算的时候,域边缘端口在MSTI上的角色和CIST实例的角色保持一致,即如果边缘端口在CIST实例上的角色是Master端口(连接域到总根的端口),则它在域内所有MST实例上的角色也是Master端口。
3.3 STP保护功能
BPDU保护
在交换机上,通常将直接与用户终端(如PC机)或文件服务器等非交换机设备相连的端口配置为边缘端口,以实现这些端口的快速迁移。
Root保护
当维护人员的产生错误配置或网络中存在恶意攻击的行为,网络中的合法根交换机有可能会收到优先级更高的BPDU,使得合法根交换机失去根交换机的地位,引起网络拓扑结构的错误变动,可能会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。
环路保护
在交换机上,根端口和其他阻塞端口状态是依靠不断接收来自上游交换机的BPDU来维持的。当由于链路拥塞或者单向链路故障导致这些端口收不到来自上游交换机的BPDU时,交换机会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中产生环路。
TC保护
交换机在接收到TC-BPDU报文后,会执行MAC地址表项和ARP表项的删除操作。如果有人伪造TC-BPDU报文恶意攻击交换机时,交换机短时间内会收到很多TC-BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。
二、实验测试理论
1. STP
这个拓扑图基本上涵盖了大部分端口选举规则
该实验拓扑中所有链路COST默认都相等,可以尝试修改
因为HW交换机上的生成树协议默认为MSTP,所以需要手动改变所有设备上的协议为STP:
[SW1]stp mode stp
改变SW1的BID(或者改变MAC值),遵循一个规则越小越优先,使其变为根桥:
[SW1]stp priority 4096 #默认优先级为32768,修改时也只能修改4096的倍数
查看SW4上的端口属性和状态
[SW4]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ALTE DISCARDING NONE
0 GigabitEthernet0/0/2 ALTE DISCARDING NONE
0 GigabitEthernet0/0/24 ROOT FORWARDING NONE
查看部分STP信息表
[SW4]display stp
抓包查看STP报文
2. RSTP
实验拓扑图如下:
注:在日常工作中HUB最好不要这样连接,都是为了达到实验目的
手工配置所有设备上的生成树协议为RSTP
[SW1]stp mode rstp
查看交换机设备上的端口信息,验证结论:
[SW1]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
[SW2]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/3 BACK DISCARDING NONE
0 GigabitEthernet0/0/24 DESI FORWARDING NONE
[SW3]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ALTE DISCARDING NONE
0 GigabitEthernet0/0/2 ROOT FORWARDING NONE
0 GigabitEthernet0/0/24 DESI FORWARDING NONE
抓取报文,查看RSTP中的BPDU报文中的标记字段(与STP中的BPDU报文对比多了一些字段)
下一步,将连接PC端的端口配置为边缘端口和BPDU保护功能
因为DP端口会转发BPDU报文,会影响交换机的整体性能,使收敛速度变慢。
虽然正常情况下,这些端口不会收到BPDU。如果有人伪造BPDU恶意攻击交换机,当这些端口接收到BPDU时,交换机会自动将这些端口设置为非边缘端口,并重新进行生成树计算,从而引起网络震荡。
所以需要配置BPDU保护机制同时使用
可以通过抓包软件实时查看端口报文变化情况
在SW2的接口上配置如下命令(SW3也一样):
[SW2-GigabitEthernet0/0/24]stp edged-port enable
[SW2-GigabitEthernet0/0/24]stp bpdu-filter enable
[SW2-GigabitEthernet0/0/24]quit
[SW2]stp bpdu-protection
当然根桥上的端口保护也是需要的
为了防止错误配置或网络中的恶意攻击的情况发生,交换机需提供Root保护功能。
成功配置后,当端口收到优先级更高的BPDU时,端口的角色不会变为非指定端口,而是进入侦听状态,不再转发报文。经过足够长的时间,如果端口一直没有再收到优先级较高的BPDU,端口会恢复到原来的正常状态。
SW1配置命令如下:
[SW1-GigabitEthernet0/0/1]stp root-protection
[SW1-GigabitEthernet0/0/2]stp root-protection
3. MSTP
常见端口如下:
实验拓扑如下:
MSTP通过设置VLAN映射表(即VLAN和MSTI的对应关系表),把VLAN和MSTI联系起来。
每台交换机需配置如下命令:
注:基础步骤已省略(如:创建VLAN、接口类型、接口IP地址和验证网络的连通性等)
所有交换机上配置:
stp pathcost-standard legacy # 端口路径开销计算方法为HW计算方法
stp region-configuration
region-name RG1 # 将域名改成RG1
revision-level 1 # 将MSTP级别改为1
instance 1 vlan 2 to 10
instance 2 vlan 11 to 20
active region-configuration
Core1
上的配置:
[Core1]stp instance 1 root primary # 配置Core1为MSTI1的根桥
[Core1]stp instance 2 root secondary # 配置Core1为MSTI2的备份根桥
Core2
上的配置:
[Core2]stp instance 1 root secondary
[Core2]stp instance 2 root primary
修改交换机端口COST值
知识点补充,实验常用接口的不同算法下的COST值:
接口类型 | 名称 | 带宽 | 端口模式 | IEEE 802.1T标准计算方法 | HW计算方法 |
---|---|---|---|---|---|
以太网 | Ethernet | 10Mbps | Half-Duplex | 2000,000 | 2000 |
快速以太网(百兆口) | FastEthernet | 100Mbps | Half-Duplex | 200,000 | 200 |
千兆以太网 | GigabitEthernet | 1000Mbps | Full-Duplex | 20,000 | 20 |
万兆以太网 | 10GigabitEthernet | 10GMbps | Full-Duplex | 2,000 | 2 |
[Switch1-GigabitEthernet0/0/1]stp instance 2 cost 2000
[Switch2-GigabitEthernet0/0/1]stp instance 1 cost 2000
实例1各端口的状态:
实例2各端口的状态:
以实例1为例,不同设备中特殊的端口启用保护机制(实例2中也是一样的配置)
[Core1]interface Ethernet0/0/1 # 进入指定端口
[Core1-Ethernet0/0/1]stp root-protection # 开启根保护功能
[Core1-Ethernet0/0/2]stp root-protection
[Core1-Ethernet0/0/3]stp root-protection
[Core2]interface Ethernet0/0/1 # 进入根端口
[Core2-Ethernet0/0/3]stp loop-protection # 开启环路保护功能
[Switch1-GigabitEthernet0/0/23]stp disable # 在边缘端口关闭STP协议,使其不参与生成树的端口选举
[Switch1-GigabitEthernet0/0/24]stp disable
交换机在接收到TC-BPDU报文后,会执行MAC地址表项和ARP表项的删除操作,如果有人伪造TC-BPDU报文恶意攻击交换机,交换机短时间内会收到很多TC-BPDU报文,频繁的删除操作会给交换机造成很大的负担,使交换机无法稳定工作。
启用TC保护功能后,在固定的时间内,MSTP进程处理TC类型BPDU报文的次数可配置。
如果在固定的时间内,MSTP进程收到TC类型的BPDU报文数量大于配置的阈值,那么MSTP进程只会处理阈值指定的次数。对于其他超出阈值的TC类型BPDU报文,定时器到期后,MSTP进程对其统一处理一次。这样可以避免频繁地删除MAC地址表项和ARP表项,从而达到保护交换机的目的。
[Core1]stp tc-protection threshold 3 # 指定阈值为3
由于时间和精力有限,保护机制的暂时没有进行测试,有时间再补充
总结
该文章初衷是为了阐述各生成树协议的基本原理和实验测试结论,所有实验都是在ensp中测试,仅供参考
,如果想在真机上实操,请查找官方设备手册谨慎操作。
本人是一个网络爱好者,也是初学者,喜欢琢磨一些基础知识,以上都是网上学习时的笔记,由于技术和表达能力都有限,希望优秀的你能够看懂
人生语录:未知的,不仅仅只有浩瀚宇宙,还有人类的潜力