为什么要了解STP生成树协议?
因为交换网络的互联会造成网络环路,从而产生广播风暴。如下图所示:
1、当PC1第一次和PC2通信的时候,PC1会发送ARP请求交给交换机SW1。
2、当SW1收到广播后,根据交换机的工作原理,它会将此广播包从非接收端口广播出去。
3、当SW2和SW3收到广播后,同样也会广播此广播包。
4、这时就如上图所示就形成了一个环路了。
STP(生成树协议):就是把一个环形的结构变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口。
生成树算法及验证
生成树协议运行生成树算法很复杂,但是其过程可以归纳为以下三个步骤。
1)选择根网桥
2)选择根端口
3)选择指定端口
注意:网桥是交换机的前身,由于STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用这一术语,在此网桥就是指交换机。
选择根网桥:
选择根网桥的依据是网桥ID,网桥ID是由网桥优先级和网桥MAC地址组成的。按照生出树协议的定义,当比较某个STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看那台交换机的网桥ID小,优先级小的被选为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。
选择根端口:
在STP选择根端口的时候,首先比较交换机端口的根路径成本。根路径成本低的为根端口。当根路劲成本相同的时候,比较链接的交换机的网桥ID。选择网桥ID小的作为根端口,当网桥ID相同的时候,比较端口ID,选择较小的作为根端口。
选择指定端口:
在STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID,选择一个网桥ID值小的作为指定的端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为指定端口。
如下:根据生成树算法,算出上图中交换机循环链路的生成树,将阻塞一个端口。
STP应用:配置核心交换机的负载均衡
其实在实际生产环境中,交换机的生成树都是交换机自己算好的,根本不需要我们参与,但是有些时候,交换机自己生成的树,不是很理想,对于网络不合理,那么这个时候我们就需要手动的去更改生成树了。
如下图所示:配置两台核心交换机分别为不同vlan的根网桥,使不同的vlan中各接入交换机上选择的根端口不同,因此,不同的vlan的数据传输使用的线路也不同,以达到两条线路之间的负载均衡。
注意:下面我只写修改生产树的相关命令,vlan是已经创建好的。如何创建vlan请参考文章:虚拟局域网VLAN
配置PVST+的方法很多,在这里使用两种方法配置。(关于PVST+的更多介绍,请参思科官方网站)
方法一:
Switch1(config)#spanning-tree vlan 1-5 priority 4096
Switch1(config)#spanning-tree vlan 6-10 priority 32768
Switch2(config)#spanning-tree vlan 1-5 priority 32768
Switch2(config)#spanning-tree vlan 6-10 priority 4096
方法二:
Switch1(config)#spanning-tree vlan 1-5 root primary
Switch1(config)#spanning-tree vlan 6-10 root secondary
Switch2(config)#spanning-tree vlan 1-5 root secondary
Switch2(config)#spanning-tree vlan 6-10 root primary
注意:上面的vlan 1-5 是vlan1到vlan5,这样简写比较方便。
关于PVST+的常见配置请参看下面的语法。
启用生成树命令:
Switch1(config)#spanning-tree vlan vlan-list
指定根网桥:
Switch1(config)#spanning-tree vlan vlan-list priority Bridge-priority
还可以这样配置
Switch1(config)#spanning-tree vlan vlan-list root { secondary | primary }
如果配置primary 则交换机的优先级变成24576,配置secondary 则是28672.
修改端口成本:
Switch1(config-if)#spanning-tree vlan vlan-list cost cost
配置速端口:
Switch1(config-if)#spanning-tree portfast
查看PVST+配置信息:
Switch#show spanning-tree #查看生成树的配置
Switch#show spanning-tree vlan vlan-id detail #查看某个vlan的生成树配置信息。