Le protocole Spanning Tree
Le protocole Spanning Tree (STP) est un protocole de couche 2 (liaison
de données) conçu pour les commutateurs. Le standard STP est défini dans
le document IEEE 802.1D-2004. Il permet de créer un chemin sans boucle
dans un environnement commuté et physiquement redondant. STP détecte et
désactive ces boucles et fournit un mécanisme de liens de sauvegarde. Le
standard a été amélioré en incluant IEEE 802.1w Rapid Spanning Tree
(RSTP). Cisco dispose de ses propres versions correspondantes.
Spanning-Tree (STP) répond à la problématique de trames dupliquées dans un environnement de liaisons redondantes (section 1). Son fonctionnement est basé sur la sélection d'un commutateur Root (principal) et de calculs des chemins les plus courts vers ce commutateur (section 2). Les ports des commutateurs rencontrent cinq états dont le "Blocking" qui ne transfère pas de trames de donnée et le "Forwarding" qui transfère les trames de donnée (section 3). Quelques commandes essentielles sont à retenir (section 4 à 8).
Rapid Spanning Tree (RSTP) est la version améliorée de STP qui fait passer les temps de convergence de 50 secondes à quelques secondes (section 9).
Cisco Systems met en oeuvre ses propres versions de STP et de RSTP que l'on désigne PVST+ (section 8) et PVRST+.
1. Problématique
Dans un contexte de liaisons redondantes sans STP deux problèmes peuvent survenir :1. Des tempêtes de diffusion (broadcast) :
lorsque des trames de diffusion ou de multicast sont envoyées (FF-FF-FF-FF-FF-FF en destination), les commutateurs les renvoient par tous les ports. Les trames circulent en boucles et sont multipliées. Les trames n'ayant pas de durée de vie (TTL comme les paquets IP), elles peuvent tourner indéfiniment.
2. Une instabilité des tables MAC :
quand une trame, même unicast, parvient aux commutateurs connectés en redondance, le port du commutateur associé à l'origine risque d'être erroné. Une boucle est susceptible d'être créée.
Dans cet exemple, le PC1 envoie une trame au PC2. Les deux commutateurs reçoivent la trame sur leur port 0/2 et associent ce port à l'adresse MAC de PC1. Si l'adresse de PC2 est inconnue, les deux commutateurs transfèrent la trame à travers leur port 0/1. Les commutateurs reçoivent respectivement ces trames inversement et associent l'adresse MAC de PC1 au port 0/1. Ce processus peut se répéter indéfiniment.
2. Fonctionnement de STP
Une topologie physique physique redondante fournira des chemins multiples visant à améliorer la fiabilité d'un réseau. Toutefois, elle présente le désavantage de créer des boucles dans le réseau. Pour résoudre ce problème, STP crée au sein de cette topologie redondante un chemin sans boucle basé sur le chemin le plus court. Ce chemin est établi en fonction de la somme des coûts de liens entre les commutateurs. Ce coût est une valeur inverse à la vitesse d'un port, car un lien rapide aura un coût moins élevé qu'un lien lent. Aussi, un chemin sans boucle suppose que certains ports soient bloqués et pas d'autres. STP échange régulièrement des informations (appelées des BPDU - Bridge Protocol Data Unit) afin qu'une éventuelle modification de topologie puisse être adaptée sans boucle.STP est activé par défaut sur les commutateurs Cisco, il crée un chemin sans boucles automatiquement entre eux.
1. Sélection d'un commutateur Root
Le commutateur Root (principal) sera le point central de l'arbre STP. le choix de celui-ci dans l'architecture du réseau peut avoir son importance. Toutefois, une bonne pratique consistera à limiter la taille des domaines de diffusion et à concentrer géographiquement les VLANs.
Par défaut, le commutateur qui aura l'identifiant (ID) la plus faible sera élu Root. L'ID su commutateur comporte deux parties :
- d'une part, la priorité (2 octets) et,
- d'autre part, l'adresse MAC (6 octets).
(config)#spanning-tree vlan vlan-id priority priority
Sur un commutateur Root, tous les ports sont des ports Designated, autrement dit, ils sont en état « forwarding », il envoient et reçoivent le trafic.
2. Sélection d'un port Root pour les commutateurs non-Root.
Les autres commutateurs vont sélectionner un seul port Root qui aura le chemin le plus court vers le commutateur Root. Normalement, un port Root est en état « forwarding », également.
Le coût est calculé inversement à sa qualité.
Vitesse du lien | Coût | Plage de coût recommandée |
4 Mbps | 250 | 100 to 1000 |
10 Mbps | 100 | 50 to 600 |
16 Mbps | 62 | 40 to 400 |
10 0Mbps | 19 | 10 to 60 |
1Gbps | 4 | 3 to 10 |
10Gbps | 2 | 1 to 5 |
(config-if)#spanning-tree cost costS'il s'agit d'un port en mode Trunk (qui connecte un autre commutateur pour transporter du trafic de plusieurs VLANs), la commande de configuration est :
(config-if)#spanning-tree vlan vlan-id cost costA noter aussi qu'en cas de coût égaux, c'est la priorité la plus faible (d'une valeur de 0 à 255) qui emporte le choix (elle est de 128 par défaut) en déterminant l'ID du port composé de 2 octets (priorité + numéro STP du port) :
Sur un port en mode Access :
(config-if)#spanning-tree port-priority prioritySur un port en mode trunk :
(config-if)#spanning-tree vlan vlan-id port-priority priority
3. Sélection d'un port désigné pour chaque segment
Pour chaque segment physique, domaine de collision ou lien, il y a un port Designated. Le port Designated est celui qui a le chemin le plus court vers le commutateur Root. Un port Designated est normalement en état « forwarding », autrement dit, envoie et reçoit du trafic de données.
Tous les autres sont des ports Non-Designated en état « blocking », c'est-à-dire bloquant tout trafic de données mais restant à l'écoute des BPDU.
En bref,
1 commutateur Root par réseau dont tous les ports sont Designated 1 port Root par commutateur Non-Root 1 port Designated par domaine de collision (liaison) tous les autres ports sont Non-Designated |
Port | <->-> | Port | Etat | <->-> | Etat | Commutateur | <->-> | Commutateur |
Root | <->-> | Designated | Forwarding | <->-> | Forwarding | Non-root | <->-> | Root |
Designated | <->-> | Root | Forwarding | <->-> | Forwarding | Non-root | <->-> | Non-root |
Designated | <->-> | Non-Designated | Forwarding | <->-> | Blocking | Non-root | <->-> | Non-root |
3. Différents états STP
Cinq états de ports peuvent rencontrés consécutivement sur un port avant que STP ait convergé. Chaque état comporte un délai qui varie en fonction de la version de STP utilisée sur le commuateur Cisco. En voici les propriétés.
Le compteur "age maximum" (Max Age) de 20 secondes par défaut est le temps maximal avec que STP effectue de nouveaux calculs quand une interface ne reçoit plus de BPDUs. Le temps de "forwarding" de 15 secondes par défaut est le temps de passage d'un état "listening" à "learning" et de "learning" à "forwarding". Bref, une topologie peut prendre jusqu'à 50 secondes avant de converger et de transférer du trafic. Aussi, la fréquence d'envoi de BPDUs Hello est de 2 secondes par défaut.
Etat « Blocking »
Rejette toutes les trames de données venant du segment attaché
Rejette toutes les trames de données venant d'un autre port de transfert
N'intègre aucune emplacement de station dans sa MAC table (il n'y pas d'apprentissage)
Reçoit les BPDUs et les transmet à son système
N'envoie pas de BPDUs reçus de son système
Répond à SNMP
Etat « Listening »
Rejette toutes les trames de données venant du segment attaché
Rejette toutes les trames de données venant d'un autre port de transfert
N'intègre aucune emplacement de station dans sa MAC table (il n'y pas d'apprentissage)
Reçoit les BPDUs et les transmet à son système
Envoie les BPDUs reçus de son système
Répond à SNMP
Etat « Learning »
Rejette toutes les trames de données venant du segment attaché
Rejette toutes les trames de données venant d'un autre port de transfert
Intègre les emplacements de station dans sa MAC table (apprentissage)
Reçoit les BPDUs et les transmet à son système
Envoie les BPDUs reçus de son système
Répond à SNMP
Etat « Forwarding »
Commute toutes les trames de données venant du segment attaché
Commute toutes les trames de données venant d'un autre port de transfert
Intègre les emplacements de station dans sa MAC table (apprentissage)
Reçoit les BPDUs et les transmet à son système
Envoie les BPDUs reçus de son système
Répond à SNMP
Etat « Disabled »
Cet état est similaire à l'état « blocking » sauf que le port est considéré physiquement non opérationnel (shut down ou problème physique).
4. Bridge Protocol Data Units (BPDU)
Les commutateurs s'échangent des Bridge Protocol Data Units (BPDU) de deux types :
- type Configuration : utilisés lors des élections, pour maintenir la connectivité entre les commutateurs
- type Topology Change Notification (TCN) : envoyés auprès d'un commutateur Root pour signaler des ruptures de liens. Quand un commutateur reçoit un TCN, il l'accuse de réception.
5. Portfast
La commande Portfast est une fonctionnalité propriétaire Cisco. Elle s'exécute uniquement sur des ports connectant des périphériques terminaux et dans une infrastructure VLAN uniquement sur des ports en mode Access.
Lorsqu’il est connecté, le port configuré en mode Portfast passe directement de l’état “blocking” à l’état "forwarding" afin d'éviter qu’il ne prenne 50 secondes avant de transférer du trafic.
STP Portfast comporte aussi l'avantage de ne pas transférer de BPDUs TCN inutiles.
La commande d’activation s'exécute en configuration d'interface :
(config-if)#spanning-tree portfastLe message qui suivra indique la précaution d'usage afin d’éviter des boucles.
%Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface when portfast is enabled, can cause temporary bridging loops. Use with CAUTION %Portfast has been configured on FastEthernet0/X but will only have effect when the interface is in a non-trunking mode.
6. Cisco Per-VLAN Spanning-Tree (PVST+)
C'est la version Cisco de STP activée par défaut. Avec PVST+, il y a
une instance STP par VLAN. Ce qui signifie que chaque VLAN a sa propre
topologie sans boucle. Il doit donc utiliser une adresse MAC par VLAN.
On peut examiner des trames STP ici : http://www.cloudshark.org/captures/add9bb6a43f9
7. Commandes de diagnostic STP
Pour le diagnostic STP sur un VLAN :
#show spanning-tree vlan vlan-idPour le diagnostic STP d'une interface :
#show spanning-tree interface interfacePour des informations détaillées :
#show spanning-tree detailPour vérifier uniquement les interfaces actives :
#show spanning-tree active
8. Commandes de configuration de STP
Désactivation de STP :
(config)#no spanning-tree vlan vlan-idPriorité du commutateur :
(config)#spanning-tree vlan vlan-id priority priorityCoût et priorité d'un port :
(config-if)#spanning-tree [vlan vlan-id] cost cost (config-if)#spanning-tree [vlan vlan-id] port-priority priorityParamètres de délais :
(config)#spanning-tree [vlan vlan-id] max-age seconds6 à 200 secondes, 20 secondes par défaut
(config)#spanning-tree [vlan vlan-id] forward-time seconds4 à 200 secondes, 15 secondes par défaut
(config)#spanning-tree [vlan vlan-id] hello-time seconds1 à 10 secondes, 2 secondes par défaut
9. Rapid Spanning Tree (RSTP)
RSTP fait passer le temps de convergence à 6 secondes maximum ce qui le rend beaucoup plus opérationnel que STP.
Pour l'activer, en mode de configuration globale :
(config)#spanning-tree mode rapid-pvstRSTP fonctionne de la même manière que STP. Il y a toutefois quelques différences.
1. Il n'y a plus que trois états pour les ports RSTP :
- Discarding (au lieu de Disabled, Blocking et Listening)
- Learning et Forwarding (ayant la même fonction)
3. Les ports connectant des périphériques terminaux s'appellent des ports Edge qui remplissent la même fonction que la fonction Portfast en PVST+.
On examiner des captures de trames RSTP ici : http://www.cloudshark.org/captures/4d3b1f118872
Enfin, on peut forcer l'élection d'un commutateur Root primaire ou secondaire au lieu de jouer sur les priorités, en configuration globale :
(config)#spanning-tree vlan vlan-id root primaryou
(config)#spanning-tree vlan vlan-id root secondary
10. Liens
- IEEE 802.1D™-2004 IEEE Standard for Local and Metropolitan Area Networks—Media access control (MAC) Bridges (Incorporates IEEE 802.1t™-2001 and IEEE 802.1w™)
- http://packetlife.net/captures/protocol/stp/
Publier un commentaire
Blogger Facebook