本文說明如何排解和預防橋接Cisco Catalyst網路中的跨距樹狀目錄通訊協定(STP)故障。
本文件沒有特定需求。
本文檔重點介紹傳統STP行為和Cisco IOS軟體命令。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
本文檔討論了STP可能失敗的一些常見原因以及查詢問題來源的相關資訊。它還顯示了可最大限度地減少生成樹相關問題並輕鬆進行故障排除的設計型別。
本文檔不討論STP的基本操作。若要瞭解STP的運作方式,請參閱以下檔案:
本文檔不討論IEEE 802.1w中定義的快速STP(RSTP)。此外,本文檔不討論IEEE 802.1s中定義的多生成樹(MST)協定。除非另有說明,否則本文檔中的計時器和收斂說明適用於傳統IEEE 802.1D STP行為。
有關RSTP和MST的詳細資訊,請參閱以下文檔:
如需執行Cisco IOS軟體的Catalyst交換器的更具體的STP疑難排解檔案,請參閱對Catalyst交換器上的STP問題進行排解檔案。
附註:本文檔儲存了傳統STP資訊,以提供傳統IEEE 802.1D STP行為的基礎知識。建議不要在生產環境中使用傳統STP。對於生產網路,應使用第3層路由設計,根據平台支援和網路設計要求部署較新的生成樹協定或模式,例如快速生成樹協定(RSTP)、快速PVST+或多生成樹(MST)
跨距樹狀目錄演演算法(STA)的主要功能是切斷冗餘連結在橋接網路中產生的回圈。STP在開放系統互聯(OSI)模型的第2層運行。STP通過在網橋之間交換的網橋協定資料單元(BPDU),選擇最終轉發或阻止流量的埠。此通訊協定在某些特定情況下可能會失敗,並疑難排解可能會產生非常困難的情況,視網路設計而定。在此特定區域中,您可以在出現問題之前執行故障排除流程中最重要的部分。
STA中的故障通常會導致橋接環路。大多數致電思科技術支援以解決跨距樹狀目錄問題的客戶都懷疑存在錯誤,但錯誤很少會導致錯誤。即使軟體存在問題,STP環境中的橋接環路仍然來自可以阻塞但轉發流量的埠。
請參閱跨距樹狀目錄視訊,以看到說明跨距樹狀目錄最初如何收斂的範例。該示例還解釋了阻塞埠由於BPDU大量丟失而進入轉發模式導致STA故障的原因。
本文檔的其餘部分列出了可能導致STA失敗的不同情況。這些故障大多與BPDU大量丟失有關。丟失會導致阻塞埠轉換到轉發模式。
點對點連結上的雙工不相符是非常常見的組態錯誤。在舊版10/100 Mbps乙太網路連結上,如果手動將連結一端的雙工模式設定為全雙工,並將另一端保留自動交涉模式,則連結會以半雙工結束。(雙工模式設定為「Full」的連線埠不再交涉。)

最糟糕的情況是,傳送BPDU的橋接器在連線埠上將雙工模式設定為半雙工,但連結另一端的對等連線埠將雙工模式設定為全雙工。在上一個範例中,橋接器A和B之間的連結上的雙工不相符很容易導致橋接回圈。由於網橋B具有全雙工配置,因此它不會在鏈路接入之前執行載波偵測。即使網橋A已使用該鏈路,網橋B也會開始傳送幀。這種情況是A的問題;網橋A檢測到衝突,並在網橋嘗試再次傳輸幀之前運行回退演算法。如果從B到A的流量足夠,則A傳送的每個資料包(包括BPDU)都會發生延遲或衝突,最終會被丟棄。從STP的角度來看,由於網橋B不再從A接收BPDU,網橋B已丟失根網橋。這會導致B解除阻塞連線到網橋C的埠,從而形成環路。
每當雙工不相符時,執行Cisco IOS軟體的Catalyst交換器的交換器主控台上都會看到此錯誤訊息:
%CDP-4-DUPLEX_MISMATCH: duplex mismatch discovered on FastEthernet5/1 (not half duplex), with TBA05071417(Cat6K-B) 4/1 (half duplex).
檢查雙工設定,如果雙工組態不相符,請相應地設定組態。
有關如何解決雙工不相符問題的詳細資訊,請參閱設定和驗證乙太網路10/100/1000Mb半/全雙工自動交涉檔案。
單向連結是橋接回圈的常見原因。在光纖鏈路上,不進行檢測的故障通常會導致單向鏈路。另一個原因是收發器問題。就STP而言,任何可能導致鏈路保持正常運行並提供單向通訊的內容都非常危險。此示例說明:

在這裡假設A和B之間的鏈路是單向的。當鏈路將流量從B傳輸到A時,鏈路會丟棄從A到B的流量。假設網橋B在鏈路變為單向之前阻塞。但是,如果埠從具有更高優先順序的網橋接收BPDU,則它只能阻塞。在本例中,由於來自A的所有BPDU都將丟失,因此網橋B最終會將其埠向A轉換到轉發狀態並轉發流量。這會產生環路。如果啟動時存在此故障,則STP無法正確收斂。在雙工不相符的情況下,重新開機暫時有幫助;但是在這種情況下,重新啟動網橋完全沒有效果。
為了在建立轉送環路之前檢測單向鏈路,思科設計並實施了單向鏈路檢測(UDLD)協定。UDLD檢測受支援的第2層鏈路上的單向條件。在受支援的點對點鏈路上配置UDLD主動模式,其中在檢測到單向條件後需要自動禁用埠。
如需更多有關使用UDLD的資訊,請參閱設定UDLD通訊協定功能的檔案。
資料包損壞也會導致同樣型別的故障。如果鏈路的物理錯誤率很高,您可能會丟失一定數量的連續BPDU。這種丟失可能導致阻塞埠轉換到轉發狀態。您很少看到這種情況,因為STP預設引數非常保守。使用傳統IEEE 802.1D預設計時器時,阻塞埠可能需要50秒才能達到轉發狀態,因為最後一個上級BPDU會丟失:最長使用時間20秒,傾聽15秒,學習15秒。成功傳輸單個BPDU會中斷環路。這種情況通常發生於STP引數調整不慎時。調整的示例是最大老化時間減少。
雙工不相符、纜線錯誤或纜線長度不正確都可能導致封包損毀。請參閱疑難排解交換器連線埠和介面問題檔案,以瞭解Cisco IOS軟體錯誤計數器輸出的說明。
STP在軟體中實施,甚至在高端交換機上實施,這些交換機通過專用專用專用積體電路(ASIC)在硬體中執行大部分交換功能。 如果由於任何原因導致網橋的CPU使用過度,則資源可能不足以傳輸BPDU。STA通常不是處理器密集型,並且優先於其他進程。本文檔的查詢資源錯誤部分提供了有關特定平台可以處理的STP例項數的一些准則。
PortFast是一種功能,通常只對連線到主機的埠或介面啟用。當該埠上的鏈路接通時,網橋會跳過STA的第一階段,直接轉換到轉發模式。

在本例中,裝置A是埠p1已進行轉發的網橋。埠p2具有PortFast配置。裝置B是集線器。將第二根纜線插入A後,連線埠p2會進入轉送模式,並在p1和p2之間建立回圈。一旦p1或p2收到將這兩個連線埠之一置於封鎖模式的BPDU,此回圈就會停止。但是這種瞬變迴路有一個問題。如果環路的流量非常密集,則網橋在成功傳輸用於停止環路的BPDU時可能會出現問題。在極端情況下,此問題可能會嚴重延遲收斂或導致網路癱瘓。
有關如何在執行Cisco IOS軟體的交換器上正確使用PortFast的詳細資訊,請參閱使用PortFast和其他命令修正工作站啟動連線延遲的檔案。
即使使用PortFast配置,埠或介面仍然參與STP。如果網橋優先順序低於當前活動根網橋的交換機連線到配置了PortFast的埠或介面,則可以將其選為根網橋。根網橋的這一變化可能會對活動STP拓撲產生負面影響,並使網路處於次優狀態。為了防止這種情況,大多數執行Cisco IOS軟體的Catalyst交換器都有一個名為BPDU防護的功能。如果埠或介面收到BPDU,BPDU防護會禁用配置了PortFast的埠或介面。
如需更多有關在執行Cisco IOS軟體的交換器上使用BPDU防護功能的資訊,請參閱瞭解跨距樹狀目錄PortFast BPDU防護增強功能的檔案。
max-age引數的積極值和轉發延遲會導致非常不穩定的STP拓撲。在這種情況下,丟失某些BPDU可能會導致環路。另一個不為人所知的問題與橋樑網路的直徑有關。STP計時器的保守預設值強制實施的最大網路直徑為7。此最大網路直徑限制網路中網橋之間的距離。在這種情況下,兩個不同的網橋之間的距離不能超過七跳。部分限制來自BPDU攜帶的年齡欄位。
當BPDU從根網橋向樹葉傳播時,BPDU每經過網橋,老化時間欄位就會遞增。最後,當老化時間欄位超過最大老化時間時,網橋會丟棄BPDU。如果根橋距離網路的某些網橋太遠,則可能會發生此問題。此問題會影響生成樹的收斂。
如果您計畫將STP計時器從預設值更改為其他值,請特別注意。如果試圖以此方式實現更快的再融合,則存在危險。STP計時器的更改會影響網路的直徑和STP的穩定性。您可以更改網橋優先順序以選擇根網橋,並更改埠開銷或優先順序引數以控制冗餘和負載均衡。
Cisco Catalyst軟體為您提供可以微調最重要的STP引數的宏:
Cisco IOS軟體的spanning-tree uplinkfast 指令會增加交換器優先順序,使交換器不會成為根橋接器。該命令可縮短直接上行鏈路故障後的STP收斂時間。當平台和STP模式支援時,在接入層交換機上使用此傳統功能,該交換機具有到分佈層的冗餘上行鏈路。請參閱瞭解和設定Cisco UplinkFast功能的檔案。
適用於Cisco IOS軟體的spanning-tree backbonefast指令,可以在發生間接連結失敗時縮短交換器的STP收斂時間。BackboneFast是Cisco的專有功能。請參閱瞭解和設定Catalyst交換器上的Backbone Fast檔案。
有關STP計時器和在絕對必要時對其進行調整的規則的詳細資訊,請參閱瞭解和調整生成樹協定計時器文檔。
如簡介中所述,STP是在思科產品中實施的首批功能之一。可以預期此功能非常穩定。只有與較新的功能(如EtherChannel)進行互動,才會導致STP在某些已解決的特定情況下失敗。多個不同的因素可導致軟體錯誤,並可能產生多個不同的效果。無法充分說明Bug可能引起的問題。如果忽略某些BPDU或者將阻塞埠轉換為轉發狀態,則軟體錯誤最危險的情形就是這種情況。
很遺憾,目前沒有系統化程式來排除STP故障。但是,本部分總結了一些可供您使用的操作。一般而言,本節中的大多數步驟都適用於橋接回圈的疑難排解。您可以使用更傳統的方法來識別導致連線丟失的STP其他故障。例如,您可以探索遇到問題的流量所採用的路徑。
如果您有來自Cisco裝置的show tech-support命令輸出,可以使用Cisco CLI Analyzer。
附註:只有註冊思科使用者才能訪問內部思科工具和資訊。
排除橋接環路故障之前,至少需要瞭解以下專案:
網橋網路的拓撲
根網橋的位置
阻塞埠和冗餘鏈路的位置
至少出於以下兩個原因,這種知識是必不可少的:
為了瞭解要在網路中修復什麼問題,您需要瞭解網路正常工作時的外觀。
進行故障排除的大部分步驟只是使用show命令嘗試識別錯誤情況。瞭解網路有助於您專注於關鍵裝置上的關鍵埠。
過去,廣播風暴可能對網路造成災難性的影響。如今,由於高速鏈路和裝置可在硬體級別提供交換,一台主機(如伺服器)不太可能通過廣播中斷網路。識別橋接回圈的最佳方式是擷取飽和連結上的流量,並檢查是否多次看到類似封包。但是,實際上,如果某個網橋域中的所有使用者同時存在連線問題,則您可能已經懷疑存在橋接環路。
檢查裝置上的埠利用率並查詢異常值。請參閱本檔案的檢查連線埠利用率一節。
橋接環路會對網橋網路造成極其嚴重的後果。管理員通常沒有時間查詢環路的原因,因而希望儘快恢復連線。為了停止活動環路,請使用控制檯或帶外訪問一次禁用一條可疑冗餘路徑,並在每次更改後驗證連線。避免禁用為網段提供唯一管理或轉發路徑的鏈路。如果可以確定網路受影響最大的部分,則開始禁用此區域中的埠。或者,如果可能,最初會停用可封鎖的連線埠。每次禁用埠時,請檢查網路中是否已恢復連線。通過確定哪個已禁用的埠停止環路,還可以確定此埠所在的冗餘路徑。如果此埠已被阻止,您可能會找到出現故障的鏈路。
如果您無法準確確定問題的來源,或者問題是暫時的,請在發生故障的網路中的網橋和交換機上啟用STP事件記錄。如果要限制要配置的裝置數量,至少要在承載阻塞埠的裝置上啟用此日誌記錄;阻塞埠的轉換會形成環路。
注意:Debug命令可以在橋接環路期間新增控制平面負載。僅通過控制檯或帶外訪問運行它們,監控CPU使用率,並在資料收集後禁用調試。
運行debug spanning-tree events EXEC命令以啟用STP事件調試。配置logging buffered以捕獲日誌記錄緩衝區中的消息。
您還可以嘗試將調試輸出傳送到系統日誌裝置。遺憾的是,發生橋接環路時,很少會保持與syslog伺服器的連線。
首先要調查的關鍵埠是阻塞埠。本節提供在不同的連線埠上應尋找的內容的清單,以及針對執行Cisco IOS軟體的交換器所發出的命令的簡短說明。
特別是在阻塞埠和根埠上,檢查是否定期接收BPDU。有幾個問題會導致連線埠無法接收封包或BPDU。
Cisco IOS軟體 — 在Cisco IOS軟體版本12.0或更高版本中,show spanning-tree vlan <vlan-id> detail命令的輸出中有一個BPDU欄位。該欄位顯示每個介面接收的BPDU數。另外發出一兩次命令以確定裝置是否收到BPDU。另一種方法是使用debug spanning-tree bpdu命令啟用STP調試,以驗證BPDU的接收。
若要尋找雙工不相符的情況,您必須檢查點對點連結的各端。
Cisco IOS軟體 — 發出命show interfaces [interface-number] status令以檢查特定連線埠的速度和雙工狀態。
流量過載的介面可能無法傳輸關鍵BPDU。鏈路過載也表示可能存在橋接環路。
Cisco IOS軟體 — 使用命令show interfaces確定介面上的利用率。多個欄位可協助您進行判斷,例如load和packets input/output。如需命令輸出的說明,請參閱疑難排解交換器連線埠和介面問show interfaces題檔案。
Cisco IOS軟體 — 在show interfaces命令的輸入錯誤計數器中尋找錯誤增量。錯誤計數器包括殘幀、giants、no buffer、CRC、幀、溢位和忽略的計數。
請參閱疑難排解交換器連線埠和介面問題檔案,以瞭解 show interfaces command output.
CPU使用率高可能會對運行STA的系統造成危險。使用此方法檢查裝置的CPU資源是否充足:
Cisco IOS軟體 — 發出show processes cpu命令。檢查CPU使用率是否過高。
Supervisor Engine可以處理的不同STP例項的數量存在限制。確保不同VLAN的所有STP例項上的邏輯埠總數不超過每個Supervisor Engine型別和記憶體配置支援的最大數量。
對交換show spanning-tree summary totals器發出命令,此命令在STP Active列中顯示每個VLAN的邏輯埠或接口的數量。總數將顯示在此列的底部。總數表示不同VLAN的所有STP例項中所有邏輯埠的總和。請確保此數量不超過每個Supervisor Engine型別支援的最大數量。
(number of non-ATM trunks * number of active Vlans on that trunk) + 2*(number of ATM trunks * number of active Vlans on that trunk) + number of non-trunking ports
如需適用於Catalyst交換器的STP限制的摘要,請參閱以下檔案:
| 平台 | Cisco IOS軟體STP限制 |
|---|---|
| Catalyst 6500/6000監督器引擎720 | Cisco IOS版本12.2SXF和重建版本說明 |
| Catalyst 4500/4000 | Catalyst 4500系列交換機、Cisco IOS、12.1EW的版本說明 |
| Catalyst 3750 | Catalyst 3750交換器軟體組態設定指南,版本12.1(19)EA1 |
show interfaces
show spanning-tree
show processes cpu
debug spanning-tree
logging buffered
通常,在故障排除時無法獲得有關根位置的資訊。不要讓STP決定哪個網橋是根橋。對於每個VLAN,您通常可以確定哪台交換機最適合用作根。這取決於網路的設計。通常,選擇位於網路中間的強大網橋。如果將根網橋放在網路中心,直接連線到伺服器和路由器,通常會縮短從客戶端到伺服器和路由器的平均距離。

此圖顯示:
如果網橋B是根橋,則網橋A或網橋C上的鏈路A到C會被阻塞。在這種情況下,連線到交換機B的主機可以分兩跳訪問伺服器和路由器。連線到網橋C的主機可以分三跳訪問伺服器和路由器。平均距離為2.5跳。
如果網橋A是根橋,則在B和C上連線的兩台主機的路由器和伺服器均可通過兩跳到達。現在的平均距離為兩跳。
這個簡單示例背後的邏輯轉移到更複雜的拓撲。
規劃冗餘鏈路的組織。忘記STP的即插即用功能。調整STP開銷引數以確定阻塞哪些埠。如果具有分層設計並且根網橋處於良好位置,則通常不需要進行這種調整。
瞭解冗餘鏈路的位置有助於確定意外橋接環路及其原因。此外,您還可通過瞭解阻塞埠的位置來確定錯誤的位置。
STP採取的唯一關鍵措施是阻塞埠。錯誤地轉換到轉發狀態的單個阻塞埠可能會使網路的大部分崩潰。限制使用STP時固有的風險的一個好方法是儘可能減少阻塞埠的數量。
避免兩個交換節點之間不必要的獨立第2層路徑。當設計和平台支援EtherChannel時,將並行鏈路捆綁到EtherChannel:

分佈層交換機與兩台核心層交換機採用雙連線。在分佈層交換機上連線的使用者僅位於網路中可用的VLAN子集中。在本範例中,在Dist 2上連線的使用者都位於VLAN 2中;Dist 3僅連線VLAN 3中的使用者。預設情況下,中繼承載在VLAN中繼協定(VTP)域中定義的所有VLAN。只有Dist 2會收到VLAN 3的不必要廣播和多點傳送流量,但它也會封鎖VLAN 3的一個連線埠。結果是,核心A和核心B之間有三個備援路徑。這種冗餘導致埠阻塞較多,產生環路的可能性也較高。
VTP修剪為符合條件的VLAN減少了不必要的泛洪流量,但是明確的中繼允許VLAN配置提供了確定性的VLAN放置。請勿將VTP修剪視為從中繼允許清單中刪除未使用的VLAN的替代方法。
在本例中,只有接入VLAN用於將分佈層交換機連線到核心:

在此設計中,每個VLAN僅阻塞一個埠。此外,通過此設計,如果關閉核心A或核心B,只需一步即可刪除所有冗餘鏈路。
第3層交換意味著近似以交換速度進行路由。路由器執行兩種主要功能:
路由器構建轉發表。路由器通常通過路由協定與對等體交換資訊。
路由器接收資料包,並根據目的地址將它們轉發到正確的介面。
高端Cisco第3層交換機能夠以與第2層交換功能相同的速度執行此功能。如果引入路由躍點並建立額外的網路分段,則速度不會減慢。此圖使用修剪您不使用的VLAN一節中的示例:

現在,核心A和核心B是一些第3層交換機。VLAN 2和VLAN 3不再在核心A和核心B之間橋接,因此STP環路無法穿過該路由邊界。每個橋接VLAN中仍可能存在第2層環路。
由於依賴第3層路由協定,因此仍存在冗餘。此設計使用第3層路由實現路徑冗餘。收斂時間取決於路由協定、故障檢測機制、計時器、拓撲和平台。
STP不再阻塞任何單個埠。因此,不存在橋接環路的可能性。
速度不會減慢,因為第3層交換離開VLAN的速度與VLAN內橋接的速度一樣快。
這種設計有一個缺點。遷移至此類設計通常意味著重新設計編址方案。
即使您已成功從網路中移除所有阻塞埠,且沒有任何物理冗餘,也不要禁用STP。STP通常不是非常佔用處理器的;在大多數思科交換機中,資料包交換不涉及CPU。此外,在每條鏈路上傳送的少量BPDU不會顯著降低可用頻寬。然而,如果操作員在配線面板上出錯,則不採用STP的網橋網路可能在一小段時間內崩潰。通常,在網橋網路中禁用STP不值得冒這樣的風險。
Cisco交換機通常具有繫結到VLAN(稱為管理VLAN)的單個IP地址。在此VLAN中,交換器的行為與通用IP主機類似。管理VLAN中的廣播、多點傳送和控制平面流量可能會消耗CPU資源,具體取決於流量型別、平台、軟體版本和控制平面配置。管理VLAN上的高速廣播或組播流量可能會對CPU以及處理重要BPDU的CPU能力產生負面影響。因此,請將使用者流量放在管理VLAN之外。
在舊版本中,思科實施中無法將VLAN 1從主幹中移除。VLAN 1通常用作管理VLAN,所有交換機都可以在同一個IP子網中訪問。此設定雖然有用,但也可能很危險,因為VLAN 1上的橋接環路會影響所有中繼,從而可能導致整個網路癱瘓。當然,無論您使用哪個VLAN,都存在相同的問題。嘗試使用高速第3層交換器將橋接網域分段。
自Cisco IOS軟體版本12.1(11b)E起,您可以將VLAN 1從主幹中移除。VLAN 1 仍然存在,但它可以提高安全性並減少不必要的第2層流量。
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
5.0 |
09-Sep-2026
|
重新認證、格式化和固定連結。 |
3.0 |
09-May-2024
|
重新認證 |
2.0 |
10-Jan-2023
|
文章是在內部建立的,用於匹配當前在Cisco.com上的文章。
影象已轉換為.png格式。更新的簡介、替換文字、動詞等 |
1.0 |
05-Dec-2017
|
初始版本 |