Spanning tree expliqué : racine, rôles des ports, RSTP
Un câble de trop. Il n'en faut pas plus. Reliez deux commutateurs deux fois, et une seule trame de broadcast se met à tourner sans fin. Chaque copie engendre d'autres copies, les liens saturent, les tables MAC basculent d'un port à l'autre, et le réseau tombe.
Le spanning tree existe pour que cela n'arrive jamais. Cette page explique comment les commutateurs élisent une racine, comment ils choisissent les ports à bloquer, pourquoi l'ancien protocole prenait cinquante secondes et le nouveau moins d'une, et ce que Cisco, Huawei, Aruba et Juniper font chacun par défaut.
Pourquoi une boucle est fatale
Les trames Ethernet n'ont pas de durée de vie. Un routeur supprime un paquet après un certain nombre de sauts ; un commutateur, lui, renvoie un broadcast sur tous ses ports, indéfiniment. Avec deux chemins entre commutateurs, trois problèmes surviennent à la fois : des tempêtes de broadcast, des trames dupliquées qui arrivent aux hôtes, et une table d'adresses MAC qui apprend sans cesse la même adresse sur des ports différents.
Le spanning tree conserve les câbles redondants et désactive logiquement juste assez de ports pour ne laisser qu'un seul chemin sans boucle : un arbre.
L'élection de la racine
Tout arbre a besoin d'une racine. Chaque commutateur possède un bridge ID : une priorité, puis son adresse MAC. Le bridge ID le plus bas l'emporte. La priorité vaut 32 768 par défaut chez les quatre constructeurs, et se modifie par pas de 4 096, de zéro à 61 440. Chez Cisco, une partie du champ de priorité porte le numéro de VLAN, ce qui explique pourquoi le VLAN 1 affiche une priorité de 32 769.
Si toutes les priorités restent à leur valeur par défaut, c'est le commutateur dont l'adresse MAC est la plus basse qui devient racine. C'est en général le plus ancien commutateur du bâtiment, pas celui que vous auriez choisi.
Coûts et rôles des ports
Une fois la racine connue, chaque autre commutateur choisit le meilleur chemin pour l'atteindre, selon le coût du chemin. Plus un lien est rapide, moins il coûte. La table d'origine attribuait un coût de 4 à un lien gigabit et de 2 à un lien dix gigabits ; les valeurs longues, plus récentes, donnent vingt mille et deux mille, ce qui laisse de la marge pour le 100 gigabits et au-delà. Tous les commutateurs du réseau doivent utiliser la même méthode.
Huawei utilise les valeurs longues par défaut. Chez Cisco, Juniper et Aruba, la documentation se contredit d'une version à l'autre : vérifiez donc la méthode sur vos propres commutateurs avant de comparer des valeurs.
Chaque commutateur garde un seul port racine (root port), son meilleur chemin vers la racine. Sur chaque segment, un port désigné transmet vers elle. Tout autre port susceptible de créer une boucle devient un port alternate, et il bloque. À coût égal, les commutateurs comparent le bridge ID de l'émetteur, puis l'identifiant de port.
Les temporisateurs, et cinquante secondes de silence
Le protocole d'origine était prudent, et lent. Les commutateurs envoient un hello toutes les deux secondes. Quand un meilleur chemin est perdu, un commutateur attend que l'ancienne information expire, vingt secondes, puis écoute pendant quinze secondes, puis apprend les adresses pendant quinze de plus.
Cisco le dit sans détour : environ cinquante secondes avec les réglages par défaut. Sur un réseau qui transporte de la voix, c'est une coupure.
RSTP : proposition et accord
Le rapid spanning tree, IEEE 802.1w, a remplacé l'attente par une négociation. Sur un lien point à point, le commutateur amont envoie une proposition (proposal). Le commutateur aval fait de ce port son port racine, bloque un instant ses autres ports non edge, et répond par un accord (agreement). Le lien passe immédiatement en transmission.
Si un port racine tombe, le meilleur port alternate prend le relais aussitôt. Cisco l'écrit dans son propre guide : moins d'une seconde, contre cinquante avec l'ancien protocole.
Les états de port se réduisent à trois : discarding, learning et forwarding. Et seul un port qui passe en forwarding compte comme un changement de topologie ; les ports edge n'en provoquent jamais.
Les ports edge
Les ports qui font face à un PC ou à une imprimante ne doivent jamais faire partie de l'arbre. Déclarez-les comme ports edge et ils transmettent dès que le lien monte. Chez Cisco, c'est portfast edge. Chez Huawei, stp edged-port enable. Chez Aruba, port-type admin-edge. Chez Juniper, l'instruction edge sous l'interface RSTP.
Les ports edge sont pourtant une invitation : quiconque y branche un commutateur peut parler spanning tree. D'où les protections.
Les protections (guards)
BPDU Guard désactive un port edge dès qu'un message spanning tree y arrive. Cisco l'appelle bpduguard, Huawei BPDU protection, Aruba bpdu-guard, et Juniper bloque les BPDU sur les ports edge.
Root Guard empêche un port de jamais mener vers une nouvelle racine. Si un meilleur pont apparaît derrière lui, le port bloque au lieu de lui céder la couronne. Huawei documente précisément cette panne : un nouveau commutateur doté d'une meilleure priorité, branché sur un commutateur d'accès, devient racine, le lien de cœur à 100 gigabits est bloqué, et le trafic se faufile par deux liens à 10 gigabits.
Loop Guard couvre la panne silencieuse : un lien qui transporte encore du trafic dans un sens mais ne délivre plus de BPDU. Sans lui, le port bloqué suppose que l'autre côté a disparu et se met à transmettre. C'est une boucle. Cisco cite les liens unidirectionnels comme une cause fréquente de pannes du spanning tree. Root Guard et Loop Guard ne peuvent pas cohabiter sur un même port. Quant au BPDU filter, il demande de la prudence : il fait ignorer le spanning tree à un port, ce qui revient presque à le désactiver.
MSTP et le réseau multi-constructeur
Les commutateurs Cisco exécutent par défaut un spanning tree par VLAN, Rapid PVST+, même si une référence Cisco indique encore PVST. Huawei et Aruba utilisent MSTP par défaut, le standard IEEE qui associe de nombreux VLAN à quelques instances. Juniper EX exécute RSTP. Le guide d'Aruba le dit directement : dans un réseau multi-constructeur, MSTP est l'option à privilégier.
Des commutateurs ne partagent une région MSTP que si trois éléments correspondent exactement : le nom de région, le numéro de révision et la correspondance entre VLAN et instances. Même dans ce cas, Huawei documente une situation où un commutateur Cisco et un commutateur Huawei aux réglages identiques restent en désaccord, à cause de la façon dont chacun calcule le digest de région ; la solution est le digest snooping sur le port Huawei.
Là où MSTP rencontre l'arbre par VLAN de Cisco, la règle de Cisco est simple : garder la racine dans le backbone MSTP.
La lecture sur quatre constructeurs
Les questions sont toujours les mêmes : qui est racine, et quels ports bloquent. Cisco répond avec show spanning-tree, Huawei avec display stp brief, Aruba avec show spanning-tree, et Juniper avec show spanning-tree bridge et show spanning-tree interface.
Un même protocole, quatre vocabulaires : blocking, discarding, alternate, ALT.
Ce que NacTrack montre
Interroger chaque commutateur un par un ne passe pas à l'échelle. NacTrack lit le spanning tree de chaque commutateur en SSH, quel que soit le constructeur, et montre sur une seule page quel pont est racine pour chaque VLAN, quels ports sont bloquants, et où BPDU Guard manque. Les questions ci-dessus, résolues pour tout le réseau à la fois.
Voir ce protocole sur votre réseau
NacTrack lit ces protocoles sur vos équipements, en SSH et en lecture seule.
