在一个复杂的网络中,难免会出现环路。并且,由于冗余备份需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条作主链路,其他链路作为备份。这样,偶然或必然中都会导致环路的产生。环路会产生广播风暴,最终导致整个网络资源被耗尽,网络瘫痪不可用。环路还会引起MAC地址表震荡导致MAC地址表项被破坏。为了破除环路,采用数据链路层协议STP。下面一起来看看STP是如何破坏的。
STP的工作原理
STP实质就是从逻辑上把其中一个端阻塞掉,从而把环路破除。那么它是通过什么机制选取那个端口是阻塞状态呢?生成树算法可以归纳以下三个步骤:
1. 选择根网桥
每个交换机都有唯一的网桥ID(BID),最小BID值的交换机为根交换机。因为BID(8字节)= 桥优先级(2字节)+ 桥MAC(6字节),所以,通过调整优先级让某台交换机为根交换机。
2. 选择根端口
选择根网桥后,其他的非根网桥选择一个距离根网桥最近的端口为根端口。
选择根端口依据如下:
- 交换机中到根网桥总路径成本最低的端口
- 如果到达根网桥的开销相同,在比较上级发送者的桥ID,选择发送者网桥ID最小对应的端口。
- 如果发送者网桥ID也相同,再比较发送者端口ID。端口ID由端口优先级(8位)和端口编号(8位)组成。若端口优先级相同,选择端口号最小的。
链路速度与路径成本
3. 选择指定端口
每个网段选择一个指定端口,根网桥的所有端口均为指定端口。
选择非根网桥指定端口的依据如下:
- 到根网桥的路径成本最低
- 端口所在的网桥的ID最小
- 端口值较小
经过以上三个步骤的选择,把根桥、根端口和指定端口都选择出来了,剩下的就是非指定端口,也是将被STP协议在逻辑上阻塞的端口。
以下通过一个简单的案例来深入了解一下STP的工作过程。
从上图拓扑是由三台华为的S5700组成,优先级保持默认的32768,带宽也是一样的1000Mbps。由于华为的交换机默认开启STP。
根据上文的知识点,很快确定SW1是根交换机,由于优先级一样,比较MAC地址,SW1是最小的,所以称为根端口。在交换机上通过执行如下命令验证一下
- [SW3]display stp
根端口是哪些呢?
交换机SW2到交换机SW1的最近端口被选为根端口。从上图拓扑可看出,在带宽相同情况下,SW2的GE0/0/1端口到SW1最近,所以,为根端口,同样的SW3的GE0/0/2端口为根端口。可以通过以下命令,在交换机上验证
- display stp brief
指定端口是哪些呢?
SW2和SW3的GE0/0/3两个端口到根端口的开销一样,选择BID较小的SW3交换机端口为指定端口,所以SW3的GE0/0/3为指定端口,而SW2的GE0/0/3为阻塞端口。
有了以上的知识点,可以通过控制一些可变的值,来达到我们先要的效果,例如,先让SW3成为根交换机,可以通过降低SW3的优先级(一定是4096的倍数)。执行如下命令
- [SW3]stp priority 4096
还可以通过修改端口的优先级、或者链路开销值等参数,达到我们想要的效果。具体命令如下:
- #修改端口的开销值
- [SW2-GigabitEthernet0/0/1]stp cost 1000
- #通过修改端口优先级
- [SW2-GigabitEthernet0/0/1]stp port priority 32