Spanning Tree Protocol (STP / RSTP)
La redundancia es imprescindible en una red: si falla un enlace, otro toma el relevo. El problema es que un enlace redundante entre switches, tal cual, no funciona — genera un bucle de capa 2. El Spanning Tree Protocol (STP) existe para permitir la redundancia física sin sufrir ese problema.
El problema: bucles de capa 2
Section titled “El problema: bucles de capa 2”Problema: Una trama de broadcast que entra por SW1 sale por ambos enlaces hacia SW2. SW2 la reenvía de vuelta a SW1 por el enlace que le queda libre. SW1 la vuelve a reenviar. La trama nunca deja de circular:
graph LR
A[Host] --> S1[SW1]
S1 <-->|enlace 1| S2[SW2]
S1 <-->|enlace 2| S2
Consecuencias concretas de ese bucle:
- Tormenta de broadcast: las tramas se multiplican y saturan el ancho de banda hasta dejar la red inutilizable.
- Tabla MAC inestable: el switch ve la misma MAC de origen llegando por los dos puertos casi a la vez, y la reescribe sin parar.
- Tramas duplicadas: el destino recibe varias copias del mismo paquete.
La solución no es evitar los dos cables (perderías la redundancia que buscabas), sino dejar uno de los dos lógicamente bloqueado hasta que se necesite. Eso es exactamente lo que hace STP.
Cómo decide STP qué puerto bloquear
Section titled “Cómo decide STP qué puerto bloquear”STP construye un árbol de expansión sin bucles siguiendo tres pasos, en este orden:
- Elegir un switch raíz (root bridge): el punto de referencia desde el que se mide “el mejor camino” en el resto de la red.
- En cada switch que no es la raíz, elegir su puerto raíz (root port): el puerto por el que ese switch llega más rápido a la raíz.
- En cada segmento de red, elegir un puerto designado (designated port): el que va a reenviar tráfico en ese segmento. El resto de los puertos de ese segmento quedan bloqueados.
Para decidir todo esto, los switches se intercambian BPDUs (Bridge Protocol Data Units) — mensajes de control que anuncian quién cree ser la raíz y a qué distancia está.
Cómo se elige la raíz
Section titled “Cómo se elige la raíz”Situación: una oficina tiene tres switches conectados en triángulo (los tres enlazados entre sí, por redundancia). Los tres necesitan ponerse de acuerdo en cuál es la raíz, sin que nadie se lo diga manualmente.
Razonamiento: se elige por el Bridge ID más bajo, que se arma con dos datos:
- Prioridad (2 bytes) — por defecto 32768 en todos los switches, configurable en pasos de 4096.
- Dirección MAC (6 bytes) — de fábrica, siempre distinta.
Si todos tienen la misma prioridad por defecto, gana la MAC más baja — que en la práctica suele ser el switch más viejo de la red, no necesariamente el que vos querrías como raíz. Por eso, en una red real, se ajusta la prioridad manualmente en el switch que sí querés como raíz (por ejemplo, el del núcleo, con mejor capacidad), para no dejarlo al azar de qué MAC es más baja.
Roles de puerto, en la práctica
Section titled “Roles de puerto, en la práctica”| Rol | Qué es |
|---|---|
| Root port | El mejor camino de este switch hacia la raíz (uno por switch no raíz) |
| Designated port | El puerto que reenvía tráfico en un segmento de red |
| Blocked port | El puerto redundante: no reenvía, pero sigue escuchando BPDUs |
| Alternate / Backup | Puertos bloqueados que ya tienen listo un camino de respaldo (RSTP) |
Un puerto bloqueado no está apagado: sigue escuchando BPDUs para saber si el camino activo falla. Si eso pasa, STP recalcula y ese puerto puede pasar a reenviar tráfico.
! SW1 — root primary para VLAN 10, root secondary para VLAN 20SW1(config)# spanning-tree mode pvstSW1(config)# spanning-tree vlan 10 root primarySW1(config)# spanning-tree vlan 20 root secondary
! SW2 — root secondary para VLAN 10, root primary para VLAN 20SW2(config)# spanning-tree mode pvstSW2(config)# spanning-tree vlan 10 root secondarySW2(config)# spanning-tree vlan 20 root primary
! SW3 — no raíz de ninguna VLAN, solo ajusta el costo de un enlaceSW3(config)# spanning-tree mode pvstSW3(config)# interface GigabitEthernet0/1SW3(config-if)# spanning-tree vlan 10 cost 4SW3(config-if)# spanning-tree vlan 20 cost 4- Con
root primarySW1 baja su prioridad de VLAN 10 a 24576 (4096 menos que la raíz por defecto) y se convierte en el Root SW de esa VLAN;root secondaryen VLAN 20 lo deja en 28672, listo como respaldo. - SW2 hace el rol inverso: raíz de VLAN 20, respaldo de VLAN 10. Así cada VLAN tiene un root distinto, y el balanceo de carga (ver más abajo) tiene sentido: el tráfico de VLAN 10 sube por un switch y el de VLAN 20 por el otro.
- Ajustando el
costen los enlaces de SW3 se decide por qué puerto elige su root port para cada VLAN — acá, con el mismo costo en ambas, el criterio de desempate sigue siendo el que corresponda (puerto con menor ID, etc.). En el resto de la red, con todas las prioridades por defecto, STP asigna los demás roles automáticamente: designated en los segmentos y bloqueado en los enlaces redundantes.
Estados de puerto y por qué tarda tanto
Section titled “Estados de puerto y por qué tarda tanto”Antes de reenviar tráfico, un puerto de STP pasa por varios estados:
| Estado | Reenvía tramas | Aprende MAC | Tiempo |
|---|---|---|---|
| Blocking | No | No | 20 s (max age) |
| Listening | No | No | 15 s (forward delay) |
| Learning | No | Sí | 15 s (forward delay) |
| Forwarding | Sí | Sí | — |
Por qué existe esta espera: STP prefiere tardar en converger antes que arriesgarse a reabrir un bucle por apurar el proceso. El costo es que la convergencia clásica tarda hasta 50 segundos (20 + 15 + 15) — un tiempo que, en un puerto donde solo hay conectada una PC, es un desperdicio total: ahí no hay ningún riesgo real de bucle. Ese caso puntual es el que resuelve PortFast, más abajo.
RSTP: la misma idea, mucho más rápido
Section titled “RSTP: la misma idea, mucho más rápido”RSTP (802.1w) resuelve el problema de los 50 segundos sin cambiar el objetivo de STP — sigue evitando bucles — pero converge en 1-2 segundos:
- Los puertos alternate/backup ya tienen un camino de respaldo calculado de antemano, así que ante una falla no hay que esperar temporizadores: se activa al instante.
- Distingue enlaces punto a punto (entre switches) de enlaces de borde (hacia hosts), y trata cada uno con la lógica que corresponde.
- Es retrocompatible: si un switch vecino solo habla STP clásico (802.1D), RSTP se adapta automáticamente y no rompe la topología.
| Aspecto | STP (802.1D) | RSTP (802.1w) |
|---|---|---|
| Convergencia | 30-50 segundos | 1-2 segundos |
| Estados de puerto | 4 principales | 3 (discarding, learning, forwarding) |
| Puertos alternativos | No | Sí, failover inmediato |
La versión de Cisco: PVST+ y Rapid PVST+
Section titled “La versión de Cisco: PVST+ y Rapid PVST+”PVST (Per-VLAN Spanning Tree) es la extensión propietaria de Cisco al estándar: en vez de correr un solo árbol para todo el switch (como hace 802.1D), corre una instancia de STP por VLAN. Cada VLAN tiene así su propia elección de root bridge, sus propios roles de puerto y sus propios bloqueos.
- PVST: la versión original, pensada para el encapsulado propietario ISL.
- PVST+: la versión mejorada, compatible con trunks 802.1Q — la que usan los switches Cisco en la práctica.
- Rapid PVST+: la misma idea de PVST+ pero sobre RSTP (802.1w), con convergencia de 1-2 segundos. Es el modo estándar en switches Cisco modernos.
Para qué sirve en la práctica: permite balancear la carga entre dos enlaces redundantes en vez de dejar uno completamente inactivo. Por ejemplo, con dos switches unidos por dos trunks, se puede hacer que el enlace 1 sea el activo para las VLANs de datos y el enlace 2 el activo para las VLANs de voz — ambos cables trabajan, en vez de que uno quede bloqueado todo el tiempo.
SW1(config)# spanning-tree mode rapid-pvstEl único cambio real frente a PVST+ es la palabra rapid-pvst en el modo:
la lógica de root primary / root secondary / cost es idéntica, porque
Rapid PVST+ es PVST+ corriendo sobre el algoritmo de RSTP por debajo — cambia
la velocidad de convergencia, no la forma de configurarlo.
MST: una instancia para varias VLANs
Section titled “MST: una instancia para varias VLANs”El problema que resuelve MST: PVST+/Rapid PVST+ corren una instancia de spanning tree por cada VLAN. Eso es flexible, pero no escala: una red con 200 VLANs hace que cada switch mantenga 200 cálculos de árbol y 200 tandas de BPDUs por trunk — carga de CPU y de tráfico de control que crece sin necesidad, porque en la práctica muchas VLANs terminan queriendo la misma topología.
MST (Multiple Spanning Tree, 802.1s) cambia el enfoque: en vez de una instancia por VLAN, se definen unas pocas instancias (MSTI) y se mapean varias VLANs a cada instancia. Todas las VLANs de una misma instancia comparten un único cálculo de árbol, root bridge y roles de puerto.
La diferencia de configuración frente a PVST/Rapid-PVST es el paso extra
que exige MST: antes de tocar root primary o cost, hay que definir la
región MST (nombre + número de revisión) y el mapeo VLAN → instancia
— y esa configuración tiene que ser idéntica en los tres switches, porque
si el nombre o la revisión de la región difieren, los switches se ven como
regiones MST distintas y dejan de compartir una sola topología. PVST y
Rapid-PVST no tienen este paso: cada switch calcula su rol por VLAN de forma
independiente, sin necesidad de coordinar nada de antemano entre switches.
! Configuración de región — IDÉNTICA en SW1, SW2 y SW3SW1(config)# spanning-tree mode mstSW1(config)# spanning-tree mst configurationSW1(config-mst)# name REGION1SW1(config-mst)# revision 1SW1(config-mst)# instance 1 vlan 10,30SW1(config-mst)# instance 2 vlan 20SW1(config-mst)# exit
! SW1 — root primary de la instancia 1 (VLAN 10 & 30)SW1(config)# spanning-tree mst 1 root primary
! SW1 — root secondary de la instancia 2 (VLAN 20)SW1(config)# spanning-tree mst 2 root secondarySW2(config)# spanning-tree mst 1 root secondarySW2(config)# spanning-tree mst 2 root primarySW3(config)# interface GigabitEthernet0/1SW3(config-if)# spanning-tree mst 1 cost 4SW3(config-if)# spanning-tree mst 2 cost 4Lo que cambia y lo que no, comparado con PVST/Rapid-PVST:
| Aspecto | PVST+ / Rapid PVST+ | MST |
|---|---|---|
| Unidad de cálculo | Una instancia por VLAN | Una instancia por grupo de VLANs (MSTI) |
| Configuración previa | Ninguna — cada switch decide por su cuenta | Región (nombre + revisión) y mapeo VLAN→instancia, igual en todos |
| Root primary/secondary | spanning-tree vlan <id> root primary |
spanning-tree mst <instancia> root primary |
| Costo de enlace | spanning-tree vlan <id> cost <n> |
spanning-tree mst <instancia> cost <n> |
| Escala con muchas VLANs | Mal — una instancia por cada una | Bien — decenas de VLANs pueden compartir pocas instancias |
| Convergencia | Rápida en Rapid PVST+ (RSTP por debajo) | Rápida — MST también corre sobre RSTP |
En la práctica: si dos VLANs siempre van a tener la misma topología de todos modos (mismo root, mismos puertos bloqueados), agruparlas en la misma instancia de MST no pierde nada y ahorra recursos. Si de verdad necesitás que cada VLAN balancee carga por caminos distintos —como en el ejemplo de datos y voz de más arriba— conviene mapearlas a instancias distintas, tal como quedó SW1/SW2 arriba: instancia 1 (VLAN 10) con SW1 de raíz, instancia 2 (VLAN 20) con SW2 de raíz.
PortFast y BPDU guard:
Section titled “PortFast y BPDU guard:”Situación: un puerto access con una PC conectada tarda 30-50 segundos en empezar a pasar tráfico cada vez que la PC se prende o se reinicia, porque pasa por todos los estados de STP como si fuera un enlace entre switches.
Solución — PortFast: en puertos de acceso a hosts (PCs, impresoras, teléfonos), el puerto salta directo a forwarding, sin pasar por listening ni learning. Tiene sentido porque un host final nunca va a generar un bucle por sí solo.
El riesgo que abre PortFast: si alguien conecta un switch no autorizado (o un router mal configurado) a ese mismo puerto en vez de una PC, ese switch sí podría generar un bucle — y PortFast lo dejaría pasar directo sin protección.
Solución al riesgo — BPDU guard: si un puerto con PortFast llega a recibir una BPDU (algo que una PC nunca envía, pero un switch sí), BPDU guard deshabilita el puerto (errdisable) automáticamente. Así, PortFast gana velocidad para los hosts sin dejar la puerta abierta a que alguien conecte un switch no autorizado.
SW1(config)# interface FastEthernet0/1SW1(config-if)# spanning-tree portfastSW1(config-if)# spanning-tree bpduguard enable
! Alternativa: un solo comando hace access + PortFast + BPDU guardSW1(config)# interface FastEthernet0/2SW1(config-if)# switchport hostVerificación
Section titled “Verificación”VLAN0010 Spanning tree enabled protocol ieee Root ID Priority 32769 Address aaaa.bbbb.cccc This bridge is the root ...
Interface Role Sts Cost Prio.Nbr Type ---------------- ---- --- --------- -------- -------------------------------- Gi0/24 Desg FWD 4 128.24 P2p- FWD = forwarding, BLK = blocking, LRN = learning, LSN = listening.
Root IDmuestra qué switch es la raíz para esa VLAN — el primer dato a revisar si algo en la red converge distinto de lo esperado.
Comandos adicionales
Section titled “Comandos adicionales”| Comando | Función |
|---|---|
spanning-tree vlan <id> priority <0-61440> |
Cambia la prioridad manualmente (pasos de 4096) |
spanning-tree vlan <id> port-priority <0-240> |
Cambia la prioridad del puerto (pasos de 16) |
spanning-tree portfast default |
Activa PortFast en todos los puertos access |
spanning-tree bpduguard default |
Activa BPDU guard en todos los puertos portfast |
spanning-tree guard root |
Root guard: impide que el puerto sea la raíz |
spanning-tree bpdufilter enable |
Descarta BPDUs sin deshabilitar el puerto |
spanning-tree uplinkfast |
Acelera la convergencia del root port |
show spanning-tree summary |
Resumen del estado de STP en el switch |
show spanning-tree root |
Muestra el root bridge de cada VLAN |
errdisable recovery cause bpduguard |
Rehabilita puertos errdisable por BPDU guard |
Preguntas tipo CCNA
Section titled “Preguntas tipo CCNA”-
¿Qué problema evita STP y cómo? Los bucles de capa 2: construye un árbol lógico y deja puertos redundantes en blocking para que no circule tráfico por ellos.
-
¿Cómo se elige el root bridge? Por el Bridge ID más bajo (prioridad + dirección MAC). Con la misma prioridad, gana la MAC más baja.
-
¿Qué es el root port? El puerto de cada switch no raíz con el mejor camino hacia la raíz.
-
¿Cuál es la prioridad por defecto de un switch? 32768; se ajusta en pasos de 4096.
-
¿Por qué PortFast necesita BPDU guard junto a él? Porque PortFast salta las protecciones normales de STP en ese puerto; si alguien conecta ahí un switch no autorizado, BPDU guard es lo que detecta la BPDU inesperada y deshabilita el puerto antes de que se forme un bucle.
Resumen
Section titled “Resumen”- Los enlaces redundantes entre switches, sin STP, forman bucles de capa 2 (tormenta de broadcast, tabla MAC inestable, tramas duplicadas).
- STP resuelve esto sin quitar la redundancia: elige una raíz, un root port por switch y un designated port por segmento; el resto queda bloqueado.
- RSTP hace lo mismo en 1-2 segundos en vez de 50, gracias a puertos alternate/backup ya calculados de antemano.
- Cisco corre una instancia por VLAN (PVST+ / Rapid PVST+), lo que permite balancear carga entre enlaces redundantes.
- MST agrupa varias VLANs en pocas instancias para escalar en redes con muchas VLANs; a cambio, exige configurar la misma región (nombre + revisión) y el mismo mapeo VLAN→instancia en todos los switches.
- PortFast acelera los puertos de hosts; BPDU guard los protege de que alguien conecte ahí un switch no autorizado.