Vous êtes ici : Accueil Commutation Le protocole Spanning Tree

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.

stp1

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.

stp2

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

La priorité 802.1d est d'une valeur de 32768 (0x8000) par défaut (ce sont des multiples de 4096, sur 16 bits). Par exemple, un commutateur avec une priorité par défaut de 32768 et une adresse MAC 00:A0:C5:12:34:56 prendra l'ID 8000:00A0:C512:3456. On peut changer la priorité d'un commutateur avec la commande :

(config)#spanning-tree vlan vlan-id priority priority

stp3

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

Ce coût peut être modifié. S'il s'agit d'un port configuré en mode Access (qui connecte un périphérique terminal), la commande de configuration est :

(config-if)#spanning-tree cost cost

S'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 cost

A 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 priority

Sur 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

Aussi, on peut résumer les différentes combinaisons rôle STP d'un port, état et rôle STP du commutateur :

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

Une animation flash illustre le principe de fonctionnement de STP

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.

 

stp4

 

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 portfast

Le 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-id

Pour le diagnostic STP d'une interface :

#show spanning-tree interface interface

Pour des informations détaillées :

#show spanning-tree detail

Pour 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-id

Priorité du commutateur :

(config)#spanning-tree vlan vlan-id priority priority

Coût et priorité d'un port :

(config-if)#spanning-tree [vlan vlan-id] cost cost 
(config-if)#spanning-tree [vlan vlan-id] port-priority priority

Paramètres de délais :

(config)#spanning-tree [vlan vlan-id] max-age seconds 

6 à 200 secondes, 20 secondes par défaut

(config)#spanning-tree [vlan vlan-id] forward-time seconds 

4 à 200 secondes, 15 secondes par défaut

(config)#spanning-tree [vlan vlan-id] hello-time seconds 

1 à 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-pvst

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

2. Les rôles port Root et port Designated subsitent. Les meilleurs ports alternatifs prennent le nom de lien de sauvegarde de ces derniers : port Alternate et port Backup. Ils prennent le rôle port Root et port Designated en cas de défaillance.

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 primary

ou

(config)#spanning-tree vlan vlan-id root secondary

10. Liens

Mots-clés associés : , , , ,