目錄

簡介

必要條件

需求

採用元件

背景資訊

生成樹通訊協定失敗

生成樹收斂

雙工不相符

Cisco IOS軟體

單向鏈路

資料包損壞

資源錯誤

PortFast配置錯誤

STP引數調整和直徑的尷尬問題

軟體錯誤

排除故障

使用網路圖

識別橋接回圈

快速恢復連線，並準備下一時間

停用連線埠以中斷回圈

記錄託管阻塞埠的裝置的STP事件

檢查埠

檢查阻塞埠是否接收BPDU

檢查雙工是否不匹配

檢查埠利用率

檢查資料包損壞

查詢資源錯誤

禁用不必要的功能

有用的命令

Cisco IOS軟體命令

設計STP以避免故障

知道根的位置

瞭解冗餘所在的位置

最小化阻塞埠數

修剪不使用的VLAN

使用第3層交換

即使沒有必要，仍保留STP

使流量遠離管理VLAN，且整個網路中不要有單一的VLAN

相關資訊

簡介

本檔案介紹有關橋接執行Cisco IOS®軟體的Cisco Catalyst交換器的安全網路的建議。

必要條件

需求

本文件沒有特定需求。

採用元件

本文件所述內容不限於特定軟體和硬體版本。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

背景資訊

本文件討論跨距樹狀目錄通訊協定 (STP) 常見的故障原因，以及找出問題來源的相關資訊。它還顯示了可最大限度地減少生成樹相關問題並輕鬆進行故障排除的設計型別。

本文檔不討論STP的基本操作。若要瞭解STP的運作方式，請參閱以下檔案：

- 瞭解及設定 Catalyst 交換器的 STP

本文檔不討論IEEE 802.1w中定義的快速STP(RSTP)。此外，本檔案不會討論IEEE 802.1s中定義的多生成樹(MST)通訊協定。有關RSTP和MST的詳細資訊，請參閱以下文檔：

- 瞭解多生成樹通訊協定(802.1s)

- 瞭解快速生成樹通訊協定 (802.1w)

如需執行Cisco IOS軟體的Catalyst交換器的更具體的STP疑難排解檔案，請參閱對Catalyst交換器上的STP問題進行排解檔案。

生成樹通訊協定失敗

跨距樹狀目錄演演算法(STA)的主要功能是切斷冗餘連結在橋接網路中產生的回圈。STP在開放系統互聯(OSI)模型的第2層運行。STP通過在網橋之間交換的網橋協定資料單元(BPDU)，選擇最終轉發或阻止流量的埠。此通訊協定在某些特定情況下可能會失敗，並疑難排解可能會產生非常困難的情況，視網路設計而定。在此特定區域中，您可以在出現問題之前執行故障排除流程中最重要的部分。

STA中的故障通常會導致橋接環路。大多數致電思科技術支援以解決跨距樹狀目錄問題的客戶都懷疑存在錯誤，但錯誤很少會導致錯誤。即使軟體存在問題，STP環境中的橋接環路仍然來自可以阻塞但轉發流量的埠。

生成樹收斂

請參閱跨距樹狀目錄視訊，以看到說明跨距樹狀目錄最初如何收斂的範例。該示例還解釋了阻塞埠由於BPDU大量丟失而進入轉發模式導致STA故障的原因。

本文檔的其餘部分列出了可能導致STA失敗的不同情況。這些故障大多與BPDU大量丟失有關。丟失會導致阻塞埠轉換到轉發模式。

雙工不相符

點對點連結上的雙工不相符是非常常見的組態錯誤。如果手動將連結一端的雙工模式設定為全雙工，並將另一端保留自動交涉模式，則連結會以半雙工結束。（雙工模式設定為「Full」的連線埠不再交涉。）

最糟糕的情況是，傳送BPDU的橋接器在連線埠上將雙工模式設定為半雙工，但連結另一端的對等連線埠將雙工模式設定為全雙工。在上一個範例中，橋接器A和B之間的連結上的雙工不相符很容易導致橋接回圈。由於網橋B具有全雙工配置，因此它不會在鏈路接入之前執行載波偵測。即使網橋A已使用該鏈路，網橋B也會開始傳送幀。這種情況是A的問題；網橋A檢測到衝突，並在網橋嘗試再次傳輸幀之前運行回退演算法。如果從B到A的流量足夠，則A傳送的每個資料包（包括BPDU）都會發生延遲或衝突，最終會被丟棄。從STP的角度來看，由於網橋B不再從A接收BPDU，網橋B已丟失根網橋。這會導致B解除阻塞連線到網橋C的埠，從而形成環路。

每當雙工不相符時，執行Cisco IOS軟體的Catalyst交換器的交換器主控台上都會看到此錯誤訊息：

Cisco IOS軟體

%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)協定。此功能可偵測第2層上的不當纜線或單向連結，並透過停用某些連線埠來自動中斷產生的回圈。在橋接環境中儘可能運行UDLD。

如需更多有關使用UDLD的資訊，請參閱設定UDLD通訊協定功能的檔案。

資料包損壞

資料包損壞也會導致同樣型別的故障。如果鏈路的物理錯誤率很高，您可能會丟失一定數量的連續BPDU。這種丟失可能導致阻塞埠轉換到轉發狀態。您很少看到這種情況，因為STP預設引數非常保守。在轉換到轉發之前，阻塞埠需要丟失BPDU 50秒。成功傳輸單個BPDU會中斷環路。這種情況通常發生於STP引數調整不慎時。調整的示例是最大老化時間減少。

雙工不相符、纜線錯誤或纜線長度不正確都可能導致封包損毀。請參閱疑難排解交換器連線埠和介面問題檔案，以瞭解Cisco IOS軟體錯誤計數器輸出的說明。

資源錯誤

STP在軟體中實施，甚至在高端交換機上實施，這些交換機通過專用專用專用積體電路(ASIC)在硬體中執行大部分交換功能。 如果由於任何原因導致網橋的CPU使用過度，則資源可能不足以傳輸BPDU。STA通常不是處理器密集型，並且優先於其他進程。本文檔的查詢資源錯誤部分提供了有關特定平台可以處理的STP例項數的一些准則。

PortFast配置錯誤

PortFast是一種功能，通常只對連線到主機的埠或介面啟用。當該埠上的鏈路接通時，網橋會跳過STA的第一階段，直接轉換到轉發模式。

注意：不要在連線到其他交換機、集線器或路由器的交換機埠或介面上使用PortFast功能。否則，您可以建立網路回圈。

在本例中，裝置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防護增強功能的檔案。

STP引數調整和直徑的尷尬問題

max-age引數的積極值和轉發延遲會導致非常不穩定的STP拓撲。在這種情況下，丟失某些BPDU可能會導致環路。另一個不為人所知的問題與橋樑網路的直徑有關。STP計時器的保守預設值強制實施的最大網路直徑為7。此最大網路直徑限制網路中網橋之間的距離。在這種情況下，兩個不同的網橋之間的距離不能超過七跳。部分限制來自BPDU攜帶的年齡欄位。

當BPDU從根網橋向樹葉傳播時，BPDU每經過網橋，老化時間欄位就會遞增。最後，當老化時間欄位超過最大老化時間時，網橋會丟棄BPDU。如果根橋距離網路的某些網橋太遠，則可能會發生此問題。此問題會影響生成樹的收斂。

如果您計畫將STP計時器從預設值更改為其他值，請特別注意。如果嘗試通過這種方式更快地實現重新收斂，則存在危險。STP計時器的更改會影響網路的直徑和STP的穩定性。您可以更改網橋優先順序以選擇根網橋，並更改埠開銷或優先順序引數以控制冗餘和負載均衡。

Cisco Catalyst軟體為您提供可以微調最重要的STP引數的宏：

- spanning-tree vlan number root { primary | secondary }命令降低網橋優先順序，使其成為根（或備用根）。 此命令還有一個附加選項，可通過指定網路直徑來調整STP計時器。即使正確完成，計時器調整也不會顯著縮短收斂時間，並且會在網路中引入一些不穩定風險。此外，每次將裝置新增到網路時，都必須更新此類調整。保留網路工程師熟悉的保守預設值。

- 適用於Cisco IOS軟體的spanning-tree uplinkfast命令會增加交換器優先順序，使交換器不能成為根網橋。該命令可在上行鏈路出現故障時增加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事件

如果您無法準確確定問題的來源，或者問題是暫時的，請在發生故障的網路中的網橋和交換機上啟用STP事件記錄。如果要限制要配置的裝置數量，至少要在承載阻塞埠的裝置上啟用此日誌記錄；阻塞埠的轉換會形成環路。

- Cisco IOS軟體 — 發出exec命令以啟debug spanning-tree events用STP調試資訊。發出general config mode命令，logging buffered在裝置緩衝區中擷取此偵錯資訊。

您還可以嘗試將調試輸出傳送到系統日誌裝置。遺憾的是，發生橋接環路時，很少會保持與syslog伺服器的連線。

檢查埠

首先要調查的關鍵埠是阻塞埠。本節提供在不同的連線埠上應尋找的內容的清單，以及針對執行Cisco IOS軟體的交換器所發出的命令的簡短說明。

檢查阻塞埠是否接收BPDU

特別是在阻塞埠和根埠上，檢查是否定期接收BPDU。有幾個問題會導致連線埠無法接收封包或BPDU。

- Cisco IOS軟體 — 在Cisco IOS軟體版本12.0或更高版本中，命令輸show spanning-tree vlan

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

禁用不必要的功能

進行故障排除時，您會嘗試確定網路中當前出現的問題。禁用儘可能多的功能。此停用可簡化網路架構，並簡化問題辨識。例如，EtherChannel是一種要求STP將多個不同鏈路邏輯捆綁為單個鏈路的功能；在故障排除過程中禁用此功能很有意義。通常，儘可能簡化配置會使問題的故障排除過程更加簡單。

有用的命令

Cisco IOS軟體命令

- show interfaces

- show spanning-tree

- show bridge

- show processes cpu

- debug spanning-tree

- logging buffered

設計STP以避免故障

知道根的位置

通常，在故障排除時無法獲得有關根位置的資訊。不要讓STP決定哪個網橋是根橋。對於每個VLAN，您通常可以確定哪台交換機最適合用作根。這取決於網路的設計。通常，選擇位於網路中間的強大網橋。如果將根網橋放在網路中心，直接連線到伺服器和路由器，通常會縮短從客戶端到伺服器和路由器的平均距離。

此圖顯示：

- 如果網橋B是根橋，則網橋A或網橋C上的鏈路A到C會被阻塞。在這種情況下，連線到交換機B的主機可以分兩跳訪問伺服器和路由器。連線到網橋C的主機可以分三跳訪問伺服器和路由器。平均距離為2.5跳。

- 如果網橋A是根橋，則在B和C上連線的兩台主機的路由器和伺服器均可通過兩跳到達。現在的平均距離為兩跳。

這個簡單示例背後的邏輯轉移到更複雜的拓撲。

附註：對於每個VLAN，對根網橋和備用根網橋進行硬編碼，並減小STP優先順序引數的值。或者可以使用set spantree root宏。

瞭解冗餘所在的位置

規劃冗餘鏈路的組織。忘記STP的即插即用功能。調整STP開銷引數以確定阻塞哪些埠。如果具有分層設計並且根網橋處於良好位置，則通常不需要進行這種調整。

附註：對於每個VLAN，瞭解穩定網路中哪些埠可能被阻塞。請繪製網路圖，清楚地顯示網路中阻塞埠中斷環路的每個物理環路。

瞭解冗餘鏈路的位置有助於確定意外橋接環路及其原因。此外，您還可通過瞭解阻塞埠的位置來確定錯誤的位置。

最小化阻塞埠數

STP採取的唯一關鍵措施是阻塞埠。錯誤地轉換到轉發狀態的單個阻塞埠可能會使網路的大部分崩潰。限制使用STP時固有的風險的一個好方法是儘可能減少阻塞埠的數量。

修剪不使用的VLAN

網橋網路中的兩個節點之間不需要超過兩條冗餘鏈路。但是，這種配置很常見：

分佈層交換機與兩台核心層交換機採用雙連線。在分佈層交換機上連線的使用者僅位於網路中可用的VLAN子集中。在本範例中，在Dist 2上連線的使用者都位於VLAN 2中；Dist 3僅連線VLAN 3中的使用者。預設情況下，中繼承載在VLAN中繼協定(VTP)域中定義的所有VLAN。只有Dist 2會收到VLAN 3的不必要廣播和多點傳送流量，但它也會封鎖VLAN 3的一個連線埠。結果是，核心A和核心B之間有三個備援路徑。這種冗餘導致埠阻塞較多，產生環路的可能性也較高。

附註：修剪不需要的任何VLAN，使其脫離中繼。

VTP修剪會有所幫助，但是這種即插即用功能在網路的核心中並不必要。

在本例中，只有接入VLAN用於將分佈層交換機連線到核心：

在此設計中，每個VLAN僅阻塞一個埠。此外，通過此設計，如果關閉核心A或核心B，只需一步即可刪除所有冗餘鏈路。

使用第3層交換

第3層交換意味著近似以交換速度進行路由。路由器執行兩種主要功能：

- 路由器構建轉發表。路由器通常通過路由協定與對等體交換資訊。

- 路由器接收資料包，並根據目的地址將它們轉發到正確的介面。

高端Cisco第3層交換機能夠以與第2層交換功能相同的速度執行此功能。如果引入路由躍點並建立額外的網路分段，則速度不會減慢。此圖使用修剪您不使用的VLAN一節中的示例：

現在，核心A和核心B是一些第3層交換機。VLAN 2和VLAN 3不再在核心A和核心B之間橋接，因此不可能存在STP環路。

- 由於依賴第3層路由協定，因此仍存在冗餘。該設計可確保實現比STP更快的重新融合。

- STP不再阻塞任何單個埠。因此，不存在橋接環路的可能性。

- 速度不會減慢，因為第3層交換離開VLAN的速度與VLAN內橋接的速度一樣快。

這種設計有一個缺點。遷移至此類設計通常意味著重新設計編址方案。

即使沒有必要，仍保留STP

即使您已成功從網路中移除所有阻塞埠，且沒有任何物理冗餘，也不要禁用STP。STP通常不是非常佔用處理器的；在大多數思科交換機中，資料包交換不涉及CPU。此外，在每條鏈路上傳送的少量BPDU不會顯著降低可用頻寬。然而，如果操作員在配線面板上出錯，則不採用STP的網橋網路可能在一小段時間內崩潰。通常，在網橋網路中禁用STP不值得冒這樣的風險。

使流量遠離管理VLAN，且整個網路中不要有單一的VLAN

Cisco交換機通常具有繫結到VLAN（稱為管理VLAN）的單個IP地址。在此VLAN中，交換器的行為與通用IP主機類似。具體來說，每個廣播或組播資料包都會轉發到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仍然存在，但它阻塞了流量，防止出現任何環路。

相關資訊

- 思科支援工具目錄

- 思科技術支援與下載