Spanning Tree Protocol: 2 - Configuración

Si dejamos la elección del Root Bridge por defecto (prioridad y MAC) puede que el resultado no sea el óptimo e incluso sea el peor de todos, como por ejemplo se elija el switch más lento y/o viejo y que no pueda con la carga del STP. Por eso si el switch más lento tiene la misma prioridad (por defecto TODOS la tienen) pero MAC más baja, será elegido como Root Bridge lo cual no interesa.

Por eso el root bridge debe ser el switch más potente y que más centrado esté en la estructura de la red, nunca un switch de acceso.

Otro punto a tener en cuenta es que pasa si el Root Bridge cae, pues que se elegirá a otro Root Bridge que puede ser otra mala elección.

Por eso para evitar sorpresas se deben hacer 2 cosas:

  • Configurar un switch para que sea Root Bridge
  • Configurar un switch como Root Bridge secundario, para el caso de que el primario falle.

Se puede configurar un switch para que sea Root Bridge con uno de estos dos métodos:

  1. Configurar manualmente la prioridad (dando un valor más bajo) para que el switch sea elegido como Root. Debemos conocer el valor de la prioridad de todos los switches en la vlan correspondiente para poder asignarle un valor menos. Para poder cambiar la prioridad usamos el comando:

    Switch(config)# spanning-tree vlan vlan-list priority bridge-priority
  2. La prioridad (bridge-priority) por defecto es de 32768, pero podemos usar de 0 a 65535. Si el sistema extendido de IDs de STP está activado, la prioridad por defecto sigue siendo 32768, pero el rango es de 0 a 61440 y en múltiplos de 4096, ya que en la prioridad está incluida la vlan ID. Valores posibles: 0 4096 8192 12288 16384 20480 24576 28672 32768 36864 40960 45056 49152 53248 57344 61440

    Forzar la elección de Root Bridge que cambia su prioridad asumiendo donde está respecto a otros switches en la red. Usaremos el comando (macro):

    Switch(config)# spanning-tree vlan vlan-list root {primary | secondary } [diameter diameter]

    Este comando es realmente una macro que ejecuta varios comandos y lo que hace es forzar (pero no garantiza) a que un switch sea el Root Bridge.

Recordemos los 4 criterios en que STP basa su elección del Root Path:

  1. El Bridge ID (prioridad y MAC) más bajo
  2. El coste de Root Peth más bajo
  3. El Bridge ID de origen más bajo
  4. El puerto (el port ID) de origen más bajo

Podemos usar el siguiente comando para cambiar el coste de un puerto:

Switch(config-if)# spanning-tree [vlan vlan-list] cost cost

Si se especifica el parámetro vlan solo se cambia el coste del puerto para dicha vlan, si no se cambia el coste para todas las vlans del puerto.

El cuarto criterio del STP es el Port ID, el cual es de 16 bits, 8 bits para la prioridad y 8 para el número de puerto. Para ver este valor podemos usar el comando:

Switch# show spanning-tree interface tipo mod/num

y nos fijamos en la columna Prio.Nbr (Prio = prioridad y Nbr = número de interface). El número de interface no siempre coincide con el número de puerto físico especialmente en switches con módulos o slots.

Para cambiar la prioridad de un puerto:

Switch(config-if) spanning-tree [vlan vlan-list] port-priority port-priority.

El valor de port-priority va de 0 a 255 y por defecto es 128.

STP usa 3 contadores (timers) para mantener la pista de los estados de los puertos y la comunicación entre switches. Recalcar que estos contadores deben modificarse en el Root Bridge ya que este propaga los 3 contadores dentro de las BPDUs.

Podemos usar uno de estos comandos para modificar el contador que queramos:

Switch(config)# spanning-tree [vlan vlan-id] hello-time seconds
Switch(config)# spanning-tree [vlan vlan-id] forward-time seconds
Switch(config)# spanning-tree [vlan vlan-id] max-age seconds

El temporizador hello-time activa los mensajes periódicos de "hello" (realmente es la configuración BPDU) que se envían desde el Root Bridge a otros switches. Este temporizador también establece el intervalo en el que un switch espera escuchar un hello enviado desde sus switches vecinos. Por defecto los BPDUs de configuración se envían cada 2 segundos. Se puede modificar el temporizador hello-timer con un valor de 1 a 10 segundos.

El temporizador forward-time determina la cantidad de tiempo que un puerto permanece en el estado de Listening antes de pasar al estado de Learning, y el tiempo que permanece en el estado de Learning antes de pasar al estado de Forwarding. Se puede modificar el temporizador forward-time con un valor de 4 a 30 segundos. Por defecto el valor es 15 segundos. Este temporizador se debe modificar solo bajo consideración cuidadosa porque el valor depende del diámetro de la red y la propagación de BPDUs en todos los switches. Un valor demasiado bajo permite que se formen bucles.

El temporizador max-age especifica el tiempo de vida de un BPDU almacenada que se ha recibido de un switch vecino con un puerto designated. Supongamos que las BPDU se reciben en un puerto de switch nondesignated cada 2 segundos, como se esperaba. Entonces ocurre un fallo (que no implique una caída enlace físico), que impide que se envíen BPDU. El switch receptor espera hasta que el temporizador max-age caduque para escuchar otras BPDUs. Si no se recibe ninguna, el puerto nondesignated pasa al estado de escucha y el conmutador receptor genera BPDU de configuración. Este puerto se convierte en el puerto designated para restaurar la conectividad en el segmento. Por defecto el valor es de 20 segundos. Permite valores de 6 a 40 segundos.

NOTA: los contadores se pueden modificar por Vlan afectando solo a dicha vlan, si no se aplicarán a todas las vlans.

Switch(config)# spanning-tree vlan vlan-id root {primary | secondary} [diameter diameter [hello-time hello-time]]

También tenemos los sigueintes métodos de convergencia de STP rápida en caso de que ocurra un fallo de enlace:

  • PortFast: habilita la conectividad rápidamente en switches de acceso donde el otro extremo son servidores. Se salta los estados Listening y Learning.
  • UplinkFast: Habilita la convergencia rápida en switches de acceso donde hay enlaces (uplinks) redundantes contra switches de distribución.
  • BackboneFast: habilita la convergencia rápida en la red core o backbone tras un cambio de topología.

La característica PortFast acorta el tiempo de los estados Listening y Learning a prácticamente nada. Cuando el enlace de un servidor levanta el puerto del switch (configurado con PortFast) pasa al estado de Forwarding inmediatamente. La detección de bucles vía STP sigue activa y en caso de que se detecte un bucle el puerto es puesto en el estado Blocking. Las BPDU TCN (notificaciones de cambio de topología) no son enviadas en un puerto con PortFast. Por defecto, PortFast está desactivado en todos los interfaces del switch.

Podemos activar PortFast globalmente en todos los puertos en modo acceso (que no sean trunk):

Switch(config)# spanning-tree portfast default

y Podemos activar o desactivar el PortFast a nivel de puerto:

Switch(config-if)# [no] spanning-tree portfast

La característica UplinkFast habilita que en switches de acceso con más de un uplink funcionando (uno como Forwarding y otros Blocking) como Root Port, cuando el uplink principal (el Forwarding) cae uno de los otros Uplinks pase de Blocking a Forwarding inmediatamente.

Para configurarlo lo hacemos de forma global para todos los puertos y para todas las Vlans:

Switch(config)# spanning-tree uplinkfast [max-update-rate pkts-per-second]

Este comando NO está permitido en el Root Bridge y además eleva la prioridad del switch a 49152 además el coste de los puertos también se elevan a 3000, evitando así ser elegido ni como RootBridge ni los puertos como Root Port. El switch envía tramas dummy multicast al destino 0100.0ccd0cdcd cada max-update-rate.

Es muy simple de configurar y opera acortando el contador Max Age cuando sea necesario. Aunque esta función acorta el tiempo que un switch espera para detectar un fallo de Root Path, los puertos deben pasar por el contador Forward Delay en los estados Listening y Learning, por lo que solo reduce el tiempo de convergencia de 50 segundos a 30. Debe configurarse en todos los switches de la red.

Para configurar BackboneFast usamos el comando global:

Switch(config)# spanning-tree backbonefast

Para comprobar el estado del BackboneFast podemos ejecutar este comando:Switch# show spanning-tree backbonefast BackboneFast is enabled

Varios comandos para monitorizar el estado del STP.

Muestra todos los posibles parámetros de STP para todas las Vlans (detallado o no):

Switch# show spanning-tree [detail]

Muestra el número total de puertos de switch actualmente en cada uno de los estados de STP:

Switch# show spanning-tree [vlan vlan-id] summary

Busca el Root Bridge ID, el Root Port y el coste del Root Path:

Switch# show spanning-tree [vlan vlan-id] root

Muestra el Bridge ID y los contadores de STP en el switch actual:

Switch# show spanning-tree [vlan vlan-id] bridge

Muestra la actividad de STP en la interface especificada:

Switch# show spanning-tree interface type port

Muestra el estado de UplinkFast:

Switch# show spanning-tree uplinkfast

Muestra el estado de BackboneFast:

Switch# show spanning-tree backbonefast
esquema

Según el esquema y sus valores pro defecto el RootBridge es el SW5, lo cual es una muy mala elección, los segmentos cortados son SW1-Gi0/1(X)--SW3-Gi0/1(D) y SW3-Gi0/3(X)--SW4-Gi0/3(D). (Donde (X) es puerto bloqueado y (D) puerto designado).

Si configuramos menor prioridad en el SW1 con el siguiente comando:

spanning-tree vlan 1-4094 priority 4096

Conseguimos que SW1 sea RootBridge y ahora los segmentos cortado son SW2-Gi0/2(D)--SW3-Gi0/2(X) y SW3-Gi0/3(D)--SW4-Gi0/3(X). (Donde (X) es puerto bloqueado y (D) puerto designado).

  • La prioridad (bridge-priority) por defecto es de 32768, pero podemos usar de 0 a 65535. Si está activado el sistema de ID extendido, los posible IDs son: 0 4096 8192 12288 16384 20480 24576 28672 32768 36864 40960 45056 49152 53248 57344 61440.
  • El valor de port-priority va de 0 a 255 y por defecto es 128.
  • hello-time: Por defecto los BPDUs se envían cada 2 segundos. Valores permitidos de 1 a 10 segundos.
  • forward-time: Por defecto el valor es 15 segundos. Valores permitidos de 4 a 30 segundos.
  • max-age: Por defecto el valor es de 20 segundos. Permite valores de 6 a 40 segundos.
  • PortFast: habilita la conectividad rápidamente en switches de acceso donde el otro extremo son servidores. Se salta los estados Listening y Learning.
  • UplinkFast: Habilita la convergencia rápida en switches de acceso donde hay enlaces (uplinks) redundantes contra switches de distribución.
  • BackboneFast: habilita la convergencia rápida en la red core o backbone tras un cambio de topología.

Retro

Lugares

Redes

Sistemas

Varios