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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
R2(config)#int f1/1
R2(config-if)#span vlan 10 cost 20
R2(config-if)#^Z
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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