Raison d'être
En fonctionnement normal, les switchs s'échangent leur table de configuration des adresses port/MAC pour savoir où orienter les trames vers les detinataires (couche OSI 2, Liaison).
Fonctionnement normal
Le switch 1 recevra la liste des hôtes du switch 2 associés à son port 8
Le sw2 recevra la liste des hôtes de sw associés à son port 0
SW1
port | MAC |
1 | M11 |
3 | M13 |
8 | M21, M25 |
|
|
SW2
port | MAC |
0 | M11, M13 |
1 | M21 |
5 | M25 |
|
Fonctionnement en boucle
Avec trois SW, cela se complique singulièrement ...
- SW1:port8 transmet M11 et M13 à SW2
- SW2 enregistre M11 et M13 port 0
- SW2 transmet P21 et P25 à SW3 mais aussi M11 et M13 car il est capable de les joindre.
- SW3 enregistre M11, M13, M21 et M25 sur son port 0 et transmet l'info à SW1
- SW1 reçoit les MAC de SW3 plus celles de SW2 et les siennes propres par le port 0.
Du coup, il ne sait plus comment joindre M11 et M13 car il risque de modifier sa table ARP et supprimer les connexions directes des ports 1 et 3 ...
Bien sûr, SW2 et SW3 sont dans le même cas pour leurs propres hôtes … et voilà un joyeux B... Boucle ?
SW1
port | MAC |
0 | M21, M25, M31, M32, M11, M13 |
1 | M11 |
3 | M13 |
8 | M21, M25, M31, M32, M11, M13 |
|
|
SW1
port | MAC |
0 | M11, M13, M31, M32, M21, M25 |
1 | M21 |
5 | M25 |
8 | M31, M32, M11, M13, M21, M25 |
|
|
SW3
port | MAC |
0 | M21, M25, M11, M13, M31, M32 |
1 | M31 |
5 | M32 |
8 | M11, M13, M21, M15, M31, M32 |
|
Les tables ARP changeront en permanence et les switch ne sauront plus où envoyer les trames à destination.
Et en plus, à force de boucler, les trames de diffusion, multidiffusion et monodiffusion inconnues vont très vite saturer le réseau. Ouille!
Exemple : une requête ARP est envoyée à tous les ports sauf celui d'entrée. La table ARP sera modifiée en conséquence mais plusieurs chemins physiques vont probablement créer des boucles infinies et les switchs seront débordés.
Posons le décors
Soit le réseau ci-contre, contenant des boucles :
Il y a deux boucles disjointes (S1-S2-S4-S5-S1 et S2-S3-S4-S2) plus une boucle globale (S1-S2-S3-S4-S5-S1) et dont tous les liens sont de même débit (coût égal).
Algorithme du protocole (STA)
STP commence par choisir un pont racine unique (admettons que c'est S2).
Chaque switch déterminera un chemin unique (le moins coûteux) vers le pont racine.
Ensuite, les chemins inutiles, redondants, sont bloqués (non-forwarding)
Si l'un des liens utilisés vient à se rompre, l'algorithme recalcule les chemins comme avant, ce qui permet de réactiver des liens alternatifs s'ils existent.
Ok, si un lien sans alternative (comme S3-S6) est défectueux, le switch (S6) est alors isolé.
Les switchs s'échangent des informations toutes les 2 secondes pour faire fonctionner STP.
BPDU (Bridge Protocol Data Unit)
Les informations sont échangées à l'aide de trames BPDU (Bridge Protocol Data Units -
unités de données du protocole de pontage) pour partager des informations sur eux-mêmes et sur leurs connexions.
Il existe trois types de trames BPDU :
- la configuration BPDU (CBPDU), utilisé pour le calcul du spanning tree ;
- la notification de changement de topologie (TCN), utilisé pour annoncer les changements topologiques ;
- l'acquittement de changement de notification de la Topologie (TCA).
Elles contiennent aussi le BID racine, le coût du chemin employé, le BID et le port de l'émetteur et des informations de temps
Le BID (ID de pont) contient une valeur de priorité (4b), un ID système étendu (12b) et l'adresse MAC du commutateur (48b),
ce qui donne 8 octets, BIDR de 6 à 13 et BID de 18 à 25
Les BPDU sont envoyés sur l'adresse multicast 01:80:C2:00:00:00.
Les BPDU permettent de choisir le pont racine, les ports racine, les ports désignés et les ports alternatifs.
Remarque : le STP est calculé pour chaque VLAN. Chaque port peut donc être ouvert pour un VLAN et fermé pour un autre.
Choix du pont racine
switch = commutateur +/- = pont …
Le pont choisi est déterminé en fonction d'une priorité et de la valeur de son adresse MAC.
- La priorité par défaut est de 32769 mais on peut la changer.
- La plus petite valeur de la priorité est la plus grande priorité
- Si 2 ponts ont la même priorité, c'est celui avec l'adresse mac la plus petite qui aura la plus grande priorité
Calcul du coût du chemin
Lorsque la racine est trouvée, les switch transmettent un coût de chemin racine interne (à chaque pont) en additionnant les coûts le long des chemins vers la racine.
Le coût dépend du débit du lien (100Mb = 19, 1Gb = 4, 10Gb = 2)
Ici on voit bien les coûts des chemins.
Se pose le problème de S5 qui peut passer soit par S1, soit par S4 pour rejoindre S2.
Si on a une priorité plus basse dans S1 que dans S4, on passera par S1.
Mais si S1 et S4 ont la même priorité, c'est l'adresse MAC qui fera la différence.
On estimera que M4 est plus petite que M1 et donc c'est le chemin via S4 qui sera choisi.
port racine, désignés et bloqué
Chaque switch, sauf la racine, se choisira un port racine qui sera celui qui mène vers le pont racine avec le moindre coût.
Ainsi, pour S4, le port racine est le port direct vers S2 (coût=19) et non via S3 (coût=38)
Si un switch possède plusieurs ports à coût égal vers la racine, on utilise :
La BID du pont expéditeur (qui est côté racine) la + faible
(= priorité +n° VLAN, 32766/défaut +1 de vlan1/défaut = 32769)
Exemple : BIDA>BIDB
La priorité de port la plus faible (si on a 2 câbles entre deux même sw)
L'ID de port expéditeur le plus faible (même cas que le point précédent)
Il faut bien faire qqch pour les démarquer. Non ?
Sur chaque segment entre deux switchs, l'un des ports sera "désigné".
- Si il y a un port racine, l'autre sera désigné.
- Si il s'agit du pont racine, tous ses ports seront désignés.
- Sinon, c'est le port qui sort d'un des deux switchs vers le pont racine qui sera le port désigné.
Si un port n'est ni racine, ni désigné, il sera bloqué et le tour est joué.
Les ports prennent donc les états suivants durant le déroulement du protocole STP :
- désactivation : pas de transmission, le port est désactivé administrativement.
- blocage : le port ne transmet rien et écoute les BPDU (BID commutateur racine, BID pont racine
- écoute : le port reçoit et émet des BPDU
- apprentissage : reçoit et traite les BPDU, des BPDU et commence à remplir sa table MAC
- Acheminement, envoie et reçoit des demandes BPDU et transfert le trafic normalement.
Lien cisco : Configuring Spanning Tree - Cisco