Print

H3C V7系列交换机Dispute保护机制详细说明

2017-04-12发表

故障拓扑(图1):

故障环境(图2):

SW1、SW2、SW3互联后,SW1和SW3使能生成树协议,SW2不使能生成树协议。SW1生成树的优先级比SW2高。

SW2 G1/0/1接口配置为trunk类型,且permit vlan all;G1/0/2接口配置为trunk类型,且permit vlan all,但undo trunk permit vlan 1。

故障现象(图3):

使能生成树的SW1和SW3设备,当SW3与SW2互联后(SW1与SW2之前已与SW2互联)业务出现不通。接口角色均为指定端口(DEST),但是作为根桥的SW1接口为Discarding状态。


SW1和SW2接口故障状态:


<SW1>display stp brief
 MST ID   Port                                Role  STP State   Protection
 0        GigabitEthernet1/0/1                DESI  DISCARDING  NONE


<SW3>display stp brief
 MST ID   Port                                Role  STP State   Protection
 0        GigabitEthernet1/0/2                DESI  FORWARDING  NONE

查看被生成树阻塞端口信息:


<SW1>display stp abnormal-port
 MST ID   Blocked Port                        Reason
 0        GigabitEthernet1/0/1                Disputed //由于Dispute保护阻塞

在SW3的display logbuffer中看到如下提示:

%Apr 13 10:00:26:922 2017 H3C STP/5/STP_BPDU_RECEIVE_EXPIRY: Instance 0&#39;s port GigabitEthernet1/0/2 received no BPDU within the rcvdInfoWhile interval.
 

 

 


要解释上述的问题现象,我们需要先回顾、明确两点。

第一点:根据故障环境SW2的配置,判断SW2收发生成树BPDU协议报文情况

由于SW2不使能生成树协议,因此当SW2从SW1、SW3收到BPDU报文后,不会将此类协议报文上送本地CPU解析处理,而是由交换机芯片依照普通的二层以太网报文进行转发。

对于生成树BPDU协议报文,按照协议定义,在链路上传输时,二层报头中不会携带VLAN-Tag字段。因此SW2分别从G1/0/1接口和G1/0/2接口收到了SW1、SW3的BPDU报文后(不携带VLAN-Tag),将根据其接口的PVID=1,加入SW2交换机内部的VLAN 1中,并在VLAN 1中进行转发。

因为SW2的G1/0/2不允许VLAN 1通过(undo port trunk permit vlan 1),因此SW3无法收到SW1的BPDU报文。SW1能够收到SW3的BPDU报文(G1/0/1 port trunk permit vlan all)。

结论一:根据上述的分析,由于SW2的特殊配置,此网络存在单通情况(如图4)

第二点:根据故障拓扑,正常情况下(不存在单通)SW1和SW3接口收敛过程

SW1由于之前已经与SW2互联了,SW1为根桥,接口为forwarding状态,SW1将发送BPDU报文,Flag字段中F=1,L=1。SW3与SW2连接后,其接口立即变为discarding状态,且发送BPDU报文,Flag字段中F(Forwarding)=0,L(Learning)=0。此时SW1、SW3端口角色均为DEST(如图5)

SW3收到了SW1的BPDU报文后,经过CPU的解析发现SW1的生成树优先级高,因此将立刻发送一个新的BPDU报文,Flag字段中F=1,L=1,TC=1。

SW1在Forward Delay时间内(缺省15秒),收到了SW3发来的新的BPDU报文后,将立刻回应一个另外的BPDU报文,Flag字段中F=1,L=1,TCAck=1(原始发送的BPDU报文,Flag字段中F=1,L=1仍然继续发送)

SW3在Forward Delay时间内(缺省15秒),收到了SW1发来的“另外的BPDU报文”后,将其接口角色定义为ROOT根端口,状态为Forwarding。(如图6)

到此为止,生成树拓扑处于稳态。SW3不再发送BPDU报文,仅接收根桥SW1发来的BPDU报文。(如图7)

结论二:根据上述的分析,SW1、SW3接口收敛正常的必要条件是,SW1(根桥)能够收到SW3的BPDU报文(TC字段为1),且回应出TCAck字段为1的BPDU确认报文。SW3能够收到根桥的BPDU报文。

 

在明确了上述两个结论后,我们来观察故障环境中,SW1和SW3的BPDU协议报文交互情况。

初始情况,SW1已经与SW2互联,为根桥,不断的向网络中发送BPDU报文(Flag字段中F=1,L=1)。SW3此时还没有接入网络(还没有与SW2互联)。如图8

当SW3接入网络,与SW2互联后,接口将立即发送BPDU报文(Flag字段中F=0,L=0),接口状态此时为discarding,角色为DEST。

SW1可以且不断的收到SW3发送到网络中的BPDU报文(Flag字段中F=0,L=0),但SW1发现此BPDU报文的优先级没有SW1自己高,因此SW1将忽略该BPDU报文。

由于SW2的配置限制,SW3无法接收到SW1的BPDU报文(Flag字段中F=1,L=1),及SW3不知道网络中存在根桥SW1。因此SW3在本地Forward Delay计时器超时(缺省15秒)后,将把接口转换到Learning状态,发送BPDU报文(Flag字段中F=0,L=1)。

当SW1 G1/0/1接口收到了SW3发来BPDU报文(Flag字段中F=0,L=1),未收到正常协商时的BPDU报文(F=1,L=1,TC=1)后,将判断为下行网络存在异常,把自己G1/0/1接口状态置为discarding,且发送BPDU报文(Flag字段中F=0,L=0),这个就是Dispute保护机制产生的效果如图10

在上述的状态基础上,SW3再经过Forward Delay(缺省15秒)超时后,其G1/0/2接口状态变为forwarding状态,发送BPDU报文(Flag字段中F=1,L=1)。SW1为discarding状态,且一直保持下去。如图11

 


根据上面的分析,根桥SW1的G1/0/1之所以出现Dispute保护,总结起来就是两个字“单通”:SW3不知道SW1的存在(收不到SW1的BPDU报文),而SW1知道SW3存在且受到了SW3发来的非正常BPDU报文(Flag字段中F=0,L=1)。

知道了原因,解决方法就是打破“单通”,让SW1和SW3的BPDU报文能够被正常的相互接收,及在SW2交换机G1/0/2接口上配置port trunk permit vlan 1即可。


H3C的V5平台设备的STP按照IEEE 802.1D-2004之前的标准实现,STP协议不具有dispute保护机制。

H3C的V7平台设备按照最新的协议标准IEEE 802.1D-2004,IEEE 802.1Q-2005和IEEE 802.1Q-2011实现的,实现了一个STP的增强特性: STP端口dispute保护。