(Oito anos de blog e não tínhamos um post falando de Spanning-Tree)
O STP – Spanning-Tree Protocolo, é utilizado pelos switches para evitar loops de camada 2. Basicamente o STP bloqueia caminhos redundantes, evitando assim a formação de loops. Aliás, justamente por causa deste comportamento (bloquear caminhos) que em algumas redes (data centers, por exemplo) o STP é abolido.
Ainda é assim, ele é fundamental para o bom funcionamento de redes “convencionais”, também chamadas de campus network (tradicionalmente aquele design 3 camadas, com acesso, distribuição e core).
Para o STP funcionar o primeiro passo é eleger um switch root, e isso é feito da seguinte forma:
Quando os switch são ligados todos eles se consideram o root bridge. E como um político, todos passam a divulgar que são os melhores, ou no caso gerar e enviar Configuration BPDUs – Bridge Protocol Data Units a cada 2 segundos (hello timer) informando:
-
Root Bridge ID (RBID)
-
Root Patch Cost (RPC)
-
Sender Bridge ID (SBID)
-
Sender Port ID (SPID)
-
Receiver Port ID (RPID)
Quando um switch vizinho recebe um Configuration BPDU ele compara com suas próprias informações (e de outros BDPUs recebidos) para identificar qual é o “melhor” de fato. Se o Root Bridge ID do BPDU recebido é o menor, o switch entende há um candidato à root bridge melhor do que ele mesmo. Neste momento ele para de gerar e enviar BPBUs e passa apenas a encaminhar (incrementando os comandos necessários) os BPDUs deste candidato (diferente dos políticos…). Este processo se repete até que todos os switches parem de enviar seus próprios BPDUs e passem a encaminhar os BPDUs de um único switch.
Com isso temos então eleita o root bridge.
O Bridge ID é formado pela prioridade (32.768 por padrão, mas que pode ser configurada em múltiplos de 4096) + ID da VLAN + Mac Address do Switch. Este formato, considerando a VLAN, é chamado System ID Extension (ou Mac Address Reduction) e permite termos instancias STP diferentes por VLAN (PVSTP+). Também vale lembrar que por padrão este é o formato usado pelos switches Cisco, e podemos confirmar isso olhando o show running-config (observe o comando spanning-tree extend system-id).
O próximo passo é eleger as portas root (portas com menor custo para chegar a root bridge).
Para isso temos um processo parecido com descrito acima, onde os switches (não roots) comparam os BPDUs, mas agora a comparação vai ser nos demais campos, já que todos os BPDUs terão (possivelmente) o mesmo RBID.
A porta que receber o BPDU com o menor RPC será escolhida como root port. Caso duas ou mais portas recebam BPDUs com o mesmo RBID e mesmo RPC, o switch compara então o próximo campo (SBID). Se houver empate, compara o próximo campo… Como o último campo é o ID da porta que recebeu o BPDU, não tem como haver empate (se as portas 1 e 2 receberem BPDUs “iguais”, a porta 1 será a porta root).
Hellos BPDUs recebidos na porta root são encaminhados para as portas designadas, com o custo (RPC), SBID e SPID alterados. Hellos recebidos em outras portas (não roots) são processados, mas não encaminhamos. E os switches também não encaminham hellos pelas portas roots e portas que estão em blocking.
Por fim, após escolher a porta root, o switch escolherá as portas designadas / bloqueadas em cada segmento.
Para ter porta designada em um seguimento o switch precisar encaminhar o “melhor” BPDU no referido segmento (ter o menor RBID, ou RPC, ou SBID, …).
Topologia com STP: Rede sem loop, mas muitos caminhos bloqueados.
Mudança na topologia
Quando ocorre uma mudança na topologia (outro switch torna-se root, uma interface passa de Learning ou Forwarding para Blocking, uma porta vai para Forwarding ou um Topogoly Change Notification é recebido), o switch que detectou a mudança passa a enviar BPDUs com as informações apropriadas, e os switches vizinhos, ao receber essas informações, vão processar estes BDPUs (podendo repensar suas escolhas) e encaminhá-los.
Complementarmente o switch que detectou a mudança envia um TCN – Topology Change Notification BPDU com intenção de notificar o switch root. Cada switch que recebe o TCN devolve um TCA- Topology Change Acknowledge e passa o TCN para frente, até que chegue ao root.
O root por sua vez notifica então todos os switches (lembre-se que somente o switch root envia Configuration BPDUs), para que eles removam as entradas não usadas da tabela CAM (e consequentemente aprendam os MACs pelas novas interfaces que estão em forwarding).
Todo esse processo descrito acima, refere-se ao padrão 802.1D original (já não suportado em equipamentos Cisco).
Porém é importante conhecê-lo já que mesmo os outros padrões tem conceitos semelhantes.
Além do 802.1D (originalmente STP), tínhamos o 802.1W que definia o RSPT e o 802.1S (MST). Posteriormente isso mudou. O padrão 802.1D-2004 recebeu melhorias e passou a definir o RSTP, enquanto o MST foi integrado ao padrão 802.1Q-2005. Mesmo assim ainda hoje é normal falar de 802.1D referindo-se ao STP original.
Até a próxima.