STP 技术背景:
在网络中,为了防止单点故障的出现,会给链路和设备都做 冗余
冗余带来环路,环路会导致:
- 广播风暴
- MAC地址表紊乱 【不稳定的MAC地址表/MAC地址表抖动】
- 交换机收到重复数据帧
- 广播风暴
如何解决环路带来的问题?
STP:
既要有冗余,又要去除环路带来的危害------》 从逻辑上去 阻塞 一个端口。 当其余可用的链路出现故障的时候,能过自动化的启用这个被阻塞的端口,保证这个链路可用。
STP 的终极目标就是要找到那个被阻塞的接口。
STP 定义 :
Spanning Tree Protocol ,IEEE 802.1d
找到阻塞的接口以后,最终网络就会出现一棵无环的树形。
STP的工作机制
STP协议如何找到那个被阻塞的接口的? 选举
1 在所有的交换机中,选出 根网桥
2 在所有的非根交换机上,选出一个 根端口
3 选出 指定端口
4 最后剩下的,既没有被选上根端口,也没有被选上阻塞端口的那个端口,就把它 阻塞 掉。
选举的过程,就是交换机彼此之间 相互传递自己信息的过程, 去比较自己信息的 优劣。
STP 术语:
BPDU
桥协议数据单元 : Bridge Protocol Data Unit
STP的正常工作依赖于BPDU报文的泛洪.
BPDU 报文各个字段说明:
选举使用的参数和选举规则:
BPDU参数详解:
- Bridge ID
- 桥ID(Bridge ID)是交换机的STP标示符,一共8个字节,由2个字节的优先级和6个字节的MAC地址构成:
- 桥优先级缺省为32768,可以手工修改。
- MAC地址为交换机的背板MAC。
- 网络中Bridge ID最小的交换机将成为根桥。
- Path Cost
- 路径开销是一个端口量,是STP/RSTP协议用于选择链路的参考值。
- 端口路径开销的默认值及取值范围由选定的路径开销算法决定,路径开销与端口的带宽成反比。
- 华为网络设备支持的路径开销计算标准:802.1d-1998、802.1t、legacy,其中legacy为华为私有标准。华为交换机默认选择802.1t的标准。
- COST值的计算(802.1t):
- Port ID
- 端口ID (2字节)= 端口优先级(1字节)+ 端口编号(1字节)
- 缺省优先级128,范围0-255,越小越优。
选举详细过程:
1 在所有的交换机中,选出 根网桥
一开始,所有的交换机都会认为自己是根桥,相互发送BPDU, 它们会在 DBPU的 Root-id这个字段,填写上自己的BID[优先级和MAC地址],
先比较优先级,如果优先级相同,才比较MAC地址,越小越优先。
当选举出根桥以后,其他的就是非根桥,这些非根桥,就不再自己主动产生BPDU了,而是转发根桥产生的BPDU。
BID: 优先级 + MAC地址,越小越优先
优先级:默认是32768, 可以被设定的范围是:0-65535,但是只能被设置为 4096的倍数。 越小越优先
MAC地址是唯一的,不能被修改。
2 在所有的非根交换机上,选出一个根端口
每一台交换机,在自己的所有接口当中,只选出一个根端口。
比收到BPDU的 Cost值,【反过来就是:到达根桥的路径开销。】
如果Cost相同,则比较收到的BPDU中 Sender-BID字段,越小越优先
如果COST值也相同,则比较 Sender-BID:
Sender-PID : 发送BDPU报文的接口ID :
优先级+ 端口编号:
优先级默认是 128,范围是 0 - 255
如果Sender PID也相同:
比较 交换机自身接口的PID【local pid】,越小越优先。
3 选出 指定端口
0 一般情况下,根端口对面的,都是指定端口。
1 在其他链路上,选举出指定端口:
1.1 比较 所在交换机到达根桥的开销
1.2 如果所在交换机,达到根桥的路径开销相同,比较所在交换机的 BID
1.3 如果所在交换机的BID也相同,则比较 各自端口的 PID
4 最后剩下的,既没有被选上根端口,也没有被选上阻塞端口的那个端口,就把它 阻塞 掉。
验证接口选举的角色:
# 查看STP的简要信息
display stp brief
# Role
designate 指定
[SW4]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/3 DESI FORWARDING NONE
根桥 负责向外发送BPDU,其他非根交换机的根端口来接收BPDU, 所有的指定端口负责转发BPDU。
STP的端口状态机
端口状态 | 行为 |
Disable | 端口不仅不转发BPDU报文,也不转发用户流量。端口为DOWN |
Blocking | 只能接收BPDU,不能转发BPDU。也不能学习MAC地址,也不能转发数据。 |
Listening(要经历15s进入下一个状态) | 完成选举的阶段,能够接收和转发BPDU,不能学习MAC地址,不能转发数据。 |
Learning(要经历15s进入下一个状态) | 学习MAC地址的阶段,能够接收和转发DPDU,能够学习MAC地址,不能转发数据。 |
Forwarding | 数据转发状态,能够接收和转发BPDU,能够学习MAC地址,也能够转发数据。 |
STP 计时器
转发延时【Forward Delay】
15s, 就是 从 Listening到 Learning,和从Learning到Forwarding需要等待的时间。
报文的Hello时间。
及成为根桥的交换机,发送BPDU的周期:2s一次。
最大存活期:
Blocked的端口,接收BPDU,要进行储存的最大时间,如果经历10个hello周期,Blocked端口依然没有收到来自于根桥的BPDU,这个端口要进入到Listing状态,再次参加选举。
拓扑变更机制
STP的基础配置:
- 启用生成树:
stp enable
交换机会运行生成树, 默认开启的
# 不启用生成树:
undo stp enable
[SW2]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]Y
- STP mode
华为 3700 5700 交换机都默认开启了 STP的功能。
可以设置为三种形式
stp: 传统的 生成树协议
rstp: rapid stp: 快速生成树,对stp做了一些机制的优化【主要从收敛速度方面】
mstp: multiple stp, 基于stp,支持多个vlan的STP选举。
# 华为 x7系列交换机默认的STP模式为 MSTP
[SW1]stp mode ?
mstp Multiple Spanning Tree Protocol (MSTP) mode
rstp Rapid Spanning Tree Protocol (RSTP) mode
stp Spanning Tree Protocol (STP) mode
- 交换机的优先级
[SW1]stp priority ?
INTEGER<0-61440> Bridge priority, in steps of 4096
# 可以设置交换机的优先级,调整STP根桥的选举,只能被设置为 4096的倍数
- 根桥和次根桥
如果网络中交换机设备过多,可以设置主根桥和次根桥,
- 主根桥:优先级为0,选举的时候,必然会被选举为根桥
- 次根桥:优先级设置为 4096, 当主根桥故障的时候,它会成为下一个根桥。
# 设置交换机成为主根桥
stp root primary
# 设置交换机成为备根桥
stp root secondary