在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另外一条链路仍然可以传输数据,但是,在交换的网络中,当交换机接受到一个未知目的地的数据帧时,交换机的操作是将这个数据帧广播出去,这样,在物理环路的交换网络中,就会产生一个双向的广播环,甚至产生广播风暴,导致交换机死机STP(Spanning Tree Protocol生成树协议)就是用来解决这个环路上的广播风暴的,STP协议在逻辑上断开网络的环路,防止广播风暴的产生,而一但正在使用的线路出现故障,被逻辑上断开的线路又被连通,继续传输数据
生成树协议运行生成树算法(
STA
),生成树算法很复杂,但大体可以分为以下三个步骤:
(1)
选择根网桥
(root bridge)
选择根网桥的依据是网桥
ID
,网桥
ID
是一个
8
字节的字段
网桥优先级是用于衡量网桥在生成树算法中优先级的十进制数,取值范围为
0---65535
,默认为
32768
,一般的配置都是
4096
的倍数,网桥
ID
中的
MAC
地址是交换机的
MAC
地址之一,当使用密令
show mac-address-table
查看交换机的
MAC
地址表的时候,显示在最前面的
MAC
地址是
STP
计算用的交换机的
MAC
地址。按照生成树算法中的定义,当比较某个
STP
参数的两个取值时,值小的优先级高,因此,选择根网桥的时候,比较的方法是看那台交换机的网桥
ID
的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,
MAC
地址小的为根网桥
(2)
选择根端口
(root ports)
选出了根网桥后,网络中的每台交换机必须和根网桥建立某种关联,因此,
STP
将进行选择根端口的过程,跟端口存在于非根网桥上,每个非根网桥上选择一个根端口。
选择根端口的依据一次是:
到根网桥最低的根路径成本:
根路径成本是两个网桥间的路径上所有链路的成本之和,也就是某个网桥到达根网桥的中间所有链路的路径成本和,路经成本用来代表一条链路带宽的高低,一条链路的带宽越大,他传输数据的成本也就越低.
直连的网桥
ID
最小
前面有介绍
端口
ID
最小:
端口
ID
是一个
2
字节的
STP
参数,有一个字节的端口优先级和一个字节的端口编号组成,
端口优先级是一个可配置的
STP
参数,在基于
IOS
的交换机上,端口优先级的十进制取值范围是
0
——
255
,默认值是
128
,端口编号是
Catalyst
用于列举各个端口的数字标识符,在基于
IOS
的交换机上,可以支持
256
个端口,断口编号不是端口号,但是端口号低的端口,端口编号也较小
在
STP
选择根端口的时候,首先比较交换机端口的根路径成本,跟路径成本低的为根端口,当根路径成本相同时,比较连接的交换机的网桥
ID
值,选择网桥
ID
值小的作为根端口,当网桥
ID
相同的时候,比较端口
ID
值,选择较小的作为根端口。
(3)
选择指定端口
(designated ports)
选择完根网桥和每台交换机的根端口后,一个数行结构已初步形成,但是,所有的链路仍连接在一起,并可能都处于活动状态,最后导致形成环路,为了消除网桥回路形成的可能,
STP
进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据与根端口相同,按顺序有
3
个:
(1)
根路径成本较低
(2)
所在的交换机的网桥
ID
的值较小
(3)
端口
ID
的值较小
在
STP
选择指定端口的时候,首先比较同一网段上的端口中根路成本最低的,也就是到达根网桥最近的端口作为指定端口,当根路径成本相同的时候,比较这个端口所在的交换机的网桥
ID
值,选择一个网桥
ID
值小的交换机上的端口作为指定端口,当网桥
ID
相同的时候,也就是说,有几个位于同一交换机上的端口时,比较端口
ID
值,选择较小的作为指定端口,另外,跟网桥上的接口都是指定端口,因为跟网桥上端口的根路径成本为
0
前面所说的
STP
是交换机自动运行的协议,那么有了以上的基础我们在了解一个基于
VLAN
的生成树协议,
PVST
PVST
是
cisco
的私有协议,
PVST
为每个虚拟局域网运行单独的生成树实例,
PVST
为每个
VLAN
使用独立的一个生成树实例,能优化根桥的位置,能为所有的
VALN
提供最优路径。
前面讲过,交换机自动运行
STP
,那么,为什么还要配置呢?
因为在交换网络中,如果一个根网桥不稳定,那么这个网络就需要经常进行
STP
的运算,经常变化逻辑拓扑,因此,可以说,如果网络中有一个不稳定的个网桥,就会有一个不稳定的网络,而在交换机选择根网桥的时候,因为网桥
ID
中优先级字段如果不进行修改,都会使用默认值,那么选择的依据就是交换机的
MAC
地址,而
MAC
地址是一个随机的数字,很可能就会碰到这种情况,网络中最边缘的交换机被选择成了根网桥,因此,虽然生成在交换机中自动运行,但是,合理的配置能够对网络进行优化
除了配置网络中比较稳定的交换机为根网桥外,
PVST
的配置主要还有以下几个方面
(1)
利用
PVST
实现网络的负载分担
(2)
配置上行速链路,实现备份的上行链路快速恢复
(3)
配置速端口,使连接终端的端口快速进入到专发状态
我们来具体配置一下PVST
参考命令:
Switch(config)#spanning-tree vlan vlan-list //
启用生成树
Switch(config)#spanning-tree vlan vlan-list root primary|secondary //
配置交换机为根网桥
Switch(config)#spanning-tree vlan vlan-list priority bridge-priority //
修改交换机优先级
Switch(config)#spanning-tree vlan vlan-list cost cost //
修改端口路径成本
Switch(config)#spanning-tree vlan vlan-list port-priority priority //
修改端口优先级
Switch(config)#spanning-tree uplinkfast //
配置上行速链路
Switch(config-if)#spanning-tree portfast //
配置端口速链路
Switch(config)#interface range FastEthernet fashethernet-list //
进入指定的一组端口
Switch(config-if-range)#channel-group group-number mode on //
配置以太网通道
Switch#show spanning-tree //
查看
PVST
的配置信息
Switch#show spanning-tree vlan vlan-id detail //
查看某个
VLAN
的生成树详细信息
配置实例:
Sw1(config)#vtp domain benet
Sw1(config)#vtp password cisco
Sw1(config)#vtp mode client
Sw1(config)#vtp pruning
Sw1(config)#spanning-tree uplinkfast //
配置上行速链路
Sw1(config)#interface f0/1
Sw1(config-if)#switchport mode trunk
Sw1(config)#interface f0/2
Sw1(config-if)#switchport mode trunk
Sw2(config)#vtp domain benet
Sw2(config)#vtp password cisco
Sw2(config)#vtp mode client
Sw2(config)#vtp pruning
Sw2(config)#spanning-tree uplinkfast //
配置上行速链路
Sw2(config)#interface f0/1
Sw2(config-if)#switchport mode trunk
Sw2(config)#interface f0/2
Sw2(config-if)#switchport mode trunk
Sw3(config)#vtp domain benet
Sw3(config)#vtp password cisco
Sw3(config)#vtp pruning
Sw3(config)#exit
Sw3#vlan database
Sw3(vlan)#vlan 1 name vlan1
Sw3(vlan)#vlan 2 name vlan2
Sw3(vlan)#vlan 3 name vlan3
Sw3(vlan)#vlan 4 name vlan4
Sw3(vlan)#exit
Sw3#config terminal
Sw3(config)#interface f0/1
Sw3(config-if)#switchport mode trunk
Sw3(config)#interface f0/2
Sw3(config-if)#switchport mode trunk
Sw3(config)#interface f0/3
Sw3(config-if)#switchport mode trunk
Sw3(config)#interface f0/4
Sw3(config-if)#switchport mode trunk
Sw3(config)#spanning-tree vlan 1 root primary //
配置成
primary
优先级为
24576
Sw3(config)#spanning-tree vlan 2 root primary //
配置成
primary
优先级为
24576
Sw3(config)#spanning-tree vlan 3 root secondary //
配置成
secondary
优先级为
28672
Sw3(config)#spanning-tree vlan 4 root secondary //
配置成
secondary
优先级为
28672
Sw3(config)#interface range fastEthernet 0/3 – 4 //
进入指定端口
Sw3(config-if-range)#channel-group 1 mode on //
配置以太网通道
Sw4(config)#vtp domain benet
Sw4(config)#vtp password cisco
Sw4(config)#vtp pruning
Sw4(config)#iinterface f0/1
Sw4(config-if)#switchport mode trunk
Sw4(config)#iinterface f0/2
Sw4(config-if)#switchport mode trunk
Sw4(config)#iinterface f0/3
Sw4(config-if)#switchport mode trunk
Sw4(config)#iinterface f0/4
Sw4(config-if)#switchport mode trunk
Sw4(config-if)#exit
Sw4(config)#spanning-tree vlan 1 priority 28672 //
配置
vlan 1
的优先级为
28672
Sw4(config)#spanning-tree vlan 2 priority 28672 //
配置
vlan 2
的优先级为
28672
Sw4(config)#spanning-tree vlan 3 priority 24576 //
配置
vlan 3
的优先级为
24576
Sw4(config)#spanning-tree vlan 4 priority 24576 //
配置
vlan 4
的优先级为
24576
Sw4(conifig)#interface range fasEthernet 0/3 – 4
Sw4(config-if-range)#channel-group 1 mode on