什么是生成树?
本章介绍的是生成树协议(英语:Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太网中无环路的逻辑拓扑结构.从而避免了广播风暴,大量占用交换机的资源。
生成树的出现解决了什么问题呢?我们看下面这个图
![6f845c3ec473bba4454b6f5feb121ab5.png](https://i-blog.csdnimg.cn/blog_migrate/c5e7f0b2b79941f0f9645d361be401ad.jpeg)
随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连,如果所有交换机之间只使用一条链路互连,这样可能会出现单点故障,导致业务中断。
也就是说PC1,PC2依靠SW3连接到互联网,如果SW3与SW1的线路断开了,这时候就造成了下面终端用户无法访问网络。
那么该如何解决呢?我们看下面这张图。
![bb6c1703e23bf8555d7887518de77102.png](https://i-blog.csdnimg.cn/blog_migrate/db3f3b133cdccf2b77042fb0e495f63a.jpeg)
为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。
冗余链路虽然增强了网络的可靠性,但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。
也就是说为了避免单点故障导致不能上网,我们在交换机上连接两个线,SW3-SW1这条链路断开了,SW3下面的主机可以通过SW-SW2这条链路去上网。
但是这样也产生了一个问题,我们只考虑SW1 SW2 SW3
比如这时候PC1发送了一个广播包
①SW3会将广播包从接收端口以外的所有端口发出,也就意味着SW1会受到广播包
②SW1收到广播也会把广播包从接收端口以外的所有端口发出,这时候SW2收到了广播包
③SW2收到广播之后又会发给SW3,SW3收到又会发给SW1
这样就形成了环路
当然我只举了SW3-SW1-SW2这一个方向,SW3-SW2-SW1又是一个方向,二层网络中没有TTL概念,一旦形成了环路,就会一直循环下去,进而产生了广播风暴,导致交换机性能会因此急速下降,网络断开或者时断时续。
环路导致的MAC地址表动荡。
![bf59ef024c56f5bc4869f0a458bf8e04.png](https://i-blog.csdnimg.cn/blog_migrate/af78b2fb1cff2be0795db1d4e5a56cce.png)
环路不仅产生了广播风暴,也导致了交换机mac地址表动荡,它是如何导致的呢?我们来看下面、
交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
我们来看上边这张图
①主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-01-02-03-04-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
② SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。
③ SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
④ SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,00-01-02-03-04-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。
在