简介
本文档介绍如何对两个生成树协议(STP)不一致问题(端口VLAN ID(PVID)和类型)进行故障排除。
先决条件
要求
Cisco建议您了解STP概念。
使用的组件
本文档不限于特定的软件或硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
在第 2 层 (L2) 网络中,任何两台设备之间只能有一个路径。生成树协议(STP)支持冗余,它可以检测并阻止冗余路径,从而避免转发环路。某些配置错误可能导致STP故障并引起网络中断。为防止停机,实施了一些增强功能,以便STP检测某些配置错误的情况,并将相关端口置于不一致状态。
STP 不一致分为以下几种不同的类型:
-
环路不一致 - 由环路防护功能检测出。有关详细信息,请参阅使用环路防护和BPDU迟滞检测配置STP。
-
根不一致 - 由根防护功能检测出。有关详细信息,请参阅使用根防护增强生成树协议。
-
EtherChannel 不一致 - 由 EtherChannel 一致性检测功能检测出。有关详细信息,请参阅了解 EtherChannel 不一致检测。
-
Port VLAN ID (PVID) 不一致 - 在与其来源不同的 VLAN 上接收到 Per VLAN spanning tree (PVST+) 网桥协议数据单元 (BPDU):(Port VLAN ID Mismatch 或 *PVID_Inc)。
-
类型不一致 — 在非802.1Q中继上收到PVST+ BPDU。
PVID 和类型不一致理论
Cisco Catalyst交换机使用交换机间链路(ISL)中继实施PVST。在 IEEE 802.1Q 和 ISL 中继的支持下,需要一种方法在所有 VLAN 的 PVST 和单个生成树的 IEEE 802.1Q 概念之间进行互操作。PVST+ 功能可满足此要求。
注意:从 STP 的角度来看,IEEE 802.1D 无法感知 VLAN,而 IEEE 802.1Q 可感知 VLAN,但是它针对所有 VLAN 使用单个 STP 实例。换言之,如果端口处于阻塞状态,则该端口上的所有 VLAN 均处于阻塞状态。
对于转发而言也是如此。
下表显示了 PVST+ 如何与 IEEE 802.1Q 或 IEEE 802.1D 进行互操作,如果 IEEE 802.1Q 中继上的本地 VLAN 是 VLAN 1:
-
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 中继上的本地 VLAN 不是 VLAN 1:
-
VLAN 1 STP BPDU 标记为相应的 IEEE 802.1Q VLAN 标记,并发送至 PVST+ MAC 地址。
-
VLAN 1 STP BPDU 以未标记状态发送至 IEEE 802.1Q 中继的本地 VLAN 上的 IEEE STP MAC 地址。
-
非 VLAN 1 STP BPDU 标记为相应的 IEEE 802.1Q VLAN 标记,并发送至 PVST+ MAC 地址。
注意:本地 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 包含可使 PVST+ 网桥检测是否遵循上一个规则的 VLAN 编号。当Catalyst交换机检测到错误配置时,相应的端口将处于PVID不一致或类型不一致状态,这将有效阻止相应端口上相应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 仅运行一个与 PVST+ 的 VLAN 1 STP 合并的 STP。
因此存在转发环路。幸运的是,交换机A将VLAN 2的PVST+ BPDU(发送到交换机B泛洪的SSTP地址)发送到交换机C。交换机C可将端口C-B置于类型不一致状态,从而防止环路。
注意:在某些命令输出中,*-inconsistent STP状态称为中断。
检测到 STP 不一致时,交换机将发送以下 syslog 消息:
%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 的源。检测到不一致时,两个 VLAN 同时在接收 BPDU 的端口受阻.
注意:消息可能因使用的Cisco IOS®软件版本的类型和版本而异。
请注意,如果端口不再接收不一致BPDU,则会清除*-inconsistent状态,并且STP会根据正常STP操作更改端口状态。此时将发送指示更改的 syslog 消息:
%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调试命令部分。
以下为显示所接收的 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和6000)。 对于其他Catalyst交换机,可以检查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.
相关信息