1.STP与VLAN的关系
STP与VLAN的关系主要有下面几种:
(1)IEEE通用生成树(CST)
(2)Cisco的每VLAN生成树(PVST)
(3)Cisco的能兼容CST的PVST(PVST+)
(4)IEEE的MST(Multiple Spanning Tree,多生成树)
CST不考虑VLAN,以交换机为单位运行STP(整个网络中生成一个STP实例),实际上,CST运行在VLAN1上,也就是默认的VLAN上。当STP选举后,有的端口被阻塞,可能就造成有的VLAN不能通讯.
PVST是Cisco的私有协议,PVST为每一个VLAN创建一个STP实例。PVST为每一个VLAN运行一个STP实例,能优化根网桥的位置,能为VLAN提供最优的路径。
但是PVST也不是完美的,缺点如下:
(1)为了维护每一个STP,需要占用更多的CPU资源
(2)为了支持各个VLAN的BPDU报文,需要占用更多的Trunk带宽
(3)PVST与CST不兼容,使得运行PVST的Cisco交换机不能与其他厂商的交换机协同工作
Cisco为了解决与其他交换机协同工作的问题,开发了PVST+。Cisco的交换机默认使用PVST+,PVST+允许CST的信息传给PVST,以便让Cisco的交换机能通其他厂商的交换机协同工作。
2.PVST+的配置
(1)配置PVST+的意义
交换机加电启动后会自动运行STP,为什么还要配置呢?

因为在网络中,如果根网桥不稳定,那么这个网络就要经常运行STP计算,网络拓扑经常变化,有一个不稳定的根网桥,就有一个不稳定的网络。
而且在选择根网桥的时候,如果不修改网桥ID(网桥优先级),那么很有可能,网络边缘的交换机被选择为根网桥,因为MAC地址是随机的,合理的配置,能够对网络进行优化。
配置PVST+,除了让网络中有一个稳定的根网桥外,还有以下几个优点:
1)利用PVST+实现网络的负载均衡
 

STP应用(PVST+介绍)_第1张图片


                                                    如图:2-1 PVST+实现网络的负载分担
在图:2-1中  配置两台核心交换机分配为不同VLAN的根网桥,这样让不同的VLAN数据经过不同的核心交换机转发,实现了网络的负载均衡。
2)配置速端口(PostFast),使连接终端的端口快速进入转发状态。
主 机连接到交换机的端口,如果PC关闭后再开机,交换机的端口变为down再变为up。这时,交换机要等到STP进入到转发状态才可转发数据。如果使用默认 的STP计时器,端口从down到转发状态最少需要30秒。这将导致主机必须等待端口进入转发状态后才能发送或者接收数据。
当单台 主机接到交换机的端口时,不可能形成环路,所以Cisco的交换机提供了速端口的功能,当端口从up变为down时,直接进入转发状态,不需要经过侦听到 学习的状态,节省30秒的转发延迟。配置为速端口后,该端口仍然在运行STP生成树协议,如果检测到了环路,也能够从转发状态变为阻塞状态。速端口只能配 置到连接到终端的端口上,否则会形成短时间的环路。
(2)PVST+的配置命令
1)启用生成树命令,Cisco在默认情况下启用了PVST+,可以在前面加no来关掉某个VLAn的生成树协议,但是,一般情况下,即使网络中不存在物理环路,也不建议关掉生成树协议。命令如下:
Switch(config)#spanning-tree vlan vlan-list
2)指定根网桥,因为MAC地址不可更改,所以要指定VLAN的优先级,命令如下:
Switch(config)#spanning-tree vlan vlan-list   priority  Bridge-priority
Bridge-priority的默认优先级为32768,优先级必须是4096的倍数,范围为0-65535,可以通过这条命令,同时为多个VLAN指定优先级,将VLAn2 ,VLAN4到VLAN10的优先级指定为4096,命令如下:
Switch(config)#spanning-tree vlan 2,4-10 priority  4096
除了更改网桥的优先级外,还可以使用命令指定交换机为根网桥,配置为primary 表示优先级设置为24576,配置为secondary 表示优先级变为28672,命令如下:
Switch(config)#spanning-tree vlan vlan-list   root { primary  |  secondary }
3)修改端口成本
Switch(config-if)#spanning-tree vlan vlan-list   cost  cost
4)修改端口优先级
Switch(config-if)#spanning-tree vlan vlan-list  port-priority  priority 
例如:一台交换机在默认情况下,使用show spanning-tree 查看生成树

现在修改F0/1的端口成本(cost) 和端口的优先级(priority)

在Cisco PT5上做的实验,2960系列交换机,好像IOS不支持修改端口成本
查看修改后的生成树 show spanning-tree

5)配置速端口
Switch(config-if)#spanning-tree portfast
3.PVST+配置的查看
Switch#show spanning-tree
查看某个VLAN的生成树信息
Switch#show spanning-tree vlan vlan-id 
4.PVST+配置案例
二台交换机配置:

图:4-1
如图:配置PVST+,要求VLAN1的数据从F0/24接口链路通过,VLAN2的数据从F0/23通过,其中交换机为默认配置,SW1的MAC地址:0007.ECC8.2ABA,SW2的MAC地址:00E0.F7A6.4C5D,二台交换机之间的链路的Trunk。
具体配置如下:
在SW1 和SW2上配置F0/23、F0/24为Trunk链路,创建VLAN2,早期的Cisco交换机可以在VLAN Database模式和全局配置模式下创建VLAN,但是新的交换机上只能全局配置模式下创建VLAN

配置完成后,查看生成树状态
Sw1和SW2的



图:4-2
从上面的图可以看出,SW1为根网桥,无论是VLAN1还是VLAN2,交换机F0/24的端口都是阻塞的,所以VLAN1和VLAN2都通过F0/23链路传输数据。
二台交换机的VLAN负载均衡不能更改STP的优先级,只能改cost值
因为Cisco默认运行PVST+,会为每一个VLAN创建一个STP实例,PVST+可以理解为每一个VLAN都要运行一次STP计算。
根据STP的计算(选择根网桥、根端口、指定端口的过程),由于二台交换机不能修改优先级,所以根网桥就固定了,根端口的选择有3个依据(1.到根网桥的成本路径 2.直连网桥的ID 3.端口ID)
所以想要达到负载均衡的效果,修改SW2上F0/24的COST值,小于SW2上F0/23的COST值就行,命令如下:
SW2(config-if)#spanning-tree vlan 1 cost 10
 三台交换机配置实例:

如图所示网络拓扑,链路均为100Mb/s,交换机都为默认配置,SW1的MAC地址:000C.CF3C.E030,SW2的MAC地址:000C.CF3C.E030,SW3的MAC地址:0003.E473.7440.要求配置SW1为VLAN1 的根网桥,SW2为VLAN2的根网桥,实现VLAN的负载均衡。

(1)配置交换机之间的链路为TRUNK链路,命令如下:
SW(config)#int f0/23 -24
SW(config-if)#switchport mode trunk
(2)配置VLAN的负载均衡

交换机在默认情况下运行STP计算,得到的结果是SW2为根网桥,SW1的F0/24和SW3的F0/24成为根端口,SW2上F0/23和F0/24、SW3的F0/23成为指定端口,SW1的F0/23被阻塞。
要使SW1成为VLAN1的根网桥、SW2成为VLAN2的根网桥,则需要修改网桥的优先级
SW1上的配置:

不一定非得要使用这个方法配置,只要SW1上VLAN1的优先级比VLAN2高就行,SW2上也是一样的
 

SW2上的配置:

配置完成后,使用show spanning-tree 查看生成树协议

SW3上

在SW3上,VLAN1运行STP后,F0/24端口阻塞掉了,所有的数据都从过SW1和SW3之间的链路传输.
VLAN2运行STP后,F0/23端口阻塞,数据从SW2和SW3之间的链路传输数据.达到了负载均衡的效果.

5.配置速端口

配置速端口的目的是使连接终端的端口快速进入到转发状态.上面有描述

配置了速端口后,会出现一些警告信息,警告信息的主要内容如下:

%Warning: portfast should only be enabled on ports connected to a single
 host. Connecting hubs, concentrators, switches, bridges, etc... to this
 interface  when portfast is enabled, can cause temporary bridging loops.
 Use with CAUTION

速端口仅用于连接单一的主机,如果连接Hub、Switch、网桥等设备时,可能造成桥接环路,应小心使用。

%Portfast will be configured in 20 interfaces due to the range command
 but will only have effect when the interfaces are in a non-trunking mode.

有20个端口被配置为速端口,但是速端口只有接口处于非Trunk模式时才起作用。