簡介
本檔案介紹如何排解兩個跨距樹狀目錄通訊協定(STP)不一致問題、連線埠VLAN ID(PVID)和型別的疑難問題。
必要條件
需求
思科建議您瞭解STP概念。
採用元件
本檔案所述內容不限於特定軟體或硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
背景資訊
在第 2 層 (L2) 網路中,任兩個裝置之間只能有一條路徑。跨距樹狀目錄通訊協定 (STP) 支援備援,可偵測和封鎖備援路徑,因此可避免轉送迴圈。某些設定錯誤可能會導致 STP 故障,造成網路中斷。為防止停機,實施了一些增強功能,以便STP能夠檢測某些配置錯誤的情況,並將相關埠置於「不一致」狀態。
STP不一致可能有不同型別:
-
環路不一致(Loop inconsistency) — 「環路防護」(Loop Guard)功能檢測到這種情況。有關詳細資訊,請參閱使用環路防護和BPDU遲滯檢測配置STP。
-
Root inconsistency — 根防護功能檢測到這種情況。如需詳細資訊,請參閱使用根防護增強跨距樹狀目錄通訊協定。
-
EtherChannel inconsistency — 這是EtherChannel一致性檢測功能檢測到的。如需詳細資訊,請參閱瞭解EtherChannel不一致偵測。
-
埠VLAN ID(PVID)不一致 — 每個VLAN生成樹(PVST+)橋接協定資料單元(BPDU)接收於與源地址不同的VLAN上:(埠VLAN ID 不匹配*PVID_Inc)。
-
類型不一致—PVST+ BPDU 係在非 802.1Q trunk 上接收。
PVID和型別不一致背後的理論
Cisco Catalyst交換器實作使用交換器間連結(Inter-Switch Link,ISL)中繼的PVST。藉助IEEE 802.1Q和ISL中繼的支援,需要一種方法來實現所有VLAN的PVST和IEEE 802.1Q單生成樹概念之間的互操作。為滿足此要求引入了PVST+功能。
註:從STP的角度來看,IEEE 802.1D不支援VLAN,而IEEE 802.1Q支援VLAN,但它為所有VLAN使用單個STP例項。也就是說,如果埠阻塞,那麼該埠上的所有VLAN都將阻塞。
轉發也是如此。
此清單顯示如果IEEE 802.1Q中繼上的本徵VLAN是VLAN 1,PVST+如何與IEEE 802.1Q或IEEE 802.1D互操作:
-
VLAN 1 STP BPDU會以未標籤的方式傳送到IEEE STP MAC地址(0180.c200.0000)。
-
VLAN 1 STP BPDU還被傳送到PVST+ MAC地址,未標籤。
-
非VLAN 1 STP BPDU會傳送到PVST+ MAC位址(也稱為共用跨距樹狀目錄通訊協定(SSTP)MAC位址0100.0ccc.ccd),並使用對應的IEEE 802.1Q VLAN標籤進行標籤。
如果IEEE 802.1Q TRUNK上的本徵VLAN不是VLAN 1:
-
VLAN 1 STP BPDU被傳送到PVST+ MAC地址,使用相應的IEEE 802.1Q VLAN標籤進行標籤。
-
VLAN 1 STP BPDU還以未標籤的方式傳送到IEEE 802.1Q中繼的本徵VLAN上的IEEE STP MAC地址。
-
非VLAN 1 STP BPDU被傳送到PVST+ MAC地址,並使用相應的IEEE 802.1Q VLAN標籤進行標籤。
附註:原生 VLAN STP BPDU 會以未標記方式傳送。
這樣,PVST+的VLAN 1 STP會與IEEE 802.1D或802.1Q的STP合併,而其他VLAN則通過IEEE 802.1D或802.1Q網橋的雲進行隧道傳輸。例如,IEEE 802.1D或802.1Q雲看起來類似於1以外的PVST+ VLAN的「線」。
為使STP正常運行,將PVST+網橋連線到IEEE 802.1D或802.1Q網橋時,請遵守某些規則。主要規則是,PVST+網橋必須通過IEEE 802.1Q中繼連線到IEEE 802.1D或802.1Q網橋,該中繼在連線到IEEE 802.1Q或802.1D網橋的雲的所有網橋上都具有一致的本地VLAN。
PVST+ BPDU包含一個VLAN編號,允許PVST+網橋檢測是否不遵循以前的規則。當Catalyst交換器偵測到組態錯誤時,對應的連線埠會進入「PVID-inconsistent」或「type-inconsistent」狀態,這實際上會封鎖對應連線埠上相應VLAN中的流量。這些狀態可防止因配置錯誤或佈線錯誤而導致的轉發環路。
為了說明對不一致性檢測的需求,請考慮以下拓撲:交換機A和C運行PVST+ STP,交換機B運行802.1Q STP:

如果VLAN 1中根的BPDU優於VLAN 2中根的BPDU,則VLAN 2拓撲中沒有阻塞埠。VLAN 2的BPDU不會在拓撲周圍形成「整圈」;它將由B-C鏈路上的VLAN 1 BPDU取代,因為B只運行一個STP與PVST+的VLAN 1 STP合併。因此,存在轉發環路。幸運的是,交換機A將VLAN 2的PVST+ BPDU(傳送到交換機B泛洪的SSTP地址)傳送到交換機C。交換機C可將埠C-B置於型別不一致狀態,從而防止環路。
附註:在部分指令輸出中,*-inconsistent STP 狀態稱為「中斷」。
檢測到STP不一致時,交換機將傳送以下系統日誌消息:
%SPANTREE-2-RECV_1Q_NON_TRUNK: Received IEEE 802.1Q BPDU on non trunk
FastEthernet0/1 on vlan 1.
%SPANTREE-2-BLOCK_PORT_TYPE: Blocking FastEthernet0/1 on vlan 1.
Inconsistent port type.
%SPANTREE-2-RX_1QPVIDERR: Rcved pvid_inc BPDU on 1Q port 3/25 vlan 1
%SPANTREE-2-RX_BLKPORTPVID: Block 3/25 on rcving vlan 1 for inc peer vlan 10
%SPANTREE-2-TX_BLKPORTPVID: Block 3/25 on xmtting vlan 10 for inc peer vlan
在該示例中,VLAN 1是接收BPDU的位置,VLAN 10是產生BPDU的位置。當檢測到不一致時,在接收此BPDU的連線埠上兩個VLAN都會被阻止。
註:消息因使用的Cisco IOS®軟體版本的型別和版本而異。
請注意,如果埠不再收到不一致的BPDU,則會清除*-inconsistent狀態,並且STP會根據正常STP操作更改埠狀態。系統傳送系統日誌消息以指示更改:
%SPANTREE-SP-2-UNBLOCK_CONSIST_PORT: Unblocking FastEthernet0/1 on vlan 1.
Port consistency restored.
有關PVST+操作的詳細資訊,請參閱從PVST+到快速PVST的生成樹遷移配置示例。
疑難排解
要檢視不一致埠的清單,最近基於Cisco IOS的STP實施支援show spanning-tree inconsistentports 命令。
在大多數情況下,檢測埠STP不一致的原因顯而易見:

在此案例中,橋接器A上的存取連線埠從橋接器B收到來自VLAN(而不是1)的STP的已標籤PVST+ BPDU。A上的連線埠可能會進入型別不一致的狀態。
註:交換機無需直接連線;如果它們通過一台或多台IEEE 802.1D或IEEE 802.1Q交換機(甚至集線器)連線,則效果相同。

在此案例中,A上的主干連線埠收到來自VLAN 2的STP且標籤為VLAN 2的PVST+ BPDU。這會觸發A上的連線埠在VLAN 1和VLAN 2中被封鎖。
如果點對點連結兩端的裝置是Cisco Catalyst交換器,則檢查本地和遠端連線埠組態時,通常會發現組態不相符的情況:
在這些情況下,修復配置不匹配以解決STP不一致問題。
在某些情況下,更難以確定原因:

在本示例中,交換機B配置錯誤,將SSTP BPDU注入雲。這會導致交換器A、C和D上的連線埠變得型別不一致。問題在於,產生「有害」BPDU的裝置沒有直接連線到受影響的交換機。因此,由於中繼上有許多裝置,因此對所有這些裝置進行故障排除會耗費時間。
幸運的是,有系統方法可以解決此問題:
-
建立BPDU的源MAC地址和傳送網橋ID。必須在發生問題時執行此操作
-
查詢導致「衝突」BPDU的網橋。這可以在稍後執行,不必在問題發生時執行。
對於步驟1,通常有兩個選項:使用資料包分析器或啟用調試以檢視收到的BPDU的轉儲。
有關使用debug轉儲STP BPDU的詳細資訊,請參閱排除Catalyst交換機上的STP問題的使用STP Debug命令部分。
以下是顯示已接收BPDU的偵錯輸出範例:
*Mar 14 19:33:27: STP SW: PROC RX: 0100.0ccc.cccd<-0030.9617.4f08 type/len 0032
*Mar 14 19:33:27: encap SNAP linktype sstp vlan 10 len 64 on v10 Fa0/14
*Mar 14 19:33:27: AA AA 03 00000C 010B SSTP
*Mar 14 19:33:27: CFG P:0000 V:00 T:00 F:00 R:8000 0050.0f2d.4000 00000000
*Mar 14 19:33:27: B:8000 0050.0f2d.4000 80.99 A:0000 M:1400 H:0200 F:0F00
*Mar 14 19:33:27: T:0000 L:0002 D:0001
一旦您知道源MAC地址和傳送網橋ID,您需要找到此MAC地址所屬的裝置。由於交換機通常不會從BPDU幀中獲知源的MAC地址,因此情況會變得複雜。如果您發出show mac-address-table addressBPDU_mac_address 命令(對於基於Cisco IOS的交換機),則通常不會找到任何條目。
查詢「有害」MAC地址的一種方法是從連線到雲的所有交換機收集show spanning-tree命令的輸出。這些命令輸出包括有關每個網橋的網橋ID的資訊。
Boris#show spanning-tree
!--- Use with Cisco IOS.
VLAN0001
Spanning tree enabled protocol rstp
Root ID Priority 0
Address 0007.4f1c.e847
Cost 131
Port 136 (GigabitEthernet3/8)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 00d0.003f.8800
!--- Output suppressed.
註:根據型號、軟體版本和配置,交換機可以有多個網橋ID MAC地址。幸運的是,所有地址通常都在某個範圍內(例如,從0001.1234.5600到0001.1234.5640)。如果您知道一個網橋ID MAC地址,則可以檢查傳送的網橋ID MAC地址(在步驟1中找到)是否在給定網橋ID MAC地址的範圍內。您還可以使用網路管理工具收集所有網橋的網橋ID。
找到傳送有問題的BPDU的網橋後,您需要驗證連線到雲的埠的配置:確保它與同樣連線到同一雲的其他交換機保持一致(中繼而非非中繼和本地VLAN)。
橋接器可能會傳送適當的BPDU,但隧道雲中會錯誤地修改它們。在這種情況下,您可以看到進入雲的違規BPDU與其他網橋的配置一致,但相同的BPDU在退出雲時會變得不一致(例如,BPDU退出不同VLAN中的雲,或者成為標籤或未標籤)。在這種情況下,這有助於檢查有問題的BPDU的源MAC地址是否與傳送網橋ID屬於同一網橋。如果情況並非如此,您可以嘗試找到擁有BPDU的源MAC地址的網橋,並驗證其配置。
若要尋找擁有BPDU的來源MAC位址的交換器,可以使用相同的方法(尋找橋接器ID),不同之處在於,現在會檢查show module指令輸出(適用於Catalyst 4000、5000和6000)。若是Catalyst 2900 XL、3500 XL、2950和3550,您必須檢查show interface命令的輸出以檢視屬於連線埠的MAC位址。
Cat4000-#show module
!--- Use for Catalyst 4000,5000,6000
Mod Ports Card Type Model Serial No.
----+-----+--------------------------------------+-----------------+-----------
1 2 1000BaseX (GBIC) Supervisor(active) WS-X4515 ZZZ00000001
5 14 1000BaseT (RJ45), 1000BaseX (GBIC) WS-X4412-2GB-T ZZZ00000002
M MAC addresses Hw Fw Sw Status
--+--------------------------------+---+------------+----------------+---------
1 000a.4172.ea40 to 000a.4172.ea41 1.2 12.1(12r)EW 12.1(14)E1, EARL Ok
5 0001.4230.d800 to 0001.4230.d80d 1.0 Ok
!--- Output suppressed.
cat3550#show interface | i bia
Hardware is Gigabit Ethernet, address is 0002.4b28.da80 (bia 0002.4b28.da80)
Hardware is Gigabit Ethernet, address is 0002.4b28.da83 (bia 0002.4b28.da83)
Hardware is Gigabit Ethernet, address is 0002.4b28.da86 (bia 0002.4b28.da86)
Hardware is Gigabit Ethernet, address is 0002.4b28.da88 (bia 0002.4b28.da88)
Hardware is Gigabit Ethernet, address is 0002.4b28.da89 (bia 0002.4b28.da89)
!--- Output suppressed.
相關資訊