Lorsque Spanning-Tree (STP) résout une boucle dans un réseau de
switches, il respecte une série de paramètres permettants de déterminer
le meilleur chemin vers le Root Bridge, ce « chemin » sera identifié sur
chaque switch par le « Root Port »…
Ces critères sont, par ordre décroissant de priorité:
- Le « Root Path Cost »: la somme des costs des interfaces par lesquelles le BPDU entre.
- Le Bridge ID du switch voisin.
- Le Port-ID du switch voisin.
Le Root path cost peut être influencé en modifiant le cost des interfaces par lesquelles les BPDUs entrent.
Le Bridge ID quant à lui peut être manipulant en ajustant le priorité de
STP. C’est ce que l’on fait généralement pour s’assurer qu’un switch
précis soit élu le Root-Bridge. Il est donc délicat de la modifier afin
d’influencer le choix du RP (root-port).
Il peut arriver que deux liens, mènent au Root Bridge avec le même cost,
et que le Bridge ID du voisin soit identique (deux liaisons parallèles
entre deux mêmes switches), c’est là qu’intervient le Port-ID. Comme
pour tout le reste dans STP, le plus petit Port-ID sera le meilleur.
En réalité le port ID est constitué de deux élements…
- La priorité du port codée sur 8 bits (0-255)
- L’identifiant du port codé sur 8 bits, dépendant du matériel donc non modifiable.
En général ce détail est simplifié en disant qu’à cost égal et à
bridge-id voisin égal, le switch choisi la plus petit interface (par
classement alphanumérique)… par exemple fastEthernet0/0 est plus petit
que fastEthernet0/1 … mais en réalité, chacun de ses ports a un numéro
d’identification qui lui est associé (qui reflète d’ailleurs la logique
simplifiée décrite ci-dessus).
Bien que le principe semble simple, sa compréhension peut-être délicate.
En effet, la modification du cost d’une interface a un effet sur le
switch local… parce qu’il est additionné au Root-Path-Cost présent dans
le BPDU … par contre … La priorité du port quant à elle a un effet
indirect. Le switch choisira l’interface par laquelle il reçoit le
Port-ID le plus faible … ce qui implique que l’information est donnée
par le switch voisin.
Voyons cela dans la pratique…
Topologie utilisée
SWITCH-B et SWITCH-C sont connectés par leurs interfaces respectives
Fa0/1, Fa0/2, FA0/9 et Fa0/10. Les interfaces Fa0/1 et Fa0/2 sont
configurée en un Etherchannel statique, il en va de même pour Fa0/9 et
Fa0/10.
De la sorte, nous avons deux switches liées par deux etherchannel parallèles, de cost égaux etc.
Analyse de la topologie de base
SWITCH-B#show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 000e.84fd.c440
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 000e.84fd.c440
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Po1 Desg FWD 12 128.65 P2p
Po2 Desg FWD 12 128.66 P2p
SWITCH-B#
Actuellement SWITCH-B est le root-bridge. Les deux Etherchannels (Po1 et
Po2) sont donc des DP (Designated Port) et sont dans un état
« forwarding ». C’est donc du côté de SWITCH-C qu’il y aura un port
bloquant.
SWITCH-C#show spanning-tree vlan 1 VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 32769 Address 000e.84fd.c440 Cost 12 Port 65 (Port-channel1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address 000f.28a2.d740 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Po1 Root FWD 12 128.65 P2p Po2 Altn BLK 12 128.66 P2p SWITCH-C#
On note ici que Po2 est bloquant (Altn BLK). Pourquoi ? … Po1 et Po2 ont
le même Root Path Cost, dés lors le switch tente de les départager avec
le BID du voisin… hors c’est le même … il lui reste alors le Port-ID du
voisin… Po1 sur SWITCH-B a une valuer de 128.65, contre 128.66 pour
Po2, dés lors quand SWITCH-C reçoit le BPDU provenant de Po1 de SWITCH-B
il le considère comme meilleur et Po1 devient alors le RP.
Modifier le RP en agissant sur le cost
Sans doute la méthode la plus simple, il suffit de modifier le cost de
l’interface par laquelle entre le BPDU. Par exemple ici on peut réduire
le cost de Po2 sur SWITCH-C. Ce qui diminuera le Root Path Cost par ce
lien et le définira comme RP.
SWITCH-C(config)#interface port-channel 2 SWITCH-C(config-if)#spanning-tree vlan 1 cost 11
Vérifions…
SWITCH-C#show spanning-tree vlan 1 VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 32769 Address 000e.84fd.c440 Cost 11 Port 66 (Port-channel2) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address 000f.28a2.d740 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Po1 Altn BLK 12 128.65 P2p Po2 Root FWD 11 128.66 P2p SWITCH-C#
Le résultat correspond à nos attentes, Po2 a maintenant un cost de 11 et
est donc le meilleur chemin vers le root, et donc élu RP … Po1 devient
donc le port bloquant.
Simple … efficace … mais … modifier le cost d’une interface a un impact
sur l’ensemble de la topologie. Si plusieurs switches sont en cascade,
modifier le cost sur une interface impacte tous les switches en aval.
On peut donc procéder autrement…
Modifier le RP en agissant sur le Port-ID
Ici c’est plus délicat. On va devoir modifier la priorité du port par
lequel est émis le BPDU reçu. Donc pour favoriser Po2 sur SWITCH-C, il
va falloir réduire la valeur de priorité de PO2 (plus petit = meilleur)
sur SWITCH-B…
Remarque: dans un « show spanning-tree », la colonne « Prio.Nbr »
indique la valeur que le switch inscrira dans le BPDU quand il l’émettra
par cette interface.
Tout d’abord on remet le cost par défaut sur SWITCH-C…. (SWITC-C Po1 redevient donc le RP et Po2 redevient bloquant).
SWITCH-C(config)#interface port-channel 2 SWITCH-C(config-if)#no spanning-tree vlan 1 cost 11
Ensuite on passe sur SWITCH-B et on défini une valeur de priorité de
port plus faible pour Po2 de sorte que SWITCH-C préfère les BPDU émis
par cette interface…
SWITCH-B(config)#interface port-channel 2 SWITCH-B(config-if)#spanning-tree vlan 1 port-priority 112
Notez que la valeur de priorité (128 par défaut) doit être un incrément
de X … où X dépend du switch, de l’IOS etc… par exemple sur le c2950 que
j’utilise pour l’exemple, il faut utiliser des incréments de 16
(128-16=112).
Vérifions d’abord le résultat sur SWITCH-B…
SWITCH-B#show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 000e.84fd.c440
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 000e.84fd.c440
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Po1 Desg FWD 12 128.65 P2p
Po2 Desg FWD 12 112.66 P2p
SWITCH-B#
On voit bien ici que la priorité de Po2 a été ajustée … mais il ne faut
pas oublié que cela n’a pas d’effet local, c’est la valeur indiquée dans
le BPDU lorsqu’il est transmis par cette interface.
Voyons maintenant sur SWITCH-C…
SWITCH-C#show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 000e.84fd.c440
Cost 12
Port 66 (Port-channel2)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 000f.28a2.d740
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Po1 Altn BLK 12 128.65 P2p
Po2 Root FWD 12 128.66 P2p
SWITCH-C#
L’interface Po2 est bien devenue le RP sans modifier son cost. Par
contre on ne voit pas ici le changement de priorité … de nouveau cette
commande n’affiche que la valeur de l’interface locale … pour voir la
valeur reçue dans le BPDU il faut gratter plus loin…
SWITCH-C#show spanning-tree vlan 1 detail VLAN0001 is executing the ieee compatible Spanning Tree protocol Bridge Identifier has priority 32768, sysid 1, address 000f.28a2.d740 Configured hello time 2, max age 20, forward delay 15 Current root has priority 32769, address 000e.84fd.c440 Root port is 66 (Port-channel2), cost of root path is 12 Topology change flag not set, detected flag not set Number of topology changes 8 last change occurred 00:14:48 ago from Port-channel1 Times: hold 1, topology change 35, notification 2 hello 2, max age 20, forward delay 15 Timers: hello 0, topology change 0, notification 0, aging 300 Port 65 (Port-channel1) of VLAN0001 is blocking Port path cost 12, Port priority 128, Port Identifier 128.65. Designated root has priority 32769, address 000e.84fd.c440 Designated bridge has priority 32769, address 000e.84fd.c440 Designated port id is 128.65, designated path cost 0 Timers: message age 1, forward delay 0, hold 0 Number of transitions to forwarding state: 4 Link type is point-to-point by default BPDU: sent 4, received 2207 Port 66 (Port-channel2) of VLAN0001 is forwarding Port path cost 12, Port priority 128, Port Identifier 128.66. Designated root has priority 32769, address 000e.84fd.c440 Designated bridge has priority 32769, address 000e.84fd.c440 Designated port id is 112.66, designated path cost 0 Timers: message age 1, forward delay 0, hold 0 Number of transitions to forwarding state: 4 Link type is point-to-point by default BPDU: sent 4, received 2202 SWITCH-C#
Cette commande affiche le détail de STP pour le VLAN1, et plus
particulièrement les informations reçues dans les BPDU pour les
différentes interfaces concernées (PO& et Po2 dans ce cas-ci).
On voit bel et bien ici que Po2 (le port 66) a reçu un BPDU avec un
port-id de 112.66 (112 est la priorité, 66 est le n° du port sur
SWITCH-B).
0 commentaires:
Enregistrer un commentaire