Spanning Tree BackboneFast

To close out this 3-part series on Spanning Tree convergence optimizations we’ll be diving into Spanning Tree BackboneFast. This feature allows “classic” STP 802.1D bridges to converge faster when a remote bridge loses connectivity to the root bridge, i.e. this allows faster convergence to indirect link failure.

Demo Network

To demonstrate convergence with and without BackboneFast enabled, I’m using the same 3 switch triangle from the last section of my UplinkFast article. I elected to use physical switches for this test after the UplinkFast issues I encountered in CML. 3750Top is the root bridge. 2960S does not have UplinkFast enabled anymore. The drawing below has the port numbers, root ports and blocking port noted. Any port states not mentioned here must be Designated ports.

Author note: Please stick with me and my hand drawn diagrams. I realized lately that it is rare for me to hand write anything. I decided to hand draw diagrams on my whiteboard when topologies are small, so I don’t forget how to write! What a time to be alive..

Convergence Without BackboneFast

Before we can appreciate the benefit of BackboneFast, we need to see what the default behavior is. To demonstrate, I disconnected the cable in port 15 that connects 3750Top to 3750Bottom. Because this is 3750Bs root port, 3750B assumes that it is now the root bridge, and starts sending BPDUs out of port 1 to 2960S.

2960S is still connected to the root and recognizes that it is receiving inferior BPDUs on a blocking port. 2960S must wait for the max age timer to expire before it can start transitioning its port toward 3750B to forwarding. This lab is using the default max age, 20 seconds. I had STP event debugging enabled on 2960S, show below. The debug displays 20 seconds worth of inferior BPDUs being received before transitioning to Listening, Learning, and eventually Forwarding.

*Mar  1 01:20:44.764: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:46.333: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:48.338: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:50.343: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:52.348: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:54.353: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:56.357: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:20:58.362: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:21:00.367: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
2960S#
*Mar  1 01:21:02.372: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
*Mar  1 01:21:02.766: STP: VLAN0001 Gi0/22 -> listening
2960S#
*Mar  1 01:21:03.815: STP: VLAN0001 Topology Change rcvd on Gi0/22
*Mar  1 01:21:03.815: STP: VLAN0001 sent Topology Change Notice on Gi0/21
2960S#
*Mar  1 01:21:17.774: STP: VLAN0001 Gi0/22 -> learning
2960S#
*Mar  1 01:21:32.781: STP[1]: Generating TC trap for port GigabitEthernet0/22
*Mar  1 01:21:32.781: STP: VLAN0001 sent Topology Change Notice on Gi0/21
*Mar  1 01:21:32.781: STP: VLAN0001 Gi0/22 -> forwarding
2960S#

Faster Convergence with BackboneFast

Unlike UplinkFast, BackboneFast must be enabled on all bridges in the spanning tree domain. BackboneFast allows generation and response of Root Link Query (RLQ) messages among bridges. Technically, this test should work fine without enabling the feature on 3750Bottom, but this would cause 2960S to experience default convergence delay if its root port were to fail.

3750_Top(config)#spanning-tree backbonefast
3750_Top(config)#^Z 
3750_Bottom(config)#spanning-tree backbonefast
3750_Bottom(config)#end 
2960S(config)#spanning-tree backbonefast
2960S(config)#end 

When BackBoneFast is enabled and the link between 3750Top and 3750Bottom fails (is disconnected), 3750Bottom does what it did last time, tries to declare itself the root and send 2960S inferior BPDUs. The difference is how 2960S and 3750Top react to this event. With BackboneFast, 2960S sends a Root Link Query (RLQ) request toward the root bridge, 3750Top. 3750Top responds to 2960S with an RLQ response. This ensures 2960S that the root bridge is still active and reachable. 2960S can then immediately transition its blocking port to 3750Bottom to Listening, Learning, and then Forwarding. This optimization cuts out the need to wait for max age expiration in a safe way to prevent loops.

STP event debugging was still enabled on 2960S. We can see in the output below that it only needed to receive 1 inferior BPDU before starting port transition.

2960S#
*Mar  1 01:31:11.377: STP: VLAN0001 heard root 32769-001b.2b14.e480 on Gi0/22
*Mar  1 01:31:11.377: STP: VLAN0001 Gi0/22 -> listening
*Mar  1 01:31:11.477: STP: VLAN0001 Topology Change rcvd on Gi0/22
*Mar  1 01:31:11.477: STP: VLAN0001 sent Topology Change Notice on Gi0/21
2960S#
*Mar  1 01:31:26.384: STP: VLAN0001 Gi0/22 -> learning
2960S#
*Mar  1 01:31:41.391: STP[1]: Generating TC trap for port GigabitEthernet0/22
*Mar  1 01:31:41.391: STP: VLAN0001 sent Topology Change Notice on Gi0/21
*Mar  1 01:31:41.391: STP: VLAN0001 Gi0/22 -> forwarding

To ensure clean debug output, I repeated the BackboneFast enabled failover with BackboneFast debugging enabled

2960S#debug spanning-tree backbonefast
Spanning Tree backbonefast general debugging is on
2960S#
*Mar  1 03:06:00.715: STP FAST: received inferior BPDU on VLAN0001 GigabitEthernet0/22.
*Mar  1 03:06:00.715: STP FAST: sending RLQ request PDU on VLAN0001(1) Gi0/21 Vlan1
*Mar  1 03:06:00.715: STP FAST: Received RLQ response PDU on VLAN0001 GigabitEthernet0/21.

For these tests, 3750Top was configured for SPAN to enable packet capture of the RLQs. It took me a while to find the RLQs in the pcap. On the surface, they look like normal BPDUs. The differentiator is that regular STP BPDUs have their own Service Access Point (SAP) value in the Ethernet Logical-Link Control (LLC) header with value 0x42. RLQs on the other hand, have SAP value 0xAA, indicating the use of Subnetwork Access Protocol extensions.

RLQ Request: The PID value confirms that this is an RLQ request. This was sent by 2960S.
Notice the SAP column I added in Wireshark. The BPDU preceding the RLQ has decoded SAP value of Spanning Tree Protocol. The RLQ has SAP value SNAP.

And here’s a snippet of the RLQ response. This was sent by 3750Top.

CLI Verification

When BackboneFast is enabled, the “show spanning-tree backbonefast” command becomes available.

The output below confirms that 3750Bottom did not need to directly participate in RLQs to benefit from BackboneFast.

3750_Bottom#show spanning-tree backbonefast
BackboneFast is enabled

BackboneFast statistics
-----------------------
Number of transition via backboneFast (all VLANs)           : 0
Number of inferior BPDUs received (all VLANs)               : 0
Number of RLQ request PDUs received (all VLANs)             : 0
Number of RLQ response PDUs received (all VLANs)            : 0
Number of RLQ request PDUs sent (all VLANs)                 : 0
Number of RLQ response PDUs sent (all VLANs)                : 0

The output from 2960S and 3750Top confirms what we saw earlier. When the feature is understood, the output of this command is intuitive.

3750_Top#show spanning-tree backbonefast
BackboneFast is enabled

BackboneFast statistics
-----------------------
Number of transition via backboneFast (all VLANs)           : 0
Number of inferior BPDUs received (all VLANs)               : 0
Number of RLQ request PDUs received (all VLANs)             : 1
Number of RLQ response PDUs received (all VLANs)            : 0
Number of RLQ request PDUs sent (all VLANs)                 : 0
Number of RLQ response PDUs sent (all VLANs)                : 1
2960S#show spanning-tree backbonefast
BackboneFast is enabled

BackboneFast statistics
-----------------------
Number of transition via backboneFast (all VLANs)           : 1
Number of inferior BPDUs received (all VLANs)               : 1
Number of RLQ request PDUs received (all VLANs)             : 0
Number of RLQ response PDUs received (all VLANs)            : 1
Number of RLQ request PDUs sent (all VLANs)                 : 1
Number of RLQ response PDUs sent (all VLANs)                : 0

Show spanning-tree summary also confirms that BackboneFast is enabled and displays these counters. The output below was taken after the second failover test when BackboneFast debugging was enabled.

2960S#show spanning-tree summary
Switch is in pvst mode
Root bridge for: none
Extended system ID           is enabled
Portfast Default             is disabled
PortFast BPDU Guard Default  is disabled
Portfast BPDU Filter Default is disabled
Loopguard Default            is disabled
EtherChannel misconfig guard is enabled
UplinkFast                   is disabled
BackboneFast                 is enabled
Configured Pathcost method used is short

Name                   Blocking Listening Learning Forwarding STP Active
---------------------- -------- --------- -------- ---------- ----------
VLAN0001                     0         0        0          2          2
---------------------- -------- --------- -------- ---------- ----------
1 vlan                       0         0        0          2          2

BackboneFast statistics
-----------------------
Number of transition via backboneFast (all VLANs)           : 2
Number of inferior BPDUs received (all VLANs)               : 2
Number of RLQ request PDUs received (all VLANs)             : 0
Number of RLQ response PDUs received (all VLANs)            : 2
Number of RLQ request PDUs sent (all VLANs)                 : 2
Number of RLQ response PDUs sent (all VLANs)                : 0

Leave Comment

Your email address will not be published. Required fields are marked *

Time limit exceeded. Please complete the captcha once again.