Spanning Tree Protocol: 1 - Tradicional

Un switch Ethernet transparente debe funcionar de la siguiente manera:

  • El switch debe escuchar las tramas que entran por los puertos para averiguar la MAC del dispositivo en dicho puerto. Con esa MAC construye una tabla indicando en que puerto la ha escuchado.
  • El switch está constantemente actualizando la tabla de MAC detectando nuevas MAC o que alguna haya cambiado a otro puerto. El switch puede enviar tramas mirando la MAC destino en la tabla de MACs que indica porque puerto debe enviarlas.
  • Si una trama llega con la dirección broadcast como dirección destino, entonces debe enviar la trama a todos los puertos disponibles a excepción del puerto por donde se recibió. De esta forma los broadcast pueden alcanzar todas las redes de Capa 2. Un switch solo segmente dominios de colisión pero no dominios de broadcast.
  • Si una trama llega con una dirección de destino que no se encuentra en la tala de MACs se trata de igual forma que el caso anterior (broadcast) y se envía a todos los puertos excepto por donde se recibió. Una vez que el switch aprenda por que puerto debe enviar esa trama almacena las MAC en la tabla. Este tipo de tramas se conoce como unknown unicast.
  • Las tramas que cruzan el switch no se pueden modificar por el mismo por lo que el proceso es transparente.

Los switches envían mensajes de datos mediante bridge protocol data units (BPDU) por lo puertos usando la MAC origen del propio puerto y como destino a una dirección multicast (de STP) 01-80-c2-00-00-00. Existen 2 tipos de BPDU:

  • BPDU de configuración, que se usa para el calculo de spanning-tree.
    Protocol ID, Version, Message Type, Flags, Root Bridge ID, Root Path Cost
  • BPDU de notificación de Cambio de Topología (Topology Change Notification (TCN) BPDU), que se usa para anunciar cambios en la topología de la red.
    Sender Bridge Id, Port ID, Message Age, Maximum Age, Hello time, Forward time

Para que la topología esté libre de bucles se debe tomar un punto de referencia que se llama root bridge (el termino bridge "puente" se usa ya que esta tecnología se desarrollo para puentes pero se puede pensar como un switch).

Para elegir al root bridge entre todos los switches se usa el bridge ID que todos los switches tienen, es único y consiste en un valor de 8 bytes dividido en dos partes:

  • Bridge Priority (2 bytes): es la prioridad de un switch en relación con el resto de switches. La prioridad puede estar entre 0 y 65535 y por defecto está en 32768 (0x80000).
  • MAC Address (6 bytes): la dirección MAC usada se obtiene del módulo de la supervisora, el backplane o una lista de 1024 direcciones que son asignadas a cada supervisora o backplane dependiendo del modelo de switch. Es una dirección única y almacenada internamente que no puede ser modificada por el usuario.

Cuando un switch se inicia no conoce su entorno por lo que asume que él es el root bridge. Cada switch empieza a enviar BPDUs con el root bridge ID igual que su bridge ID lo mismo que el sender bridge id que sirve para indicar quien es el que envía el BPDU. Una vez que se ha elegido el root bridge la BPDUs de configuración son enviadas solo por el root bridge y el resto de switches solo las reenvían añadiendo su bridge ID al BPDU.

Los BPDUs recibidos se analizan para ver si el root bridge que se anuncia es mejor (es menor) que el que tiene el switch, por lo que los nuevos BPDUs que envía anuncia este nuevo root bridge manteniendo el sender bridge ID él mismo.

Cuando el proceso termina todos los switches implicados están de acuerdo en cual es el root bridge (solo uno). Si un nuevo switch se conecta todo el proceso se vuelve a repetir hasta que se decida cual es el nuevo root bridge. El proceso de elección del switch root bridge se repite cada 2 segundos (hello time) y los empieza el root bridge actual.

Una vez que se ha elegido el root bridge el resto de switches deben elegir su root port (solo debe haber uno por switch) que es el puerto con menor coste hacia el root bridge (en caso de empate de mas de un puerto será el puerto con menor path cost y el puerto con menor ID. El coste es un valor acumulativo de todos los enlaces hasta llegar al root bridge. Cada enlace tiene un coste que se llama path cost y la suma de todos los costes de todos los enlaces hasta llegar al root bridge se llama root path cost y es el que se envía en el BPDU.

Link Bandwidth STP Cost
4 Mbps 250
10 Mbps 100
16 Mbps 62
45 Mbps 39
100 Mbps 19
155 Mbps 14
622 Mbps 6
1 Gbps 4
10 Gbps 2

El coste de root path cost se determina de la siguiente manera:

  1. El root bridge envía un BPDU con el root path cost a cero ya que todos sus puerto están directamente conectados.
  2. Cuando el siguiente switch recibe esta BPDU, suma al root path cost el coste del puerto por donde ha recibido la BPDU (esto se realiza nada más recibir la BPDU).
  3. Este switch vecino envía la BPDU con el nuevo valor del root path cost.
  4. Y el proceso se repite según se vaya recibiendo la BPDU a los switches según vayan estando más alejados del root bridge.
  5. Es importante remarcar que el root path cost se incrementa cuando el switch recibe la BPDU y que si calculamos el root path cost manualmente en un esquema tenerlo presente de sumar el coste cuando entra en el switch nunca cuando sale.

Cada switch almacena el mejor root path cost que ha recibido, por lo que si recibe uno mejor del que tiene almacenado guarda el nuevo y por tanto actualiza que su nuevo root port es el puerto por donde ha recibido el menor root path cost.

Una vez que se tiene el root bridge y el root port del resto de switches, estos deben elegir los designated ports (uno por cada segmento).

Si un un switch recibe una BPDU con menor root path cost asume que el puerto del switch vecino es el designated port, por el contrario si la BPDU que recibe tiene un mayor root path cost asume que su puerto (por donde recibe la BPDU) es el designated port.

Puede ocurrir que un switch reciba por varios puerto el mismo root cost path con lo cual hay un "empate" que hay que romper para ello STP tiene 4 condiciones para romper este empate:

  1. El root bridge ID más bajo.
  2. El root path cost más bajo hacia el root bridge.
  3. El bridge ID más bajo del emisor.
  4. El port ID más bajo del emisor.

Los puertos pueden desempeñar un papel según el tipo que sean:

  • puerto Root (root port):
    • Solo en switches (bridges) que no son root.
    • Envía tráfico hacia el root bridge.
    • Solo uno por switch.
    • Pueden llenar la tabla MAC.
  • Puerto Designado (designated port):
    • Aparecen en switches (bridges) tanto root como no root.
    • Todos los puertos del root bridge son puertos designados.
    • Envían y reciben tramas desde el root bridge.
    • Solo uno por segmento.
    • Pueden llenar la tabla MAC.
  • Puertos no designados (nondesignated port):
    • No envían paquete (Blocking)
    • No llenan la tabla MAC.
  • Puerto deshabilitado (Disabled port):
    • Un puerto que está en shutdown.

Cuando el STP está activo un puerto empieza en estado desactivado (Disabled) y pasa por ciertos estados hasta alcanzar el estado activo (Forwarding). Los estados son:

  • Disabled: Los puertos están administrativamente shutdown o por una condición de error están en estado Disabled. Este estado no forma parte de cambio de estados del STP.
  • Blocking: Cuando un puerto se inicializa comienza en estado Blocking para prevenir bucles. En este estado un puerto no puede ni recibir ni enviar nada ni aprende MACs solo recibe BPDUs para conocer el estado de otros switches. Además los puertos que se eliminan de la redundancia para evitar un bucle se ponen en este estado de Blocking.
  • Listening: Un puerto pasa del estado Blocking al estado Listening si el switch cree que este puerto puede ser un root o designated port y va camino de ser un puerto activo (Forwarding). En este estado (Listening) no puedo enviar o recibir tramas, pero ahora puede enviar y recibir BPDUs con lo que este switch participa activamente en el STP. Si el puerto pierde su estado de root o designated entonces vuelve al estado de Blocking.
  • Learning: Tras pasar en modo Listening durante un tiempo (llamado Forward Delay) el puerto puede pasar al estado Learning. Aún el puerto sigue sin poder mandar o recibir tramas, sigue mandando BPDUs pero ahora el switch aprende MACs que añade a la tabla de MACs (CAM). Este estado da un poco de tiempo a que el switch se asiente.
  • Forwarding: Tras otro tiempo de Forward Delay el puerto pasa del estado Learning a Forwarding. En este estado el puerto es totalmente operativo, envía y recibe tramas, BPDUs y aprende MACs.

Para saber el estado de un puerto podemos usar el comando:

Switch#show spanning-tree interface type mod/port

O para encontrar problema el comando debug:

debug spanning-tree switch state

STP usa tres temporizadores (timers) para asegurarse que la red converge correctamente, son los siguientes:

  • Hello Time: Es el intervalo de tiempo entre cada BPDU de configuración que envía el root bridge. El Hello Time configurado en el root bridge determina el Hello Time de cada switch no root ya que estos reenvían las BPDUs que recibe del root. Aunque los switches no root tienen un Hello Time configurado localmente que se usa para temporizar los BPDUs TCN (cambio de topología). IEEE 802.1D especifica por defecto un Hello Time de 2 segundos.
  • Forward Delay: El intervalo de tiempo que un switch espera en los estados Listening y Learning. Por defecto son 15 segundos.
  • Max Age: El intervalo de tiempo máximo que un switch almacena una BPDU antes de descartarla. STP almacena la "mejor" copia de BPDU que ha recibido hasta que deja de recibir las BPDUs durante el periodo de tiempo especificado por Max Age en cuyo momento asume un cambio de topología y elimina el BPDU almacenado. Por defecto este valor es de 20 segundo.

NOTA: los valores por defecto de los temporizadores están basados en que se asume que el root bridge está en el centro y de él cuelgan 6 switches.

CONSEJO: Los temporizadores STP se pueden configurar o ajustar desde la línea de comandos. Sin embargo, los valores del temporizador nunca deben cambiarse de los valores predeterminados sin una consideración cuidadosa. En tal caso, los valores deben cambiarse solo en el switch que es el Root Bridge. Los valores del temporizador se anuncian en los campos dentro de la BPDU. El Root Bridge garantiza que los valores del temporizador se propagan a todos los demás switches.

Para anunciar un cambio en la topología actual de la red, los switches envían una BPDU TCN. Un cambio de topología ocurre cuando un switch pasa un puerto al estado Forwarding o cambia un puerto de los estados Forwarding o Learning al estado Blocking (o lo que es lo mismo un puerto cambia a UP o DOWN. El switch envía una BPDU TCN por su root port para que le llegue al root bridge. La BPDU TCN no lleva información sobre el cambio en sí solo que se ha producido un cambio. El switch no envía la BPDU TCN si el puerto ha sido configurado con el parámetro PortFast.

El switch continua enviando BPDUs TCN cada intervalo Hello Time. Cuando el root bridge recibe el BPDU TCN envía la BPDU de configuración con el flag de TCN activo, lo cual hace que todos los switches acorten sus tiempos de memorización de MACs (que por defecto es 300 segundos) al tiempo de Forward Delay (que es por defecto 15 segundos).

  • Common Spanning Tree (CST): es el estándar de IEEE 802.1Q que además de especificar como se hacen los trunks, especifica una sola instancia de STP que engloba todas las VLANs. Esta instancia es conocida como Common Spanning Tree (CST). Las BPDUs son enviadas por los enlaces Trunk usando la VLAN nativa con tramas sin marcar. Teniendo una sola instancia para todas las VLANs simplifica la configuración y la carga de la CPU del switch durante los cálculos de STP aunque tiene por contra limitaciones.
  • Per-VLAN Spanning Tree (PVST): Es la versión propietaria de Cisco que ofrece más flexibilidad al usar una instancia por cada VLAN. Requiere el uso de Trunks ISL (Inter-Switch Link) por lo que en networks con PVST y CST no hay comunicación. También permite balanceo de carga teniendo un grupo de VLANs por un camino y otras VLANs por otro camino.
  • Per-VLAN Spanning Tree Plus (PVST+): Es la versión mejorada de PVST que permite interactuar switches con PVST y CST, lo que permite el uso en la misma red de PVST, PVST+ y CST.
    PVST+ actúa como traductor entre grupos de switches CST y grupos de switches PVST. PVST+ puede comunicarse directamente con PVST mediante el uso de trunks ISL. Sin embargo, para comunicarse con CST, intercambia BPDUs con CST como frames sin etiquetar a través de la VLAN nativa. Las BPDU de otras instancias de STP (otras VLAN) se propagan a través de las partes de la red CST mediante túneles. PVST+ envía estos BPDU mediante una dirección multicast única, de modo que el CST los reenvía a los vecinos sin interpretarlos primero. Eventualmente, las BPDU tunelizadas alcanzan otros switches PVST+ donde se entienden.
esquema de STP

Viendo el esquema y la siguiente tabla, podemos deducir que el Root Bridge es el SW4 ya que su Bridge ID (32769-0cee.b80a.7500) es el más bajo:

                                    Hello Max Fwd
Vlan Bridge ID                       Time Age Dly Protocol
---- ------------------------------- ---- --- --- --------
SW1  32769 (32768, 1) 0cee.b86b.7400   2  20  15  rstp
SW2  32769 (32768, 1) 0cee.b832.5600   2  20  15  rstp
SW3  32769 (32768, 1) 0cee.b832.9300   2  20  15  rstp
SW4  32769 (32768, 1) 0cee.b80a.7500   2  20  15  rstp

Según el esquema y sabiendo que el Root Bridge es el SW4, podemos deducir lo siguiente:

SW1 - Gi0/0 - designated path cost 4
SW1 - Gi0/1 - designated path cost 4
SW1 - Gi0/3 - designated path cost 0 = Root Port

SW2 - Gi0/0 - designated path cost 4 = Root Port
SW2 - Gi0/2 - designated path cost 8
SW2 - Gi1/0 - designated path cost 8

SW3 - Gi0/1 - designated path cost 4 = Root Port
SW3 - Gi0/2 - designated path cost 8

SW4 - Gi0/3 - designated path cost 0 
SW4 - Gi1/0 - designated path cost 0

En el segmento SW2-SW3 el root cost path es el mismo (8), por lo que el desempate se efectúa ya que la MAC de SW2 (0cee.b832.5600) es menor que la de SW3 (0cee.b832.9300):

SW1 - Gi0/0 - designated path cost 4 = Root
SW4 - Gi0/3 - designated path cost 0 = designated

SW1 - Gi0/0 - designated path cost 4 = designated
SW2 - Gi0/0 - designated path cost 4 = Root Port

SW1 - Gi0/1 - designated path cost 4 = designated
SW3 - Gi0/1 - designated path cost 4 = Root Port

SW2 - Gi0/2 - designated path cost 8 = designated
SW3 - Gi0/2 - designated path cost 8 = Blocked
  • Root Bridge se elige el de menor prioridad y se hay empate el de menor MAC.
  • puerto Root (root port):
    • Solo en switches (bridges) que no son root.
    • Envía tráfico hacia el root bridge.
    • Solo uno por switch.
    • Pueden llenar la tabla MAC.
  • Puerto Designado (designated port):
    • Aparecen en switches (bridges) tanto root como no root.
    • Todos los puertos del root bridge son puertos designados.
    • Envían y reciben tramas desde el root bridge.
    • Solo uno por segmento.
    • Pueden llenar la tabla MAC.
  • Puertos no designados (nondesignated port):
    • No envían paquete (Blocking)
    • No llenan la tabla MAC.
  • Puerto deshabilitado (Disabled port):
    • Un puerto que está en shutdown.
  • Estados por los que pasa un puerto de switch:
    • Disabled: Los puertos están administrativamente shutdown o Disabled. Nno forma parte del STP.
    • Blocking: Al inicio esta en Blocking para prevenir bucles. No recibe ni envie nada ni aprende MACs solo recibe BPDUs.
    • Listening: Pasa de Blocking a Listening si este puerto puede ser root o designated. No envia ni recibe tramas, pero envia y recibe BPDUs, participa en STP. Si un puerto pierde su estado de root o designated vuelve al estado de Blocking.
    • Learning: Cuando expira Forward Delay pasa a Learning. No manda ni recibe tramas, manda BPDUs, aprende MACs que añade a la tabla de MACs (CAM).
    • Forwarding: Tras otro tiempo de Forward Delay el puerto pasa a Forwarding. Puerto es totalmente operativo, envía y recibe tramas, BPDUs y aprende MACs.
  • 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.
  • Common Spanning Tree (CST): Estándar IEEE 802.1Q, una sola instancia de STP con todas las VLANs. Las BPDUs son enviadas por los enlaces Trunk usando la VLAN nativa con tramas sin marcar.
  • Per-VLAN Spanning Tree (PVST): Propietaria de Cisco, usa una instancia por cada VLAN. Requiere el uso de Trunks ISL (Inter-Switch Link), no hay comunicación entre PVST y CST. Permite balanceo de carga.
  • Per-VLAN Spanning Tree Plus (PVST+): Versión mejorada de PVST que permite interactuar entre PVST y CST.

Retro

Lugares

Redes

Sistemas

Varios