Wednesday, February 19, 2020

Spanning-Tree Backbone Fast

Backbone Fast is used to recover from an indirect link failure. What does that mean? Let me show you an example of an indirect link failure and how spanning-tree deals with it:
spanning tree indirect link failure
Take a look at the picture above. SW1 is the root bridge and the fa0/16 interface on SW3 has been blocked. Suddenly the link between SW1 and SW2 fails. From SW3’s perspective this is an indirect link failure.
This is what will happen:
  1. SW2 will detect this link failure immediately since it’s a directly connected link. Since it doesn’t receive any BPDUs from the root anymore it assumes it is now the new root bridge and will send BPDUs towards SW3 claiming to be the new root.
  2. SW3 will receive these BPDUs from SW2  but it will realize that this new BPDU is inferior compared to the old one it has currently stored on its fa0/16 interface and will ignore this new BPDU. When a switch receives an inferior BPDU it means that the neighbor switch has lost its connection to the root bridge.
  3. After 20 seconds (default timer) the max age timer will expire for the old BPDU on the fa0/16 interface of SW3. The interface will go from blocking to the listening state and will send BPDUs towards SW2.
  4. SW2 will receive this BPDU from SW3 and discovers that he isn’t the root bridge. It won’t send BPDUs anymore towards SW3.
  5. The fa0/16 interface on SW3 will continue from the listening state (15 seconds) to the learning state (15 seconds) and ends up in the forwarding state.
Connectivity is now restored but it took 20 seconds for the max age timer to expire, 15 seconds for the listening state and another 15 seconds for the learning state before we go to the forwarding state. That’s a total of 50 seconds downtime. Let’s take a look at this situation on our switches:
SW2#debug spanning-tree events 
Spanning Tree event debugging is on
SW3#debug spanning-tree events 
Spanning Tree event debugging is on
Let’s enable our debugging.
SW1(config)#interface fa0/14
SW1(config-if)#shutdown
I will shut this interface to simulate an indirect link failure.
SW2# STP: VLAN0001 we are the spanning tree root
SW2 believes it is the root bridge.
SW3# STP: VLAN0001 heard root  8193-0019.569d.5700 on Fa0/16
SW3 receives the BPDUs from SW2 who claims to be the root bridge.
SW3# STP: VLAN0001 Fa0/16 -> listening
SW3# STP: VLAN0001 Fa0/16 -> learning
SW3# STP: VLAN0001 Fa0/16 -> forwarding
After the max age timer expires (20 seconds) for the old BPDU from SW2 the fa0/16 interface on SW3 will go to the listening and learning state and ends up in forwarding state.
SW2# STP: VLAN0001 heard root 4097-0011.bb0b.3600 on Fa0/16
SW2# STP: VLAN0001 new root is 4097, 0011.bb0b.3600 on port Fa0/16, cost 38
The identity crisis of SW2 comes to an end. It now hears the BPDUs from the root bridge through SW3 and understands that it’s not the root bridge.
Without backbone fast, spanning-tree will discard the inferior BPDUs that SW3 receives on its fa0/16 interface and it will have to wait till the max age timer expires (20 seconds).
If we enable backbone fast it will skip the max age timer so we can save 20 seconds of time.
SW1(config)#interface fa0/14
SW1(config-if)#no shutdown
Let’s enable the fa0/14 interface on SW1 first.
SW1(config)#spanning-tree backbonefast
SW2(config)#spanning-tree backbonefast
SW3(config)#spanning-tree backbonefast
Let’s enable backbone fast on all switches. This is a global command (spanning-tree backbonefast).
SW1#debug spanning-tree backbonefast detail 
Spanning Tree backbonefast detail debugging is on
SW2#debug spanning-tree events 
Spanning Tree event debugging is on
SW3#debug spanning-tree backbonefast detail 
Spanning Tree backbonefast detail debugging is on
Use the debug spanning-tree backbonefast detail command to see real-time information on backbone fast.
SW1(config)#interface fa0/14
SW1(config-if)#shutdown
Let’s simulate the indirect link failure again…
SW2# STP: VLAN0001 we are the spanning tree root
SW2 loses its connection to the root bridge and assumes he is now the new root bridge. Nothing new so far…
SW1# STP FAST: VLAN0001 FastEthernet0/17: sending requested RLQ response PDU
SW1 receives a new packet called a (RLQ) Root Link Query from SW3. As soon as SW3 receives an inferior BPDU it will send a root link query on its root port and non-designated ports to check if the root bridge is still available.
SW3# STP FAST: received RLQ response PDU was expected on VLAN0001 FastEthernet0/14 - resp root id 4097-0011.bb0b.3600
SW3 receives a reply to its root link query on the fa0/14 interface to SW1.
SW3# STP FAST: received_rlq_bpdu on VLAN0001 FastEthernet0/16 - making FastEthernet0/16 a designated port
Because SW3 received a response from the root bridge on its fa0/14 interface it can now skip the max age timer on its f0/16 interface and the interface goes to the listening and learning state right away. We effectively save 20 seconds (max age timer).
Take a good look at the last debug output from SW3. It doesn’t say that it received something on the fa0/16 interface, it means that it received an answer to the root link query that it did because it received an inferior BPDU on the fa0/16 interface. That’s all there is to backbone fast, I hope you enjoyed this lesson.
hostname SW3
!
spanning-tree backbonefast
!
end
hostname SW2
!
spanning-tree backbonefast
!
end
hostname SW1
!
spanning-tree backbonefast
!
end

No comments:

Post a Comment