简介
本文档介绍如何对两个生成树协议(STP)不一致问题(端口VLAN ID (PVID)和类型)进行故障排除。
先决条件
要求
Cisco建议您应具备STP概念知识。
使用的组件
本文档不限于特定的软件或硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
背景信息
在第 2 层 (L2) 网络中,任何两台设备之间只能有一个路径。可检测并阻塞冗余路径从而避免转发环路的生成树协议 (STP) 支持冗余。某些配置错误可能会导致 STP 故障并造成网络中断。为防止停机,我们实施了一些增强功能,以便STP能够检测某些错误配置案例,并将相关端口置于“不一致”状态。
STP 不一致分为以下几种不同的类型:
-
环路不一致 - 由环路防护功能检测出。有关详细信息,请参阅使用环路防护和BPDU迟滞检测配置STP。
-
根不一致 - 由根防护功能检测出。有关详细信息,请参阅使用根防护增强生成树协议。
-
EtherChannel 不一致 - 由 EtherChannel 一致性检测功能检测出。有关详细信息,请参阅了解 EtherChannel 不一致检测。
-
端口VLAN ID (PVID)不一致- 在与其来源不同的VLAN上接收每VLAN生成树(PVST+)网桥协议数据单元(BPDU):(端口VLAN ID 不匹配或*PVID_Inc)。
-
类型不一致- PVST+ BPDU在非802.1Q中继上接收。
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发送到带有相应IEEE 802.1Q VLAN标记的PVST+ MAC地址(也称为共享生成树协议(SSTP) MAC地址0100.0ccc.cccd)。
如果 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 云类似于通向 PVST+ VLAN(而不是 1)的“线”。
要使 STP 正常运行,在将 PVST+ 网桥连接至 IEEE 802.1D 或 802.1Q 网桥时需要遵循某些规则。主要规则是:PVST+ 网桥必须通过 IEEE 802.1Q 中继和一致本地 VLAN 连接至 IEEE 802.1D 或 802.1Q 网桥,该本地 VLAN 位于连接至 IEEE 802.1Q 或 802.1D 网桥云的所有网桥上。
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 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和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.
相关信息