本檔案介紹跨距樹狀目錄通訊協定(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)橋接器 (第8條),以瞭解更多詳細資訊和本文討論的所有引數的參考資料。
本文件所述內容不限於特定軟體和硬體版本。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
如以下清單所示,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。在前往交換器A的連線埠上,資訊時限為(最大時限 — 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秒。
medium access delay(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 — 此值是以前傳送到網橋網路的幀在到達目的地之前保留在網路中的最長時間。公式為:
Maximum_frame_lifetime = dia x transit_delay + med_access_delay = dia + 0.5 = 7.5 = 8 (rounded)
Maximum transmission halt delay — 此值是在做出封鎖決定後有效封鎖連線埠所需的時間。IEEE計算此事件的最大值為1秒。公式為:
Maximum_transmission_halt_delay = 1
本節詳細介紹如果對每個引數使用建議值,如何達到最大老化時間和轉發延遲的預設值。建議的值是直徑7和問候時間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值:
lost_msg = 3
transit_delay = 1
bpdu_delay = 1
msg_overestimate = 1
Tx_halt_delay = 1
med_access_delay = 0.5
maximum_transmission_halt_delay = 1
在現代網路中,這些值可能顯得相當保守,因為您不太可能丟失三個BPDU,或者通過交換機的幀不會出現1秒的延遲。但是,請記住,存在這些值是為了防止在應力條件下可能出現的STP環路,例如:
CPU使用率非常高
過載埠
因此,您必須將這些引數視為固定值。如果使用生成樹協定計時器的預設值部分顯示的公式,則您可以:
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秒是減少STP引數的最簡單和最可靠的方法。但是,請記住,如果您將hello時間從2秒丟棄1秒,則每個網橋傳送/接收的BPDU數將增加一倍。這種增加會導致CPU的額外負載,需要處理兩倍數量的BPDU。如果您有多個VLAN和中繼,則此負載可能是一個問題。
直徑完全取決於網路設計。直徑是橋接網路(包括來源和目的地)中連結任意兩台交換器所跨越的交換器最大數量(假定情況最糟)。確定直徑時,不會跨越同一開關兩次。在本文檔的生成樹協定計時器部分的圖中,可以看到直徑為5(路徑F-E-B-A-C)。
現在,請檢視此部分中的圖。圖中包含一些連線到兩台分佈層交換機(交換機A和B)的接入交換機(交換機C、D和E)。 分佈層交換機和核心之間存在第3層(L3)邊界。橋接域在分佈層交換機處停止。STP直徑為5:
C-A-D-B-E
D-A-C-B-E
從圖中可以看到,沒有交換機對提供的直徑大於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命令的輸出中。