Thursday, July 28, 2011

Spanning Tree Protocol

   Spanning Tree, chamaremos apenas de STP, é um protocolo que roda em todos os switches por default, ou seja, está presente em praticamente todas as redes de computadores. Entretando, não é difícil achar pessoas que trabalham com redes e que não conhecem esse protocolo. Isso se dá porque esse protocolo faz seu trabalho de forma transparente e só há  realmente necessidade de conhecê-lo mais a fundo quando estamos lidando com ambientes mais complexos.
  Quando uma rede precisa de redundância entre switches,chamados ambientes de alta disponibilidade,cria-se ambientes em que, a não existência desse protocolo, faria com que a rede parasse em muito pouco tempo.
  Switches são equipamentos que, como dito em post anterior, realiza comutação em camada dois. A função do switch na rede é aprender endereços MAC olhando os endereços MAC de origem e com essas informações, montar a tabela MAC. Um switch cisco pode ter até 132 MACs address atrelado a uma única porta.


  Montada a tabela MAC, toda vez que o switch recebe um quadro em uma porta, ele verifica o MAC address de  destino e consulta sua tabela MAC para saber para qual porta esse quadro deverá ser encaminhado. Atentem para o fato de que o switch verifica o MAC de origem para montar a tabela MAC e depois verifica o MAC de destino para comutar o quadro na porta correta. Isso se chama comutação e é a principal função do switch. É muito comun ver questões de exames sobre esse assunto  por gerar uma certa confusão.
  Porém, se ao consultar a sua Tabela MAC, o endereço de destino não estiver presente, o switch não terá outra alternativa a não ser inundar a rede com broadcast em todas as suas portas, exceto a porta de onde o quadro foi originado. Até ai tudo bem, porém, se esse switch estiver conectado a outros switches de forma a existir um loop entre eles e, considerando que quadros ethernet não possui TTL como pacotes IPs, ou seja, eles circularão enquanto houver caminho e enquanto o switch estiver funcionando, vai acontecer o que chamamos de tempestade de broadcast e a rede irá parar rapidamente.

  Na animação abaixo, poderemos ver de forma clara vários conceitos discutidos nesse post como redundância e a ocorrência da tempestade de broadcast e sua inevitável consequência, crash total da rede.
 Se você não entende o audio, preste atenção apenas na animação, ela falará por si só.



  Muito bem, considerando que nossa topologia possui redundância de caminhos entre os switches, e considerando que nossos switches estão rodando o STP, ao ligarmos os switches eles executarão o STA,Spanning tree Algothm. Esse algoritmo se certificará de que ao final do processo de convergência, você terá uma rede sem loop. Considere que esse processo é automático e dinâmico, ou seja, você não precisará fazer nada para que ele aconteça e não precisará fazer nenhuma monitoração apos seu término.

   Para melhor compreendermos o protocolo, vamos dar uma olhada mais detalhada na unidade de informação básica,chamada BPDU,Bridge Protocol Data Unit. Esse quadro de 64 bytes carrega as informações necessárias para o perfeito funcionamento do protocolo.


Vamos detalhar os campos do quadro:

Prioridade da Bridge:
Esse campo possui um valor padão que é 32768 (IEEE),porém, pode assumir qualquer valor entre 1 a 65536. Se você setar manualmente o valor em um switch para 1, ele se tornará o switch raiz,considerando que você altere apenas de um switch.

ID do sistema:

Essa informação foi acrescentada a BPDU. No projeto original do STP, não havia VLANs em switches, dessa forma, apenas uma instancia do STP era executada. Após o desenvolvimento das VLANs como forma de segmentação de domínios de broadcast, cada VLAN deve executar uma instancia diferente do protocolo STP e o campo ID do sistema, carrega a informação do ID da VLAN ao qual está relacionado.
  Quando o valor de prioridade é usado, ele altera o valor de prioridade da bridge,aquele cujo padrão é 32768, para valores múltiplos de 4096. Se você tentar alterar o valor de prioridade de um switch de sua rede, eu fiz esse teste uma vez , e colocar um valor que não seja múltiplo de 4096, ele irá recusar o valor e ainda vai lhe alertar sobre essa regra.
  A Cisco possui o PVST, Per VLAN Spanning tree, que poderemos ver em outra oportunidade.

MAC address:
   Nosso último campo é o MAC address. Caso o switch possua o mesmo valor de prioridade e, acredite, ele terá, afinal todos saem de fábrica com o valor 32768, o que acaba definindo qual switch será o root da rede é o endereço MAC address. O menor MAC address se tornará o switch root ou raiz.

  Abaixo, capturei três quadros com o tcpdump:

tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes
000000 a4:ba:db:28:8c:e3 (oui Unknown) > 01:80:c2:00:00:00 (oui Unknown), 802.3, length 60: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.a6:ba:db:28:8c:e3.8000, length 43
message-age 0.00s, max-age 8.00s, hello-time 2.00s, forwarding-delay 5.00s
root-id 8000.a6:ba:db:28:8c:e3, root-pathcost 0
0x0000: 4242 0300 0000 0000 8000 a6ba db28 8ce3 BB...........(..
0x0010: 0000 0000 8000 a6ba db28 8ce3 8000 0000 .........(......
0x0020: 0800 0200 0500 0000 0000 0000 0000 ..............
2. 000156 a4:ba:db:28:8c:e3 (oui Unknown) > 01:80:c2:00:00:00 (oui Unknown), 802.3, length 60: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.a6:ba:db:28:8c:e3.8000, length 43
message-age 0.00s, max-age 8.00s, hello-time 2.00s, forwarding-delay 5.00s
root-id 8000.a6:ba:db:28:8c:e3, root-pathcost 0
0x0000: 4242 0300 0000 0000 8000 a6ba db28 8ce3 BB...........(..
0x0010: 0000 0000 8000 a6ba db28 8ce3 8000 0000 .........(......
0x0020: 0800 0200 0500 0000 0000 0000 0000 ..............
2. 000154 a4:ba:db:28:8c:e3 (oui Unknown) > 01:80:c2:00:00:00 (oui Unknown), 802.3, length 60: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.a6:ba:db:28:8c:e3.8000, length 43
message-age 0.00s, max-age 8.00s, hello-time 2.00s, forwarding-delay 5.00s
root-id 8000.a6:ba:db:28:8c:e3, root-pathcost 0
0x0000: 4242 0300 0000 0000 8000 a6ba db28 8ce3 BB...........(..
0x0010: 0000 0000 8000 a6ba db28 8ce3 8000 0000 .........(......
0x0020: 0800 0200 0500 0000 0000 0000 0000 ..............



  Nesses pacotes, ou quadros  capturados, temos várias informações que, quanto maior seu conhecimento em redes e, principalmente, de STP, mais relevantes serão. Por hora, vamos considerar as seguites:

1-root-id 8000.a6:ba:db:28:8c:e3
2-STP 802.1d
3-max-age 8.00s
4-hello-time 2.00s
5-forwarding-delay 5.00s


1- Root-id. É a identificação da Root bridge
2- 802.1d e a designação IEEE para o STP
3- Tempo máximo em que uma porta do switch salva as informação do BPDU de configuração. Pode ser de 6 a 20 em switches Cisco, no nosso caso temos o valor 8s.
4- Esse tempo é relacionado com o intervalo em  que são enviadas as BPDUs, ou seja, a cada 2 segundos(pode ser de 1 a 10 em switches Cisco) BPDUs são enviadas às portas que participam do domínio de broadcast afim de manter a consistência da rede.
5- É o tempo gasto para a rede convergir, esse tempo varia de 4 a 30 segundos por estados, como será visto a frente. O valor de 5 segundos aqui, pode indicar a ocorrência de Rapid Spanning tree, uma variante do STP que veremos em outra ocasião.
 OBS: O quadros acimas não são de um switch Cisco.

  Até aqui, já sabemos que o switch com o BID mais baixo se tornará o root ou raiz de nosso domínio de broadcast. Porém, o processo de convergência desse protocolo não para por aqui. Ele ainda mapeará todos os links da rede afim de identificar aqueles que forem redundantes e realizará bloqueios em pelo menos uma porta.
  Vamos ver como isso é feito.

  O STP usa a seguinte nomenclatura para as portas: Designadas, Portas raiz e Não designadas.
Portas Designadas são as portas pertencentes ao próprio switch raiz e ao final da convergência da rede, todas estarão no estado Forwarding ou de encaminhamento.
Portas raizes são as portas prensentes nos switches não-raiz e que possuem o menor custo para o switch raiz. Isso costuma deixar um pouco confuso de forma que uma imagem pode ajudar:


Nessa figura podemos ver muito bem definido o switch raiz (S1), os switches não-raiz (S2 e S3), as portas designadas (Fa0/1 e Fa0/2 do S3) ,as porta raizes (Fa 0/1 S2 e Fa 0/1 de S3) e as port não-designada (Fa 0/2 de S3), que foi, inclusive, bloqueada pelo protocolo.
Vamos entender como se chegou a essa configuração.
Bem, cada conexão de um swtich com outro é identificado como link e recebe um valor:

-10 Mbps valor=100
-100 Mbps valor=19
-1000 Mbps valor = 4
-10000 Mbps valor=2
cada valor desse será chamado de Cost ou custo. O custo mais comun será o 19.
Para eleger uma porta raiz em um switch não raiz, o STP levará em consideração o menor custo ao switch raiz. Caso os custos sejam os mesmo, isso será muito comun, a porta com menor valor será a porta raiz.
Caso a porta Fa 0/1 e Fa 0/2 de um switch esteja conectadas ao switch raiz com o mesmo custo, a porta Fa 0/2 será bloqueada e a porta Fa 0/1 será eleita a porta Raiz para esse switch.

  Portas bloqueadas pelo STP continuam recebendo BPDUs, essa seria a grande difereça entre o bloqueio feito pelo protocolo e um commando shutdown dado pelo admin. Caso aja alguma mudança na topologia, a porta antes bloqueadas pode passar para o estado de encaminhamento assim que o STA recomputar a topologia da rede.
Existem 4 estados para as portas durante esse processo de convergencia:

Blocking,Listening,Learning e Forwarding
Bloqueado, Ouvindo, Aprendendo e encaminhando.
Existe ainda um estado Disable (Desabilitado) que a porta pode assumir,porém, mediante o comando shutdown e não através do protocolo.
  Quando um switch é ligado, todas as suas portas estão no estado Blocking. Detalhe, assim que o switch é ligado, ele envia BPDUs dizendo "Eu sou o root da rede". Ele vai enviar essas BPDUs até que algum outro switch com o BID mais baixo envie uma BPDUs para ele, nesse caso, ele altera a mensagem para "Switch tal é o root da rede".
  Após o estado de Blocking, o estado da porta muda para Listening, a porta irá escutar o tráfego mas não encaminha informação de usuário. Em seguida ela mudará seu estado para Learning, nesse estágio ela comecará a aprender endereços MACs e montar sua tablema MAC mas ainda não transmite dados de usuário. Quando ela atingir o estado de Forwarding a porta estará pronta para receber e enviar dados de usuários. Isso custa ao switch, e a rede, nada menos que 32 segundos.
  Dessa forma, já podemos concluir que, contrário do que dissemos, o STP não é tão transparente assim. Considerando que BPDUs é trafégo secundário e que consome largura de banda, e que a cada vez que o protocol precisa recalcular a convergencia da rede ele leva 32 segundos, em um ambiente com muitos switch, podemos ter problemas de performance com esse protocolo.
  Diante desse situação, foram feito melhoramentos como o RPST, PVST,etc.
Em uma próxima oportunidade poderemos dedicar um post a essas variações.

No comments:

Post a Comment