STP

Spanning Tree Protocol (STP)


1. But de Spanning Tree

Le but de spanning-tree est d'éviter le bouclage de trames, tempêtes de broadcast, instabilité des tables de forwarding MAC sur des réseaux redondants de switches.

2. Généralités

Afin de résoudre les problèmes énoncés ci-dessus, il faut à partir d'un réseau redondant former un réseau non bouclé.
Spanning-tree répond à cette exigence. Spanning-tree est définit par le standard IEEE 802.1d-1998. 802.1d fonctionne sur une instance unique (un seul VLAN).

3. Fonctionnement

Afin d'éviter les boucles, le processus spanning-tree place les ports des switches dans un état, soit 'FORWARDING', soit 'BLOCKING'.
En état 'FORWARDING', le switch forwarde les trames ethernet et suit son processus normal d'apprentissage de sa table de forwarding.
En état 'BLOCKING', le switch ne forwarde pas les trames ethernet et n'est pas dans un état d'apprentissage. Néanmoins, le switch est toujours capable de recevoir des trames appelées BPDU (Bridge Protocol Data Unit).
Le passage d'un état 'BLOCKING' à 'FORWARDING' d'un port ne peut s'opérer qu'en passant par les états 'LISTENING' et 'LEARNING'.
L'état 'LISTENING' correspond à un état où la table de correspondance MAC/interface de sortie va expirer.
L'état 'LEARNING' correspond à un état où le switch va remplir sa table de correspondance MAC/interface de sortie, mais ne forwardera toujours pas de trame.
Le passage d'un état 'LISTENING' à 'LEARNING' et de 'LEARNING' à 'FORWARDING' se fait dans un délai de 15s. Ce délai est appelé : Forward Delay.

Une fois que le processus spanning-tree est complètement déroulé, une topologie stable est établie. Cette topologie reste stable tant que les message BPDU envoyés tous les 2s (Hello BPDU) indiquent toujours le même état et que le time Max Age(20s) n'est pas expiré. Si la topologie n'est plus stable, le processus de résolution et de création d'un topologie non-bouclée peut commencer après le délai Max Age(20s) (avec Max Age = 10 * Hello BPDU, soit 10 * 2s).

Le temps de convergence d'une topologie à une autre est donc d'environ : 10 * 2 + 15 + 15 = 50s.

Afin d'établir une topologie le processus spanning-tree effectue les étapes suivantes :
Etape 1:
Sélectionner le 'Root Bridge' au moyen de son BID(Bridge ID)

Tous les switches émettent des BPDU avec pour Root ID leur Bridge ID. Le root ID indique le switch qui est la racine de la topologie. Celui qui a le plus bas BID gagne l'élection. Une fois, le 'Root Bridge' élu, celui-ci continue d'émettre des BPDU, alors que les autres switchs re-transmettent ces derniers.

Etape 2:
Ensuite, pour les switchs non-root, il faut élire un 'Root-port (RP)'. Ce port est le port qui reçoit les BPDU avec un root-path-cost le plus faible. Le root-path-cost est le coût indiqué dans le BPDU afin d'atteindre le Root Bridge. Depuis le Root Bridge, le path-cost est de 0. Chaque port selon son type possède un coût.
Coûts révisés IEEE:

VitesseCoût
10Mbits100
100Mbits19
1Gbits4
10Gbits2
Chaque switch réémet aux autres switchs le BPDU en ajoutant au 'Root Path Cost', le coût de l'interface sur laquelle il a reçu le BPDU. Les ports depuis lesquels le 'root-path-cost' est le plus faible sont élu 'Root Port'. Ces ports sont passés en état 'FORWARDING'.

Etape 3:
Finalement pour tous les segments LAN du réseau de switch, il faut déterminer les 'Designated'Port (DP)'. On identifie ces ports en utilisant de nouveau le path-cost et le Bridge-ID(==BID) du switch qui forwarde les BPDU émis par le Root Bridge, ceci depuis chaque bout du segment. Suivant le path-cost(le plus faible), on identifie le DP, si égalité le BID le plus faible gagne. Les ports qui ne sont ni 'Root Port', ni 'Designated Port' sont des 'Non-Designated Port'. Ils se trouvent dans un état bloqué.

A la fin de ce processus, il n'y a plus de boucle dans le réseau de switch.

Voyons cela par la pratique...

4. Par la pratique

Dans cette topologie, quels vont être le Root Bridge, les Root Port, Designated Port et Non-Root Port ?


Si l'on suit le processus, nous aurons :
Etape 1:
Sélectionner le 'Root Bridge' au moyen de son BID(Bridge ID)
Le plus bas BID gagne.

Ici sw1 avec 0002.4b64.4540

Etape 2:
Ensuite, pour les switchs non-root, soit sw2 et sw3 trouver leur 'Root-port (RP)'. Ce port est le port qui reçoit les BPDU avec un path-cost le plus faible. Le path-cost est le coût indiqué dans le BPDU afin d'atteindre le Root Bridge. Depuis le Root Bridge, le path-cost est de 0.

Prenons le cas de sw2, ici il reçoit sur fa0/1 un BPDU avec comme path-cost de 0 + 19, et sur fa0/17: 19 + 19. Fa0/1 est donc le root-port.
Idem pour sw3.

  • Etape 3:
    Finalement pour tous les segments LAN du réseau de switch, il faut déterminer les 'Designated'Port (DP)' et donc aussi les 'Non-Designated Port'.
    • Segment sw1-sw2 : sw1(fa0/1): DP , sw2(fa0/1): DP
    • Segment sw1-sw3 : sw1(fa0/9): DP , sw2(fa0/13): DP
    • Segment sw2-sw3 : sw2(fa0/17): DP, sw2(fa0/24): NDP(bloqué)
      • sw2(fa0/17): path-cost=19+19 et BID=0002.4bc7.d9c0
      • sw3(fa0/24): path-cost=19+19 et BID=0004.9aeb.61c0
      • 0002.4bc7.d9c0 < 0004.9aeb.61c0 => fa0/17 est DP


    On arrive donc à la solution suivante :




    Très marrant de débrancher différentes jarretières ethernet et voir comment le processus STP se comporte :-)
    Ne pas oublier: debug spanning-tree events
    sw3# debug spanning-tree events
    sw3#
    00:22:06: %LINK-3-UPDOWN: Interface FastEthernet0/13, changed state to down
    00:22:06: ST: FastEthernet0/13 vlan 1 -> blocking
    00:22:06: ST: Max-age timer has expired on port FastEthernet0/13 vlan 1
    00:22:06: ST: FastEthernet0/24 vlan 1 -> listening
    00:22:07: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, changed state to down
    00:22:08: ST: sent Topology Change Notice on FastEthernet0/24 vlan 1
    00:22:21: ST: FastEthernet0/24 vlan 1 -> learning
    00:22:36: ST: sent Topology Change Notice on FastEthernet0/24 vlan 1
    00:22:36: ST: FastEthernet0/24 vlan 1 -> forwarding
    
    Ceci est le résultat que l'on peut obtenir en débranchant la jarretière ethernet sur le port Fa0/13 sur le sw3.

    On voit bien que Fa0/13 passe en mode 'Disabled', et que le port Fa0/24 qui était bloqué passe quant à lui en mode 'Listening'(Temps durant lequel la table MAC va être invalidée)(15s), puis en mode 'Learning'(Apprentissage de sa nouvelle table MAC)(15s), puis finalement en mode 'Forwarding'.

    Les états pour passer d'un état 'Blocking' à 'Forwarding':
    Blocking -> Listening -> Learning -> Forwaring
    

    Tout ceci car le sw3 ne recevait plus les Hellos BPDU depuis le path-cost le plus court (sw1-sw3), mais uniquement celui entre sw2-sw3 (path-cost=38).

    On aurait pu tout autant arriver au même genre de comportement en faisant :
    sw3# cont f
    sw3(conf)# int fa0/13
    sw3(conf-if)# spanning-tree vlan 1 cost 39
    sw3(conf-if)#
    
    Si vous voyez une coquille n'hésitez surtout pas à me joindre...

    5. RSTP

    RSTP (Rapid Spanning Tree Protocol)(802.1w) vient au secours du problème du temps de convergence très long de STP (50s). RSTP tient son nom du fait que les états 'LISTENING' et 'LEARNING' sont réduits au minimum et que Max Age est maintenant de 3 * Hello BPDU (6s). Le temps de convergence n'est plus maintenant que d'environ 6s.

    6. VLAN

    Tout ce qui a été expliqué est vrai pour une instance unique du processus spanning-tree. Ceci implique que le processus ne fonctionne pas pour plusieurs VLANs sur ces mêmes trois switchs.
    MST (Multiple Spanning Tree) vient au secours de ce genre de problème. Il est issue du standard 802.1s. Les modes de trunking utilisés sont : 802.1Q et ISL.

    Je n'ai pas parlé ici de PVST, PVST+, RPVST+, ceux-ci étant uniquement utilisé et définit par Cisco.