A l'issue d'un cours que j'ai donné sur les protocoles Spanning Tree, voici une simulation que j'avais faite sous GNS3. A noter que GNS3 ne permet que la mise en oeuvre de PVST (Per Vlan Spanning Tree) qui est basé sur l'IEEE 802.1d mais c'est amplement suffisant pour comprendre les mécanismes de base.
C'est une topologie très simple, donc une bonne opportunité pour regarder d'un peu plus près comment ça marche
Voici la topologie. Tous les liens sont des trunks avec un Cost 19, et on n'utilise qu'un seul VLAN (VLAN 10).
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| If_Vlan10
1.1.1.1/24
+----+
| R1 |
+----+
f1/0/ \f1/1
/ \
/ \
/ \
/ \
f1/0/ \f1/1
+----+f1/1 f1/0+----+
| R3 |----------| R2 |
+----+ +----+
If_Vlan10 If_Vlan10
1.1.1.3/24 1.1.1.2/24 |
Je propose de faire la configuration minimale sans aucun réglage puis on regarde ce qui se passe.
Voici la configuration sur R1 :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| R1#vlan data
R1(vlan)#vlan 10
VLAN 10 modified:
R1(vlan)#exit
APPLY completed.
Exiting....
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#spanning-tree vlan 10
R1(config)#int f1/0
R1(config-if)#switchport trunk encap dot1q
R1(config-if)#switchport mode trunk
R1(config-if)#no shut
R1(config-if)#int f1/1
R1(config-if)#switchport trunk encap dot1q
R1(config-if)#switchport mode trunk
R1(config-if)#no shut
R1(config-if)#int vlan 10
R1(config-if)#ip add 1.1.1.1 255.255.255.0
ip add 1.1.1.1 255.255.255.0
R1(config-if)#^Z
R1#wr
Building configuration...
*Mar 1 00:05:01.651: %SYS-5-CONFIG_I: Configured from console by console
[OK] |
C'est la même config sur R2 et R3 (hormis les interfaces Vlan10 bien sûr).
Voyons l'état du Spanning Tree sur les 3 switches :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| R1#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c800.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 FWD 0 32768 c800.0da8.0001 128.41
FastEthernet1/1 128.42 128 19 FWD 0 32768 c800.0da8.0001 128.42 |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| R2#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 19
Port 42 (FastEthernet1/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c801.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 FWD 19 32768 c801.0da8.0001 128.41
FastEthernet1/1 128.42 128 19 FWD 0 32768 c800.0da8.0001 128.42 |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| R3#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 19
Port 41 (FastEthernet1/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c802.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 FWD 0 32768 c800.0da8.0001 128.41
FastEthernet1/1 128.42 128 19 BLK 19 32768 c801.0da8.0001 128.41 |
Le port f1/1 de R3 est passé Blocking :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| If_Vlan10
1.1.1.1/24
+----+
| R1 |
+----+
f1/0/ \f1/1
/ \
/ \
/ \
/ \
f1/0/ \f1/1
+----+f1/1 f1/0+----+
| R3 |-X--------| R2 |
+----+ +----+
If_Vlan10 If_Vlan10
1.1.1.3/24 1.1.1.2/24 |
Que s'est-il passé ?
1) Il y a d'abord eu élection du
Root Bridge. L'algorithme STP le détermine de la façon suivante :
- c'est le Bridge qui a la plus petite priorité,
- si les Bridges ont la même priorité, c'est le plus petit
Bridge ID (généralement égal à la MAC adresse) qui remporte l'élection.
Dans notre cas de figure, tous les Bridges avaient comme priorité 32768. R1 ayant le plus petit Bridge ID (c800.0da8.0001), il devient Root Bridge.
2) Tous les Bridges calculent ensuite le Cost Spanning Tree pour joindre le Root Bridge.
Les interfaces f1/0 de R3 et f1/1 de R2 ont un Cost égal à 19 pour joindre R1.
L'algorithme intervient pour "ouvrir" le lien entre R2 et R3 de la façon suivante :
- R3 calcule que le coût pour joindre R1 au travers de R2 sera de 19+19=38
- R2 calcule que le coût pour joindre R1 au travers de R3 sera de 19+19=38
Pourquoi f1/1 de R3 va-t-il bloquer ?
Parce que, R2 et R3 ayant la même priorité, c'est encore une fois le Bridge ID qui va servir de
tie-break : R2 ayant un Bridge ID inférieur à celui de R3, c'est R3 qui va bloquer.
Si depuis R3, je lance un ping sur l'interface Vlan10 de R2, ce traffic passera par R1 :
Code :
1 2 3 4 5 6
| R3#ping 1.1.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/10/28 ms |
ce qu'on peut vérifier en scrutant le switching cache de R3 :
Code :
1 2 3 4 5 6 7
| R3#sh mac-address-table
Destination Address Address Type VLAN Destination Port
------------------- ------------ ---- --------------------
c802.0da8.0000 Self 1 Vlan1
c802.0da8.0000 Self 10 Vlan10
c800.0da8.0000 Dynamic 10 FastEthernet1/0
c801.0da8.0000 Dynamic 10 FastEthernet1/0 |
Comment influencer la décision de l'algorithme lorsqu'il bloque le lien R2-R3 ?
On peut jouer sur la priorité. On peut par exemple augmenter la priorité Spanning Tree de R2 :
Code :
1 2 3 4 5
| R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#span vlan 10 priority 33000
R2(config)#^Z
^Z |
C'est alors l'interface f1/0 de R2 qui passe Blocking et bien sûr l'interface f1/1 de R3 passe Forwarding :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| R2#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 19
Port 42 (FastEthernet1/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 33000
Address c801.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 BLK 19 32768 c802.0da8.0001 128.42
FastEthernet1/1 128.42 128 19 FWD 0 32768 c800.0da8.0001 128.42 |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| R3#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 19
Port 41 (FastEthernet1/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c802.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 FWD 0 32768 c800.0da8.0001 128.41
FastEthernet1/1 128.42 128 19 FWD 19 32768 c802.0da8.0001 128.42 |
qui donne la topologie suivante :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| If_Vlan10
1.1.1.1/24
+----+
| R1 |
+----+
f1/0/ \f1/1
/ \
/ \
/ \
/ \
f1/0/ \f1/1
+----+f1/1 f1/0+----+
| R3 |--------X-| R2 |
+----+ +----+
If_Vlan10 If_Vlan10
1.1.1.3/24 1.1.1.2/24 |
Revenons au scenario où c'est la l'interface f1/1 de R3 qui bloque. Pour ça, je remets la priorité 32768 à R2 puis j'attends un peu pour laisser agir l'algo :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| R2(config)#span vlan 10 prior 32768
R3#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 19
Port 41 (FastEthernet1/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c802.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 FWD 0 32768 c800.0da8.0001 128.41
FastEthernet1/1 128.42 128 19 BLK 19 32768 c801.0da8.0001 128.41 |
Une autre façon de contrôler le blocage du lien R2-R3 consiste à agir sur le Cost Spanning Tree d'un des liens R2-R1 ou R3-R1. On peut par exemple augmenter le Cost R2-R1 (baisser le Cost R3-R1 reviendrait au même) :
Code :
1 2 3
| R2(config)#int f1/1
R2(config-if)#span vlan 10 cost 20
R2(config-if)#^Z |
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| R2#sh span vlan 10 brief
VLAN10
Spanning tree enabled protocol ieee
Root ID Priority 32768
Address c800.0da8.0001
Cost 20
Port 42 (FastEthernet1/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address c801.0da8.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 0
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/0 128.41 128 19 BLK 19 32768 c802.0da8.0001 128.42
FastEthernet1/1 128.42 128 20 FWD 0 32768 c800.0da8.0001 128.42 |
Voilà
Steph