第二部分 STP特性
Portfast快速端口
  Portfast快速端口是一个Catalyst的一个特性,能使交换机或中继端口跳过侦听学习状态而进入STP转发状态,在基于IOS交换机上,PortFast 只能用于连接到终端工作站的接入端口上。
   当一个设备连接到一个端口上时,端口通常进入侦听状态。当转发延迟定时器超时后,进入学习状态,当转发延迟定时器第二次超时,端口进入到转发或者阻塞状态,当一个交换机或中继端口启用PortFast后,端口立即进入转发状态,但交换机检测到链路,端口就进入转发状态(插电缆后的2s) 。如果端口检测到一个环路同时又启用了PortFast 功能。它就进入阻塞状态。重要的是要注意到PortFast 值在端口初始化的时候才生效。如果端口由于某种原因又被迫进入阻塞状态,随后又需要回到转发状态,仍然要经过正常的侦听 。
 
启用PortFast的主要原因是防止启动周期小于30s的PC需要和交换机端口从未连接状态进入到转发状态,一些网卡直到 MAC 层软件驱动被实际加载之后才会启动链路。这种情况下就会导致一些故障,例如DHCP环境下,这可能会出现一些问题。
配置过程:
1) 进入全局配置模式  configure terminal
2) 选择端口  interface 端口
3) 设置该端口启用portfast功能
   spanning-tree portfast [trunk]
   如果你要在trunk端口上启用portfast,必须添加trunk关键字。
4) 验证配置
          show spanning-tree interface 端口 portfast
          -----------------------------------------------
          VLAN0001         enabled
         
          Show spanning-tree summary
          ------------------------------------
          Switch is in pvst mode
          Root bridge for: none
          EtherChannel misconfig guard is enabled
          Extended system ID           is enabled
          Portfast Default             is enabled
          PortFast BPDU Guard Default  is disabled
          Portfast BPDU Filter Default is disabled
          Loopguard Default            is disabled
          UplinkFast                   is disabled
          BackboneFast                 is disabled
          Pathcost method used         is short
案例:
    conf t
    spanning portfast default  (所有的接入端口)
    interface f0/24
    spanning portfast trunk
    end
    show spanning summary
    show runn inter f0/24
    Building configuration...
    Current configuration : 87 bytes
    !
    interface FastEthernet0/24
      switchport mode trunk
      spanning-tree portfast trunk
    end
案例:
CCIE-LAB(V142)
题目要求:
在sw1的F0/18口连接一台PC,使其不需要经过spanning-tree的学习过程,直接forwarding,不会自动协商成trunk。
配置:
SW1
       Interface f0/18
          Spanning-tree portfast
UplinkFast
在 STP 收敛过程中,一些终端站点可能会不可达,这是基于站点所连接交换机端口的 STP 状态而定。这打乱网络连接,于是关键是减少STP的收敛时间和网络受影响的时间。快速级联链路(UplinkFast)就是用来加快STP收敛的。UplinkFast是一项交换机的功能,用于在链路或者交换机失效时加速新的根端口的选择。
 
当链路或交换机故障,或 STP 重新配置后,UplinkFast可以加速选择一个新的根端口。根端口立即进入转发状态,Uplinkfast 通过减少最大更新速率来限制突发多博流量。定义了更新分组发送的最大速率,默认为150分组/分钟
Uplinkfast 对于网络边缘的布线间交换机非常有用。他不适用于骨干设备。UplinkFast 在直连链路故障后提供快速的收敛能力,并通过上行链路组在冗余。
如上图所示,A 和根交换机相连的端口为转发状态,另一个为阻塞状态。当到根交换机的上行链路断开后,如果配置了Uplinkfast到另一台上层交换机的链路将直接转入转发状态,而不需要经过减听和学习状态,如图,这个转换需要经过大约1-5秒。
一旦交换机将以个备用端口转为转发状态,交换机开始在该端口发送伪多播帧,本地桥接标中每个表项都对应一个伪多播帧,每个本地网桥表中的表项(除了与发生故障的根端口相关联的表项)都对应一个伪组播帧。缺省时,每100毫秒大约发送15个伪组播帧。它使用工作站地址做为源地址,目的地址01-00-0C-CD-CD-CD作为目的地址。 如果原来的交换机恢复连接,交换机在等待2倍转发延迟时间再加上5s后才将该端口转入转发状态。这是的邻接端口有时间经过侦听和学习状态才转入转发状态。
注意,
1) 启用了uplinkfast后,它会影响此交换机的所有的VLAN。不能在单个VLAN上配置UplinkFast。
2) 在已经配置了网桥优先级的VLAN上不能启动Uplinkfast。要在配置了网桥优先级的VLAN上启动uplinkfast,必须首先将vlan上的交换机优先级恢复到默认值(使用命令no spanning-tree vlan vlan号 priority)
3) 启动了UplinkFast时,所有VLAN的网桥优先级都被设为49152,并且如果不改变缺省的路径开销,所有接口和VLAN trunk的路径开销都会增加3000
配置过程:
1) 进入全局配置模式 configure terminal
2) 启用UplinkFast
     spanning-tree uplinkfast [max-update-rate 每秒传输包]
     取值为每秒0到32000个数据包,缺省值为150。通常这个值就足够了。
3) 验证配置
     show spanning-tree uplinkfast
     show spanning-tree summary
案例:
    #show spanning summary
    ----------------------------
    Switch is in pvst mode
    Root bridge for: none
    EtherChannel misconfig guard is enabled
    Extended system ID           is enabled
    Portfast Default             is enabled
    PortFast BPDU Guard Default  is enabled
    Portfast BPDU Filter Default is disabled
    Loopguard Default            is disabled
    UplinkFast                   is disabled
    BackboneFast                 is enabled
    Pathcost method used         is short
Name                   Blocking Listening Learning Forwarding STP Active
---------------------- -------- --------- -------- ---------- ----------
VLAN0001                     1         0        0          2          3
VLAN0010                     1         0        0          1          2
VLAN0020                     1         0        0          1          2
VLAN0100                     1         0        0          1          2
VLAN0200                     1         0        0          1          2
VLAN0201                     1         0        0          1          2
---------------------- -------- --------- -------- ---------- ----------
6 vlans                      6         0        0          7         13
   
    #conf t
    (config)#spanning uplinkfast
    #show span  uplinkfast
    UplinkFast is enabled
    Station update rate set to 150 packets/sec.
    UplinkFast statistics
    -----------------------
    Number of transitions via uplinkFast (all VLANs)            : 0
    Number of proxy multicast addresses transmitted (all VLANs) : 0
    Name                 Interface List
    -------------------- ------------------------------------
    VLAN0001             Fa0/23(fwd), Fa0/24
    VLAN0010             Fa0/23(fwd), Fa0/24
    VLAN0020             Fa0/23(fwd), Fa0/24
    VLAN0100             Fa0/23(fwd), Fa0/24
    VLAN0200             Fa0/23(fwd), Fa0/24
    VLAN0201             Fa0/23(fwd), Fa0/24
    #Show span summary
    Switch is in pvst mode
    Root bridge for: none
    EtherChannel misconfig guard is enabled
    Extended system ID           is enabled
    Portfast Default             is enabled
    PortFast BPDU Guard Default  is disabled
    Portfast BPDU Filter Default is disabled
    Loopguard Default            is disabled
    UplinkFast                   is enabled
    BackboneFast                 is disabled
    Pathcost method used         is short
    #debug spanning uplinkfast
    #conf t
    (config)#int f0/23
    (config-if)#switchport mode access
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0001 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 FastEthernet0/24 moved to Forwarding (UplinkFast).
00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/18
VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/FastEthernet0/23) cur state forwarding role uplink
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0001 port-id 8017
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0010 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0010 port-id 8017
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0020 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0020 port-id 8017
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0100 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0100 port-id 8017
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0200 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0200 port-id 8017
00:26:40: STP FAST: UPLINKFAST: make_forwarding on VLAN0201 FastEthernet0/24 root port id new: 128.24 prev: 128.23
00:26:40: STP: UFAST: removing prev root port Fa0/23 VLAN0201 port-id 8017
00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/24
VLAN0001 is: uplink enabled new root FastEthernet0/24 (me)prev root exists(8017/<none>) cur state forwarding role uplink
00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/18
VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state forwarding role uplink
00:26:40: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/23
VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state blocking role looped
00:26:40: %SPANTREE-7-RECV_1Q_NON_TRUNK: Received 802.1Q BPDU on non trunk FastEthernet0/23 VLAN1.
00:26:40: %SPANTREE-7-BLOCK_PORT_TYPE: Blocking FastEthernet0/23 on VLAN0001. Inconsistent port type.
00:26:55: %SPANTREE-2-UNBLOCK_CONSIST_PORT: Unblocking FastEthernet0/23 on VLAN0001. Port consistency restored.
00:26:55: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/23
VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state blocking role looped
00:26:56: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/24
VLAN0001 is: uplink enabled new root FastEthernet0/24 (me)prev root exists(8017/<none>) cur state forwarding role uplink
00:26:56: STP FAST: make_forwarding: via UPLINKFAST: NOT: port FastEthernet0/18
VLAN0001 is: uplink enabled new root FastEthernet0/24 (not me)prev root exists(8017/<none>) cur state forwarding role uplink
00:27:31: STP FAST: UPLINKFAST: make_forwarding on VLAN0001 FastEthernet0/23 root port id new: 128.23 prev: 128.24
00:27:31: %SPANTREE_FAST-7-PORT_FWD_UPLINK: VLAN0001 FastEthernet0/23 moved to Forwarding (UplinkFast).
     
#show spanning uplinkfast
UplinkFast is enabled
Station update rate set to 150 packets/sec.
UplinkFast statistics
-----------------------
Number of transitions via uplinkFast (all VLANs)            : 7
Number of proxy multicast addresses transmitted (all VLANs) : 32
Name                 Interface List
-------------------- ------------------------------------
VLAN0001             Fa0/23(fwd), Fa0/24
VLAN0010             Fa0/24(fwd)
VLAN0020             Fa0/24(fwd)
VLAN0100             Fa0/24(fwd)
VLAN0200             Fa0/24(fwd)
VLAN0201             Fa0/24(fwd)
BackboneFast
BackboneFast快速骨干是Catalyst交换机在跟端口或阻塞端口从指定网桥收到一个劣质(inferor)的BPDU时会起动的一种特性。次级BPDU用来标识一个既是根桥又是指定网桥的交换机。当一个交换机收到一个劣质 BPDU,就以为这该交换机的一个非直接链路出现故障。也就是说,一个指定网桥已经丢失到根交换机的连接。按照 STP 规则,因为所有配置的最大生存时间(20秒), 交换机会忽略所有的劣质的BPDU。Backbonefast的作用就是欺骗这20秒的延迟。当交换机接收到了次级BPDU时,交换机会判断是否有到达根桥的其他路径。
有两种情况需要考虑:
1) 如果劣质BPDU 到达一个阻塞端口,则交换机上的根端口和其他阻塞端口成为到根交换机的备选路径
2) 如果劣质BPDU 到达根端口,所有的阻塞端口都会成为到根交换机的潜在备用。
 
 
   如果劣质BPDU 到达根端口,且没有阻塞端口,交换机将自己定义为根交换机。如果交换机存在备
用路径,它适用备用路径传送一种新的协议,通常情况下该模式会节约 20s的时间。
如上图:当L1 Down时,SWB 会发送一个劣等BPDU,告诉 SWC,我SWB 是Root,SWC 经过和SWA沟通(使用Root Link Query BPDU查询),SWA 告诉SWC,我SWA还活着呢。然后SWC告诉 SWB,SWA还活着,它还是Root。
BackboneFast应用在所有的VLAN中,不支持令牌环VLAN
配置过程:
1) 进入全局配置模式 configure terminal
2) 启用BackboneFast
    spanning-tree backbonefast
3) 验证配置
    show spanning-tree backbonefast
----------------------------------------------------
BackboneFast is enabled
BackboneFast statistics
-----------------------
Number of transition via backboneFast (all VLANs)           : 0
Number of inferior BPDUs received (all VLANs)               : 0
Number of RLQ request PDUs received (all VLANs)             : 0
Number of RLQ response PDUs received (all VLANs)            : 0
Number of RLQ request PDUs sent (all VLANs)                 : 0
Number of RLQ response PDUs sent (all VLANs)                : 0
show spanning-tree summary
BPDU保护
BPDU保护仅用在PortFast模式。它被网络设计者用来加强STP域边界。从而保持与其的活动拓扑。在启用STP PortFast端口之后的设备被禁止影响STP拓扑。对于配置了portfast特性的接口,它不应当接收到BPDU,如果配置了PortFast特性的接口接收了BPDU,那就表示了无效的配置,可能就会产生桥接环路,通过配置BPDU保护后,配置了PortFast的端口如果收到BPDU将会把端口状态调整到Err-Disable.如下是一个信息:
2000 May 12 15:13:32 %SPANTREE-2-RX_PORTFAST:Received BPDU on PortFast enable port. Disabling 2/1
2000 May 12 15:13:32 %PAGP-5-PORTFROMSTP:Port 2/1 left bridge port 2/1
如下图所示,A的优先级为8192,为该vlan的根桥,B的优先级为16384,为备份根桥,B和A之间的链路为Gbit/s链路,C是一个接入交换机,并在连接到设备D得端口上设置了PortFast.其他的STP参数都是默认值,网桥C上连接到网桥B得端口处于STP阻塞状态。设备D(PC)不参与STP。正确的BPDU流向,如下左图
 
   如果D为一台基于Linux的软件网桥,可以发送BPDU报文,并将自身BID的优先级设置为0,此时,D将成为根桥,故BPDU流向变为右图, A,B间的Gbit/s链路被阻塞,通过C走100Mbit/s链路。此时会超负载出现丢包的情况, BPDU保护的目的就是基于这种情况,防止接入设备对整个网络拓扑的影响。
   配置过程:
     方法一:全局配置模式
1) 全局配置模式 configure terminal
2) 配置BPDU保护
     (config)#spanning-tree portfast bdpuguard default
3) 进入接口模式  interface 接口
4) 接口使能portfast,BPDU保护才能启用
     (config-if)#spanning-tree portfast
方法二:接口模式
1) 接口模式下  interface 接口
2) 使能BPDU保护
    (config-if)#spanning-tree bpduguard enable
   验证过程:
    show running-configure
BPDU过滤(BPDU Filtering)
通过使用BPDU过滤功能,将能够防止交换机在启用了PortFast特性的接口上发送BPDU。对于配置了PortFast特性的端口,它通常连接到主机设备,因为主机不需要参与STP,所有它将丢弃所接收到的BPDU。通过使用BPDU过滤功能,将能够防止向主机设备发送不必要的BPDU。
   交换机支持以每个端口或者整个交换机配置BPDU过滤。
   如果全局配置了BPDU过滤功能,但当某个端口接收到了任何的BPDU,那么交换机将把接口更改回正常的STP操作,也就是它将禁用PortFast和BPDU过滤特性。
   如果在接口上明确配置了BPDU过滤功能,那么交换机将不发送任何的BPDU,并且将把接收到的所有BPDU都丢弃。
   注意,如果在链接到其他交换机的端口上配置了BPDU过滤,那么就有可能导致桥接环路,所以在部署BPDU过滤时要格外小心,一般我们不推荐使用BPDU过滤。
   如果在与启用了BPDU过滤的相同接口上配置了BPDU保护,因为BPDU过滤的优先级高于BPDU保护,所以BPDU保护将不起作用。
配置过程:
     方法一:全局配置模式
1) 全局配置模式 configure terminal
2) 配置BPDU保护
    (config)#spanning-tree portfast bdpufilter default
3) 进入接口模式  interface 接口
4) 接口使能portfast,BPDU保护才能启用
    (config-if)#spanning-tree portfast
方法二:接口模式
1) 接口模式下  interface 接口
2) 使能BPDU保护
    (config-if)#spanning-tree bpduguard enable
   验证过程:
    show running-configure
根保护
传统的802.1D STP没有给网络管理员提供确保交换式第2层网络拓扑安全。如下图,当新接入的
交换机优先级更低,将抢占原有的根网桥。
根保护的目的是确保启用了根保护的端口成为指定端口。通常一个根桥的所有端口均为指定端口。
除非连接到两个或多根网桥的端口。如果网桥在启用根保护的端口上收到一个较好的 STP  BPDU。这个
端口进入STP的根不一致状态,  不会有流量通过该端口。
   如下拓扑:
   A 和 B 为分布层 SW,C 为接入层 SW,根为 A。当在 C 下面再接一台 SW时,由于D的优先级或MAC地址可能比其它要低,可能会使D成为Root SW,从而使得从A 到达B的流量不能直接发送到B,而得使用C来转发,这样很不合理(A 和 B 之间为千兆)。为了避免这种情况,可以在C的下联端口上使用Root Guard,以防止该端口成为Root Port,从而防止D成为Root SW,确保A永远为 Root SW。使用Root Guard 后,SW D接入网络后,C的下联D的端口会收到一个更新的BPDU(前提是D的优先级最高)后,C将该端口转为Block状态,直到D不在发送新的BPDU或更改D的优先级。
 
当一个根保护端口阻塞一个端口时,控制台将会显示如下消息:
 %SPANTREE-2-ROOTGUARDBLOCK: Port 1/1 tried to become non-designated in VLAN 77. Moved to root-inconsistent state
   注意,在一个端口上起用了根保护,会作用于该端口所属的所有VLAN。不要再一个起用了UplinkFast特性的端口上启用根保护。游乐UplinkFast,在出现故障时备份端口(处于阻塞状态)会代替根端口。但是,如果也启用了根保护,所有使用UplinkFast特性的备份端口将被置于根不一致(阻塞)状态,使其无法进入转发状态。
    配置过程:
1) 进入接口模式  interface 接口
2) 启用根保护
    spanning-tree guard root
3) 验证过程
    show running-config interface 接口
    show spanning-tree inconsistentports
显示端口不一致(阻塞)状态的信息
环路保护
换路保护能够对第2层转发环路(STP环路)提供额外的保护。当冗余拓扑中的STP阻塞端口错误地过渡到转发状态的时候,就将发生桥接环路。
如下图:交换机A是根交换机。因为交换机B和C之间的链路发生单向链路失效,交换机不能从交换机B接收BPDU。如果没有启用环路保护特性,那么交换机C在最大寿命计时器到期之后,交换机C上的STP阻塞端口将转换到STP监听状态,并最终会在两倍的转发延迟时间之后转换到转发状态。当交换机C的源阻塞端口进入到转发状态的时候,交换机B的源指定端口还处于转发状态,这个拓扑中没有阻塞端口,而产生了环路。
 
如果启用了环路保护特性之后,当最大寿命计时器到器之后,交换机C上的阻塞端口将过渡到“不一致环路”状态,如下图,如果端口处于“不一致环路”状态,它就不能传递任何数据流量,因此,网络也就不能产生桥接环路。“不一致环路”状态等效于阻塞状态。
 
在非指定端口上使用 Loop  Guard。防止环路产生。避免上于处于 Block 端口的 SW 在Max_age 时间内接收不到对方(邻居)的 BPDU 而将端口状态转为 Listen->Learning->Forward 状态。使用Loop Guard 后,等接收不到对方的BPDU消息后,将端口Block状态转为Loop-inconsistent(环路不一致)状态,从而避免产生环路。
如果使用Loop Guard,那么Root Guard将会被关闭。两者不能同时启用
配置过程:
     方法一:全局配置模式
1) 全局配置模式 configure terminal
2) 配置环路保护
    (config)#spanning-tree portfast loopguard default
方法二:接口模式
1) 接口模式下  interface 接口
2) 使能环路保护
    (config-if)#spanning-tree guard loop
   验证过程:
show running-configure
show spanning-tree active
show spanning-tree interface 接口 detail
-------------------------------------------------------------------
Port 23 (FastEthernet0/23) of VLAN0001 is forwarding
   Port path cost 19, Port priority 128, Port Identifier 128.23.
   Designated root has priority 32769, address 000b.5f2c.2080
   Designated bridge has priority 32769, address 000b.5f2c.2080
   Designated port id is 128.23, designated path cost 0
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   Loop guard is enabled on the port
   BPDU: sent 2709, received 5
 
第三部分  生成树模式
部署VLAN使得一个重要决定是在交换机上使用哪种生成树模式。STP模式决定了STP将如何与VLAN交互。缺省的Cisco STP模式下,每个VLAN定义一个STP。IEEE802.1Q标准是在整个交换VLAN网络中使用一个STP,但不排除在每个VLAN中实现一个STP。
>> PVST、PVST+和单生成树模式
公共生成树(CST,Commone Spanning Tree)是在IEEE802.1Q标准中规定的。CST定义了一棵用于所有VLAN的生成树,BPDU在VLAN1上传递。
按VLAN的生成树(PVST,Per-VLAN Spanning tree)是Cisco专用的一种实现方式,需要使用ISL trunk封装。在PVST中,每个VLAN一棵STP,能为每个VLAN配置不同的根交换机,并配置第2层的负载均衡。
每个VLAN一棵生成数减少了每个STP重新计算时的恢复时间,并且在下述方面增强了网络的可靠性:
* 减少整个生成树拓扑的规模
* 提高扩展性,减少收敛时间
* 提供更快的恢复过程和更强的可靠性
每个VLAN一棵生成树的缺点包括:
* 为了维护多个VLAN的多颗生成树,交换机的利用率(如CPU负载)会更高
* 为了支持各个VLAN的BPDU,需要占用更多的Trunk链路带宽
为了携带更多的信息,PVST BPDU的格式和STP/RSTP BPDU 格式已经不一样,发送的目的地址也改成了Cisco保留地址01-00-0C-CC-CC-CD,而且在VLAN  Trunk的情况下PVST  BPDU被打上了 802.1Q  VLAN
标签。所以,PVST协议并不兼容STP/RSTP协议。
PVST+是一种Cisco专用的STP模式,支持在相同网络中同时存在CST和PVST。PVST+支持802.1Q trunk并且能将多棵生成树映射成非Cisco的802.1Q交换机上的一棵生成树。PVST+在交换剂802.1Q trunk上是自动启动的。在PVST+中,如果交换机通过802.1Q trunk相连,则每个VLAN一棵STP。还支持在其运行的VLAN上提供2层的负载均衡。在网络中,可以用VLAN来创建不同的逻辑拓扑结构,以保证所有的的链路都被使用,而不会出现一条链路过载的情况。
每个生成树都有唯一的根交换机。根交换机负责向网络中其他的交换机传播与此VLAN相关的生成树信息。因为每个交换机对网络的理解是相同的,所以这个过程维护了网络拓扑
PVST+体系结构区分了3种类型的区域:
* PVST区域
* PVST+区域
* 单生成树(MST,Mono Spanning tree)区域
单生成树是非Cisco的802.1Q交换机使用的生成树实现方法,一个STP负责所有VLAN的通信。
每个区域(Zone或region)都有同种类型的交换机组成。PVST区域和PVST+的连接可以通过连通两个ISL接口实现。类似地,PVST+区域和MST区域的连接可以通过连通两个802.1Q端口实现。注意,MST和PVST区域不能通过trunk链路连接。
 
在PVST区域和PVST+区域的分界处,生成树的映射是一对一的。在MST区域和PVST+区域的分界处,MST区域的生成树映射到PVST+区域的一个PVST上。这个PVST就是CST,缺省的CST是VLAN1。
所有的PVST,除了CST都是通过隧道穿越MST区域的。隧道(Tunneling)意味着BPDU沿着MST区域内当别的单棵生成树,在整个MST区域内泛洪。
>> MISTP模式
MISTP 模式是在一些 Catalyst 交换机上 Cisco 私有的一种MST实现,能在一棵生成树实例下将VLAN进行分组。MISTP综合了PVST+支持2层负载均衡的优点和IEEE 802.1Q低CPU负载的特点。
MISTP是一种可选的运行在交换机4000和交换机6000系列上的STP模式。多实例生成树协议是通过一组网桥参数和端口参数定义的虚拟的逻辑拓扑结构。简单的说,STP/RSTP 是基于端口的,PVST/PVST+是基于 VLAN 的,而 MISTP 就是基于实例的。所谓实例就是多个VLAN的一个集合,通过多个VLAN捆绑到一个实例中去的方法可以节省通信开销和资源占用率。如果将VLAN映射到MISTP上,这个MISTP实例就变成了真正的拓扑结构。每个MISTP实例都有自己的根交换机和各自的转发状态链路组(也就是说,不同的网桥参数和端口参数)。根交换机负责向网络中所有其他交换机传播与此MISTP实例相关的信息。
在使用的时候可以把多个相同拓扑结构的VLAN 映射到一个实例里,这些VLAN在端口上转发状态将取决于对应实例在MISTP里的状态。值得注意的是网络里的所有交换机的VLAN和实例映射关系必须都一致,否则会影响网络连通性。为了检测这种错误,MISTP BPDU里除了携带实例号以外,还要携带实例对应的VLAN关系等信息。MISTP协议不处理 STP/RSTP/PVST BPDU,所以不能兼容STP/RSTP协议,甚至不能向下兼容PVST/PVST+协议,在一起组网的时候会出现环路。为了让网络能够平滑地从PVST+模式迁移到MISTP模式,Cisco在交换机产品里又做了一个可以处理PVST BPDU 的混合模式MISTP-PVST+。网络升级的时候需要先把设备都设置成MISTP-PVST+模式,然后再全部设置成MISTP模式。
MISTP 带来的好处是显而易见的。它既有 PVST 的 VLAN 认知能力和负载均衡能力,又拥有可以和SST媲美的低CPU占用率。不过,极差的向下兼容性和协议的私有性阻挡了MISTP的大范围应用。
>> MST多生成树模式(Multiple Spanning Tree)
多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的一种新型多实例化生成树协议。这个协议目前仍然在不断优化过程中,现在只有草案(Draft)版本可以 Cisco 已经在CatOS 7.1 版本 MSTP的支持,华为公司的三层交换机产品Quidway系列交换机也即将推出支持MSTP协议的新版本MSTP 协议精妙的地方在于把支持 MSTP 的交换机和不支持 MSTP 交换机划分成不同的区域,分别
称作 MST 域和 SST 域。在 MST 域内部运行多实例化的生成树,在 MST 域的边缘运行 RSTP 兼容的内部生成树MST(Internal Spanning Tree)。
MST域内的交换机间使用MSTP BPDU交换拓扑信息, SST 域内的交换机使用 STP/RSTP/PVST+  BPDU 交换拓扑信息。在MST域与SST域之间的边缘上,SST设备会认为对接的设备也是一台RSTP设备。而MST设备在边缘端口上的状态将取决于内部生成树的状态,也就是说端口上所有 VLAN的生成树状态将保持一致。
 
MSTP 设备内部需要维护的生成树包括若干个内部生成树 IST,个数和连接了多少个 SST 域有关。
另外,还有若干个多生成树实例MSTI(Multiple Spanning Tree Instance)确定的MSTP生成树,个数由配置了多少个实例决定。
    MSTP相对于之前的种种生成树协议而言,优势非常明显。MSTP具有 VLAN 认知能力,可以实现负载均衡,可以实现类似 RSTP 的端口状态快速切换,可以捆绑多个 VLAN 到一个实例中以降低资源占用率。最难能可贵的是MSTP可以很好地向下兼容STP/RSTP协议。而且,MSTP是IEEE标准协议,推广的阻力相对小得多。 MISTP就是Cisco对MST的私有实现:
 
快速生成树RSTP(Rapid Spanning Tree)
 
生成树协议IEEE 802.1d虽可在50秒内恢复连接,但已不能满足现代交换式网络和应用的需要,在 802.1w中定义的RSTP协议可解决802.1d的自恢复问题。快速生成树协议(RSTP)是从生成树算法的基础上发展而来的,通过配置消息来传递生成树信息,并通过优先级比较来进行计算。快速生成树能够完成生成树的所有功能,优异之处在于快速生成树减小了端口从阻塞到转发的延时,快速恢复网络的正常工作状态。它采用桥-桥握手机制,并不采用802.1d中根桥所指定的计时器。
快速生成树协议与生成树协议的区别不少:如端口状态迁移方式不同;配置消息的格式不同;拓朴改变消息的传播方式不同。
RSTP和802.1D状态对比
 
     802.1D的禁用、阻塞和监听状态在802.1W中合并为一种丢弃状态,如上表
     能够快速进入到转发状态是802.1W引入的最重要特性。传统的生成树算法在将一个端口转入到转发状态是在被动地等待网络拓扑收敛。为达到快速收敛要做的就是调整那些保守的默认参数(转发延迟和最大生存时间),这经常以网络稳定性为赌注的。RSTP可以主动地区确认一个端口是否可以安全进入转发状态而不依赖于任何定时器配置。RSTP在两个遵守RSTP的网桥之间提供一种实时的反馈机制。为让一个端口快速收敛,协议依赖两个新的参数---边缘端口和链路类型。
     RSTP的边缘端口(edge port)基本上相当于PortFast特性,不同的是边缘端口收到了一个BPDU后,立即离开边缘端口状态成为一个正常的生成树端口。此刻,边缘端口状态有一个用户配置值和一个运行值。
    RSTP链路类型(点对点或共享),只有在边缘端口上和点对点链路上能快速进入转发状态。链路类型是自动来源于端口的双工模式。一个运行于全双工模式的端口被假设为点对点的,然而一个半双工端口就被默认为共享端口。这种自动链路类型设置可以免去详细的配置。
RSTP端口角色
除了对根端口和802.1d中的指定端口进行了定义之外,但阻塞端口角色现在被分为备份和替代端口角社。备份端口,指定端口向生成树提供的路径备份。替代端口,为当前根端口所提供的根桥提供了替代路径。RSTP中新定义的端口作用使替代端口可以进行快速转换,能转发根端口的故障。
     与标准的STP中一样,网桥上收到最佳BPDU的端口成为根端口。这是按照路径开销最接近根网桥的端口,如上图。
    如果一个端口能发送最佳BPDU到其所连接的网段上,该端口被认为是一个指定端口。和802.1D一样,网桥通过连接不同的网段创建一个桥接域。一个给定网段只能有一个路径到根交换机。多条路径将在网络中产生一个环。
   替代端口和备份端口角色相当于802.1D的阻塞状态。没有成为指定端口或者根端口的端口被定义为阻塞端口。阻塞端口收到比从这个网桥上发送出去更有用的BPDU。记住一个端口一定需要接收BPDU才能停留在阻塞状态。替代端口指该端口是因为从其他网桥收到了更有用的BPDU才处于阻塞状态。
    备份端口是因为从同一网桥收到更有用的BPDU而处于阻塞状态的端口(如上图)。
RSTP定时器
RSTP 旨在尽快地将根端口和指定端口转成转发状态,以及将替代和备份端口转成阻塞状态。为防止生成转发环路, RSTP 在网桥间采用了明确的“握手”功能,以确保端口作用在网络中分配的一致性。
下图介绍了将端口转换成转发前达成的协定 / 建议握手。当链接激活时,“P1”和“P2”都成为处于放弃状态的指定端口。
 
在这种情况下,“ P1 ”将向交换机 A 发送一个建议 BPDU 。收到新 BPDU 后,交换机 A 将确认根交换机有较优根成本。因为 BPDU 包含较高的根优先级,交换机 A 在将新的根端口“ P2 ”转入转发状态前,会先启动同步机制。如果一个端口处于阻塞状态或是一个边缘端口(位于网桥 LAN 边缘或连接到终端工作站),该端口与根信息同步。
端口 3 (“ P3 ”)已满足上述要求,因为它已经是阻塞的。因此,不会对该端口采取任何行动。但是,“ P4 ”是一种指定端口,需要阻塞。一旦交换机 A 上的所有接口处于同步状态,“ P2 ”就会承认从前从根接收的建议,并可以安全地转入转发状态。在收到交换机 A 的认可后,根交换机将立即将“ P1 ”转入转发。建议 / 协定信息的类似传送波将从“ P4 ”传播至网络枝叶部分。
由于这种握手机制不依赖计时器,因此它可以快速地传播至网络边缘,并在拓扑结构变更后迅速恢复连接。如果协定并未复制建议信息,端口会转换成 802.1D 模式,并通过传统听学顺序转入转发状态。需要说明的是, 802.1w 协议只适用于点到点链接。在媒体共享的情况下, 802.1w 协议将转换成 802.1D 运行。
UplinkFast RSTP
Uplinkfast是IEEE对cisco私有的Uplinkfast机制的扩展,他不需要像cisco那样清空CAM表的所有条目,而只需要清空上游交换机中的CAM表部分条目即可,此时也不需要UplinkFast的伪多播分组生成过程。
边缘端口
边缘端口类似于以前Cisco实现的PortFast功能。新的根端口从阻塞到转发的实现:原有根端口已经知道自己不再是根端口了,进入阻塞状态。新的根端口连接的网段的指定端口处于转发状态,这个新的根端口就可以无延时地进入转发状态。非边缘指定端口从阻塞到转发:此个端口连接着其他网桥。等待进入转发状态的指定端口向下游网桥发送一个握手请求报文,若下游的网桥响应了,则这个指定端口就可以无延时地进入转发状态。 边缘端口从阻塞到转发:边缘端口直接和终端设备相连,不再连接任何网桥的端口。网桥启动后这些端口即无延时地快速进入转发状态。
RSTP拓扑变化
RSTP拓扑变化仅在边缘端口进入转发状态才会导致。当RSTP网桥检测到拓扑变化,会发生下列事件:
l 如果必要,RSTP网桥可以对其所有的非边缘指定端口和根端口上启动一个TC当型定时器(TC while timer),其时间是2倍的Hello-time
l RSTP网桥刷新所有与这些端口相关的MAC。
l 只要在端口上运行TC while定时器期间,该端口发送TC位被置位的BPDU,该定时器激活期间根端口也发送BPDU
RSTP的拓扑变化扩散处理与STP不同,当一个网桥从邻居受到一个TC位置位的BPDU的时候,发生下列事件:
l 网桥清除从其他所有端口上学习到的MAC地址(收到拓扑变化的端口除外)
l 网桥在所有指定端口和根端口上启动TC While定时器并发送TC位置位的BPDU(RSTP不再使用老式的TCN BPDU,除非有老式网桥需要被通告)
 
RSTP BPDU格式
RSTP在BPDU格式中引入了一些新变化。
 
位 含义
---------------------------------
0 拓扑变化Topology Change
1 建议
2-3 端口角色:  00:未知端口  01:替代端口  10:根端口  11:指定端口
4 学习
5 转发
6 协商
7 拓扑变化确认ACK
802.1w中网桥每隔hello时间(默认为2秒)发送一个携带当前信息的BPSU,即使他没有从根网桥收到任何BPDU。在一个指定端口上,如果在3个连续周期内没有收到hello(或者最大生存时间超时),协议信息立即超时。因为前面提到的协议修改,BPDU现在在网桥之间用来作为保持活动(keepalive)机制。一个网桥如果已经连续错过了3个BPDU,就认为自己已经丢失了到直连邻接根或指定网桥的连接。这种信息的快速老化使得错误可以被快速检测。如果一个网桥从邻居接收BPDU失败,他就能确定到邻居的连接丢失,这和802.1d相反,802.1d在根的路径中的任何一个地方都会出现问题。
     当一个网桥从它的指定或者根交换机上收到次级信息,就会立即接受它,并替代先前存储的。
 
配置MST
启用RSTP和MSTP
4) 进入全局模式  configure terminal
5) 进入mst配置模式
   spanning-tree mst configuration
3) 映射vlan到mst实例
   instance 实例号 vlan vlan范围
   实例号:取值为0-4094
4) 配置名称
   name 名称
5) 配置mst版本号
   revision 版本号
版本号:取值为0-65535
6) 显示pending状态
   show pending
案例:
switch(config)#spanning-tree mode mst
switch(config)#spanning-tree mst configuration
switch(config-mst)#instance 1 vlan 20 -30
switch(config-mst)#name test1
Switch(config-mst)#show current
Current MST configuration
Name      [test1]
Revision  0
Instance  Vlans mapped
--------  -----------------------------------------------------------------
0         1-19,31-4094
1         20-30
----------------------------------------------------------------------------
Switch(config-mst)#show pending
Pending MST configuration
Name      [test1]
Revision  0
Instance  Vlans mapped
--------  -----------------------------------------------------------------
0         1-19,31-4094
1         20-30
----------------------------------------------------------------------------
switch#show spanning-tree mst
###### MST00        vlans mapped:   1-19,31-4094
Bridge      address 000d.6564.0280  priority  32768 (32768 sysid 0)
Root        this switch for CST and IST
Configured  hello time 2, forward delay 15, max age 20, max hops 20
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/2            Desg FWD 2000000   128.2    Edge Shr
Fa0/3            Desg FWD 2000000   128.3    Shr
Fa0/4            Desg FWD 2000000   128.4    Shr
Fa0/18           Desg FWD 200000    128.18   P2p
Fa0/21           Desg FWD 200000    128.21   P2p
Fa0/23           Desg FWD 200000    128.23   P2p Bound(PVST)
Fa0/24           Desg FWD 200000    128.24   P2p Bound(PVST)
###### MST01        vlans mapped:   20-30
Bridge      address 000d.6564.0280  priority  32769 (32768 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Boun FWD 200000    128.23   P2p Bound(PVST)
Fa0/24           Boun FWD 200000    128.24   P2p Bound(PVST)
配置MST的根交换机
配置过程:
1) 进入全局模式  configure terminal
2) 配置MST根交换机
    spanning-tree mst 实例号 root primary
案例:
switch(config)#spanning-tree mst 1 root primary
Switch#show span mst 1
###### MST01        vlans mapped:   20-30
Bridge      address 000d.6564.0280  priority  24577 (24576 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Boun FWD 200000    128.23   P2p Bound(PVST)
Fa0/24           Boun FWD 200000    128.24   P2p Bound(PVST)
交换机优先级
配置过程:
1) 进入全局模式  configure terminal
2) 修改交换机的优先级
   spanning-tree mst 1 priority 优先级
   优先级:取值为0-61440,优先级为4096的倍数
案例:
Switch(config)#spanning-tree mst 1 priority 36864
Switch#show spanning-tree mst 1
###### MST01        vlans mapped:   20-30
Bridge      address 000d.6564.0280  priority  36865 (36864 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Boun FWD 200000    128.23   P2p Bound(PVST)
Fa0/24           Boun FWD 200000    128.24   P2p Bound(PVST)
配置MST的开销
1) 进入全局模式  configure terminal
2) 进入接口模式  interface 接口
3) 配置端口的MST开销
    spanning-tree mst 实例号 cost 成本
案例:
sw2(config)#show span mst 1
###### MST01        vlans mapped:   20-30
Bridge      address 000b.5f2c.2080  priority  32769 (32768 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Desg FWD 200000    128.23   P2p
Fa0/24           Desg FWD 200000    128.24   P2p
Sw2(config)#interface f0/23
sw2(config-if)#span mst 1 cost 20000
sw2(config-if)#do show span mst 1
###### MST01        vlans mapped:   20-30
Bridge      address 000b.5f2c.2080  priority  32769 (32768 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Desg FWD 200000    128.23   P2p
Fa0/24           Desg FWD 20000     128.24   P2p
端口优先级
配置过程:
1) 进入全局模式  configure terminal
2) 进入接口模式  interface 接口
3) 配置端口的优先级
    spanning-tree mst 实例号 port-priority 优先级
   优先级默认为128
案例:
sw2(config)#interface f0/24
sw2(config-if)#spann mst 1 port-priority 64
sw2(config-if)#end
sw2#show spanning mst 1
###### MST01        vlans mapped:   20-30
Bridge      address 000b.5f2c.2080  priority  32769 (32768 sysid 1)
Root        this switch for MST01
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Desg FWD 200000    128.23   P2p
Fa0/24           Desg FWD 20000      64.24   P2p
修改时间器
sw2(config)#spann mst hello-time ?
  <1-10>  number of seconds between generation of config BPDUs
sw2(config)#span mst forward-time ?
  <4-30>  number of seconds for the forward delay timer
sw2(config)#span mst max-age ?
  <6-40>  maximum number of seconds the information in a BPDU is valid
sw2#show span mst
###### MST00        vlans mapped:   1-19,31-4094
Bridge      address 000b.5f2c.2080  priority  32768 (32768 sysid 0)
Root        this switch for CST and IST
Configured  hello time 1, forward delay 15, max age 20, max hops 20
Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- -------------------------------
Fa0/23           Desg FWD 200000    128.23   P2p
Fa0/24           Desg FWD 200000    128.24   P2p
案例:
CCIE-LAB(V160)
题目要求:
在SW1、SW2、SW3上配置MST,要求偶数VLAN加入实例1,奇数VLAN加入实例2
配置:
SW1
   config terminal
   spanning-tree mode mst
   spanning-tree mst configuration
      instance 1 vlan 20,40,60
      instance 2 vlan 30,50,70
      name cisco
      revision 1
sw2
   config terminal
   spanning-tree mode mst
   spanning-tree mst configuration
     instance 1 vlan 20,40,60
     instance 2 vlan 30,50,70
     name cisco
     revision 1
SW3
   config terminal
   spanning-tree mode mst
   spanning-tree mst configuration
      instance 1 vlan 20,40,60
     instance 2 vlan 30,50,70
     name cisco
     revision 1
案例:
CCIE-LAB(V210)
题目要求:
配置sw1上的生成树MST,要求将除了vlan_BBX的vlan定义在实例1,vlan_BBx定义在实例2,并将实例2作为根。
Vlan 30  name vlan30
Vlan 31  name vlan31
Vlan 33  name vlan33
Vlan 44  name vlan44
Vlan 50  name vlan50
Vlan 60  name vlan60
Vlan 100 name vlan_BB1
Vlan 200 name vlan_BB2
Vlan 300 name vlan_BB3
配置:
sw1
   configure terminal
   spanning-tree mode mst
   spanning-tree mst configuration
instance 1 vlan 30,31,33,44,50,60
instance 2 vlan 100,200,300
name cisco
revision 1
   spanning mst 2 root primary