- STP的应用场景
生成树永远跟接口MAC无关;生成树的弱点是太依赖时间
交换机之间通过多条链路互连时,虽然能够提升网络可靠性,但同时也会带来2层环路问题且以太帧不具备防环机制,导致广播风暴、MAC地址表震荡、重复帧拷贝,而STP就是在有冗余的交换网络下避免环路。
- 广播风暴:根据交换机的转发原则,如果交换机从一个端口接收到的是一个广播帧,或者是一个目的mac地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发,如果交换网络中有环路,则这个帧会被无限转发,导致广播风暴,网络中充斥着重复的数据帧。
- Mac地址表震荡:一个Mac地址在某一时刻只能从一个端口学习到,那么环路会导致mac地址表震荡,即一个Mac地址在短时间内在不同的接口间切换。
- 主要作用
消除环路:在逻辑上而非物理上,通过**阻断(华为Discarding;思科Block)**冗余链路来消除网络中可能存在的环路。
链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络的连通性。 - 工作原理
3.1 三大原则:交换网络有且只有一个根交换机;每个非根设备上有且只有一个根端口;每个链路上有且只有一个指定端口
3.2 解释:
交换网络选举一个根桥(皇帝RB);
每个非根交换机选举一个根端口(太守RP,接收皇帝的命令,角色为ROOT,状态为转发Forwarding);
每个链路上选举一个指定端口(钦差DP,转达皇帝的命令,角色为DESI,状态为转发Forwarding);
阻塞非根、非指定端口(AP庶民,物理上工作逻辑上阻塞,角色为ALTE,状态为转发Discarding);
BPDU桥接信息单元(圣旨,发送2s/次)。
3.3 **理解:**有根端口的一定不是根桥(即没有根端口的一定是根桥),其根端口的对端设备可能为根桥 - STP选举
STP在常规设备上默认开启。
**配置BPDU包含以下重要信息:**根桥ID(RootID);根路径开销(RootPathCost);指定桥ID(DesignatedBridgeID);指定端口ID(DesignatedPortID)。
每台设备的各个端口在初始时生成以自己为根桥(RB)的配置消息,向外发送自己的配置信息(起初都认为自己是皇帝)。网桥收敛后,根桥向外发送配置BPDU,其他的设备对该配置BPDU进行转发。
4.1 根设备(RB)选举
- BridgeID(桥ID,BID,查看
思科:show spanning-tree vlan 8;华为:dis stp
)由两部分组成:优先级(默认32768)和交换机的MAC(不是接口Mac,而是背板Mac思科:show spanning-tree bridge id;华为:dis stp的第一行CIST Bridge的值
) - **选举规则:**优先级值最小的---->Mac最小的
- 从管理角度一定是修改优先级去左右根的选举,根设备一般在核心交换机上,必须修改优先级去控制。最常见的实施是互为主备,即sw1为vlan8\10\11的RB和vlan1\9\12\99的BackupRB,sw2为vlan8\10\11的RB和vlan1\9\12\99的BackupRB。修改优先级
思科:spanning-tree vlan 8,10,11 priority 4096;华为:stp priority 4096(华为只能针对所有vlan设置,不能针对某一部分vlan)
,优先级的值只能为4096的倍数,0为最高优先级(一般只有RB设为0,BackupRB设置为4096)。
4.2 根端口(RP)选举 - PortID(端口ID,PID,由端口优先级(默认128)和序号组成)
- RPC(RootPathCost,到根桥的开销,Dot1q标准下的PortCost默认为20000)
- **选举规则:**RPC最小的---->对端的桥ID最小的---->对端的端口ID最小的---->本端的端口序号最小的
- 修改端口的开销(cost)值
思科:spanning-tree vlan 8 cost 10
;修改端口的优先级思科:int e1/3 spanning-tree vlan 10 port-priority 64 (只能是64的倍数,0\64\128\192)
- 举例
- 通过比较"对端的桥ID",选择交换机的"接口1"为根端口
- 通过比较"对端的端口ID",选择交换机X的"接口3"为根端口
![通过比较"对端的端口ID",选择交换机X的"接口3"为根端口] - 多规则使用
SWB的接口2:规则3,对端的端口ID
SWC的接口1:规则1,RPC
SWD的接口5:规则2,对端的桥ID
SWE的接口1:规则4,本端的端口序号
4.3 指定端口选举
- 通过比较"对端的桥ID",选择交换机的"接口1"为根端口
- **选举规则:**RPC最小的---->本端的桥ID最小的---->本端的端口ID最小的(除非交换机的两个接口相连,否则一般不到这一步)
- STP的模式
升级过程:802.1D--->802.1w--->802.1s
思科和华为设备对接需要使用MSTP。华为默认模式为MSTP,修改为STPstp mode stp
;思科设备默认为pvst,修改为pvstspanning-tree mode pvst
。现实工作中建议使用mstp。
补充:华为设备还有两种模式:VBST(每个vlan的stp,一般华为交换机即可见到)、V-STP(虚拟stp,数据中心的CE交换机上可见) - 标准STP的5个端口状态
6.1 标准STP的5个端口状态
- Disabled,禁用状态,即不处理和转发BPDU,也不转发用户流量
- Blocking(Discarding),阻塞状态,仅仅接收和处理BPDU,不转发BPDU,也不转发用户流量,此状态是预备端口的最终状态
- Listening,侦听状态,转发BPDU报文,不转发用户流量
- Learning,学习状态,根据收到的用户流量构建MAC地址表,不转发用户流量,此状态是为了防止临时环路
- Forwarding,转发状态,即可转发用户流量,也可转发BPDU报文,只有根端口或者指定端口才能进入此状态
6.2 5个端口状态的转换
- STP的时间
HelloTime=2s,BPDU的发送间隔
MaxAge=20s,最大生存时间,即BPDU失效的时间
ForwardDelay=15s,转发时延,端口状态转换的时间间隔 - 边缘端口
与终端相连的端口(access或者trunk)不需要参与生成树的计算,这些端口参与计算会影响网络拓扑收敛的速度(转发时延,即直接跳过端口状态Listening和Learning,直达Forwarding),而且这些端口的状态改变也可能引起网络的震荡,导致用户流量中断。
思科配置边缘端口:spanning-tree portfast edge default
,把所有access接口配置为边缘端口
华为配置边缘端口:stp edged-port default
,把所有接口配置为边缘端口。如果对端连接的是交换机,不建议配置边缘端口。最常用是将接口配置边缘端口stp edged-port enable(接口视图中配置)
- BPDU保护
边缘端口收到BPDU报文之后会失去其边缘端口属性。为防止攻击者仿造BPDU报文导致边缘端口属性变成非边缘端口,或者保护STP的边界,可配置交换设备的BPDU保护功能。
配置BPDU保护功能之后,如果边缘端口收到BPDU报文,边缘端口就会被error-down,边缘端口属性不变。
思科:
全局配置spanning-tree bpduguard enable
和思科全局的边缘端口联动(仅仅作用于边缘端口)spanning-tree portfast edge bpduguard default
接口配置(接口实施BPDU保护,改接口无所谓是否为边缘端口,都会shutdown失效)spanning-tree portfast edge trunk(配成边缘端口)
-->spanning-tree bpduguard enable
在思科的接口下配置BPDU保护,该接口可以不是边缘端口
华为:
只有全局配置(只针对边缘端口生效,只要边缘端口收到BPDU就会关闭)stp bpdu-protection
- STP优化
- 调整STP的模式
- 调整STP的根
- 配置边缘端口(端口快速,节省30s时间,根据实际情况配置全局或者单独的接口)
- 配置BPDU保护
# ..............................................演示环路导致的广播风暴
# sw1
int g0/0/5
port link-type trunk
port trunk allow-pass vlan all
int g0/0/1
port default vlan 8
port trunk allow-pass vlan all
undo stp enable # 关闭生成树
# sw2
int g0/0/5
port link-type trunk
port trunk allow-pass vlan all
vlan batch 8 to 12 99
undo stp enable
# sw3
int g0/0/1
undo shutdown
undo stp enable
# R1
dis arp # 查看arp表
reset arp all # 清空arp表,开始抓包
ping 10.1.10.1
# sw1,sw2,sw3
stp enable # 开启生成树,恢复生产环境
# .................................................华为交换机上STP的实施和优化
# 1.调整STP的模式;2.调整STP的根;3.配置边缘端口(端口快速);4.配置BPDU保护
# !!!!思科建议使用全局的边缘端口和全局的BPDU保护
# !!!!华为实施全局边缘端口之后,需要将trunk端口将全局边缘端口中去除,然后实施全局的BPDU保护
# sw1\2\3上STP模式的修改
stp mode stp
# 调整优先级,将sw1作为RB,sw2作为备份RB
# sw1
stp priority 0
# sw2
stp priority 4096
# 查看接口优先级
display stp int g0/0/1 # 查看变量Port Priority的值
# sw3配置边缘端口
# stp edged-port default #全局开启边缘端口
# undo stp edged-port default
int g0/0/10
stp edged-port enable
int g0/0/11
stp edged-port enable
int g0/0/12
stp edged-port enable
# 查看是否为边缘端口
dis stp int g0/0/10 # 查看变量Port Edged的值,如果Active=enabled则为边缘端口
# sw3配置全局的BPDU保护
stp bpdu-protection
# sw3的接口3和1配置为非边缘端口,即将trunk从全局的边缘端口去除
int g0/0/3
stp edged-port disable
shutdown
undo shutdown
int g0/0/1
stp edged-port disable
shutdown
undo shutdown
两个直连的路由器无法通信,如何排除故障?
由下至上:
**1. 检查物理层:**比如接口指示灯是否闪亮,检查光纤是否工作或者网线是否正常(目测法)。如果有故障,可以使用替换法解决;否则进行下一步。
**2. 检查数据链路层:**通过sh int xx或者dis int xx,查看2层协议是否工作,以及封装协议是否一致(比如ppp、hdlc等)。如果协议上和管理上都是工作的,进行下一步。
**3. 检查网络层:**通过IP验证是否为同一子网。假设是同一子网,要特别关心ARP(IP和Mac的对应),如果没有ARP,关心路由器之间是否有交换机进行联通,如果有交换机则需要查看交换机的STP状态、交换机Mac地址表等等。