Blog de Johan Denoyer

Aller au contenu | Aller au menu | Aller à la recherche

STP : Spanning Tree Protocol

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.

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).

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...

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...

    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.

    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.


  • Christophe Lucas - http://odie.mcom.fr/~clucas/blog/
    Lectures     Delicious  

    Commentaires

    1. Le mardi 24 février 2009, 15:54 par Jimmy Marchetto

    Sympa l'article ;-)
    Dommage qu'il ne soit pas possible de le commenter sur son site directement. (J'ai fait un petit billet sur cet article).
    Sinon, je viens de publier un article sur NAP, n'hésitez pas à passer ;-)

    2. Le dimanche 15 mars 2009, 16:33 par Flo

    Une minuscule coquille, étape 3
    sw3(fa0/17): path-cost=19+19 et BID=0004.9aeb.61c0
    au lieu de
    sw3(fa0/23): path-cost=19+19 et BID=0004.9aeb.61c0

    Mais bon c'est du chipotage la ;)

    3. Le lundi 16 mars 2009, 09:50 par The lsd

    Bonjour

    Je suis en ce moment en stage, pour faire de l'optimisation réseau et je suis tombé avec Wireshark sur le STP. Beaucoup (trop) de STP. Après plusieurs recherches, j'ai trouvé des informations sur ce protocole, et sur d'autres, comme OSPF et RIP.

    Dans un premier temps, je n'ai pas trop compris la différence entre OSPF/RIP et STP. Les deux premiers ont (si j'ai bien compris) les mêmes fonctions. Est ce que le STP a la même fonctionnalité que les deux autres ?

    Si oui, et comme l'optimisation du réseau passe (en partie) sur la réduction des trames inutiles, j'aurais voulu savoir si le STP est le plus approprié comme protocole, ou si je devrais passer sur de l'OSPF ou du RIP (de ce que j'en ai lu, l'OSPF est le plus approprié deux deux).
    De plus, toutjours dans le cas, ou les 3 protocoles sont équivalents, est ce que OSPF ou RIP permettent d'éviter d'éventuels broadcast storms ?

    Si non, existe t-il un moyen pour réduire ce trafic STP ? Ou bien je peux me brosser ?

    Merci d'avance

    Enjoy

    The lsd

    4. Le lundi 16 mars 2009, 11:39 par Johan Denoyer

    RIP & OSPF sont des protocoles de routage (pour permettre aux paquets d'arriver à destination). Par contre STP est un protocole qui facilite la commutation de paquets (enfin pour simplifier l'explication). Il ne font pas du tout la même chose.

    Quel est le problème réellement dans ton réseau? Hésite pas à m'envoyer une capture de trame faite avec wireshark à johan-blog@digital-connexion.info. je pourrais éventuellement te dire s'il y a quelque-chose à faire.

    Johan

    5. Le lundi 16 mars 2009, 13:38 par clucas

    Salut,

    @Flo : Merci pour la correction de la coquille. J'ai modifié cela sur mon propre blog, mais pas la main ici (normal -> Johan, je te laisse faire la modification).

    Amicalement,
    Christophe

    6. Le lundi 16 mars 2009, 15:24 par Johan Denoyer

    C'est rectifié ici :)

    Johan

    7. Le lundi 16 mars 2009, 16:46 par The lsd

    Merci pour la réponse rapide.

    En fait, le réseau comporte plus ou moins 800 postes (constitué de VPN, VLAN...) quasiment tous sur le même réseau (128.100.X.X). Je suis là actuellement pour optimiser le réseau, et donc une grande partie de cette optimisation est de supprimer tout ce qui est superflu en terme de trafic (par exemple les imprimantes utilisent IP et IPX pour faire les mêmes choses, je dois donc virer l'IPX afin d'homogénéiser et alléger).
    En ce qui concerne le STP, il prend de la place dans la bande passante (pas énormément, mais en additionnant plein de petites choses, je peux améliorer le débit), et je voulais essayer de supprimer le STP qui me semblait superflu. Sauf qu'il y a de nombreuses boucles sur le réseau qui risque de provoquer des broadcasts storms.

    Je suis obligé de garder le STP si il y a des boucles ?

    A coté de cela, je n'ai pas de RIP/OSPF mis en place, est ce avantageux de mettre en place ces protocoles (en terme d'amélioration de bande passante toujours) ?

    Je ferais une capture demain.

    Merci d'avance

    Enjoy

    The lsd

    8. Le lundi 16 mars 2009, 17:17 par clucas

    Oui, tu es obligé si tu as des boucles.

    9. Le dimanche 25 octobre 2009, 11:21 par hbl

    une erreur de frappe au niveau de etapes 3 (par la pratique):

    1. Segment sw1-sw2 : sw1(fa0/1): DP , sw2(fa0/1): DP
    2. Segment sw1-sw3 : sw1(fa0/9): DP , sw3(fa0/13): DP
    3. Segment sw2-sw3 : sw2(fa0/17): DP, sw3(fa0/24): NDP(bloqué)

    au lieu de

    1. Segment sw1-sw2 : sw1(fa0/1): DP , sw2(fa0/1): DP
    2. Segment sw1-sw3 : sw1(fa0/9): DP , sw2(fa0/13): DP
    3. Segment sw2-sw3 : sw2(fa0/17): DP, sw2(fa0/24): NDP(bloqué)
    10. Le mardi 19 janvier 2010, 15:20 par Thierry

    trois questions :
    quelle est la config par défaut sur un switch catalyst (3750) spanning-tree mode PVST ??? ou autre.
    Selon ce que j'ai vu on peut jouer sur des coûts individuel associant interface et VLAN pour déplacer le port forwarding et /ou bloqué, est ce apliquable à plusieurs VLAN d'un coup en mode PVST ?

    Le mode MST garanti -t-il que pour tous les vlan les switches auront le même comportement à svoir un seul et même port bloqué dans la topologie ?

    Merci pour cette présentation claire et rapide

    11. Le mardi 19 janvier 2010, 15:45 par clucas

    1/ pvst

    2/ S(config-if)# spanning-tree vlan 10 {cost 10 | port-priority 32}

       => Réponse : Pas d'un coût, mais tu peux le faire pour plusieurs VLANs.
       => [http://www.certprepare.com/bcmsn-vtp-lab-2]

    3/ Justement le but de MST est de contre-carré le problème d'avoir de multiple instance STP qui consomment mémoire et CPU, mais qui finalement ont la même topologie en une ou plusieurs instances MST. Une instance MST a une topologie pour plusieurs VLANs, alors que PVST a une topologie par VLAN.

    Amicalement,
    Christophe

    12. Le mardi 2 mars 2010, 16:01 par priplux

    je voulais savoir si le temps du spanning peut tout de même être affecter celon la taille du réseau par exemple une réseau de 1500 poste par rapport à un réseau de 100 poste et si oui comment il augmente. merci

    Ajouter un commentaire

    Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

    La discussion continue ailleurs

    URL de rétrolien : http://www.digital-connexion.info/index.php/trackback/356

    Fil des commentaires de ce billet