技术背景
为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致
广播风暴
以及
MAC地址表不稳定
等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。
二层网络设计需求和问题
-
为了提高可靠性,交换机之间会通过 多条链路相连,从而 避免单点故障。
-
但同时会带来一些灾难性的 环路问题。
所有厂商设备默认开启STP服务
关闭STP命令:stp disable
开启STP命令:stp enable
广播风暴
-
环路会引起广播风暴
-
网络中的主机会收到重复数据帧
MAC地址表震荡
由于产生环路,MAC地址表会不断从其他接口接收到,从而进行刷新MAC地址表,进而造成MAC地址表震荡
STP:Spanning Tree Protocol,生成树协议,两大功能:
功能
|
备注
|
消除环路
|
通过阻断冗余链路来消除网络中可能存在的环路
|
链路备份
|
当活动路径发生故障时,激活备份链路,及时回复网络连通性
|
STP操作过程
通过构造一棵树来消除交换网络中的环路
-
选举一台根桥(ROOT)
-
选举一个根端口(非根桥)
-
选举指定端口
-
阻塞剩余端口
BPDU(Bridge Protocol Data Unit):桥协议数据单元
使用组播:01-80-C2-00-00-00(是固定的)
PID:协议标识(是固定的:STP)
PVI:协议版本/模式(华为默认MSTP,可改为STP(命令为 stp mode stp))
BPDU Type:数据包类型(下面有详细介绍)
-
一般情况下是配置类型(configuration类型)
-
当 拓扑发生改变时,会发送TCN类型(Topology Change Notification)(拓扑变更通知)
BPDU flags:数据包标志位
-
STP包含两项(拓扑变更确认、拓扑变更通知)
-
ROOT Identifier:根桥ID
-
Bridge Identifier:桥ID
-
Port identifier:端口ID
-
Message Age:年龄(根桥设备发送的年龄为0)(配置BPDU报文没经过一台交换机,Message Age都会+1)(如Message Age大于MAX Age,非根桥会丢弃该配置BPDU)
-
MAX Age:老化时间20s(被选举为阻塞端口,保持20s,如没收到BPDU数据包,则进入监听状态)
-
Hello Time:发送周期2s(固定2s)
-
Forward Delay:状态延迟15s(从监听--> 学习 + 学习-->转发 两个状态间分别需要15s的延迟时间)
BPDU字段详解
由以上的ROOT IDentifier、Root Path Cost、Bridge Identifier、Port Identifier四个字段来选举。
桥ID
用于在STP中唯一标识一个交换机,由两部分组成:
-
桥优先级:高16位(范围0~65535,缺省32768)
-
桥MAC地址:低48位
端口ID
用于在STP中唯一标识一个交换机上的端口,由两部分组成
-
端口优先级:高8位(范围0~255,缺省128)
-
端口编号:低8位
路径开销
Path COST
-
路径开销用于 衡量桥与桥之间路径的优劣,越低越好;
-
STP中每条链路都具有开销值
-
华为支持三个链路开销标准,默认802.1t标准(调整标准命令 stp pathcost-standard dot1d-1998 / dot1t / legacy )(思科用的是802.1d-1998标准)
根路径开销
-
确定 到达根桥的最短路径,并生成无环树形网络;
-
到根桥的路径上所有路径开销之和。
BPDU类型
-
配置BPDU(Configuration)
-
选举根交换机以及确定每个交换机端口的角色和状态;
-
在初始化过程中,每个桥都主动发送配置BPDU;
-
在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU;
-
发送周期为Hello Time(默认2秒);
-
老化时间为MAX Age(20秒)。
-
拓扑变更通告BPDU-TCN BPDU
-
下游交换机感知到拓扑发生变化时,向上游发送的拓扑变化通知。
STP选举过程
根桥选举
-
BID(桥ID) 最小的为根桥(先优先级,再MAC地址)
-
每台交换器启动后,都认为自己是根桥
根端口选举
根端口:非根桥交换机到根桥交换机开销最小的端口;
非根交换机在选举根端口时分别依据该端口的根路径开销、
发送
端BID、发送端PID和本
端PID。(BID:桥ID,PID:端口ID)
指定端口选举
-
非根交换机在选举指定端口时分别依据根路径开销、BID、PID。(根桥上所有端口均为指定端口,但自环除外)
-
未被选举为根端口或指定端口的端口为预备端口,将被阻塞。
STP选举过程(均为越小越优)
-
选举根桥
-
桥ID(优先级+MAC地址)
-
选举根端口(RP)
-
路径开销值-->桥ID(优先级+MAC地址)-->发送端PID(端口ID)-->本端PID
-
选举指定端口(DP)
-
路径开销-->桥ID-->PID(端口ID)
-
阻塞端口
STP端口状态
STP端口状态 |
接收BPDU
|
转发BPDU
|
学习MAC
|
转发数据
|
过渡状态
|
稳定状态
|
Disabled阻塞 |
×
|
×
|
×
|
×
|
×
|
√
|
Blocking
|
√
|
×
|
×
|
×
|
×
|
√
|
Listening 监听 |
√
|
√
|
×
|
×
|
√
|
×
|
Learning 学习 |
√
|
√
|
√
|
×
|
√
|
×
|
Forwarding 转发
|
√
|
√
|
√
|
√
|
×
|
√
|
Disable:端口未开
STP计时器
计时器
|
备注
|
Hello
|
2s,根桥发送BPDU的间隔
|
Forward Delay
|
15s,监听和学习的持续时间
|
Max Age
|
20s,保持阻塞的最大时间(没有收到BPDU)
|
Forward Delay:转发延迟(监听->学习 + 学习->转发分别15s)
MAX Age:最大寿命。(被选举为阻塞端口,保持20s,如果没收到BPDU信息,则进入监听状态)
STP端口转换
-
端口初始化或开启。
-
端口被选为根端口或指定端口。
-
端口不再是根端口或指定端口。
-
Forward Delay计时器超时。
-
端口禁用或链路失效。
STP拓扑变化
根桥故障
从出现问题到开始通信时间大致在50s:
20s的老化时间+15s监听-->学习+ 15s 学习-->转发
-
非根桥会在BPDU老化后开始根桥的重新选举。
直连链路故障
-
SWB检测到直连链路物理故障后,会将预备端口转换为根端口。
-
SWB的预备端口会在30秒后恢复到转发状态。
15s监听-->学习+ 15s 学习-->转发
非直连链路故障
非直连链路故障后,SWC的预备端口恢复到转发状态大约需要50s
前提:SWB-SWA链路故障,SWC设备左侧端口为阻塞端口
工作过程:
-
由于SWB-SWA链路出现故障,SWB设备收不到SWA设备BPDU信息,另外由于SWC左侧端口为阻塞端口,也收不到SWC设备BPDU信息。则此时,SWB设备会认为自己就是根桥;
-
由于SWB认为自己是根桥,所以SWB也会向SWC发送BPDU信息。但SWC设备此时能收到SWA设备与SWB设备的BPDU信息,经过比对,SWA为根桥,那么就不会处理SWB的BPDU信息;
-
由于SWC设备不会处理来自于SWB设备的BPDU信息,经过20s的老化时间后,SWC设备会将左侧端口变为指定端口,向SWB发送信息。
-
由上一步得知:20s老化+15s监听->学习 + 15s学习->转发 == 共50s时间链路恢复正常
拓扑改变导致MAC地址表错误
-
MAC地址表项的默认老化时间是300秒。在这段时间内,SWB无法将数据从GO/0/2端口转发给主机B。
-
检测到拓扑改变的交换机通过根端口向根桥发送TCN,上游交换机收到TCN后回应TCA,然后下游交换机停止发送TCN,再通过根端口发送TCN直到根桥收到,根桥通过指定端口发送TC通知所有下游交换机 把MAC地址表记录老化时间从300秒变为15秒
STP配置
命令
|
配置
|
stp mode smtp / stp / rstp
|
配置STP模式,默认MSTP
|
stp priority 4096 |
配置BID优先级,范围:0~61440,步长4096,默认32768
|
stp root primary / secondary
|
自动修改优先级,指定主 / 备 根桥
|
stp pathcost-standard dot1d-1998 / dot1t / legacy |
配置路径开销值的标准,默认802.1t标准
|
开销标准
|
legacy:cost= 1~ 200000,华为私有
802.1d标准:cost= 1 ~ 65535
802.1t标准:cost= 1~200000000,默认
|
stp cost 10 | 修改STP开销值 |
stp port priority 144 |
修改PID优先级,步长16,默认128
|
dis play stp [brief]
|
显示STP配置信息及参数
|
dis stp int g0/0/1
|
查看g0/0/1端口的stp信息
可查看设备的BID,根桥,最短的开销值等
|
STP配置实验
拓扑图:
要求
-
通过配置STP命令,使SW1为主根桥,SW2为备根桥;
-
将SW2与SW3链路上的SW2设备的e0/0/2与SW3设备的g0/0/1角色互换;
-
将SW3与SW4设备链路上SW4设备的g0/0/3与g0/0/4角色互换。
分析
由于eNSP中的实验,每次放进来交换机的MAC地址都会不同,所以仅以此次实验为例进行介绍。
另由于刚开始学习STP,所以从分析根桥(ROOT)、根端口(RP)、指定端口(DP)、预备端口(AP)开始。
-
由于华为设备默认运行的是MSTP,那么就需要先将模式改为STP
stp mode stp
-
由于华为默认采用的是dot1t开销标准,此实验为便于方便计算,采用dot1d-1998标准。
stp pathcost-standard dot1d-1998
问题1:如需设置主/备根桥,那么修改设备的BID(桥ID)即可。桥ID由优先级+MAC地址组成,优先级可设置为0~61440。将主根桥优先级设置为0,备根桥优先级设置为4096即可。
问题2:经分析,SW2设备E0/0/2端口角色为预备端口,SW3设备的G0/0/1端口为指定端口。如需将两端口角色互换,就需要将到达两台设备的链路开销进行调整。由于根桥(定为SW1)到SW2设备的链路为E口链路(即开销值为19),而根桥到SW3设备的链路为G口链路(即开销值为4),那么需要将SW3设备的G0/0/2端口开销值调整为大于19即可(或者也可以将SW2设备的E0/0/1端口开销值调整为小于3)
问题3:经分析,SW4设备的G0/0/3端口角色为根端口(RP),G0/0/4端口角色为预备端口(AP)。如需互换,则需将SW3设备的G0/0/4端口PID值调到小于128即可。(因从根桥到SW3设备的开销值是固定的,SW3设备的桥ID:BID也是固定的,故只能修改端口ID)(端口ID范围0~240,步长16)
配置命令
(分析阶段)查看各交换机的优先级与MAC地址,分别标注出四台设备的BID(桥ID);
dis stp
在eNSP中进行分析判断不同端口的角色并标注;
分别在四台设备上进行测试,确认自己的判断是否正确;
dis stp br
-
完成题目要求1
SW1:
stp priority 0
SW2:
stp priority 4096
-
完成题目要求2
SW3:
int g0/0/2
stp cost 20
-
完成题目要求3
SW3:
int g0/0/4
stp port priority 112
-
测试四台设备的端口状态