STP et RSTP : prévention des boucles réseau
Une boucle de commutation peut paralyser un réseau en quelques secondes. Spanning Tree l'empêche en bloquant des ports. Élection du pont racine, rôles de ports, RSTP et protections indispensables.
Doubler les liens entre commutateurs améliore la disponibilité, mais crée des boucles de niveau 2. Or une trame Ethernet n'a pas de champ TTL : une diffusion prise dans une boucle tourne indéfiniment, se multiplie à chaque commutateur et sature le réseau en quelques secondes (tempête de diffusion). Les tables MAC deviennent instables, les processeurs saturent, le réseau s'effondre. Le protocole Spanning Tree empêche ce phénomène en bloquant logiquement les liens redondants.
Objectif : comprendre le fonctionnement de STP et RSTP, maîtriser l'élection du pont racine, configurer Rapid PVST+ sur Cisco et activer les protections indispensables.
Plateforme : commutateurs Catalyst sous IOS XE 17.x / IOS 15.x. Le mode par défaut des Catalyst récents est Rapid PVST+ (ou PVST+ sur les plus anciens). Configuration de laboratoire.
Les versions de Spanning Tree
| Version | Norme | Caractéristiques |
|---|---|---|
| STP | IEEE 802.1D (1998) | Convergence lente : 30 à 50 secondes |
| PVST+ | Cisco | Une instance STP par VLAN |
| RSTP | IEEE 802.1w, intégré à 802.1D-2004 | Convergence rapide, souvent inférieure à la seconde |
| Rapid PVST+ | Cisco | RSTP par VLAN |
| MSTP | IEEE 802.1s, intégré à 802.1Q | Plusieurs VLAN regroupés dans quelques instances ; interopérable |
Le principe : construire un arbre
Spanning Tree élit un commutateur de référence, le pont racine, puis calcule pour chaque commutateur le meilleur chemin vers lui. Les liens qui ne font pas partie de cet arbre sont bloqués : ils ne transmettent pas de trames utilisateurs, mais restent prêts à prendre le relais.
Les commutateurs échangent des messages appelés BPDU (Bridge Protocol Data Units).
1. L'élection du pont racine
Chaque commutateur possède un identifiant de pont (Bridge ID) :
Bridge ID = priorité (16 bits, défaut 32768) + adresse MAC
Avec PVST+ et Rapid PVST+, la priorité inclut le numéro de VLAN (extended system ID) : pour le VLAN 10, la priorité par défaut affichée est 32768 + 10 = 32778. La priorité se règle par pas de 4096.
Le commutateur au Bridge ID le plus faible devient racine. À priorité égale, c'est l'adresse MAC la plus basse qui l'emporte, souvent celle du commutateur le plus ancien. Laisser l'élection au hasard place parfois la racine sur un vieux commutateur d'accès, avec des chemins absurdes. Choisissez toujours explicitement la racine.
2. Le coût des chemins
Chaque lien a un coût selon son débit. Avec la méthode de calcul « longue » (802.1D-2004) :
| Débit | Coût court (historique) | Coût long |
|---|---|---|
| 100 Mbit/s | 19 | 200 000 |
| 1 Gbit/s | 4 | 20 000 |
| 10 Gbit/s | 2 | 2 000 |
Sur Cisco, la méthode longue s'active par spanning-tree pathcost method long (à appliquer de façon cohérente sur tous les commutateurs).
3. Les rôles des ports
| Rôle | Description |
|---|---|
| Port racine (root port) | Sur chaque commutateur non racine, le port offrant le meilleur chemin vers la racine |
| Port désigné (designated port) | Sur chaque segment, le port qui transmet vers la racine ; tous les ports actifs de la racine sont désignés |
| Port alternatif (alternate, RSTP) | Chemin de secours vers la racine, bloqué |
| Port de secours (backup, RSTP) | Chemin redondant sur un même segment partagé (rare) |
En cas d'égalité de coût, le départage se fait sur le Bridge ID du voisin, puis sur la priorité et le numéro de port.
Les états des ports
| STP (802.1D) | RSTP (802.1w) | Transmet les trames ? | Apprend les MAC ? |
|---|---|---|---|
| Blocking | Discarding | Non | Non |
| Listening | Discarding | Non | Non |
| Learning | Learning | Non | Oui |
| Forwarding | Forwarding | Oui | Oui |
En STP classique, un port passe par listening puis learning pendant deux fois le délai de transmission (15 s chacun) : d'où une attente de 30 secondes avant qu'un poste branché puisse communiquer, si PortFast n'est pas activé.
Pourquoi RSTP converge plus vite
- Mécanisme de proposition/accord entre commutateurs voisins sur les liens point à point full-duplex, qui permet de passer en transmission sans attendre les temporisateurs.
- Ports alternatifs pré-calculés : en cas de panne du port racine, le port alternatif prend le relais immédiatement.
- Ports de bordure (edge ports, équivalent de PortFast) qui passent directement en transmission.
Configurer Rapid PVST+
SW-CORE-1(config)# spanning-tree mode rapid-pvst
SW-CORE-1(config)# spanning-tree pathcost method long
SW-CORE-1(config)# spanning-tree vlan 10,20,99 root primary
SW-CORE-2(config)# spanning-tree mode rapid-pvst
SW-CORE-2(config)# spanning-tree pathcost method long
SW-CORE-2(config)# spanning-tree vlan 10,20,99 root secondary
La macro root primary fixe une priorité suffisamment basse (24576 ou moins) pour devenir racine ; root secondary fixe 28672. On peut aussi définir directement la priorité :
spanning-tree vlan 10,20,99 priority 4096
Bonne pratique : placer la racine sur le commutateur de cœur ou de distribution qui est aussi la passerelle principale des VLAN (par exemple le routeur maître VRRP/HSRP), pour que le trafic suive le chemin le plus direct.
Il est possible de répartir la charge en plaçant la racine de certains VLAN sur un commutateur de cœur et celle des autres VLAN sur le second.
Les protections indispensables
PortFast et BPDU Guard (ports d'accès)
interface range GigabitEthernet1/0/1 - 40
spanning-tree portfast
spanning-tree bpduguard enable
Ou globalement pour tous les ports d'accès en PortFast :
spanning-tree portfast default
spanning-tree portfast bpduguard default
BPDU Guard désactive (err-disabled) un port d'accès qui reçoit une BPDU : il protège contre un commutateur branché par erreur ou par malveillance, qui pourrait créer une boucle ou tenter de devenir racine.
Root Guard (ports descendants de la distribution)
interface GigabitEthernet1/0/10
spanning-tree guard root
Sur les ports vers les commutateurs d'accès, Root Guard empêche qu'un équipement situé en aval devienne racine : si une BPDU supérieure arrive, le port passe en état root-inconsistent.
Loop Guard et UDLD
- Loop Guard empêche un port alternatif de passer en transmission s'il cesse de recevoir des BPDU (par exemple à cause d'un lien unidirectionnel), ce qui créerait une boucle.
- UDLD (Cisco) détecte les liens fibre unidirectionnels.
Vérifier
show spanning-tree summary
show spanning-tree vlan 10
show spanning-tree root
show spanning-tree interface GigabitEthernet1/0/48 detail
show spanning-tree inconsistentports
show interfaces status err-disabled
Extrait de show spanning-tree vlan 10 :
VLAN0010
Spanning tree enabled protocol rstp
Root ID Priority 24586
Address 00a3.d1f2.1a00
This bridge is the root
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- ----------
Gi1/0/1 Desg FWD 20000 128.1 P2p
Gi1/0/2 Desg FWD 20000 128.2 P2p
Diagnostiquer une boucle
Symptômes : réseau soudainement très lent ou inaccessible, voyants d'activité qui clignotent frénétiquement, processeur des commutateurs saturé, messages MAC flapping (%SW_MATM-4-MACFLAP_NOTIF) indiquant qu'une même adresse MAC apparaît alternativement sur deux ports.
Démarche :
- Repérer les messages de MAC flapping dans les journaux : ils désignent les ports impliqués.
- Vérifier les ports où STP a été désactivé, les ports PortFast reliés à des commutateurs, les petits commutateurs non gérés ajoutés.
- Couper physiquement le lien suspect pour rétablir le service, puis analyser.
Erreurs courantes
- Laisser l'élection de la racine au hasard.
- Désactiver Spanning Tree pour « gagner en performance ».
- PortFast sur un port relié à un commutateur sans BPDU Guard.
- Mélanger les modes (PVST+, Rapid PVST+, MSTP) sans maîtriser leur interaction.
- Ignorer les messages de MAC flapping.
Conclusion
Spanning Tree est le filet de sécurité des réseaux de niveau 2 redondants. Utilisez RSTP (Rapid PVST+ ou MSTP), choisissez explicitement le pont racine, et activez PortFast avec BPDU Guard sur les ports d'accès et Root Guard vers l'aval. Pour exploiter tous les liens plutôt que d'en bloquer, combinez Spanning Tree avec l'agrégation EtherChannel.


