在二层交换网络中,逻辑的阻塞部分的接口,实现从跟交换机到所有节点唯一的路径称为最佳路径,生成一个没有环路的拓扑。当最佳路径出现故障时,个别被阻塞的接口将打开,形成备份链路。
STP的接口状态
状态名称 | 状态描述 |
禁用(Disable) | 该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down |
阻塞(Blocking) | 当该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 |
侦听(Listening) | 当接口处于该状态时,表明STP初步认定该接口为根接口和指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习 |
学习(Learning) | 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧时会进行MAC地址学习 |
转发(Forwarding) | 处于该状态的接口可以正常的收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态 |
结构突变主要有三种故障:根桥故障、直连链路故障、非直连链路故障
<1> 根桥故障
<2> 端口状态
SW3的预备端口,20S会从Blocking状态进入到Listening状态,在进入Learning状态,最终进入Forwarding状态,进行用户流量的转发。
<3> 收敛时间
根桥故障会导致50s左右的恢复时间,等于Max Age加上两杯的Forward Delay收敛时间
<1> 直连链路故障
<2> 端口状态
备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态
<3> 收敛时间
直连链路故障,备用端口会经过30s后恢复转发状态
<1> 非直连故障
<2> 端口故障
SW3的预备端口20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发
<3> 收敛时间
非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forwarding Delay收敛时间
通过对端口的增补,简化了生成树协议的理解便于部署
<1> RSTP的端口角色一共有四种:根端口、指定端口、Alternate端口和Backup端口
<2> 根端口和指定端口的作用和STP中相同。Alternate端口和Backup端口的作用描述如下:
从配置BPDU的报文发送角度来看:
- Alternate端口就是由于学习到其他网桥发送的配置BPDU报文而阻塞的端口
- Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口
从用户流量角度来看:
- Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
- Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路
<3> 给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程
RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分
<1> RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色
<2> 除了保证和STP格式基本一致之外,RSTP做了如下变化:
<3> RST BPDU的报文格式
<4> RST BPDU与STP配置和BPDU报文格式的不同点。包括:BPDU类型和Flag字段
1> BPDU类型,1 Byte,RST BPDU的类性质为0x02
2> 标志,1 Byte,包括:
bit 7:TCA,表示拓扑变化确认
bit 6: Agreement,表示同意,用于P/A机制;. bit 5: Forwarding,表示转发状态
bit 4:Learning,表示学习状态
bit 3和bit2:表示端口角色,00表示未知端口,01表示替代或备份端口,10表示根端 口,11表示指定端口
bit 1: Proposal,表示提议,用于P/A机制;. bit 0: TC,表示拓扑变化。
注意:这个P/A机制是RSTP完成快速收敛的核心手段,因为他改变了STP依照计时器收敛的方法,可以理解为完成选举后立即切换状态,完成收敛。
<1> 在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,在由根桥来通知拓扑变更,泛洪TC置为的配置BPDU
<2> 在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪
<1> BPDU保护
在交换设备上,通常将直接与用户终端(如PC机)或文件服务器等非交换设备相连的端口 配置为边缘端口。
如上图所示:
<2> 根保护
由于维护人员的错误配置或网络中的恶意攻击,根桥有可能会收到优先级更高的RST BPDU,使得根 桥失去根地位,从而引起网络拓扑结构的错误变动。这种拓扑变化,会导致原来应该通过高速链路 的流量被牵引到低速链路上,造成网络拥塞。
如图所示:
<3> 环路保护
在运行RSTP的网络中,根端口状态是依靠不断接收来自上游交换设备的RSTBPDU维持。当由于链 路拥塞或者单向链路故障导致根端口收不到来自上游交换设备的RST BPDU时,此时交换设备会重 新选择根端口。
如图所示:
当SW1和SW3之间的链路发生单向链路故障时,SW3由于根端口在超时时间内收不到来 自上游设备的BPDU报文,Alternate端口切换成根端口,根端口切换成指定端口,从而形成了环 路。
<4> 防TC-BPDU攻击
交换设备在接收到TC置位的RST BPDU报文后,会执行MAC地址表项的删除操作。如果有人伪造TC置位的RST BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多RST BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。
如图所示:
如果SW3被恶意用户侵占,伪造大量TC置位的RST BPDU并向外发送。SW2收到这些RST BPDU后,会频繁执行MAC地址表项的删除操作,形成巨大负担。
[sw1]vlan 2
[sw1-vlan2]q
[sw1]port-group group-member g0/0/3 g0/0/4
[sw1-port-group]port link-type access
[sw1-GigabitEthernet0/0/3]port link-type access
[sw1-GigabitEthernet0/0/4]port link-type access
[sw1-port-group]port default vlan 2
[sw1-GigabitEthernet0/0/3]port default vlan 2
[sw1-GigabitEthernet0/0/4]port default vlan 2
[sw1]int g0/0/1
[sw1-GigabitEthernet0/0/1]port link-type trunk
[sw1-GigabitEthernet0/0/1]port trunk allow-pass vlan 2
[sw1-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw1]int g0/0/2
[sw1-GigabitEthernet0/0/2] port link-type trunk
[sw1-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw1-GigabitEthernet0/0/2] port trunk allow-pass vlan 2
[sw2]vlan batch 3 to 4
[sw2]int g0/0/3
[sw2-GigabitEthernet0/0/3]port link-type access
[sw2-GigabitEthernet0/0/3]port default vlan 3
[sw2]int g0/0/4
[sw2-GigabitEthernet0/0/4]port link-type access
[sw2-GigabitEthernet0/0/4]port default vlan 4
[sw2]int g0/0/1
[sw2-GigabitEthernet0/0/1]port link-type trunk
[sw2-GigabitEthernet0/0/1]port trunk allow-pass vlan 3 4
[sw2-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw2]int g0/0/2
[sw2-GigabitEthernet0/0/2] port link-type trunk
[sw2-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw2-GigabitEthernet0/0/2] port trunk allow-pass vlan 3 to 4
[sw3]vlan batch 2 to 4
[sw3]vlan 100
[sw3-vlan100]q
[sw3]int g0/0/5
[sw3-GigabitEthernet0/0/5]port link-type trunk
[sw3-GigabitEthernet0/0/5]port trunk allow-pass vlan 2
[sw3-GigabitEthernet0/0/5]undo port trunk allow-pass vlan 1
[sw3]int g0/0/4
[sw3-GigabitEthernet0/0/4]port link-type trunk
[sw3-GigabitEthernet0/0/4]port trunk allow-pass vlan 3 4
[sw3-GigabitEthernet0/0/4]undo port trunk allow-pass vlan 1
[sw3]port-group group-member g0/0/2 g0/0/3
[sw3-port-group]port link-type trunk
[sw3-GigabitEthernet0/0/2]port link-type trunk
[sw3-GigabitEthernet0/0/3]port link-type trunk
[sw3-port-group] undo port trunk allow-pass vlan 1
[sw3-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw3-GigabitEthernet0/0/3] undo port trunk allow-pass vlan 1
[sw3-port-group] port trunk allow-pass vlan 2 to 4
[sw3-GigabitEthernet0/0/2] port trunk allow-pass vlan 2 to 4
[sw3-GigabitEthernet0/0/3] port trunk allow-pass vlan 2 to 4
[sw3]dhcp enable
[sw3]int vlan 100
[sw3-Vlanif100]ip add 10.1.1.1 24
[sw3-Vlanif100]dhcp select interface
[sw3]int g0/0/1
[sw3-GigabitEthernet0/0/1]port link-type trunk
[sw3-GigabitEthernet0/0/1]port trunk allow-pass vlan 100
[sw3-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw4]vlan batch 2 to 4
[sw4]vlan 100
[sw4-vlan200]q
[sw4]int g0/0/4
[sw4-GigabitEthernet0/0/4] port link-type trunk
[sw4-GigabitEthernet0/0/4] undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/4] port trunk allow-pass vlan 2
[sw4]int g0/0/5
[sw4-GigabitEthernet0/0/5] port link-type trunk
[sw4-GigabitEthernet0/0/5] undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/5] port trunk allow-pass vlan 3 to 4
[sw4]port-group group-member g0/0/2 g0/0/3
[sw4-port-group]port link-type trunk
[sw4-GigabitEthernet0/0/2]port link-type trunk
[sw4-GigabitEthernet0/0/3]port link-type trunk
[sw4-port-group]undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/2]undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/3]undo port trunk allow-pass vlan 1
[sw4-port-group]port trunk allow-pass vlan 2 to 4
[sw4-GigabitEthernet0/0/2]port trunk allow-pass vlan 2 to 4
[sw4-GigabitEthernet0/0/3]port trunk allow-pass vlan 2 to 4
[sw4]dhcp enable
[sw4]int vlan 200
[sw4-Vlanif200]ip add 10.1.2.1 24
[sw4-Vlanif200]dhcp select interface
[sw4]int g0/0/1
[sw4-GigabitEthernet0/0/1]port link-type trunk
[sw4-GigabitEthernet0/0/1]port trunk allow-pass vlan 200
[sw4-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw5]vlan 100
[sw5-vlan100]q
[sw5]vlan 200
[sw5-vlan200]q
[sw5]int vlan 100
[sw5-Vlanif100]ip add 10.1.1.2 24
[sw5]int vlan 200
[sw5-Vlanif200]ip add 10.1.2.2 24
[sw5]int g0/0/1
[sw5-GigabitEthernet0/0/1] port link-type trunk
[sw5-GigabitEthernet0/0/1] undo port trunk allow-pass vlan 1
[sw5-GigabitEthernet0/0/1] port trunk allow-pass vlan 100
[sw5]int g0/0/2
[sw5-GigabitEthernet0/0/2] port link-type trunk
[sw5-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw5-GigabitEthernet0/0/2] port trunk allow-pass vlan 200
[sw3]stp mode stp ---配置生成树的工作模式
[sw4]stp mode stp
[sw2]stp mode stp
[sw1]stp mode stp
[sw3]stp root primary ---配置当前设备为根桥
[sw4]stp root secondary ---配置当前交换机为备份根桥
由于默认所有接口都要参与生成树,所以将SW3和SW4的G0/0/1接口的生成树关闭,也将连接PC机接口的生成树关闭
[sw3]int g0/0/1
[sw3-GigabitEthernet0/0/1]undo stp enable---关闭接口的生成树
[sw4]int g0/0/1
[sw4-GigabitEthernet0/0/1]undo stp enable
[sw1]int g0/0/3
[sw1-GigabitEthernet0/0/3]undo stp enable
[sw1]int g0/0/4
[sw1-GigabitEthernet0/0/4]undo stp enable
[sw2]int g0/0/3
[sw2-GigabitEthernet0/0/3]undo stp enable
[sw2]int g0/0/4
[sw2-GigabitEthernet0/0/4]undo stp enable
查看SW1和SW2的端口状态
查看SW4的端口状态
[sw4]int g0/0/3---在根桥收到的接口上修改RPC
[sw4-GigabitEthernet0/0/3]stp cost 1---将RPC修改为1
查看SW4的端口状态
[sw3]int g0/0/3---在根桥发送接口上修改PID
[sw3-GigabitEthernet0/0/3]stp port priority 0---将PID修改为1(默认步长为16的倍数)
查看SW4的端口状态