以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用几余链路。但是使用几余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断为解决交换网络中的环路问题,提出了生成树协议STP(SpanningTree Protocol)。
同一数据帧被重复收到多次,被称为多帧复制。
为了保证备份链路的存在,并且不会出现二层环路,所以,我们设计了STP协议。
生成树协议原理:在二层交换网络中,逻辑的阻塞部分的接口,实现从根交换机到所有节点唯一的路径目为最佳路径,生成一个没有环路的拓扑。当最佳路径出现故障时,个别被阻塞的接口将打开,形成备份链路。
生成树是相对比较早的一个协议了,所以,也经历了多种版本的更替。我们现在常见的主要是802.1D生成树(最早期的生成树种类),RSTP(快速生成树协议—定义在802.1W中,也被称为802.1W生成树),MSTP(多生成树协议— 定义在802.1S中,也被称为802.1S生成树。
我们首先需要关注的是最基本的802.1D生成树协议,其他版本都是在802.1D的基础上改进的,本质原理相同。
所谓BPDU— Bridge ProtocolData Unit,网桥协议数据单元 — 其实就是STP生成树需要发送的数据包的法。
BPDU主要分为两大类
其中,配置BPDU是STP进行拓扑计算的关键,TCN BPDU只在网络拓扑发生变更时才会被触发。
接口Cost是已经激活了STP的接口所维护的一个开销值,该值存在默认值,与接口的速率有关联,并且设备使用不同的算法时,相同的接口速率对应不同的Cost值。
(华为设备默认采用的是802.1t标准,华三设备默认使用的是自定义标准)
所有交换机刚启动,所有接口都激活STP,一开始,并不知道谁是根,则所有设备都将判定自己为根网桥,从字节的所有激活了STP的接口发送配置BPDU,则其中将包含本机参数。之后,所有设备都交换参数后,将根据参数数值进行选举,之后,将选举出一个直正的根网桥。之后,只有根网桥将周期的发送配置BPDU,而其他非根网桥只能在接受到根网桥发送的BPDU后进行转发。(转发时可以修改其中的参数。)—发送周期为2S,MAXAGE— 20S。
TCNBPDU的报文格式
仅拥有配置BPDU的前三个参数,其中BPDU类型字段为0x80
拓扑改变导致MAC地址表变化
TCN BPDU— 本地交换链路故障后,STP将重新收敛,为了加快刷新交互机的MAC地址表,将向本地所有STP接口发那个TCN BPDU,邻居交换机收到TCN BPDU后将回复一个TCA位置1的配置BPDU,用于可靠性传出,之后将TCN BPDU逐级转发到根网桥处,由根网桥下发TC标记位置1的配置BPDU,逐级下发给所有的交换机,所有交换机在收到后将临时的将300S的MAC地址老化时间改为15S。
STP中一共存在四种角色
1、根网桥(也叫根桥) — RB
2、根端口— RP
3、指定端口— DP
4、非指定端口— NDP
3、指定端口选举
指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID。
状态名称 | 状态描述 |
---|---|
禁用(Disable) | 该接口不能收发BPDU,也不能收发业务数据顿,例如接口为down |
阻塞(Blocking) | 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 |
侦听(Listening) | 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据顿,也不会进行MAC也址学习 |
学习(Learning) | 当接口处于该状态时,会侦听业务数据顿(但是不能转发业务数据),并且在收到业务数据顿后进行MAC地址学习 |
转发(Forwarding) | 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态 |
图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:
802.1D生成树在收敛时主要是基于计时器收敛的
首次收敛,所有设备最先进入的是阻塞状态,需要先停留20S(最大寿命时间)之后进入侦听,此状态停留15秒总共50S。选举角色,之后进入学习状态,再停留15S,总共50S。
端口状态:
[Huawei] stp mode ( stpl rstpI mstp
[Huawei] stp root primary
[Huawei] stp root secondary
[Huawei] stp priority priority
[Huawei] stp pathcost**-standard**{ dot1d-1998 dot1t legacy}
[Huawei-GigabitEthernet0/0/1]stp cost cost
[Huawei-intf] stp priority priority
[Huawei] stp ehable
通过端口的增补,简化了生成树协议的理解于部署。
RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup
端口根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下。
给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程
RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分
STP端口状态 | RSTP端口状态 | 端口在拓扑中的角色 |
---|---|---|
Forwarding | Forwarding | 包括根端口、指定端口 |
Learning | Learning | 包括根端口、指定端口 |
Listening | Discarding | 包括根端口、指定端口 |
Blocking | Discarding | 包括Alternate端口、Backup端口 |
Disabled | Discarding | 包括Disable端口 |
在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,再由根桥来通知拓扑变更,泛洪TC置位的配置BPDU。
在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪
如上图所示:
BPDU保护
在交换设备上,通常将直接与用户终端(如PC机)或文件服务器等非交换设备相连的端口配置为边缘端口。
如上图所示:
sw3与某主机互联,并设置该互联端口为边缘端口。
后来该主机被恶意用户侵占,并伪造RST BPDU攻击SW3,因此边缘端口会收到RST BPDU,失去边缘端9口特性,并进行生成树计算。
根保护
由于维护人员的错误配置或网络中的恶意攻击,根桥有可能会收到优先级更高的RST BPDU,使得根桥失去根地位,从而引起网络拓扑结构的借误变动。这种拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。
如上图所示:
网络稳定时,SW1为根桥,向下游设备发送最优RST BPDU
如果SW2被恶意用户侵占,例如恶意修改SW2的桥优先级,使得SW2的桥优先级优于sw1,此时SW2会主动发送自己的RST BPDU
当5W1的指定端口收到该RSTBPDU后,会重新进行生成树计算,而SW1也会失去根桥的地位,引起拓扑变动。
注意:生成树不是基于VLAN运行的,而是基于Instance运行的
Instance0是缺省存在的,而且缺省时,华为交换机上所有的VLAN都映射到了Instance0。
通过设置VLAN映射表(即VLAN和MSTI的对应关系表),把VLAN和MSTI联系起来。
1、配首生成树工作模式
[Huawei] stp mode mstp
交换机支持STP、RSTP和MSTP三种生成树工作模式。默认情况工作在MSTP模式
2、启用MSTP
[Huawei] stp enable
使能交换设备或端口上的STP/RSTP/MSTP功能。缺省情况下,全局和端口的STP/RSTP/MSTP均使能注意:为了保证生成树计算过程快速而且稳定,必须在启用STP/RSTP/MSTP之前,完成对交换设备及其端口必要的基本配置。
3、配置MST域
[Huawei] stp region-configuration[Huawei-mst-region]
[Huawei-mst-region]region-name name
[Huawei-mst-region] instance instance-id vlan { vlan-id1 [ to vlan-id2 ]
[Huawei-mst-region] revision-levellevel
[Huawei-mst-region] active region-configuration