domingo, 20 de agosto de 2017

Frame rewrite. Desenhando para entender.

Um conceito um pouco confuso as vezes, para quem é iniciante, é o de "frame rewrite". Explico.
 Quando um host envia um pacote para um host em uma rede remota, naturalmente o pacote vai ser encaminhado para o roteador. Mas como é possível enviar um pacote para um host/Roteador sem que seja para ele exatamente?
Você pode cair na engano de achar que o roteador vai adivinhar para onde este pacote deve ir, ou que existe um outro campo no cabeçalho IP para tratar disso. Alguns chegam apensar que ao enviar um pacote para um host fora da sua rede o processo do ARP corre normalmente, e ficam confusos ao perceber que eles não aparecem na tabela ARP.
Pode parecer muito bobo, mas é uma dúvida comum e uma coisa que não fica muito clara para iniciantes.
Quando é necessário montar um pacote para um endereço que está fora da sua rede, para ser bem óbvio, no campo "IP de destino" vai ser colocado exatamente o IP de destino. Já no campo MAC de destino será colocado simplesmente o MAC do roteador definido na sua configuração.
Se tudo ocorrer bem, o switch vai encaminhar este frame para o roteador, por causa do MAC, e o roteador, ao recebê-lo, analisando o IP de destino, verá que se trata de um pacote para um outro nó, e que deve ser encaminhado. O conceito de frame rewrite entra exatamente aqui.

Ao receber um frame o roteador vai descartar o cabeçalho de camada 2. Em seguida analisa a tabela de roteamento e decide por qual interface este pacote deve sair. Por fim, um novo cabeçalho de camada 2 será feito para o pacote, contendo o MAC de origem da interface pela qual saiu e o MAC de destino do próximo nó(pode ser o próprio destino ou um outro roteador).
Veja que, do ponto de vista da camada 2, o host se comunica apenas com o roteador, não tendo o menor sentido saber o MAC address do host remoto.

O processo de aprendizagem do SWITCH - Tabela MAC x Tabela ARP

O Switch é um elemento concentrador na rede, e faz o que chamamos de comutação de frames. O pacotes dos hosts são encapsulados em frames Ethernet, em seguida enviados ao switch com MAC address de ORIGEM e MAC address de DESTINO.
Neste artigo vamos esclarecer e entende os conceitos no processo de comunicação em camada 2, do ponto de vista do switch e do ponto de vista do host.

Como o switch é um elemento de camada 2, ele não depende de absolutamente nada do protocolo IP(camada3), sendo necessário apenas conhecer o MAC de cada dispositivo associado a cada porta. Para isto ele implementa o que chamamos de "Tabela MAC", ou "MAC address table".
Já o host, precisa conhecer o endereço IP do dispositivo que quer se comunicar, mas como é obrigado a colocar alguma coisa no campo "MAC de destino" do frame, ele precisa se virar e descobrir o MAC do dito cujo, para que o Switch consiga fazer seu trabalho.
Vejamos:

 - Do ponto de vista do switch(Tabela MAC):

O switch é completamente ignorante em relação ao protocolo IP, portanto não há qualquer informação sobre endereços IP para o seu funcionamento padrão. Um switch aprende os endereços MAC dos dispositivos associados a cada porta e tenta encaminhar os frames da melhor maneira possível. Em resumo:
 - O switch preenche a tabela MAC de acordo com os endereços de ORIGEM dos frames que RECEBE.
 - O switch ENCAMINHA frames de acordo com endereços de DESTINO contidos na tabela.
 - Se o endereço de DESTINO do frame não é conhecido na tabela MAC, o switch inunda todas as portas(flood) com este frame, EXCETO a porta de onde o frame veio.
 - Naturalmente, switchs "obedecem" à pacotes de broadcast. Se o MAC de destino de um frame é o FF:FF:FF:FF:FF:FF, ele vai ser multiplicado em todas as portas ativas, exceto aquela que originou o frame.
Na figura abaixo temos um switch que já recebeu frames de todos os hosts, portanto conhece cada endereço MAC e a que porta está associado:


A cada frame recebido o switch atualiza a tabela MAC, e cada entrada na tabela tem um tempo de validade(agging time), geralmente não mais que alguns segundos.
Assim funciona um switch de forma padrão. Basta tirar da caixa e ligá-lo que este é o comportamento default de qualquer switch, se necessidade de qualquer configuração.
É claro que em switchs gerenciáveis existem  muito mais opções, como alterar o agging time ou manipular a tabela MAC, sem falar em 1001 outras funcionalidades.


 - Do ponto de vista do host(Tabela ARP):
Como o host precisa preencher o MAC de destino no cabeçalho do frame ele deve conhecer o MAC do host que quer se comunicar. Para isso existe a tabela ARP. A tabela ARP é consultada em busca do MAC correspondente de acordo com o IP de destino do pacote. Se ele não existir na tabela o protocolo ARP é acionado para descobrir. O importante é que o frame seja formado corretamente e despachado pela interface. O switch que "se vire depois" :-)
Na figura abaixo temos um exemplo onde as tabelas ARP de todos os hosts estão completamente preenchidas, como se todos ele já tivessem comunicado entre si: