【版权声明:原创翻译文章,翻译水平有限,错误在所难免,翻译作者对文章中存在的错误或遗漏所造成后果不承担任何责任,请谨慎转载。转载请保留本声明及出处:blog.csdn.net/shallnet
,下载该书英文版】
前面章节曾说到了网桥每次处于listening状态时默认需要监听15秒的时间,其实总的来说,STP是受3个time在控制,如表6-5。
Timer
|
Primary Purpose
|
Default
|
Hello Time
|
Time between sending of Configuration BPDUs by the Root Bridge
|
2 Secs
|
Forward Delay
|
Duration of Listening and Learning states
|
15 Secs
|
Max Age
|
Time BPDU stored
|
20 Secs
|
Hello Time控制的是发送配置BPDU的时间间隔,802.1D指定该时间间隔默认值为2秒,注意该值仅控制根网桥发送配置BPDU周期,其它网桥仅做转发从根网桥接收到的BPDU。也就是说,因为网络故障的原因在2-20内没有接收到BPDU,非根网桥在这段时间期间停止周期性的发送BPDU(如果持续20秒以上都未曾接受到BPDU,网桥保存的BPDU直接作废,重新选择新的根网桥),所有的网桥使用其本地配置的Hello
Time作为TCN传输周期,这将在后面“Topology Change Notification BPDUs
”这一节讨论。
Forward Delay是网桥监听和处于learning
状态的延迟时间周期。这个15秒的默认值最初来历是假设网络最大跳数位7,最大丢失BPDU为3,和一个2秒为周期的Hello Time(关于如何计算Forward Delay的详细介绍在第七章的“Tuning Forward Delay”一节)。正如Topology
Change Notification BPDUs ”这一节所述,Forward Delay也控制网络拓扑改变后网桥转发表老化时间周期。
Max
Age是网桥在丢弃BPDU之前保存其的时间周期,回忆一下早些讲到的每个端口保存一个其接收到的最优BPDU。一旦网桥开始接收到一个每隔2秒持续地BPDU,接收网桥都会持续保存一个BPDU的拷贝。但是,如果最优的BPDU发送失败,另外的网桥将来接管该工作。
例如,假设图6-12中第三段链路使用集线器连接并且Cat-B:Port-1/2的收发功能失效,Cat-C由于仍然还是从集线器接收以太网链路信息而不会立即获得该失效的信息,其唯一知道的就是BPDU没有持续发过来的了。在此20秒(Max
Age)错误发生之后,Cat-C将老化掉过期的BPDU信息:Cat-B拥有第三段链路的最优指定端口。使得Cat-C:Port-1/2转换到Listening 状态并试图成为指定端口,因为Cat-C:Port-1/2是该链路目前最有效访问到根网桥的端口,其最终也将转化到转发模式。事实上,该端口在Cat-B端口Port-1/2 错误发生50秒(10秒Max Age + 15秒listening状态时间 +15 learning状态时间)之后发生状态切换。
在某些情形下,网桥可以在直连的链路上检测到拓扑的变化并且不需要等待Max
Age时间周期而立即转换到Listening状态。例如,假设图6-13的情况。
Figure 6-13. Failure of a Link Directly Connected to the Root Port of Cat-C
在该例中,Cat-C:Port-1/1错误,因为是根端口链路出现错误,所有没有必要等待20秒已使以前的信息老化掉,取而代之的是Cat-C:Port-1/2立即进入学习模式并试图成为新的根端口。这使得STP收敛时间从50秒减少到30秒(15秒的listening状态时间+15秒的learning状态时间)。
提示:
STP默认STP收敛时间是30秒到50秒。第七章“Fast STP Convergence”一节讨论如何改善这个收敛问题。
STP timer的使用要注意两点。第一点,改变timer默认时间值前要先深思熟虑,关于这点第七章有更详细的讨论。第二点,就算你对timer的调整胸有成竹,你也应当仅仅去修改根网桥上的timer。正如你将在后面“”一节所见,BPDU包含三个timer字段,根网桥是通过这三个字段将timer值传递到网络中其他所有网桥。考虑另外一种情况,每个网桥都是使用本地配置,一些网桥按照自己的运行方式在其他网桥还未离开listening状态是进入到Forwarding状态,这种混乱运行方式的明显搞乱了这个网络。但通过在BPDU提供timer字段,根网桥就可以向整个网络中网桥告知时间参数的配置。
提示:
你只能修改根网桥的timer值,修改非根桥上的值是没有任何作用的。但是,也别忘了更新那些以后可能成为根网桥的网桥timer值。