实验目标:理解STP工作原理,掌握STP选举过程
实验TOP:
看起来有点小复杂哦,不过别担心,后面我会分解给大家看
基本配置:
SW1
! hostname SW1 ! no ip domain lookup ! spanning-tree vlan 1 priority 4096 ! interface FastEthernet1/0 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW2
! hostname SW2 ! no ip domain lookup ! interface FastEthernet1/0 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW3
! hostname SW3 ! no ip domain lookup ! spanning-tree vlan 1 priority 24576 ! interface FastEthernet1/3 bandwidth 10000 ! interface FastEthernet1/4 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW4
! hostname SW4 ! no ip domain lookup ! spanning-tree vlan 1 priority 28672 ! interface FastEthernet1/0 bandwidth 10000 ! interface FastEthernet1/3 bandwidth 10000 ! interface FastEthernet1/4 bandwidth 10000 ! interface FastEthernet1/5 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW5
! hostname SW5 ! no ip domain lookup ! interface FastEthernet1/0 bandwidth 10000 ! interface FastEthernet1/2 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW6
! hostname SW6 ! no ip domain lookup ! interface FastEthernet1/3 bandwidth 10000 ! interface FastEthernet1/4 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
SW7
! hostname SW7 ! no ip domain lookup ! interface FastEthernet1/0 bandwidth 10000 ! interface FastEthernet1/1 bandwidth 10000 ! line con 0 exec-timeout 0 0 logging synchronous !
(注:未设置接口的默认带宽为100000kbit/sec,即100Mb/s)
第一部分:前奏
在解决所有问题之前,我们很有必要先了解一下交换机是怎样工作的。
交换机的工作过程分为学习和转发两个步骤:
学习过程:交换机每收到一个数据帧,会将帧的源MAC地址和接收该帧的端口写入自己的 mac-address-table (又称CAM表);
转发过程:交换机根据帧的目的MAC地址查找自身的CAM表,如果有匹配的条目,则从相应的接口将该帧转发出去;如果CAM表中没有匹配条目,则交换机会除接收端口外整网泛洪该帧。
了解了交换机的工作原理,我们来看一个简单的案例:
如上图所示,一个公司网络中,三台交换机,一台网关路由器,和两台PC互相连接。PC1可以通过sw1,sw2访问网关,PC2也可以通过sw3,sw2访问外网。现如果sw1的 f1/1接口突然因故障down掉,那么PC1便不能再访问网关,网络的可用性就不能得到保障。
为了解决这种单点失效的问题,常用的方法是在网络中做冗余备份。这里我们在sw1和sw3之间接一条冗余链路,如图:
现在如果sw1的 f1/1端口再down掉,PC1还可以通过sw1-sw3-sw2来访问网关,网络的可用性就大大地提高了。
解决了单点失效的问题,我们似乎可以松一口气了,可是新的问题又来了:
由于只涉及到二层网络,这里我们不再考虑网关路由器;且假设最初
所有交换机的CAM表均为空,PC1的ARP表中已经有PC2的MAC地址
如图,当PC1和PC2通信时:
第1步:PC1向sw1发送一个二层数据帧,源MAC为自身MAC,目的MAC为PC2的MAC。
第2步:根据交换机的工作原理,sw1首先学习帧的源MAC地址,然后查找目的MAC。由于初始时CAM表为空,sw1没有发现PC2的MAC,则除 f1/0外将该数据包泛洪到 f1/1和 f1/2接口。
第3步:sw2收到帧后会转发给 f1/0接口,sw3则将帧泛洪到它的 f1/0和 f1/1接口,此时问题出现了:
当sw2从 f1/1接口收到sw1传过来的帧时,会将PC1的MAC地址和 f1/1接口的映射记录到CAM表中,而后来sw2又从 f1/0接口收到了来自sw3的同样的帧,这时sw2不得不把刚才学到的记录更新为PC1的MAC和 f1/0接口的映射,这就是CAM表不稳定的问题。
第4步:在步骤3中,PC2已经接收到了sw3泛洪过来的帧,当sw3收到sw2传过来的帧时,又会把相同的帧从 f1/1和 f1/2接口泛洪出去,这时PC2又会收到一个不必要的相同的帧,这就是重复帧的问题。
第5步:sw1收到分别来自 f1/1和 f1/2接口的帧,则会分别从接口 f1/0,f1/2和 f1/0,f1/1将同样的帧泛洪出去。我们突然间发现,网络中正在发洪水一样泛滥着同一个帧:这就是臭名昭著的广播风暴!我们的网络会在极短的时间内瘫痪掉!
到这里,我们迷茫了:为了解决网络中的单点失效问题,我们引入了冗余,可冗余又会造成CAM表不稳定、重复帧、广播风暴这些令人头疼的问题,那我们究竟该怎么办呢?
别担心,STP来解救我们了!!!
STP (Spanning Tree Protocol) 是Cisco交换机内置的一种协议,STP利用 BPDU(Bridge Protocol Data Unit) 和其他交换机进行通信,遵循一定的规则确定出哪个交换机应该阻断哪个接口,最终构建出一棵无环路的生成树,从而解决了网络冗余带来的一系列问题。
等等,上面提到了一个名词:BPDU。BPDU是什么?
BPDU 即桥协议数据单元,是交换机进行STP选举的法宝,如上所述,STP就是通过交换各自的BPDU信息来确定生成树的。在实际传输过程中,BPDU消息是封在以太网帧中的,BPDU字段的格式如下: