En Une :

Le protocole Spanning-Tree

Spanning-Tree est un protocole L2 formalisé IEEE 802.1D qui permet de garder une topologie physique redondante tout en créant un chemin logique unique. Spanning-Tree envoie régulièrement des annonces (BPDU) pour élire un commutateur principal (root). En fonction de cette information, les commutateurs "coupent" des ports et une topologie de transfert à chemin unique converge (de quelques secondes à 50 secondes selon les versions).

Description : Spanning-Tree (STP), IEEE 802.1D, PVST+, Rapid Spanning-Tree (RSTP), IEEE 802.1w, PVRST+, MIST, IEEE 802.1s

Disponibilité dans le LAN

Couche Protocole/Solutions Délais de reprise
L2 Rapid Spanning Tree Quelques secondes
L2 Etherchannel Plus ou moins 1 seconde pour rediriger le trafic sur un lien alternatif
L3 First Hop Redundancy Protocols comme HSRP, VRRP, GLBP 10 secondes par défaut (Cisco) mais le constructeur conseille 1s hello time, 3s Hold Time
L3 Protocoles de routage En dessous de la seconde avec OSPF ou EIGRP

1. Spanning-Tree

Spanning-Tree est un protocole L2 formalisé IEEE 802.1D qui permet de garder une topologie physique redondante tout en créant un chemin logique unique.

Spanning-Tree envoie régulièrement des annonces (BPDU) pour élire un commutateur principal (root).

En fonction de cette information, les commutateurs "coupent" des ports et une topologie de transfert à chemin unique converge (de quelques secondes à 50 secondes selon les versions).

1.1. Variantes STP

Sur du matériel Cisco STP fonctionne en PVST+ ou en PVRST+

Nom Standard
Spanning-Tree (STP) IEEE 802.1D
PVST+ STP Cisco
Rapid Spanning-Tree (RSTP) IEEE 802.1w
PVRST+ RSTP Cisco
MIST IEEE 802.1s

Sources : https://fr.wikipedia.org/wiki/IEEE_802, http://fr.wikipedia.org/wiki/IEEE_802.1, http://en.wikipedia.org/wiki/IEEE_802.1#802.1D

1.2. Terminologie Spanning-Tree

  • Bridge
  • MAC bridges
  • BID
  • BPDU
  • Etats STP
  • commutateur Root
  • commutateur non-Root
  • port Désigné
  • port Root
  • port Non-désigné
  • délais
  • RSTP
  • PVST+
  • PVRST+
  • rapid-pvst

2. Problématique

Pour assurer la fiabilité des liaisons entre des commutateurs du LAN il est utile de multiplier les connexions physiques (redondance).

  1. Si les commutateurs transfèrent le trafic de diffusion et Multicast par tous les ports sauf celui d’origine
  2. Si les trames Ethernet ne disposent pas de durée de vie

Plusieurs problèmes peuvent alors survenir :

  • Tempêtes de diffusion
  • Trames dupliquées
  • Instabilité des tables de commutation

2.1. Tempête de diffusion

Lorsque des trames de diffusion ou de Multicast sont reçues (FF-FF-FF-FF-FF-FF en destination par exemple, du trafic ARP Req), les commutateurs les transfèrent par tous les ports.

Les trames circulent en boucles et sont multipliées à chaque passage sur un commutateur.
N'ayant pas de durée de vie (TTL comme les paquets IP traités par les routeurs), elles peuvent tourner indéfiniment.

Quel est le sort réservé par les commutateurs à la trame dont la destination est une adresse de diffusion ou multicast ?

Une trame de diffusion est multipliée en boucle sur tous les ports jusqu’à rendre le réseau inutilisable. Comment mettre fin à ce phénomène ?

2.2. Couper la boucle de commutation

En coupant la boucle, un seul chemin est possible d’une extrémité à l’autre du réseau.

2.3. Trames dupliquées

Dans cet autre exemple, PC1 envoie une trame à PC2, elle arrive en double exemplaire à sa destination.

3. Spanning-Tree : Principe

Afin de profiter de la redondance tout en évitant la problématique des boucles, Spanning-Tree crée 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 (état Blocking) et pas d'autres (état Forwarding).

Les commutateurs Spanning-Tree échangent régulièrement (2s. par défaut, en Multicast 01:80:c2:00:00:00) des informations (appelées des BPDU - Bridge Protocol Data Unit) afin qu'une éventuelle modification de la topologie puisse être adaptée sans boucle.

3.1. BID : Bridge ID

Chaque commutateur prendra un identifiant unique appelé BID (Bridge ID) composé :

  1. d’une priorité configurable (4 bits, multiples de 4096), par défaut cisco 32768 (0111)
  • d’une “Bridge System ID Extension” de 12 bits (numéros de VLAN)
  • de l’adresse MAC du commutateur

Par exemple :

Bridge ID  Priority	32769  (priority 32768 sys-id-ext 1)
Address 				0001.96C7.DC42

Le BID permet à STP de choisir un commutateur Root dans la topologie.

4. Algorithme Spanning-Tree

Spanning-Tree calcule une topologie sans boucle en 4 étapes :

  1. Sélection d'un commutateur Root, un seul par topologie, qui sera le commutateur racine de la topologie, tous ses ports transfèrent le trafic (ports Designated). Le commutateur avec le BID le plus faible remporte l’élection.
  2. Sélection d’un seul port Root sur les (autres) commutateurs non-Root, qui dispose de la liaison dont le coût vers le commutateur Root est le plus faible. Il est le seul à transférer du trafic.
  3. Sélection d'un port Designated pour chaque segment physique qui connecte deux commutateurs quand c’est nécessaire. C’est le port qui a le coût vers le commutateur Root le plus faible qui est sélectionné, il est le seul à transférer le trafic.
  4. Les ports Root et Designated transfèrent du trafic (état “Forwarding”) et les autres ports coupent la liaison (état “Blocking”).

4.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. Idéalement, on le choisira dans la couche Distribution.

Par défaut, le commutateur qui aura l'identifiant (BID) le plus faible sera élu Root.

Si la priorité STP du commutateur reste à sa valeur par défaut (32768, 0x08), la valeur de l’adresse MAC du commutateur sera déterminante.

Le commutateur Root est unique dans la topologie.

Tous ses ports sont en état “Forwarding”, transfèrent du trafic.

Influencer la sélection du commutateur Root

En fixant la priorité du commutateur (par VLAN) :

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

En laissant l’IOS fixer la meilleure priorité :

(config)#spanning-tree vlan vlan-id root [primary|secondary]

Cette dernière méthode plutôt conseillée permet de choisir le commutateur root principal (root primary) et son backup (root secundary).

4.2. Sélection d’un seul port Root sur chaque commutateur non-Root

Les autres commutateurs non-Root vont sélectionner un seul port Root qui aura le chemin le plus court vers le commutateur Root.

Un port Root est en état « forwarding».

Le coût est calculé inversement à la vitesse de la liaison :

Vitesse du lien Coût Plage de coût recommandée
10 Mbps 100 50 à 600
100Mbps 19 10 à 60
1Gbps 4 3 à 10
10Gbps 2 1 à 5

Coût des liaisons

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>

Ports Root ex aequo

Sur un commutateur non-Root, pour des interfaces STP en cas de coûts égaux vers le commutateur Root, c'est leur priorité la plus faible (d'une valeur de 0 à 255) qui emporte le choix du port Root (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>

4.3. Un port Désigné par segment

Pour chaque segment physique, domaine de collision ou lien, il y a un port Designated.

Le port Designated d’un segment 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.

5. Spanning-Tree en résumé

  • 1 commutateur Root par réseau dont tous les ports sont Designated (Forwarding)
  • 1 port Root (Forwarding) par commutateur Non-Root
  • 1 port Designated (Forwarding) par domaine de collision (liaison)
  • tous les autres ports sont Non-Designated (Blocking)
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

6. États Spanning-Tree

Un port démarre en état “Blocking” et peut atteindre l’état “Forwarding” en fonction des BPDUs reçus. L’état “Disabled” est une désactivation administrative ou fait suite à une erreur de sécurité.

États Délais Transfert data Apprentissage MAC Envoie des BPDUs A l’écoute des BPDUs, SNMP
Blocking Max Age = 20 sec. non non non oui, en attente de BPDUs
Listening Forwarding Delay = 15 sec. non non oui oui
Learning Forwarding Delay = 15 sec. non oui oui oui
Forwarding - oui oui oui oui

6.1. Délais Spanning-Tree

Âge maximum (Max Age)

Âge maximum : délais avant lequel un port attend avant d’entrer en état “Listening” :

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

6 à 200 secondes, 20 secondes par défaut

Forward Delay

Délais pour atteindre l’état “Forwarding” :

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

4 à 200 secondes, 15 secondes par défaut

Hello STP

Fréquence des Hellos STP :

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

1 à 10 secondes, 2 secondes par défaut

7. Messages Spanning-tree

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.

Capture de trafic STP : https://www.cloudshark.org/captures/add9bb6a43f9

7.1. Charge Spanning-tree

IEEE 802.3 Ethernet
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Configuration (0x00)
    BPDU flags: 0x00
    Root Identifier: 32768 / 1 / 00:19:06:ea:b8:80
    Root Path Cost: 0
    Bridge Identifier: 32768 / 1 / 00:19:06:ea:b8:80
    Port identifier: 0x8005
    Message Age: 0
    Max Age: 20
    Hello Time: 2
    Forward Delay: 15

8. Convergence Spanning-Tree

Cette animation illustre le fonctionnement de Spanning-Tree :

9. 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".
STP Portfast comporte aussi l'avantage de ne pas transférer de BPDUs TCN inutiles et de monter une interface sans passer par les délais STP.

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.

9.1. Portfast BPDU Guard

La fonctionnalité Portfast n’empêche pas de connecter un commutateur “pirate”.

Afin de limiter plus strictement sa topologie STP, on peut utiliser le mode Portfast BPDU Guard : le port Portfast qui reçoit des BPDU se mettra en mode “err-Disabled”.

Ce mode est désactivé par défaut et s’active sur un modèle C2960 :

(config-if)# spanning-tree bpduguard enable

On notera que les commandes spanning-tree portfast default et spanning-tree bpduguard default en configuration globale activent par défaut ces modes sur tous les ports Access.

(config)#spanning-tree portfast default
(config)#spanning-tree portfast bpduguard default

10. Variantes STP

Protocole Standard Convergence Instances /VLANs
Spanning-Tree (STP) IEEE 802.1D Lente Unique
PVST+ STP Cisco Lente Multiple
Rapid Spanning-Tree (RSTP) IEEE 802.1w Rapide Unique
PVRST+ RSTP Cisco Rapide Multiple
MIST IEEE 802.1s Rapide Multiple

10.1. PVST+

PVST+ est la version Cisco améliorée de STP IEEE 802.1D-2004.

Avec PVST+, il y a une instance STP par VLAN.

PVRST+ est la version améliorée de RSTP.

MST est un standard IEEE 802.1s de l’implémentation propriétiaire du Cisco Multiple Instances Spanning Tree Protocol (MISTP). MST distribue la charge de plusieurs VLANs sur plusieurs liens STP.

10.2. RSTP / PVRST+

RSTP / PVRST+ font fait passer le temps de convergence à 6 secondes maximum ce qui les rend beaucoup plus opérationnels que STP.

Pour l'activer, en mode de configuration globale :

(config)#spanning-tree mode rapid-pvst

En général, RSTP fonctionne de la même manière que STP :

  • Mêmes règles d’élection du commutateur Root
  • Mêmes règles de sélection d’un port Root sur un commutateur non-Root
  • Mêmes règles d’un unique port Designated sur un segment physique et les autres en état “Blocking”.

10.3. Différences RSTP / STP

Les différences par rapport à STP :

  1. Il n'y a plus que trois états pour les ports RSTP :
  • Discarding (au lieu de Disabled, Blocking et Listening)
  • Learning et Forwarding (gardant la même fonction)
  1. 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.
  2. Types. 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+. Les ports Point-to-Point connectent des commutateurs entre eux.
    Alors que STP attend passivement des BPDUs pour agir, RSTP négocie le statut des liens rapidement (3 X le Hello Time = 6 secondes).

On peut voir des paquets RSTP ici : https://www.cloudshark.org/captures/4d3b1f118872

11. Diagnostic Spanning-Tree

  • Vérification du protocole ieee (pvst) ou rstp (rapid-pvst)
  • Identification du VLAN
  • Identification du BID du commutateur
  • Identification du Root ID
  • Correspondance des délais (Hello Time, Fordward Delay, Max Age)
  • État des ports
  • Rôle des ports

11.1. Diagnostic de base

Switch#show spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    24577
             Address     0001.96C7.DC42
             Cost        4
             Port        26(GigabitEthernet1/2)
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     0001.4373.1102
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Gi1/1            Altn BLK 4         128.25   P2p
Gi1/2            Root FWD 4         128.26   P2p
Fa0/1            Desg FWD 19        128.1    P2p
Fa0/2            Desg FWD 19        128.2    P2p

Où on identifie :

  • protocol ieee
  • Root ID
  • Max Age
  • Forward Delay
  • Bridge ID
  • Role des interfaces
  • Sts
  • Cost, Prio.Nbr, ...

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

Vérification générale de Spanning-Tree :

S1#show spanning-tree summary
Switch is in pvst mode
Root bridge for: none
Extended system ID                      is enabled
Portfast Default                        is edge
Portfast Edge BPDU Guard Default        is disabled
Portfast Edge BPDU Filter Default       is disabled
Loopguard Default                       is disabled
PVST Simulation Default                 is enabled but inactive in pvst mode
Bridge Assurance                        is enabled but inactive in pvst mode
EtherChannel misconfig guard            is enabled
Configured Pathcost method used is short
UplinkFast                              is disabled
BackboneFast                            is disabled

Name                   Blocking Listening Learning Forwarding STP Active
---------------------- -------- --------- -------- ---------- ----------
VLAN0001                     0         0        0          2          2
VLAN0010                     0         0        0          3          3
VLAN0099                     0         0        0          2          2
---------------------- -------- --------- -------- ---------- ----------
3 vlans                      0         0        0          7          7

12. Références STP

Author image
Francois Goffinet est formateur Cisco Systems depuis 2002. Passionné des technologies des réseaux, de virtualisation et en nuage, Web et de cybersécurité souvent en Open Source ou Unix-Like, devops.