举个简单的拓扑:
这个拓扑中,SW1的G0/0/1和G0/0/2分别属于不同的VLAN1和VLAN2,两个口同时接傻瓜交换机,相当于“物理自环”了,但其实逻辑上并未环路,这种自环网络是不会产生广播风暴的,如下图:
广播包进入1口后打上缺省tag 1,即不会再向VLAN2的2口转发,不会产生环路风暴。那么这种情况下,交换机启用STP功能,这两个口会不会被阻塞掉一个呢?说明这个问题之前先来模拟一下。
搭建拓扑
本例通过eNSP搭建拓扑进行模拟,交换机使能STP模式,1口配置为Access VLAN1,2口配置为Access VLAN2。
等待拓扑收敛,查看生成树收敛的最终状态:
可以看到最终是2口被阻塞了,STP优先级比较是“小优”,1口优先级更高阻塞2口符合预期。
但很显然,STP协议并不关心1、2口是否属于不同VLAN,即便是逻辑拓扑上不成环协议也会把它阻塞掉,这个结果其实并不符合大众用户的心理预期,属于“误阻塞”。那为什么为这样呢?
原理分析
STP协议收敛的依据是BPDU报文的交互,交换机端口使能STP后,BPDU是端口发出来的,每个端口发出的BPDU均不一样。BPDU报文是802.3/LLC帧格式封装的,和我们常见的以太网数据报802.3 Ethernet 2帧格式有一些区别:
STP和RSTP的BPDU中是不包含VLAN信息的,所以生成树协议不会基于端口VLAN去做判断和比较。
那么在MSTP中的表现是怎么样的呢?
MSTP不同VLAN接口的收敛
MSTP是可以配置VLAN在不同的实例中收敛的,两个情况:
1.默认配置
默认情况下VLAN1和2都是MSTP的实例0,两个口都在默认实例0中收敛自然也会阻塞优先级最低的那个口:
2. 配置实例
如果将VLAN1和VLAN2分别划入不同实例1和2,那么实例之间是独立收敛计算的,1、2物理口不会被阻塞,转发机制如下:
- 处于VLAN1的数据会在实例1的生成树中转发;
- 处于VLAN2的数据会在实例2的生成树中转发;
- 其余VLAN数据在实例0中转发,但小优口会被阻塞掉。
配置了MSTP的实例后,BDPU报文中是有MSTID字段的,交换机桥之间的交互计算会基于实例收敛:
总结
上述原理看不懂没关系,慢慢再琢磨就行,但是下述总结务必记好:
Q:交换机使能STP或RSTP,不同VLAN接口“自环”了是否会被阻塞掉其中1个口?
A:会,阻塞掉优先级小的那个口。
Q:如果是使能MSTP呢?
A:分两种情况:
- 默认不配置实例就和RSTP一样,会阻塞优先级小的那个口;
- 配置实例后,1口和2口在不同实例中均处于转发状态。