簡介
本檔案介紹跨距樹狀目錄通訊協定(STP)計時器以及調整計時器時要使用的規則。
背景
本文僅討論如何針對常規802.1D生成樹調整STP計時器。本檔案不討論快速STP(RSTP)(IEEE 802.1w)或多生成樹(MST)通訊協定(IEEE 802.1s)。
有關RSTP和MST的詳細資訊,請參閱以下文檔:
必要條件
需求
本文檔假設很好地理解了STP。如需深入瞭解STP的運作方式,請參閱瞭解和設定Catalyst交換器上的跨距樹狀目錄通訊協定(STP)。
注意:您可以使用此文檔幫助您解決網路問題,但前提是您熟悉該流程,或者瞭解該流程的人指導您工作。如果您不熟悉STP,則所做的更改可能導致以下任何情況:
請參閱802.1D - IEEE本地和都會網路標準:媒體存取控制(MAC)橋接器
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
生成樹通訊協定計時器
如以下清單所示,STP計時器有多種:
-
hello —hello時間是在連線埠上傳送的每個橋接器通訊協定資料單元(BPDU)之間的時間。預設情況下,此時間等於2秒(秒),但是可以將時間調整為1到10秒。
-
轉發延遲 — 轉發延遲是在偵聽和學習狀態下花費的時間。預設情況下,此時間等於15秒,但是可以將時間調整為4到30秒。
-
max age — 最大老化時間計時器控制網橋埠儲存其配置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計時器考慮最大直徑為七個網橋。
-
bridge transit delay(transit delay) — 此值是網橋接收和傳輸同一幀之間經過的時間。從邏輯上講,這是通過網橋的延遲。IEEE建議將1秒作為最大網橋傳輸延遲。
-
BPDU傳輸延遲(bpdu_delay) — 此值是連線埠上接收BPDU的時間與組態BPDU有效地傳輸到另一個連線埠的時間之間的延遲。IEEE建議將1秒作為最大BPDU傳輸延遲。
-
message age increment overestimate(msg_overestimate) — 此值是每個網橋在轉發BPDU之前向消息有效期新增的增量。如跨距樹狀目錄通訊協定計時器一節所述,思科交換器(可能包括所有交換器)在交換器轉送BPDU之前,將訊息時間增加1秒。
-
lost message(lost_msg) — 此值是當BPDU從橋接網路的一端移動到另一端時,可能會丟失的BPDU數量。IEEE建議使用3作為可以丟失的BPDU數。
-
transmit halt delay(Tx_halt_delay) — 該值是網橋在確定連線埠需要封鎖後,將連線埠有效移動到封鎖狀態所需的最長時間。IEEE建議對此引數使用1秒。
-
媒體存取延遲(med_access_delay) — 此值是裝置取得媒體存取以進行初始傳輸所需的時間。它是CPU決定傳送幀與幀開始有效離開網橋的時刻之間的時間。IEEE建議使用0.5秒作為最大時間。
通過這些引數,您可以計算其他值。此清單提供其他引數和計算。這些計算假定對所有引數使用預設建議IEEE值。
-
端到端BPDU傳播延遲 — 該值是BPDU從網路的一端傳輸到另一端所需的時間。假設直徑為7跳、3個可能丟失的BPDU以及2秒的hello時間。在這種情況下,公式為:
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
-
Message age overestimate — 此引數的用途是說明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
-
最大老化時間
-
轉撥延遲
-
diameter — 這取決於網路。
請勿修改此清單中的任何值。將這些值保留為建議的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)。
現在,請檢視此部分中的圖。
圖中包含一些連線到兩台分佈層交換機(交換機A和B)的接入交換機(交換機C、D和E)。
分佈層交換機和核心之間存在第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
。
相關資訊