STP (Spanning Tree Protocol)

El Spanning Tree Protocol es un protocolo de red que evita bucles en redes de capa 2, comunes en configuraciones con múltiples switches y enlaces redundantes. Estos bucles pueden provocar tráfico duplicado, sobrecarga en la red e interrupciones. STP permite a los switches identificar una topología libre de bucles, estableciendo un "árbol de expansión" y desactivando algunos enlaces redundantes.

Versiones

STP fue inicialmente definido en el estándar IEEE 802.1D. Existen varias versiones que mejoran su velocidad y funcionalidad:

  • STP (IEEE 802.1D): Versión original.
  • RSTP (Rapid Spanning Tree Protocol - IEEE 802.1w): Mejora la velocidad de convergencia.
  • MSTP (Multiple Spanning Tree Protocol - IEEE 802.1s): Permite múltiples instancias de STP, una para cada VLAN, optimizando el uso de enlaces redundantes en redes grandes.

Funcionamiento de STP

STP evita los bucles de capa 2 mediante el bloqueo de ciertos puertos para que los datos solo tengan un camino posible hacia el root. Sin STP, los bucles pueden causar problemas en las tablas MAC:

  • Generación de Tablas MAC: Cada switch construye una tabla MAC, que asocia direcciones MAC con puertos específicos. Los switches aprenden esta información al recibir tramas.
  • Problemas en Bucles: En un bucle, los paquetes se duplican y circulan indefinidamente:
    1. Las tablas MAC se llenan de entradas duplicadas o incorrectas, ya que los switches reciben el mismo paquete en múltiples puertos.
    2. Esto puede llevar a una sobrecarga en los switches, que consumen más CPU y memoria, y provocan pérdida de conectividad.

Bucles de Capa 2

Los bucles de red son situaciones en las que hay múltiples caminos entre switches o dispositivos de red, lo que puede causar que los paquetes de datos se envíen en un ciclo infinito. Esto ocurre principalmente en redes Ethernet y puede provocar problemas graves, incluyendo broadcast storms y la caída total de la red.

Las principales causas por las que surgen los bucles de red son:

  • Conexiones Redundantes: A menudo, las redes se diseñan con conexiones redundantes para mejorar la disponibilidad. Sin embargo, si estas conexiones no se gestionan adecuadamente, pueden formar bucles.
  • Configuración Incorrecta: Cambios erróneos en la configuración de switches, como la conexión de puertos sin la implementación de protocolos de prevención, pueden causar bucles.
  • Fallo de Protocolos de Prevención: Si un protocolo como Spanning Tree Protocol (STP) no está habilitado o falla, los bucles pueden formarse sin control.

Los bucles de red pueden arrojar algunos fallos, como podrían ser:

  • ⦿ Broadcast Storms: Los paquetes de broadcast pueden circular indefinidamente entre switches, multiplicándose y saturando la red.
  • ⦿ Desbordamiento de la Tabla de Direcciones MAC: Los switches pueden inundarse con información de direcciones MAC, lo que provoca que las tablas se desborden y se conviertan en dispositivos de broadcast, enviando tramas a todos los puertos.
  • ⦿ Rendimiento Degradado: El tráfico de red se vuelve incontrolable, lo que lleva a una degradación significativa del rendimiento de la red.
  • ⦿ Caídas de Dispositivos: En situaciones extremas, los dispositivos pueden dejar de responder debido a la sobrecarga de tráfico.

Roles de los Puertos y del Switch en STP

Cada switch puede asumir diferentes roles en una red STP para evitar bucles:

  1. Root Bridge: Es el switch central de la red; todos los caminos de datos convergen en él. Solo uno puede existir en una red.
  2. Root Port (RP): El puerto de un switch que tiene el camino de menor costo hacia el root bridge.
  3. Designated Port (DP): Puerto que reenvía tráfico hacia una red específica y actúa como el "puerto designado" para esa red. Cada segmento de red tiene un DP.
  4. Blocking Port: Puerto que se bloquea para evitar bucles, impidiendo que los datos se reenvíen a través de él.

Si el puerto que conecta a un switch al Root Bridge falla (por ejemplo, un Root Port), STP automáticamente recalcula la topología y activa uno de los Blocking Ports como el nuevo Root Port o Designated Port, según corresponda. De esta manera, el tráfico encuentra una nueva ruta sin crear bucles, lo que provee redundancia.

El proceso de reconfiguración en STP estándar es relativamente lento (puede tardar hasta 50 segundos), ya que el protocolo pasa por diferentes etapas (Blocking, Listening, Learning, Forwarding) antes de que el nuevo camino se active. Este comportamiento está diseñado para asegurar que no haya bucles durante el proceso de convergencia.

En versiones más avanzadas como RSTP (Rapid Spanning Tree Protocol), existe un rol de Alternate Port (puerto alternativo), que actúa como un "backup" para el Root Port en caso de fallo. Este puerto alternativo está listo para asumir la función de reenvío inmediatamente sin pasar por todas las etapas de recálculo, permitiendo una convergencia más rápida (en menos de 1 segundo en la mayoría de los casos). Similarmente, MSTP (Multiple Spanning Tree Protocol) también mejora la redundancia y velocidad en redes complejas.

BPDUs

Las Bridge Protocol Data Units (BPDUs) son mensajes fundamentales utilizados en el Spanning Tree Protocol (STP) para la gestión de la topología de red y la prevención de bucles. Estas unidades de datos son enviadas por los switches para intercambiar información sobre el estado de la red y determinar la estructura jerárquica de la misma.

Las BPDUs permiten que los switches identifiquen la raíz del árbol de expansión y calculen el camino más corto hacia ella. Cada switch envía BPDUs de manera periódica para notificar a otros dispositivos sobre su existencia y el estado de sus puertos. Esto es esencial para la convergencia de la red, ya que permite a los switches tomar decisiones informadas sobre cómo configurar sus puertos (bloqueados, escuchando, aprendiendo o reenviando).

Existen dos tipos principales de BPDUs:

  1. 𖦹 BPDUs de Configuración: Se utilizan para establecer y mantener la topología del árbol de expansión. Incluyen información sobre el identificador del puente, el costo del camino hacia la raíz, y el estado de los puertos.
  2. 𖦹 BPDUs de Tercera Parte (Cambio de Topología): Se utilizan para notificar a otros switches sobre cambios en la topología de la red, como la activación o desactivación de puertos. Esto ayuda a que la red se adapte rápidamente a cambios y minimiza el tiempo de inactividad.

Las BPDUs son cruciales para el funcionamiento efectivo de STP. Sin ellas, los switches no podrían colaborar adecuadamente para mantener una topología libre de bucles. La capacidad de los switches para intercambiar información de manera continua les permite adaptarse a cambios en la red, como la adición de nuevos dispositivos o la eliminación de enlaces.

Modos

El STP utiliza varios modos de estado de puerto para gestionar la topología de la red y prevenir bucles. Los estados de los puertos en STP son:

  1. Blocking (Bloqueado)
    • Descripción: En este estado, el puerto no envía ni recibe tráfico de datos. Sin embargo, puede recibir mensajes de Bridge Protocol Data Units (BPDUs) para seguir participando en la topología de la red.
    • Función: El puerto permanece en este estado si no es el camino más corto hacia la raíz o si está en riesgo de formar un bucle.
  2. Listening (Escuchando)
    • Descripción: En este estado, el puerto deja de aprender direcciones MAC, pero continúa procesando BPDUs. Esto permite que el switch detecte cambios en la topología de la red.
    • Función: El objetivo es prepararse para pasar a un estado de Forwarding si se determina que el puerto puede ser parte de la topología activa.
  3. Learning (Aprendiendo)
    • Descripción: En este estado, el puerto comienza a aprender direcciones MAC de los paquetes que recibe, pero aún no envía tráfico de datos.
    • Función: Esto permite al switch construir su tabla de direcciones MAC, lo que ayuda a optimizar el tráfico en el futuro.
  4. Forwarding (Reenviando)
    • Descripción: Este es el estado activo en el que el puerto envía y recibe tráfico de datos. También continúa aprendiendo direcciones MAC.
    • Función: Los puertos en este estado están habilitados para enviar y recibir tráfico, permitiendo la comunicación normal en la red.
  5. Disabled (Deshabilitado)
    • Descripción: Este estado indica que el puerto está administrativamente deshabilitado. No puede enviar ni recibir tráfico ni participar en la elección de la raíz.
    • Función: Se utiliza para desactivar puertos que no se desean en la red.

En el protocolo STP, el tiempo de convergencia de hasta 50 segundos se debe al proceso de transición de los puertos entre diferentes estados para evitar bucles en la red. Este proceso se controla mediante las Bridge Protocol Data Units (BPDUs), que los switches envían periódicamente para compartir información sobre la topología de la red.

Primero, un puerto comienza en el estado Blocking, donde no reenvía tráfico de usuario y solo recibe BPDUs. Este estado dura 20 segundos, un tiempo conocido como Max Age. Si no se detectan cambios en la red o fallas en ese período, el puerto pasa al siguiente estado.

Luego, el puerto transita al estado Listening, donde espera y evalúa BPDUs para determinar la mejor ruta hacia el Root Bridge sin comenzar a aprender direcciones MAC. Esta etapa toma 15 segundos, conocidos como Forward Delay.

Después, el puerto entra en el estado Learning, donde comienza a aprender direcciones MAC de los paquetes que recibe, pero aún no reenvía tráfico de usuario. Este estado también dura 15 segundos de Forward Delay.

Finalmente, tras completar estos estados, el puerto pasa al estado Forwarding, donde ya puede reenviar tráfico de usuario y participar activamente en la red. Al sumar estos tiempos (20 + 15 + 15), STP asegura que la red converge en un máximo de 50 segundos sin generar bucles.

Resumen del Proceso de Transición:

  1. Inicialmente, todos los puertos comienzan en el estado Blocking.
  2. Cuando se selecciona un puerto como parte del camino más corto hacia la raíz, puede moverse a Listening.
  3. Luego, el puerto pasa a Learning, donde comienza a construir su tabla de direcciones.
  4. Finalmente, se mueve a Forwarding, donde puede enviar y recibir datos.
  5. Si se detecta un bucle o un cambio en la topología, los puertos pueden volver a Blocking o Listening según sea necesario.

Prioridades en STP y Selección del Switch Root

Cada switch en STP tiene un valor de prioridad, el cual determina qué switch se convierte en el root bridge (raíz de la red). El root bridge actúa como el centro de la red y envía BPDU (Bridge Protocol Data Units) a otros switches para mantener la estructura de la red.

  • Rango de Prioridades: La prioridad se establece en incrementos de 4096, dentro de un rango de 0 a 61440.
  • Elección del Root: El switch con la prioridad más baja se convierte en el root. En caso de empate en prioridades, se elige el switch con la dirección MAC más baja.

Por ejemplo, si un switch tiene una prioridad de 0 y otro tiene una prioridad de 4096, el switch con 0 se convierte en el root, ya que su prioridad es menor.

Costo

El costo en STP es un valor que se utiliza para determinar la mejor ruta (o camino) hacia la raíz del árbol de expansión en una red de switches. Este costo se basa en el ancho de banda de los enlaces de red y se utiliza para evitar bucles de red, asegurando que solo una ruta activa se utilice para el tráfico entre dos dispositivos.

El costo se calcula a partir del ancho de banda de los enlaces. STP asigna costos predeterminados a diferentes velocidades de enlace, lo que significa que los enlaces de mayor ancho de banda tienen un costo más bajo. Por ejemplo:

  • 10 Mbps: costo 100
  • 100 Mbps: costo 19
  • 1 Gbps: costo 4
  • 10 Gbps: costo 2

Esto permite que los enlaces más rápidos sean preferidos en el cálculo del camino hacia la raíz.

STP elige el camino más corto hacia la raíz utilizando el costo total del camino. El camino con el menor costo se convierte en el camino activo, mientras que los demás enlaces son puestos en estado de "bloqueado" para prevenir bucles.

Si hay un cambio en la topología de la red (por ejemplo, si un enlace cae o un nuevo enlace se agrega), STP recalcula los costos y puede cambiar el estado de los enlaces para mantener una red sin bucles.

Elección de root

Para que STP determine cuál switch será el Root Bridge (o switch raíz), se utilizan dos valores principales:

  • 𖦹 Prioridad del Bridge (Bridge Priority): Es el valor clave que ayuda a STP a tomar la decisión. Este es un número configurable en cada switch, y el switch con el valor de prioridad más bajo será el candidato preferido para ser el Root Bridge. La prioridad por defecto es 32768 en la mayoría de los switches, pero puede ajustarse en incrementos de 4096 para influir en la elección. Los valores van de 0 a 61440; un valor menor indica una mayor probabilidad de ser seleccionado como Root Bridge.
  • 𖦹 Dirección MAC del Switch (MAC Address): Si dos switches tienen la misma prioridad (lo cual es común si se usa el valor por defecto), STP desempata utilizando la dirección MAC del switch. El switch con la dirección MAC más baja será elegido como el Root Bridge. Esto se debe a que las direcciones MAC son únicas para cada dispositivo, lo que permite a STP identificar y elegir un único switch en caso de empate en la prioridad.

STP comienza evaluando estos dos valores para todos los switches en la red. Se inicia una serie de BPDUs que contienen la prioridad y dirección MAC de cada switch, permitiendo que todos los dispositivos comparen estos valores. Al final del proceso, el switch con la prioridad más baja y, en caso de empate, la MAC más baja, se convierte en el Root Bridge.

Cuando STP necesita decidir entre varios puertos que ofrecen el mismo costo hacia el Root Bridge, utiliza la prioridad de puerto para determinar cuál de ellos debe estar en estado de Designated Port (DP) o Root Port (RP). Cada puerto en un switch tiene un valor de prioridad de puerto predeterminado (generalmente 128) que puede ajustarse en un rango de 0 a 255.

  • 𖦹 Root Port (RP): En cada switch, se elige un solo puerto como Root Port. Este puerto es el que tiene el costo más bajo hacia el Root Bridge. Si varios puertos tienen el mismo costo hacia el Root Bridge, STP elige el puerto con la menor prioridad de puerto para ser el Root Port.
  • 𖦹 Designated Port (DP): Cada segmento de red también debe tener un Designated Port, que es el puerto responsable de reenviar tráfico hacia ese segmento. Si hay varios puertos en diferentes switches compitiendo para ser el Designated Port en un mismo segmento y tienen el mismo costo, la prioridad de puerto ayuda a resolver el conflicto.

La prioridad de puerto se usa en los siguientes casos:

  • Si un switch tiene varios puertos con el mismo costo hacia el Root Bridge, la prioridad de puerto ayuda a seleccionar el Root Port.
  • Si dos puertos de diferentes switches tienen el mismo costo y prioridad hacia un segmento común, la prioridad de puerto define cuál será el Designated Port.

STP utiliza la siguiente secuencia para elegir puertos cuando hay empates:

  1. Costo del camino hacia el Root Bridge (menor costo gana).
  2. Prioridad de Bridge (prioridad más baja gana).
  3. Prioridad de puerto (prioridad más baja gana).
  4. Número de puerto (número de puerto más bajo gana, si las prioridades son iguales).

Configuración

Cisco

En este caso, asumimos que estamos trabajando con el modo STP clásico (PVST+ o RSTP dependiendo de la preferencia).

En los switches Cisco, el STP (Spanning Tree Protocol) que viene por defecto es el PVST+ (Per VLAN Spanning Tree Plus). Este protocolo permite que se utilicen múltiples instancias de STP, una para cada VLAN, lo que mejora la eficiencia en redes con múltiples VLANs.

Puedes usar spanning-tree mode rapid-pvst para cambiar a Rapid PVST, MST o algún otro modo dependiendo de tus necesidades.

Con el comando show spanning-tree verificas el modo actual de STP.

Valores Configurables:

  • max-age: Determina cuánto tiempo un switch conserva la información de BPDU antes de descartar la información de la topología. Generalmente, el valor predeterminado es 20 segundos.
  • hello-time: Es el intervalo entre la transmisión de BPDUs. Se suele mantener en 2 segundos, que es el valor predeterminado.
  • forward-time: Es el tiempo que un puerto pasa en los estados de Listening y Learning antes de pasar al estado de reenvío. El valor predeterminado es 15 segundos.
  • priority: Define qué switch será el Root Bridge. Cuanto menor es este valor, mayor será la prioridad. El valor predeterminado es 32768, pero en la mayoría de los casos, el Root Bridge tendrá una prioridad más baja, como 4096.
  • port priority: Determina cuál puerto se convertirá en Designated Port o Root Port si hay empate en costos. Se puede configurar con un valor entre 0 y 240, en incrementos de 16.
  • Switch Root
  • Icono C:\Windows\system32\cmd.exe
    Switch# configure terminal
    Switch(config)# hostname RootBridge
    Switch(config)# spanning-tree vlan 1 priority 4096
    Switch(config)# spanning-tree vlan 1 hello-time 2
    Switch(config)# spanning-tree vlan 1 forward-time 15
    Switch(config)# spanning-tree vlan 1 max-age 20
    Switch(config)# interface fastEthernet 0/1
    Switch(config-if)# spanning-tree port-priority 32
    Switch(config-if)# exit
    Switch(config)# interface fastEthernet 0/2
    Switch(config-if)# spanning-tree port-priority 32
    Switch(config-if)# exit
    Switch(config)# copy running-config startup-config
  • Switch A
  • Icono C:\Windows\system32\cmd.exe
    Switch# configure terminal
    Switch(config)# hostname SwitchA
    Switch(config)# spanning-tree vlan 1 hello-time 2
    Switch(config)# spanning-tree vlan 1 forward-time 15
    Switch(config)# spanning-tree vlan 1 max-age 20
    Switch(config)# interface fastEthernet 0/3
    Switch(config-if)# spanning-tree port-priority 64  # Root Port
    Switch(config-if)# exit
    Switch(config)# interface fastEthernet 0/4
    Switch(config-if)# spanning-tree port-priority 32  # Designated Port
    Switch(config-if)# exit
    Switch(config)# copy running-config startup-config
  • Switch B
  • Icono C:\Windows\system32\cmd.exe
    Switch# configure terminal
    Switch(config)# hostname SwitchB
    Switch(config)# spanning-tree vlan 1 hello-time 2
    Switch(config)# spanning-tree vlan 1 forward-time 15
    Switch(config)# spanning-tree vlan 1 max-age 20
    Switch(config)# interface fastEthernet 0/5
    Switch(config-if)# spanning-tree port-priority 96  # Blocking Port
    Switch(config-if)# exit
    Switch(config)# interface fastEthernet 0/6
    Switch(config-if)# spanning-tree port-priority 64  # Root Port
    Switch(config-if)# exit
    Switch(config)# copy running-config startup-config
  1. ROOT:
    • ∘ El switch RootBridge tiene una prioridad de 4096 para garantizar que sea seleccionado como el Root Bridge.
    • ∘ Los puertos FA0/1 y FA0/2 tienen la prioridad de puerto configurada en 32, por lo que actúan como Designated Ports.
  2. Switch A:
    • ∘ FA0/3 se configura como Root Port con prioridad de puerto 64, ya que este puerto tiene la conexión más directa hacia el Root Bridge.
    • ∘ FA0/4 es un Designated Port y se le asigna una prioridad de 32.
  3. Switch B:
    • ∘ FA0/6 es el Root Port con prioridad de puerto 64, al igual que Switch A.
    • ∘ FA0/5 se encuentra en estado de Blocking con prioridad 96, ya que está conectado a Switch A, creando una ruta redundante que STP bloquea para evitar bucles.

Los valores de max-age, hello-time, y forward-time son estándar y están configurados según los tiempos predeterminados para cumplir con el ciclo de 50 segundos que STP necesita para converger en caso de cambios de topología.

Huawei

  • Switch Root
  • Icono C:\Windows\system32\cmd.exe
    [Switch] sysname RootBridge
    [RootBridge] stp mode stp  # Activa STP en modo clásico
    [RootBridge] stp instance 1 priority 4096  # Configura la prioridad del Root Bridge
    [RootBridge] stp timer hello 2  # Configura el Hello Time a 2 segundos
    [RootBridge] stp timer forward-delay 15  # Configura el Forward Delay a 15 segundos
    [RootBridge] stp timer max-age 20  # Configura el Max Age a 20 segundos
    
    [RootBridge] interface GigabitEthernet0/0/1
    [RootBridge-GigabitEthernet0/0/1] stp port priority 32  # Designated Port
    [RootBridge-GigabitEthernet0/0/1] quit
    
    [RootBridge] interface GigabitEthernet0/0/2
    [RootBridge-GigabitEthernet0/0/2] stp port priority 32  # Designated Port
    [RootBridge-GigabitEthernet0/0/2] quit
    
    [RootBridge] save  # Guarda la configuración en la memoria
  • Switch A
  • Icono C:\Windows\system32\cmd.exe
    [Switch] sysname SwitchA
    [SwitchA] stp mode stp  # Activa STP en modo clásico
    [SwitchA] stp timer hello 2
    [SwitchA] stp timer forward-delay 15
    [SwitchA] stp timer max-age 20
    
    [SwitchA] interface GigabitEthernet0/0/3
    [SwitchA-GigabitEthernet0/0/3] stp port priority 64  # Root Port hacia el Root Bridge
    [SwitchA-GigabitEthernet0/0/3] quit
    
    [SwitchA] interface GigabitEthernet0/0/4
    [SwitchA-GigabitEthernet0/0/4] stp port priority 32  # Designated Port
    [SwitchA-GigabitEthernet0/0/4] quit
    
    [SwitchA] save  # Guarda la configuración en la memoria
  • Switch B
  • Icono C:\Windows\system32\cmd.exe
    [Switch] sysname SwitchB
    [SwitchB] stp mode stp  # Activa STP en modo clásico
    [SwitchB] stp timer hello 2
    [SwitchB] stp timer forward-delay 15
    [SwitchB] stp timer max-age 20
    
    [SwitchB] interface GigabitEthernet0/0/6
    [SwitchB-GigabitEthernet0/0/6] stp port priority 64  # Root Port hacia el Root Bridge
    [SwitchB-GigabitEthernet0/0/6] quit
    
    [SwitchB] interface GigabitEthernet0/0/5
    [SwitchB-GigabitEthernet0/0/5] stp port priority 96  # Blocking Port para evitar bucles
    [SwitchB-GigabitEthernet0/0/5] quit
    
    [SwitchB] save  # Guarda la configuración en la memoria