生成树协议(Spanning Tree Protocol, STP)的作用, 是在具备冗余的交换网络拓扑中,允许存在多条物理链路的同时, 通过建立一个无循环逻辑拓扑,阻止网络上循环的发生(the role of Spanning Tree Protocol(STP) is to prevent loops from occuring on your network by creating a loop-free logical topology, while allowing physical links in redundant switched network topologies)。随着网络中所用到交换机数量的急剧增加,以及传播VLAN信息的主要目的下,围绕网络数据帧无尽循环问题开始出现。
先前CCNA考试仅要求对STP有基本理解。但当前版本则希望对此方面有极好的掌握。
今天将学习以下内容。
- STP的需求,the need of STP
- STP桥ID,STP Bridge ID
- STP根桥选举,STP Root Bridge election
- STP开销及优先级,STP cost and priority
- STP根及指定端口,STP Root and Designated Ports
- STP增强,STP enhancements
- STP排错,Troubleshooting STP
本课对应了以下CCNA大纲要求。
+ PVSTP运作的配置和验证,configure and verify PVSTP operation
- 对根桥选举进行描述, describe root bridge election
- 生成树的模式, spanning tree mode
## STP的需求
**The Need for STP**
STP是在IEEE 802.1D标准中定义的。为维护起一个无循环逻辑拓扑,交换机**每两秒**传递桥协议数据单元(Bridge Protocol Data Units, BPDUs)。BPDUs是一些在生成树拓扑中用到、用于传递有关端口、地址、优先级及开销等信息的数据报文。**BPDUs被打上VLAN ID标签。**
- 与各台交换机相关联的唯一MAC地址(交换机识别符),the unique MAC address(switch identifier) that is associated with each switch
- 各个交换机端口到根桥的路径开销,the path cost to the Root Bridge associated with each switch port
- 各个交换机端口的端口识别符(该端口的MAC地址),the port identifier(MAC address of the port) associated with each switch port
BPDUs都是每两秒发出的,此特性允许实现快速的网络循环探测及拓扑信息交换。BPDUs的两个类型分别是**配置BPDUs**及**拓扑变化通知BPDUs**(Configuration BPDUs and Topology Change Notification BPDUs); 这里只会对配置BPDUs进行说明。
## IEEE 802.1D的配置BPDUs
**IEEE 802.1D Configuration BPDUs**
配置BPDUs是由LAN交换机发出,用于就生成树拓扑进行通信和计算。在交换机端口初始化后,该端口被置为阻塞状态,同时一个BPDU被发送给交换机中的所有端口。**默认情况下,直到其与其它交换机进行配置BPDUs的交换为止,所有交换机最初都假定其为生成树的根。**在某端口仍将其自身配置BPDUs视为最具吸引力(the most attractive)时,其就会持续发送配置BPDUs。这些交换机基于以下4个因素(以列出顺序),确定出最佳配置BPDU(the best Configuration BPDU)。
1. 有着最低的根桥ID的, lowest Root Bridge ID
2. 有着到根桥最低根路径开销的,lowest Root path cost to Root Bridge
3. 有着最低发送者桥ID的,lowest sender Bridge ID
4. 有着最低发送者端口ID的,lowest sender Port ID
配置BPDU交换的完成,导致以下动作。
- 选举出整个生成树域的根桥, a Root Switch is elected for the entire Spanning Tree domain
- 选举出生成树域中所有非根交换机上的根端口,a Root Port is elected on every Non-Root Switch in the Spanning Tree domain
- 选举出所有LAN网段中的指定交换机,a Designated Switch is elected for every LAN segment
- 选举出所有网段的指定交换机的指定端口(根交换机上的所有活动端口也都是指定端口),a Designated Port is elected on the Designated Switch for every segment(all active ports on the Root Switch are also designated)
- 通过阻塞冗余路径,网络中的循环得以消除,loops in the network are eliminated by blocking redundant paths
一旦所有交换机端口都处于转发或阻塞状态,生成树网络(the Spanning Tree network)就完成了收敛, 此时配置BPDUs就由根桥以默认每两秒的间隔发出。这就是**配置BPDUs的发端**。配置BPDUs通过根桥上的指定端口,转发到下游邻居交换机(this is referred to as the origination of Configuration BPDUs. The Configuration BPDUs are forwarded to downstream neighboring switches via the Designated Port on the Root Bridge)。
当非根桥(a Non-Root Bridge)在其提供了到根桥最优路径的根端口上,接收到一个配置BPDU时,就会通过其指定端口,发送出一个该BPDU的更新版本。这就是**BPDUs的传播**(when a Non-Root Bridge receives a Configuration BPDU on its Root Port, which is the port that provides the best path to the Root Bridge, it sends an updated version of the BPDU via its Designated Port(s). This is referred to as the propagation of BPDUs)。
**指定端口**则是**指定交换机**上,在转发来自那个LAN网段的数据包到根桥时,有着最低路径开销的端口(**the Designated Port** is a port on **the Designated Switch** that has the lowest cost when forwarding packets from that LAN segment to the Root Bridge)。
上面输出中的MAC地址是得自交换机背板或管理引擎的硬件地址(the hardware address derived from the switch backplane or supervisor engine, 又名为基底MAC地址,the base MAC address)。**在802.1D标准中,每个VLAN都需要一个唯一BID。**
大多数思科Catalyst交换机都有一个可用作VLANs的BIDs的、1024个MAC地址的地址池。这些MAC地址被顺序分配,也就是该范围中的第一个MAC地址分配给VLAN 1, 第二个给VLAN 2, 第三个给VLAN 3, 以致第四个第五个等等。这样就提供了支持标准范围VLANs的支持能力,但要支持扩展范围的VLANs,就需要更多的MAC地址。该问题在802.1t(802.1D的技术和编辑修正)标准中得以解决(this issue was resolved in the 802.1t(Technical and Editoral corrections for 802.1D) standard)。
在图31.4中,四台交换机--Switch 1、Switch 2、Switch 3及Switch 4, 处于同一STP域中。默认所有交换机都有着桥优先级32768。为确定哪台交换机将成为根桥,并由此打破不分胜负的局面,STP将基于最低顺序MAC地址选择出根桥交换机(in order to determine which switch will become the Root Bridge, and thus break the tie, STP will select the switch based on the lowest-order MAC address)。那么基于此标准,并参考图31.4给出的信息,Switch 1将被选举为根桥。
基于图31.5中的配置,最有可能被选举作为根桥的交换机是Switch 1。这是因为尽管所有优先级都一样,但该交换机有着最低顺序的MAC地址。而假如Switch 1失效,STP就会选举Switch 2作为根桥,因为它有着第二低的MAC地址。但是这将导致一个次优的网络拓扑(however, this would result in a suboptimal network topology)。
重要的是记住带有更低的(数值)开销的端口是更为首选的端口;端口开销越低,那个特定端口被选举为根端口的可能性就越高(the lower the port cost, the higher the probability of that particular port being elected the Root Port)。**端口开销全局重要,并影响整个生成树网络。**该数值被配置在生成树域中的所有非根交换机上(on all Non-Root Switches in the Spanning Tree domain)。
## 生成树的根端口及指定端口
**Spanning Tree Root and Designated Ports**
STP选举出两种类型用于转发BPDUs的端口:指向根桥的根端口,以及指向根端口另一边的指定端口(STP elects two types of ports that are used to forward BPDUs: the Root Port, which points towards the Root Bridge, and the Designated Port, which points away from the Root Bridge)。掌握这两种端口类型的作用及其选举过程,十分重要。
根桥路径开销又是基于连接到根桥的所有链路的累积开销(路径开销)计算出的。路径开销是各个端口贡献给根桥开销的数值(the path cost is the value that each port contributes to the Root Bridge path cost)。因为此概念通常是十分令人困惑,在下图31.7中对其进行了演示。
> **注意:** 下面的解释对网络中交换机間的BPDUs数据流进行了说明。与其它信息一起,这些BPDUs包含了根桥路径开销信息,而根桥路径开销在接收交换机上的入站端口处被增加(along with other information, these BPDUs contain the Root Bridge path cost information, which is incremented by the ingress port on the receiving switch)。
非指定端口(the Non-Designated Port)实际上不是一种生成树端口类型。而是其作为一个术语,只是简单地表示某个不作为某LAN网段上指定端口的端口。**非指定端口将始终被STP置为阻塞状态。**基于根端口及指定端口的计算,下图31.9中展示了用于根端口和指定端口选举示例的交换网络的最终生成树拓扑(Based on the calculation of Root and Designated Ports, the resultant Spanning Tree Topology for the switched network that was used in the Root Port and Designated Port election examples is shown in Figure 31.9 below)。
![已收敛的生成树网络](images/3109.png)
*图31.9 -- 已收敛的生成树网络*
## 思科生成树增强
**Cisco Spanning Tree Enhancements**
如早前指出的那样,STP对其所在环境做出以下两点假设。
- 所有链路都是双向的,而能够发送和接收桥协议数据单元。
- 所有交换机都能正常地接收、处理及发出BPDUs
在现实世界的网络中,这两个假设并不总是正确。在这种情况下,STP就可能无法阻止网络中循环的形成(in situations where that is the case, STP may not be able to prevent loops from being formed within the network)。正是由于存在这种可能,且为提升基本的802.1D STA性能,思科引入了一些对IEEE 802.1D标准的增强,将在下面进行说明。
这在该端口所连接的诸如某台工作站的网卡这样的,没有发送或响应BPDUs的网络设备时不是问题。但如该端口所连接的设备确实在发出BPDUs,比如另一台交换机,这可能造成交换循环。这是因为该端口跳过了侦听及学习阶段而立即进入到转发状态(this may result in a switching loop. This is because the port skips the Listening and Learning states and proceeds immediately to the Forwarding state)。端口快速简单地令到该端口相较经历所有STA步骤,快得多地开始转发以太网帧。
在端口快速端口上带有BPDU守护下,在Switch 1接收到来自Switch 3的一个BPDU时,就立即将该端口转变成错误关闭状态(immediately transitions the port into the errdisable state)。结果就是STP计算不受该冗余链路的影响,且该网络不会有任何循环。
### BPDU过滤器
**BPDU Filter**
BPDU守护与BPDU过滤器两个特性常常混淆或甚至被想成是同一个特性。但它们是不同的,而掌握它们之间的区别就很重要。在某个端口上开启了端口快速时,该端口将发出BPDUs且将接受及处理收到的BPDUs。BPDU守护特性阻止该端口接收任何的BPDUs,但不阻止其发送BPDUs。如有接收到任何BPDUs,该端口就将成为错误关闭端口(if any BPDUs received, the port will be errdisabled)。
而BPDU过滤器特性有着两方面的功能(the BPDU Filter feature has dual functionality)。当在接口级别配置上BPDU过滤器时,它将有效地在选定端口上,通过阻止这些端口发送或接收所有BPDUs,而关闭这些端口的STP。而在全局配置了BPDU过滤器,并与全局端口快速配合使用是,它会将任何接收到BPDUs的端口,还原成端口快速模式。下图31.13对此进行了演示。
如该交换机链路是运行的,又没有接收到BPDUs(因为该链路是单向链路,due to a unidirectional link),该交换机就假设将该链路开启是安全的,那么该端口就转换到转发状态并开始对接收到的BPDUs进行中继。如有某台交换机连接到该链路的另一端,这将有效地建立起一个生成树循环。下图31.14对此概念进行了演示。
在循环守护开启时,Switch 3保持对所有非指定端口的追踪。在端口持续接收到BPDUs时,该端口就是好的;但如该端口停止接收到BPDUs,就被转移到循环不一致状态(a loop-inconsistent state)。也就是说,在循环守护开启时,STP端口状态机(the STP port state machine)被修改为在缺少BPDUs时,阻止该端口从非指定端口角色转变成指定端口角色(in other words, when Loop Guard is enabled, the STP port state machine is modified to prevent the port from transitioning from the Non-Designated Port role to the Designated Port role in the absence of BPDUs)。在应用循环守护时,应知道以下这些应用准则。
- 不能在开启了根守护(Root Guard)的交换机上开启循环守护, Loop Guard cannot be enabled on a switch that also has Root Guard enabled
- 循环守护不影响上行快速(Uplink Fast)或骨干快速(Backbone Fast)的运行, Loop Guard does not affect Uplink Fast or Backbone Fast operation
- 循环守护只是必须在点对点链路上开启,Loop Guard must be enabled on Point-to-Point links only
- 循环守护的运行不受生成树计时器的影响,Loop Guard operation is not affected by the Spanning Tree timers
- 循环守护无法真正探测出一条单向链路,Loop Guard cannot actually detect a unidirectional link
- 循环守护无法在端口快速或动态VLAN端口上开启,Loop Guard cannot be enabled on Port Fast or Dynamic VLAN ports
### 根守护
**Root Guard**
**根守护特性阻止指定端口成为根端口。**如在某个根守护特性开启的端口上接收到一个优良BPDU(a superior BPDU), 根守护将该端口移入根不一致状态(a root-inconsistent state), 从而维持当前根桥状态(thus maintaining the current Root Bridge status quo)。下图31.15对此概念进行了演示。
**根守护阻止某个端口成为根端口,因此确保该端口始终是指定端口。**与其它可同时在全局基础上开启的思科STP增强不同,根守护必须手动在所有根桥不应出现的端口上开启(unlike other STP enhancements, which can also be enabled on a global basis, Root Guard must be manually enabled on all ports where the Root Bridge should not appear)。因为这点,在LAN中STP的设计和部署时确保拓扑的确定性就很重要(because of this, it is important to ensure a deterministic topology when designing and implementing STP in the LAN)。根守护令到网络管理员可以强制指定网络中的根桥(Root Guard enables an administrator to enforce the Root Bridge palcement in the network), 确保不会有客户设备因疏忽或其它原因而成为生成树的根,所以根守护常用在ISP网络面向客户设备的边界(so it is usually used on the network edge of the ISP towards the customers's equipment)。
### 上行快速
**Uplink Fast**
**上行快速特性提升了在主要链路失效(根端口的直接失效)时,更快的到冗余链路的切换**(the Uplink Fast feature provides faster failover to a redundant link when the primary link fails(i.e., direct failure of the Root Port))。该特性的主要目的是在出现上行链路失效时,提升STP的收敛时间。**该特性在带有到分布层冗余链路的接入层交换机上用的最多**;这也是其名称的由来。
在接入层交换机有着到分布层的双宿主时,其中一条链路被被STP置为阻塞状态以防止环回(when Access Layer switches are dual-homed to the Distribution Layer, one of the links is placed into a Blocking state by STP to prevent loops)。在到分布层的主链路失效时,处于阻塞状态的端口就必须在开始转发流量之前,转换到侦听和学习状态。这导致在交换机能够转发以其它网段为目的的帧之前,有一个30秒的延迟。上行快速的运作,在下图31.16中进行演示。
Switch 3将忽略这些较差BPDUs,直到最大存活值(the Max Age value)超时。在此期间,Switch 2继续将BPDUs发送给Switch 3。在最大存活时间超时后,Switch 3会将来自根桥、存储的BPDU信息老化排除,并转换到侦听状态,接着将把从根桥接收到的BPDU发送出去,发送给Switch 2。
骨干快速特性包含了一种允许在接收到一个较差的BPDU时,立即检查某个端口上存储的BPDU信息是否仍然有效的机制。此特性通过一种叫做RLQ PDU 的新协议数据单元及根链路请求实现的(this is implemented with a new PDU and the Root Link Query(RLQ), which is referred to as the RLQ PDU)。
紧接着较差BPDU的接收,该交换机将在除接收该较差BPDU的端口外的所有非指定端口上,发出一个RLQ PDU。如该交换机是根桥或失去了到根桥的连接,就将对对该RLQ进行响应。否则,该RLQ将向上游传播(otherwise, the RLQ will be propagated upstream)。如该交换机在其根端口上接收到一个RLQ响应,那么到根桥的连通性仍然是完整的。如该响应实在非根端口上接收到的,就意味着到根桥的连通性已丢失,同时在交换机上的本地交换生成树必须重新计算且最大存活时间计数器被置为超时,如此就能重新找到一个新的根端口(if the response is received on a Non-Root Port, it means that connectivity to the Root Bridge is lost, and the local switch Spanning Tree must be recalculated on the switch and the Max Age timer expired so that a new Root Port can be found)。此概念在下图31.19中进行了演示。
基于Switch 3上接收到的肯定响应,就可以老化排除连接到Switch 2的端口而无需等待最大存活时间计数器过期(based on the positive response received on Switch 3, it can age out the port connected to Switch 2 without waiting for the Max Age timer to expire)。但是该端口仍必须经过侦听及学习状态。而通过立即将最大存活时间计数器进行老化清楚,骨干快速将收敛时间从50秒(20秒的最大存活时间 + 30秒的侦听和学习时间)减少到30秒(侦听和学习状态的时间)。
RLQs的类型有两种:RLQ请求和RLQ响应。**RLQ请求典型地在根端口上发出,用以检查到根桥的连通性。所有RLQ响应都是在指定端口上发出的。**因为RLQ请求包含了发送该RLQ响应的根桥BID,如到根桥路径中其它交换机仍能到达该RLQ响应中所指定的根桥,其就会响应给发出RLQ请求的交换机(because the RLQ request contains the BID of the Root Bridge that sent it, if another switch in the path to the Root Bridge can still reach the Root Bridge specified in the RLQ response, it will respond back to the sending switch)。如路径上的交换机已不能到达RLQ响应中的根桥,该交换机就简单地通过其根端口,往根桥转发该查询。
大多数二层故障都跟域中某种循环有关,而这又引起与其相关的多种问题,包括网络停机。在进行交换机配置的工作及将某台设备插入或拔出时,应确保没有在操作过程中建立循环。为缓和这类问题,就通常应在这些交换机上配置生成树协议,以避免出现在网络中的某处偶然创建出循环的情形(to mitigate against such problems, you should usually configure Spanning Tree Protocol on switches in order to avoid situations that might occur if you happen to accidently create a loop somewhere in the network)。
应记住MAC地址数据包内部没有超时机制。**在TCP/IP中(in the case of TCP/IP),IP协议在其头部有一个名为TTL(存活时间,Time to Live)的功能,该功能就是通过路由器的跳数, 而不是事实上的时间单位。**所以如果IP数据包碰巧处于循环中而通过多台路由器,它们将最终超时而被从网络中移除。但是,交换机并未提供那种机制。二层数据帧理论上可以永久循环,因为没有将其超时的机制,意味着如创建出一个循环,那个循环就会一直在那里,直到手动将其从网络中移除。
STP故障通常有以下三类(STP issues usually fall within the following three categories)。
- 不正确的根桥, incorrect Root Bridge
- 不正确的根端口, incorrect Root Port
- 不正确的指定端口,incorrect Designated Port
### 不正确的根桥
优先级和基础MAC地址决定根桥是否是正确的(priority and base MAC addresss decide whether the Root Bridge is incorrect)。可以执行`show spanning-tree vlan <vlan#>`命令查看MAC地址及交换机优先级。而运用`spanning-tree vlan <vlan#> priority <priority>`命令修复此问题。
### 不正确的根端口
根端口提供了自该交换机到根桥最快的路径,同时开销是跨越整个路径的累积(the Root Port provides the fastest path from the switch to the Root Bridge, and the cost is cumulative across the entire path)。如怀疑存在正确的根端口,就可执行`show spanning-tree vlan <vlan#>`命令。如根端口是不正确的,可执行`spanning-tree cost <cost>`命令对其进行修复。
### 不正确的指定端口
指定端口是将某个网络区段连接到网络其它部分最低开销的端口(the Designated Port is the lowest cost port connecting a network segment to the rest of the network)。如怀疑存在指定端口问题,就可以执行`show spanning-tree vlan <vlan#>`及`spanning-tree cost <cost>`命令。
1. How often do switches send Bridge Protocol Data Units ( BPDUs)?
2. Name the STP port states in the correct order.
3. What is the default Cisco Bridge ID?
4. Which command will show you the Root Bridge and priority for a VLAN?
5. What is the STP port cost for a 100Mbps link?
6. When a port that is configured with the `_______``_______` feature receives a BPDU, it immediately transitions to the errdisable state.
7. The `_______``_______` feature effectively disables STP on the selected ports by preventing them from sending or receiving any BPDUs.
8. Which two commands will force the switch to become the Root Bridge for a VLAN?
9. Contrary to popular belief, the Port Fast feature does not disable Spanning Tree on the selected port. This is because even with the Port Fast feature, the port can still send and receive BPDUs. True or false?
10. The Backbone Fast feature provides fast failover when a direct link failure occurs. True or false?
## 第31天答案
1. Every two seconds.
2. Blocking, Listening, Learning, Forwarding, and Disabled.
3. 32768.
4. The `show spanning-tree vlan x` command.
5. 19.
6. BPDU Guard.
7. BPDU Filter.
8. The `spanning-tree vlan [number] priority [number]` and `spanning-tree vlan [number] root [primary|secondary]` commands.