簡介
本文描述有關橋接運行Cisco IOS®軟體的Cisco Catalyst交換機以實施安全網路的建議。
必要條件
需求
本文件沒有特定需求。
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
本文件討論跨距樹狀目錄通訊協定 (STP) 常見的故障原因,以及找出問題來源的相關資訊。此外,還介紹了可最大限度地減少生成樹相關問題並易於進行故障排除的設計。
本文檔不討論STP的基本操作。要瞭解STP的工作方式,請參閱以下文檔:
本文檔不討論IEEE 802.1w中定義的快速STP (RSTP)。此外,本檔案不會討論IEEE 802.1s中定義的多重跨距樹狀目錄(MST)通訊協定。有關RSTP和MST的詳細資訊,請參閱以下文檔:
有關適用於運行Cisco IOS軟體的Catalyst交換機的更具體的STP故障排除文檔,請參考文檔排除Catalyst交換機上的STP問題。
生成樹通訊協定失敗
生成樹演算法(STA)的主要功能是切斷冗餘鏈路在網橋網路中產生的環路。STP在開放式系統互聯(OSI)模型的第2層運行。STP透過在網橋之間交換的網橋協定資料單元(BPDU),選擇最終轉發或阻塞流量的埠。此協定在某些特定情況下可能會失敗,並且排除結果非常困難的情況,具體取決於網路的設計。在此特定區域中,您可以在問題發生之前執行故障排除過程中最重要的部分。
STA中的故障通常會導致橋接環路。致電Cisco技術支援詢問生成樹問題的大多數客戶都懷疑有Bug,但原因從來都不是Bug。即使軟體有問題,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之間的鏈路是單向的。當鏈路將流量從A傳輸到A時,鏈路將丟棄從A到B的流量。假設網橋B在鏈路變為單向之前阻塞。但是,如果埠從具有更高優先順序的網橋接收BPDU,則它只能阻塞。在本例中,來自A的所有BPDU都會丟失,因此網橋B最終會將其埠向A轉換到轉發狀態並轉發流量。這樣會建立回圈。如果啟動時存在此故障,則STP無法正確收斂。在雙工不相符的情況下,重新開機暫時有效;但在此情況下,重新開機絕對無效。
為了在建立轉發環路之前檢測單向鏈路,Cisco設計並實現了單向鏈路檢測(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引數調整和直徑問題很棘手
最大老化時間引數和轉發延遲的主動值會導致非常不穩定的STP拓撲。在這種情況下,丟失某些BPDU會導致出現環路。另一個不為人所知的問題與網橋網路的直徑有關。STP計時器的保守預設值將最大網路直徑強加為7。此最大網路直徑限制網路中網橋之間可以相距多遠。在這種情況下,兩個不同網橋之間的距離不能超過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,並可能產生許多不同的效果。無法充分描述Bug可能引起的問題。如果忽略某些BPDU,或者將阻塞埠轉換為轉發,則會出現軟體錯誤導致的最危險情況。
排除故障
遺憾的是,沒有用於排除STP問題的系統過程。不過,本節將總結一些可供您使用的動作。本部分中的大部分步驟一般適用於橋接環路故障排除。您可以使用更傳統的方法來確定導致連線丟失的STP的其他故障。例如,您可以探索遇到問題的流量採用的路徑。
注意:這些故障排除步驟中的大部分假定連線到網橋網路的不同裝置。此連線意味著您可以訪問控制檯。例如,在橋接環路期間,您可能無法進行遠端連線。
如果您有來自Cisco裝置的 show tech-support 命令的輸出,則可以使用思科CLI分析器。
附註:只有完成註冊的思科使用者有權存取思科內部工具與資訊。
使用網路圖
排除橋接環路故障之前,您至少需要瞭解以下事項:
-
網橋網路的拓撲
-
根網橋的位置
-
阻塞埠和冗餘鏈路的位置
這一知識至關重要,原因至少有兩個:
-
要瞭解網路中要修復什麼,您需要瞭解網路在正常運行時是什麼樣子的。
-
大多數故障排除步驟都僅僅使用 show 命令嘗試找出錯誤情況。瞭解網路有助於您專注於關鍵裝置上的關鍵埠。
辨識橋接環路
過去,廣播風暴可能對網路造成災難性影響。如今,高速鏈路和裝置在硬體級別提供交換功能,因此一台主機(例如伺服器)不太可能透過廣播中斷網路。辨識橋接環路的最佳方法是捕獲飽和鏈路上的流量,並檢查是否多次看到類似的資料包。但實際上,如果某個網橋域中的所有使用者同時出現連線問題,您就可以懷疑存在橋接環路。
檢查裝置上的埠利用率並查詢異常值。請參閱本文檔的檢查埠利用率部分。
快速恢復連線,並準備好迎接新時代
停用連線埠以中斷回圈
橋接環路會對網橋網路造成極其嚴重的後果。管理員通常沒有時間查詢環路的原因,希望儘快恢復連線。在這種情況下,最簡單的方法就是手動停用網路中提供冗餘的每個埠。如果您可以確定受影響最大的網路部分,則開始停用此區域中的埠。或者,如果可能,首先停用可能阻塞的埠。每次停用連線埠時,請檢查是否已還原網路連線。 透過確定哪個停用的埠停止環路,還可以確定此埠所在的冗餘路徑。如果此埠被阻塞,您可能會找到出現故障的鏈路。
記錄託管阻塞埠的裝置上的STP事件
如果無法準確辨識問題的來源,或者如果問題是暫時的,請在發生故障的網路網橋和交換機上啟用STP事件記錄。如果要限制要配置的裝置數量,請至少對託管阻塞埠的裝置啟用此日誌記錄;阻塞埠的轉換會導致環路。
-
Cisco IOS軟體-發出exec命令 debug spanning-tree events 以啟用STP調試資訊。發出常規配置模式命令 logging buffered 以在裝置緩衝區中捕獲此調試資訊。
您還可以嘗試將調試輸出傳送到系統日誌裝置。遺憾的是,發生橋接環路時,您很少能保持與syslog伺服器的連線。
檢查連線埠
首先要調查的關鍵埠是阻塞埠。本部分列出了在不同埠上查詢的內容,並簡要說明了為運行Cisco IOS軟體的交換機發出的命令。
檢查阻塞埠是否接收BPDU
特別是在阻塞埠和根埠上,檢查是否定期接收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 命令的input errors計數器中的錯誤增量。錯誤計數器包括runts、giants、no buffer、CRC、frame、overrun和ignored 計數。
請參考文檔排除交換機埠和介面問題,其中解釋了 show interfaces command output.
查詢資源錯誤
CPU使用率高可能會對運行STA的系統造成危險。使用此方法檢查裝置的CPU資源是否充足:
-
Cisco IOS軟體—發出show processes cpu命令。檢查CPU使用率是否過高。
Supervisor引擎可以處理的不同STP例項的數量存在限制。確保不同VLAN的所有STP例項上的邏輯埠總數不超過每個Supervisor引擎型別和記憶體配置支援的最大數量。
對交換機發出show spanning-tree summary totals 命令,此命令在STP Active列中顯示每個VLAN的邏輯埠或介面的數量。總計會出現在此欄的底部。總數表示不同VLAN的所有STP例項中所有邏輯埠的總和。確保此數量不超過每個Supervisor引擎型別支援的最大數量。
注意:計算交換機上邏輯埠總和的公式為:
(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限制的摘要,請參閱以下文檔:
停用不必要的功能
在排除故障時,您會嘗試確定網路中當前出現的問題。停用儘可能多的功能。停用功能有助於簡化網路結構並易於辨識問題。例如,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的主機可以分三跳訪問伺服器和路由器。平均距離是兩跳半。
-
如果網橋A是根網橋,則在B和C上連線的兩台主機的路由器和伺服器都可以在兩跳中訪問。現在的平均距離是兩跳。
這個簡單示例背後的邏輯轉移到更複雜的拓撲中。
注意:對於每個VLAN,對根網橋和備用根網橋進行硬編碼,減小STP priority引數的值。或者,您可以使用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僅阻塞一個埠。此外,使用此設計時,如果關閉Core A或Core B,只需一個步驟即可刪除所有冗餘鏈路。
使用第3層交換
第3層交換意味著路由大約以交換速度進行。路由器主要執行兩種功能:
-
路由器會構建轉發表。路由器通常透過路由協定與對等體交換資訊。
-
路由器接收資料包,並根據目的地址將它們轉發到正確的介面。
高端Cisco第3層交換機能夠以與第2層交換功能相同的速度執行此功能。如果引入路由躍點並建立額外的網路分段,則不會出現速度損失。此圖使用修剪不使用的VLAN部分中的示例作為基礎:
Core A和Core 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的單個IP地址,VLAN稱為管理VLAN。在此VLAN中,交換機的行為與通用IP主機類似。具體來說,每個廣播或組播資料包都會轉發到CPU。管理VLAN上的廣播或組播資料流速率高可能會對CPU以及處理關鍵BPDU的CPU能力造成負面影響。因此,請將使用者流量放在管理VLAN之外。
在舊版本中,在Cisco實施中無法從TRUNK中刪除VLAN 1。VLAN 1通常用作管理VLAN,所有交換機均可在同一個IP子網中訪問。此設定雖然有用,但也可能很危險,因為VLAN 1上的橋接環路會影響所有中繼,從而會中斷整個網路。當然,無論使用哪個VLAN,都存在相同的問題。嘗試使用高速第3層交換機對橋接域進行分段。
從Cisco IOS軟體版本12.1(11b)E起,您可以將VLAN 1從主幹中移除。VLAN 1仍然存在,但它會阻塞流量,從而防止出現任何環路。
相關資訊