简介
本文档介绍生成树协议(STP)计时器以及用于调整计时器的规则。
背景
本文档只论述如何调整常规 802.1D 生成树的 STP 计时器,而对快速 STP (RSTP) (IEEE 802.1w) 或多生成树 (MST) 协议 (IEEE 802.1s) 不做论述。
有关 RSTP 和 MST 的详细信息,请参阅以下文档:
先决条件
要求
本文档假设您对STP有很好的理解。有关STP操作的详细信息,请参阅了解和配置Catalyst交换机上的生成树协议(STP)。
警告:您可以使用此文档帮助您解决网络问题,但前提是您熟悉该流程,或者熟悉该流程的人指导您工作。如果您不熟悉 STP,那么您所做的更改可能会导致下列任何一种情况出现:
- 不稳定
- 应用程序速度减慢
- CPU 使用率达到峰值
- LAN 崩溃
有关本文档所述的所有参数的更多详细信息和参考资料,请参阅 802.1D - 适用于局域网和城域网的 IEEE 标准:介质访问控制(MAC)网桥
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
生成树协议计时器
STP 计时器包含如下所示的几种类型:
-
Hello — Hello 时间是从端口发送网桥协议数据单元 (BPDU) 的间隔时间。默认情况下,此时间等于2秒(秒),但可以将时间调整为1到10秒之间。
-
转发延迟 — 转发延迟是在侦听和学习状态花费的时间。默认情况下,此时间等于15秒,但可以将时间调整为4到30秒之间。
-
最大老化时间 — 最大老化时间计时器用于控制网桥端口保存配置 BPDU 信息之前所经历的最大时间长度。此时间默认为20秒,但可以将时间调整为6到40秒之间。
每个配置 BPDU 均包含这三个参数。另外,每个 BPDU 配置还包含另一个与时间有关的参数,该参数称作消息年龄。
消息年龄不是固定值。消息年龄包含根网桥最初生成 BPDU 后经历的时间长度。
根网桥发送的所有 BPDU 的消息年龄值为 0,并且随后的所有交换机都会在该值基础上增加 1 个数。
实际上,该值包含了有关您在接收 BPDU 时与根网桥之间距离的信息。下图解释了这一概念:

当接收到的一个新配置 BPDU 等于或者优于端口上记录的信息时,将会存储所有 BPDU 信息。
老化时间计时器开始运行。老化时间计时器的起点为该配置 BPDU 中接收到的消息年龄。
如果该老化时间计时器在接收到刷新该计时器的另一 BPDU 之前达到了最大老化时间,则该端口的信息便会老化。
下面的示例适用于本部分中的图:
-
交换机B和C收到来自交换机A的配置BPDU,消息生存期为0。在通向A的端口上,信息将在(最大生存期 — 0)秒内过期。默认情况下,此时间为20秒。
-
交换机D和E收到来自交换机B的BPDU,消息生存期为1。在通向B的端口上,信息将在(最大生存期 — 1)秒内过期。默认情况下,此时间为19秒。
-
交换机F收到来自交换机E的BPDU,消息生存期为2。在通向E的端口上,信息生存期为(最大生存期 — 2)秒。默认情况下,此时间为18秒。
其他生成树协议参数
IEEE 802.1D 定义了 STP。除生成树协议计时器部分描述的计时器之外,IEEE 还定义了这些与 STP 相关的参数:
-
STP 域的直径 (dia) — 该值表示任意两个终端站连接点之间的最大网桥数。IEEE 建议考虑将默认 STP 计时器的最大直径设为七个网桥。
-
网桥中转延迟 (transit delay) — 该值表示网桥上相同帧的接收和传输的间隔时间。该值逻辑上是通过网桥的时延。IEEE建议将1秒作为最大网桥传输延迟。
-
BPDU 传输延迟 (bpdu_delay) — 该值表示一个端口上接收到 BPDU 的时间与配置 BPDU 有效传输到另一个端口的时间之间的延迟。IEEE建议将1秒作为最大BPDU传输延迟。
-
message age increment overestimate(msg_overestimate) — 此值是每个网桥在转发BPDU之前向消息年龄添加的增量。如生成树协议计时器部分所述,在交换机转发BPDU之前,思科交换机(可能包括所有交换机)将消息年龄增加1秒。
-
丢失的消息 (lost_msg) — 该值表示 BPDU 从桥接网络的一端移动到另一端的过程中可丢失的 BPDU 数量。IEEE 建议将可丢失的 BPDU 数量设为 3。
-
transmit halt delay(Tx_halt_delay) — 该值是在确定需要阻塞端口后网桥有效地将端口转为阻塞状态所需的最长时间。IEEE建议对此参数使用1秒。
-
介质访问延迟 (med_access_delay) — 该值表示设备获得初始传输介质访问权限所需的时间。该时间为 CPU 确定发送帧与帧开始有效地从网桥传输出去之间的时间。IEEE建议使用0.5秒作为最大时间。
通过这些参数,您可以计算其他值。该列表提供了其他参数和计算。这些计算假定所有参数均使用了 IEEE 推荐的默认值。
-
端到端 BPDU 传播延迟 — 该值表示 BPDU 从网络的一端传送到另一端所需的时间。假设直径为七跳,可丢失三个BPDU,并且Hello时间为2秒。在这种情况下,其公式为:
End-to-end_BPDU_propa_delay
= ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1))
= ((3 + 1) x hello) + ((1 x (dia – 1))
= 4 x hello + dia – 1
= 4 x 2 + 6
= 14 sec
-
消息年龄估计过高 — 该参数的用途是说明 BPDU 始发时的年龄。假设每个网桥将BPDU消息生存时间增加1秒。其公式为:
Message_age_overestimate
= (dia – 1) x overestimate_per_bridge
= dia – 1
= 6
-
最大帧生存期 — 该值表示之前发送到网桥网络的帧在到达目的地之前在网络中保留的最长时间。其公式为:
Maximum_frame_lifetime
= dia x transit_delay + med_access_delay
= dia + 0.5
= 7.5
= 8 (rounded)
-
最大传输终止延迟 — 该值表示确定阻塞某端口后,有效地阻塞该端口所需的时间。IEEE将此事件的最大值计算为1秒。其公式为:
Maximum_transmission_halt_delay
= 1
生成树协议计时器的默认值
该部分详细说明了如何在每个参数均使用推荐值的情况下,达到最大老化时间和转发延迟的默认值。
推荐值为直径7和hello时间2秒。
最大老化时间
最大老化时间考虑到处于网络外围的交换机在稳定的条件下(即,如果根仍然处于活动状态)不会使根信息超时。
最大老化时间值需要将 BPDU 总传播延迟和消息年龄估计过高考虑在内。因此,最大老化时间的公式为:
max_age
= End-to-end_BPDU_propa_delay + Message_age_overestimate
= 14 + 6
= 20 sec
此计算显示了 IEEE 如何达到最大老化时间的默认推荐值。
转发延迟
端口进入侦听状态表明活动STP拓扑发生变化,并且端口从块向前移动。
因此,转发延迟运行的侦听和学习时段必须涵盖此连续时段:
-
从第一个网桥端口进入侦听状态(并在随后的重新配置期间保持侦听状态)到桥接LAN中的最后一个网桥听到活动拓扑更改的时间
另外,您需要计算出用来计算最大老化时间的延迟(消息年龄评估过高和 BPDU 传播延迟)。
-
从最后一个网桥停止转发前一个拓扑上接收到的帧(最大传输终止延迟)到前一个拓扑上转发的最后一帧消失(最大帧有效期)的时间
为了确定您没有接收到重复的帧,这一段时间是十分必要的。
因此,两次转发延迟时间(侦听时间+学习时间)包含所有这些参数。其公式为:
2 x forward delay
= end-to-end_BPDU_propagation_delay + Message_age_overestimate +
Maximum_frame_lifetime + Maximum_transmission_halt_delay
= 14 + 6 + 7.5 + 1 = 28.5
forward_delay
= 28.5 /2
= 15 (rounded)
调整最大老化时间和转发延迟计时器
在所有这些参数中,您可以调整的唯一参数是:
-
Hello — 从 1 至 6
-
最大老化时间
-
转发延迟
-
直径 — 取决于网络。
请勿修改以下列表中的任何值。将这些值保留为 IEEE 的推荐值:
在现代网络中,这些值可能看起来相当保守,因为您不太可能丢失三个BPDU,或者通过交换机的帧不会出现1秒的延迟。
但是,请记住设定这些值是为了防止在诸如以下的压力条件下发生 STP 环路:
因此,您必须将这些参数视为固定值。如果您使用的是生成树协议计时器默认值部分所示的公式,您得到的结果将是:
max_age
= End-to-end_BPDU_propa_delay + Message_age_overestimate
= ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1)) + (dia – 1) x overestimate_per_
bridge
= (4 x hello) + dia – 1 + dia – 1
= (4 x hello) + (2 x dia) – 2
forward_delay
= (End-to-end_BPDU_propa_delay + Message_age_overestimate +
Maximum_frame_lifetime + Maximum_transmission_halt_delay ) / 2
= ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1)) + ((dia – 1)
x overestimate_per_bridge) + (dia x transit_delay) + med_access_delay
+ Maximum_transmission_halt_delay) / 2
= ((4 x hello) + dia – 1 + dia – 1 + dia + 0.5 + 1) / 2
= ((4 x hello) + (3 x dia) – 0.5) / 2
通过这些计算您将得出以下两个最终公式(如果将 0.5 忽略不计):
max_age = (4 x hello) + (2 x dia) – 2
forward_delay = ((4 x hello) + (3 x dia)) / 2
如果要调整STP计时器以实现更好的收敛时间,需要严格使用这两个公式。
下面是一个示例。如果您有一个直径为 4 的桥接网络,那么您需要使用这些参数:
hello = 2 (default) then
max_age = 14 sec
forward_delay = 10 sec
If hello = 1 then
max_age = 10 sec
forward_delay = 8 sec
注意:Hello = 1 为最低值。如果直径等于4,则无法将此参数调整为最大老化时间小于10秒,转发延迟小于8秒。
Hello 时间缩短为 1 秒
将hello时间缩短至1秒是减少STP参数最简单且最可靠的方法。
但是,请记住,如果您将hello时间从2秒缩短到1秒,您将会使每个网桥发送/接收的BPDU数量增加一倍。
这会导致 CPU 上的负载增多,使其需要处理两倍的 BPDU。如果您有多个 VLAN 和中继,该负载可能会成为问题。
计算直径
直径完全取决于网络设计。若假定最坏的情况,直径表示连接桥接网络(包含源和目标)中任意两台交换机需要交叉的交换机的最大数量。确定直径时,不要将同一台交换机交叉两次。在本文档生成树协议计时器部分的图中,您可以看到直径为 5 的网络(路径为 F-E-B-A-C)。
现在来看下该部分的图。
该图中包含一些接入交换机(交换机 C、D 和 E),这些交换机与两台分布式交换机(交换机 A 和 B)相连。
在分布式交换机和核心之间存在第 3 层 (L3) 边界。桥接域在分布式交换机处终止。STP 直径为 5:

您可以从图中看到任意交换机对的直径均不超过 5。
更改生成树协议计时器
如生成树协议计时器部分所提到的那样,每个 BPDU 包括 Hello、转发延迟和最大老化时间 STP 计时器。
IEEE 网桥不注重计时器值的本地配置。IEEE 网桥注重的是网桥接收到的 BPDU 中的计时器值。
实际上,只有在 STP 根网桥上配置的计时器才是重要的。如果丢失了根,那么新的根将开始在整个网络中强制采用本地计时器值。
因此,尽管不需要在整个网络中配置相同的计时器值,但必须至少在根网桥和备份根网桥上配置所有的计时器更改。
如果使用运行 Catalyst OS (CatOS) 软件的 Cisco 交换机,您可以通过某些宏来根据公式设置根以及调整参数。
发出set spantree root vlan dia diameter hello hello_time
命令以设置直径和hello时间。例如:
Taras> (enable) set spantree root 8 dia 4 hello 2
VLAN 8 bridge priority set to 8192.
VLAN 8 bridge max aging time set to 14.
VLAN 8 bridge hello time set to 2.
VLAN 8 bridge forward delay set to 10.
Switch is now the root switch for active VLAN 8.
如果已配置STP网络直径,则配置的直径值不会显示在配置或任何命令的输出中show
。
相关信息