Motivo para criar STP
O motivo da criação do protocolo STP foi o aparecimento de loops nos comutadores. O que é um loop? A definição do loop é a seguinte:
Bridging loop (loop de comutação) - um estado da rede em que há uma transferência interminável de quadros entre os comutadores conectados ao mesmo segmento de rede.
A partir da definição, fica claro que a aparência de um loop cria grandes problemas - leva à sobrecarga de switches e à inoperabilidade desse segmento de rede. Como surge um loop? A figura abaixo mostra a topologia na qual um loop ocorrerá na ausência de quaisquer mecanismos de proteção:
A aparência de um loop nas seguintes condições:
1. Um dos hosts envia um quadro de transmissão:- Por exemplo, o VPC5 envia um pacote com um endereço de destino de Broadcast.
- Depois de aceitar esse pacote, o Switch1 deve enviá-lo por todas as portas, exceto a porta da qual esse pacote veio. O pacote passará pelas portas Gi0 / 0, Gi1 / 0.
- Os comutadores Switch2, Switch3, que aceitaram este pacote, também deverão enviar o pacote. Assim, o Switch2, que recebeu o pacote do Switch1, o enviará para o Switch3 e o Switch3 o enviará para o Switch2.
- Em seguida, o Switch2 recebeu um pacote do Switch3, envie-o para o Switch1 e o Switch3 recebeu um pacote do Switch2, envie-o também para o Switch1. Assim, chegamos à etapa 1) e ela continuará indefinidamente. Além disso, tudo é agravado pelo fato de que, na etapa 4), o Switch1 já terá duas instâncias de quadro, uma vez que as receberá do Switch2 e do Switch3.
Os passos 1) - 4) serão repetidos indefinidamente e, nos comutadores, isso acontece em uma fração de segundo. Além disso, a formação de um loop leva ao fato de que a tabela de endereços de papoula nos comutadores muda constantemente e o endereço de papoula do remetente do VPC5 será constantemente atribuído à interface Gi0 / 0, Gi1 / 0 ou Gi0 / 2 (se nesse momento o VPC5 enviar outros pacotes). Esse ciclo levará à operação incorreta da rede e de todos os comutadores. E enviar pacotes de transmissão para hosts é uma coisa comum, como um exemplo, o protocolo ARP.
2. Um loop também pode se formar sem enviar um quadro de Broadcast.- Por exemplo, o VPC5 envia um quadro com um endereço mac de destino unicast.
- É possível que o endereço mac de destino não esteja na tabela de endereços mac do switch. Nesse caso, o switch encaminhará o pacote por todas as portas, exceto a porta da qual recebeu o quadro. E temos a mesma situação do quadro de transmissão.
- Abaixo, veremos o protocolo STP nos comutadores Cisco. Eles usam o STP separadamente para cada vlan, o protocolo PVST +. Como temos apenas uma vlan, o significado disso não muda.
Noções básicas de STP
O princípio de operação deste protocolo é baseado no fato de que todos os canais redundantes entre os comutadores são logicamente bloqueados e o tráfego não é transmitido através deles. Para construir uma topologia sem canais redundantes, uma árvore é construída (gráfico matemático). Para construir uma árvore, é necessário primeiro determinar a raiz da árvore a partir da qual o gráfico será construído. Portanto, a primeira etapa do protocolo STP é determinar o comutador raiz (comutador raiz). Para determinar o comutador raiz, os comutadores trocam mensagens BPDU. Em geral, o protocolo STP usa dois tipos de mensagens: BPDU - contém informações sobre os comutadores e o TCN - notifica uma alteração na topologia. Vamos considerar o BPDU em mais detalhes. Falaremos mais sobre o TCN abaixo. Quando você habilita o STP nos comutadores, os comutadores começam a enviar mensagens BPDU. Essas mensagens contêm as seguintes informações:

O quadro BPDU possui os seguintes campos:
- Identificador da versão do protocolo STA (2 bytes). Os comutadores devem suportar a mesma versão do protocolo STA
- Versão do protocolo STP (1 byte)
- Tipo BPDU (1 byte). Existem 2 tipos de BPDUs - notificação de configuração e reconfiguração
- Sinalizadores (1 byte)
- Identificador do comutador raiz (8 bytes)
- O custo da rota para o comutador raiz (custo do caminho raiz)
- ID do remetente (ID da ponte) (8 bytes)
- O identificador da porta da qual este pacote foi enviado (ID da porta) (2 bytes)
- Duração da mensagem (2 bytes). Medido em unidades de 0,5 s, usado para detectar mensagens obsoletas
- Duração máxima da mensagem (2 bytes). Se o quadro BPDU tiver uma vida útil superior ao máximo, o quadro será ignorado pelos comutadores
- Olá intervalo (2 bytes), o intervalo no qual os pacotes BPDU são enviados
- Atraso de alteração de estado (2 bytes). Tempo ativo mínimo da chave
Os principais campos que requerem atenção especial são os seguintes:
- ID do remetente (ID da ponte)
- ID da ponte raiz
- O identificador da porta da qual este pacote foi enviado (ID da porta)
- O custo da rota para o comutador raiz (custo do caminho raiz)
Para determinar o comutador raiz, o identificador do comutador é usado - ID da ponte. O ID da ponte é um número de 8 bytes que consiste na prioridade da ponte (prioridade, 0 a 65535, padrão 32768) e no endereço MAC do dispositivo. O comutador raiz seleciona o comutador com a prioridade mais baixa, se as prioridades forem iguais, os endereços MAC serão comparados (em termos de caracteres, o menor vence).
Aqui está a saída das informações de ID da ponte do Switch1 da primeira imagem. Prioridade - 32769 (padrão 32768 + ID da Vlan), endereços MAC - Endereço 5000.0001.0000:

Imagine a imagem, os comutadores acabaram de ligar e agora estão começando a criar uma topologia sem loop. Assim que os switches são inicializados, eles começam a enviar BPDUs, onde informam a todos que são a raiz da árvore. Nos BPDU, como o ID da ponte raiz, os comutadores indicam seu próprio ID da ponte. Por exemplo, o Switch1 envia BPDUs para o Switch3 e o Switch3 envia para o Switch1. BPDU do Switch1 para o Switch3:

BPDU do Switch3 para o Switch1:

Como você pode ver no Identificador Raiz, os dois comutadores dizem um ao outro que é ele quem é o comutador Raiz.
Escolhendo uma opção raiz
Até que a topologia STP seja construída, o tráfego normal não é transmitido devido a estados de porta especiais, que serão discutidos abaixo. Portanto, o Switch3 obtém o BPDU do Switch1 e examina essa mensagem. O Switch3 olha no campo ID da ponte raiz e vê que um ID da ponte raiz diferente é indicado lá do que na mensagem enviada pelo próprio Switch3. Ele compara o ID da ponte raiz nesta mensagem com o seu ID da ponte raiz e vê que, embora a Prioridade seja a mesma, o endereço MAC desse comutador (Switch1) é melhor (menor) do que tem. Portanto, o Switch3 recebe o ID da ponte raiz do Switch1 e para de enviar seus BPDUs, mas apenas escuta os BPDUs do Switch1. A porta na qual o melhor BPDU foi recebido se torna a Porta Raiz. O Switch1 também recebeu um BPDU do Switch3, faz uma comparação, mas, neste caso, o comportamento do Switch1 não muda, pois o BPDU recebido contém um ID de ponte raiz pior que o Switch1. Assim, entre o Switch1 e o Switch3, um switch raiz foi definido. De maneira semelhante, o switch raiz é selecionado entre o Switch1 e o Switch2. As portas Gi0 / 0 no Switch2 e Switch3 tornam-se porta raiz - a porta que leva ao switch raiz. Por essa porta, o Switch2 e o Switch3 aceitam BPDUs do Root Bridge. Agora vamos descobrir o que acontecerá com o canal entre o Switch2 e o Switch3.
Bloqueando canais redundantes
Como vemos na topologia, o canal entre o Switch2 e o Switch3 deve ser bloqueado para impedir a formação de loops. Como o STP lida com isso?
Depois que o Root Bridge é selecionado, o Switch2 e o Switch3 param de enviar BPDUs por portas raiz, mas eles recebem BPDUs recebidos do Root Bridge por todas as outras portas ativas, alterando apenas os seguintes campos nos dados BPDU:
- ID do remetente (ID da ponte) - substituído pelo seu ID.
- O identificador da porta da qual este pacote foi enviado (ID da porta) - muda para o identificador da porta da qual o BPDU será enviado.
- O custo da rota para o switch raiz (custo do caminho raiz) - o custo da rota é calculado em relação ao próprio switch.
Assim, o Switch2 recebe o seguinte BPDU do Switch3:

E o Switch3 do Switch2 recebe um BPDU:

Após a troca dessas BPDUs, o Switch2 e o Switch3 percebem que a topologia é redundante. Por que os comutadores entendem que a topologia é redundante? O Switch2 e o Switch3 relatam a mesma ponte raiz em seus BPDUs. Isso significa que existem duas maneiras de fazer o Root Bridge, com relação ao Switch3, através do Switch1 e do Switch2, e essa é a própria redundância em que estamos lutando. Existem também duas maneiras para o Switch2 - através do Switch1 e Switch3. Para se livrar dessa redundância
você deve bloquear o canal entre o Switch3 e o Switch2. Como está indo isso?
A escolha em qual comutador bloquear a porta é a seguinte:
- Menor custo do caminho raiz.
- ID da ponte menor.
- ID de porta menor.
Nesse esquema, o custo do caminho raiz desempenha um papel mais importante que o ID da ponte. Costumava pensar que essa opção é semelhante à escolha do comutador Raiz e fiquei surpreso que, por exemplo, nessa topologia, a porta no comutador com a pior prioridade não seja bloqueada:

Aqui, como se viu, a porta Gi 0/1 no comutador Sw2 está bloqueada. Nesta votação, o custo do caminho raiz se torna decisivo. Vamos voltar à nossa topologia. Como o caminho para o Root Bridge é o mesmo, o Switch2 vence nessa opção, pois sua prioridade é igual, os IDs do Bridge são comparados. O Switch2 possui 50: 00: 00: 02: 00: 00, o Switch3 possui 50: 00: 00: 03: 00: 00. O Switch2 tem um endereço MAC melhor (menos). Depois que a escolha é feita, o Switch3 para de encaminhar quaisquer pacotes por essa porta - Gi1 / 0, incluindo BPDU, mas apenas escuta o BPDU do Switch2. Esse estado da porta no STP é chamado de Bloqueio (BLK). A porta Gi1 / 0 no Switch2 está funcionando normalmente e encaminha vários pacotes, se necessário, mas o Switch3 os descarta imediatamente, ouvindo apenas as BPDU. Assim, neste exemplo, construímos uma topologia sem canais redundantes. O único canal redundante entre o Switch2 e o Switch3 foi bloqueado comutando a porta Gi1 / 0 no Switch3 para um estado de bloqueio especial - BLK. Agora examinaremos mais detalhadamente os mecanismos do STP.
Estados da porta
Dissemos acima que, por exemplo, a porta Gi1 / 0 no Switch3 entra em um estado de bloqueio especial - Blocking. Os seguintes estados da porta existem no STP:
Bloqueio - bloqueio. Nesse estado, nenhum quadro é transmitido pela porta. Usado para evitar redundância de topologia.
Ouvindo - ouvindo. Como dissemos acima, antes que o comutador raiz ainda seja selecionado, as portas estão em um estado especial em que apenas as BPDUs são transmitidas, os quadros de dados não são transmitidos e não são aceitos neste caso. O estado de escuta não passa para o próximo, mesmo que a ponte raiz esteja definida. Esse estado da porta dura o timer de atraso de encaminhamento, que, por padrão, é 15. Por que sempre tenho que esperar 15 segundos? Isso ocorre devido ao cuidado com o protocolo STP, para que a Root Bridge incorreta não seja selecionada acidentalmente. Após esse período, a porta entra no próximo estado - Aprendizado.
Aprendizagem - treinamento. Nesse estado, a porta escuta e envia BPDUs, mas não envia informações com dados. A diferença entre esse estado e a Escuta é que os quadros com os dados que chegam à porta são estudados e as informações do endereço MAC são inseridas na tabela de endereços MAC do switch. A transição para o próximo estado também leva um temporizador de atraso de avanço.
Encaminhamento - Encaminhamento. Este é o estado normal da porta para onde as BPDUs e os quadros com dados normais são enviados. Assim, se passarmos pelo esquema quando os switches forem inicializados, obteremos o seguinte esquema:
- O switch coloca todas as suas portas conectadas no estado de escuta e começa a enviar BPDUs onde se declara o switch raiz. Durante esse período, o comutador permanece raiz se não receber o melhor BPDU ou seleciona o comutador raiz. Dura 15 segundos.
- Depois que entra no estado de aprendizado e aprende os endereços MAC. 15 segundos
- Determina quais portas definir como Encaminhamento e quais Bloquear.
Funções de porta
Além dos estados das portas, o STP também precisa definir às portas suas funções. Isso é feito para que em qual porta seja esperado o BPDU do comutador raiz e através de quais portas transmitir cópias do BPDU recebidas do comutador raiz. As funções de porta são as seguintes:
Porta raiz - a porta raiz do comutador. Ao escolher um switch raiz, a porta raiz também é determinada. Essa é a porta através da qual o switch raiz está conectado. Por exemplo, em nossa topologia, as portas Gi0 / 0 no Switch2 e Switch3 são as portas raiz. Por meio dessas portas, o Switch2 e o Switch3 não enviam BPDUs, mas apenas os ouvem no Root Bridge. Surge a pergunta - como a porta raiz é selecionada? Por que a porta Gi1 / 0 não está selecionada? Afinal, você também pode se comunicar com o switch através dele? Para determinar a porta raiz no STP, é usada uma métrica que indica o Custo do caminho raiz (o custo da rota para o comutador raiz) no campo BPDU. Esse custo é determinado pela velocidade do canal.
O Switch1 em seu BPDU no campo Root Path Cost define 0, pois ele próprio é o Root Bridge. Mas quando o Switch2, quando envia o BPDU para o Switch3, ele altera esse campo. Ele define o custo do caminho raiz igual ao custo do canal entre ele e o Switch1. Na imagem BPDU do Switch2 e do Switch3, você pode ver que, neste campo, o custo do caminho raiz é 4, já que o canal entre o Switch1 e o Switch2 é de 1 Gbps. Se o número de comutadores for maior, cada próximo comutador adicionará o custo do caminho raiz. Tabela de custo do caminho raiz.
Porta designada - a porta atribuída no segmento. Para cada segmento de rede, deve haver uma porta responsável por conectar esse segmento à rede. Relativamente falando, um segmento de rede pode significar um cabo que conecta esse segmento. Por exemplo, as portas Gi0 / 2 no Switch1, Switch3 conectam segmentos de rede individuais aos quais apenas esse cabo leva. Além disso, por exemplo, as portas na ponte raiz não podem ser bloqueadas e todas são portas designadas no segmento. Após esta explicação, você pode fornecer definições mais rigorosas para as portas atribuídas:
Porta Designada - Uma porta de ponte não raiz entre segmentos de rede que recebe tráfego do segmento correspondente. Cada segmento de rede pode ter apenas uma porta atribuída. O switch raiz possui todas as portas atribuídas.
Também é importante observar que a porta Gi1 / 0 no Switch2 também é atribuída, apesar de esse canal de comunicação estar bloqueado no Switch3. Relativamente falando, o Switch2 não tem informações de que a porta está bloqueada na outra extremidade.
Porta não designada - Uma porta de segmento não atribuída. Porta não designada - Uma porta que não é uma raiz ou uma porta designada. É proibida a transmissão de quadros de dados através dessa porta. No nosso exemplo, a porta Gi1 / 0 não está atribuída.
Porta desativada - uma porta que está no estado desligado.
Temporizadores e convergência STP
Depois que o STP concluiu a construção de uma topologia sem loop, a pergunta permanece: como detectar alterações na rede e como responder a elas? As mensagens BPDU usadas pelo STP são enviadas pelo Root Bridge a cada 2 segundos, por padrão. Esse timer é chamado de Hello Timer. O restante dos comutadores, tendo recebido essa mensagem por meio da porta raiz, encaminha-a ainda mais por todas as portas atribuídas. Já foi dito com mais detalhes que mudanças acontecem aos BPDUs ao encaminhar seus comutadores. Se durante o tempo definido pelo cronômetro Max Age (por padrão - 20 segundos), o switch não recebeu nenhuma BPDU do switch raiz, esse evento será tratado como uma perda de comunicação com o Root Bridge. Para descrever mais corretamente a convergência do protocolo, é necessário alterar nossa topologia e colocar hubs entre os comutadores. Adicionamos hubs para que, quando um dos comutadores falhe ou o link falhe, os outros comutadores não determinem isso pela queda do link, mas usem temporizadores:

Antes de começar, também é importante informar mais sobre outro tipo de mensagem STP - TCN. O TCN é enviado pelos comutadores em caso de alteração da topologia - assim que a topologia é alterada em qualquer comutador, por exemplo, o estado da interface é alterado. O TCN é enviado pelo switch apenas através da porta raiz. Assim que o switch raiz recebe o TCN, ele altera imediatamente o parâmetro para armazenar endereços MAC na tabela de 300 segundos para 15 (para o qual será discutido abaixo) e no próximo BPDU, o Root Switch coloca a bandeira - TCA (Topology Change Acknledgement), que enviado ao comutador que enviou o TCN para notificar que o TCN foi recebido. Assim que o TCN alcança a ponte raiz, envia um BPDU especial que contém o sinalizador TCN em todas as outras interfaces para outros comutadores. A imagem mostra a estrutura do TCN:

O TCN foi incluído no STP para que os comutadores não raiz pudessem notificar sobre uma alteração na rede. Eles não podem fazer isso com BPDUs regulares, pois os switches não raiz não enviam BPDUs. Como você pode ver, a estrutura do TCN não contém nenhuma informação sobre o que exatamente e onde mudou, mas simplesmente relata que em algum lugar algo mudou. Agora vamos para a questão da convergência STP.
Vamos ver o que acontece se desativarmos a interface Gi0 / 1 no Switch1 e vermos com quais mecanismos a árvore STP é reconstruída. O Switch2 deixará de receber BPDUs do Switch1 e não receberá BPDUs do Switch3, pois essa porta está bloqueada no Switch3. O Switch2 levará 20 segundos (Max Age Timer) para entender a perda de conexão com o Root Bridge. Até esse momento, Gi0 / 0 no Switch2 estará no estado de encaminhamento com a função de porta raiz. Assim que o Max Age Timer expirar e o Switch2 entender a perda de comunicação, ele reconstruirá a árvore STP e, como é típico para o STP, começará a se considerar Ponte da Raiz. Ele enviará um novo BPDU, onde se indicará como um Root Bridge através de todas as portas ativas, incluindo o Switch3. Mas o cronômetro Max Age que expirou no Switch2 também expirou no Switch3 para a interface Gi1 / 0. Essa porta não recebe um BPDU por 20 segundos e entra no estado LISTENING e envia um BPDU indicando Root Bridge - Switch1. Assim que o Switch2 aceitar esse BPDU, ele deixará de se considerar uma ponte raiz e selecionará Gi1 / 0 como a porta raiz. Nesse ponto, o Switch2 também enviará TCN via Gi1 / 0, pois esta é a nova porta raiz.
Isso levará ao fato de que o tempo de armazenamento dos endereços MAC nos comutadores será reduzido de 300 segundos para 15. Mas isso não restaurará completamente a rede; você deve aguardar até que a porta Gi1 / 0 no Switch3 passe a ouvir e depois a aprender. Isso levará um tempo igual a dois períodos do timer de atraso de avanço - 15 + 15 = 30 segundos. O que obtemos é que, quando a conexão é perdida, o Switch2 espera que o cronômetro Max Age = 20 segundos expire, seleciona novamente o Root Bridge por outra interface e aguarda mais 30 segundos até que a porta bloqueada anteriormente entre no estado de encaminhamento. No total, concluímos que a conexão entre VPC5 e VPC6 será interrompida por 50 segundos. Como mencionado por várias frases acima, ao alterar a porta raiz de Gi0 / 0 para Gi1 / 0 no Switch2, o TCN foi enviado. Se isso não aconteceu, todos os endereços MAC aprendidos através da porta Gi 0/0,permaneceria anexado a Gi0 / 0. Por exemplo, o endereço MAC de VPC5 e VPC7, apesar do STP concluir a convergência em 50 segundos, a conexão entre VPC6 e VPC5, VPC7 não seria restaurada, pois todos os pacotes destinados a VPC5 e VPC7 foram enviados por Gi0 / 0. Seria necessário esperar não 50 segundos, mas 300 segundos até que a tabela de endereços MAC seja reconstruída. Usando o TCN, o tempo de armazenamento mudou de 300 segundos para 15 e, enquanto a interface Gi1 / 0 no Switch3 passava no status de Escuta, os dados de aprendizado e endereço MAC são atualizados.o tempo de armazenamento mudou de 300 segundos para 15 e, enquanto a interface Gi1 / 0 no Switch3 passou nos estados de escuta, os dados de aprendizado e endereço MAC serão atualizados.o tempo de armazenamento mudou de 300 segundos para 15 e, enquanto a interface Gi1 / 0 no Switch3 passou nos estados de escuta, os dados de aprendizado e endereço MAC serão atualizados.Também é interessante a pergunta: o que acontece se reativarmos a interface Gi0 / 1 no Switch1? Quando a interface Gi0 / 1 é ativada, ela convém ao estado de Escuta e começa a enviar BPDUs. Assim que o Switch2 recebe um BPDU na porta Gi0 / 0, ele imediatamente seleciona novamente sua porta raiz, pois aqui o custo será o menor e começará a enviar tráfego pela interface Gi0 / 0, mas precisamos esperar até que a interface Gi0 / 1 passe o estado de escuta, aprendizado para encaminhamento . E o atraso não será mais de 50 segundos, mas 30.O protocolo STP também pensou em várias tecnologias para otimizar e proteger a operação do protocolo STP. Não os considerarei mais detalhadamente neste artigo; os materiais sobre eles podem ser encontrados em abundância em vários sites.