Boa noite Network Folks! Como estão?
Nesse artigo irei explicar sobre o que é o tão famoso MPLS (Multiprotocol Label Switch) que tanto ouvimos falar e porque as empresas, Data Centers e ISP's o utilizam e como essa tecnologia conseguiu resolver alguns problemas e fornecer novas possibilidades de serviços. Pega o seu café e vem comigo!
Por que MPLS?
Antes de explicarmos o que é o MPLS, é importante sabermos o que motivou a criação dessa tecnologia. Para isso, precisamos relembrar como o método de encaminhamento de pacotes tradicional (hop-by-hop destination-based unicast routing) funciona.
O encaminhamento de pacotes IP tradicionais analisa o endereço IP de destino contido no pacote L3 de cada pacote conforme ele percorre (hops) a rede até o seu destino.Protocolos de roteamento (estáticos ou dinâmicos) precisam construir/consultar uma base de dados (essa chamada, Routing table) para poderem encaminhar esses pacotes. Agora, pense comigo, imagine uma grande rede. Com o encaminhamento IP convencional, qualquer oscilação ou alteração de roteamento que ocorrer é "sentida" em todos os dispositivos dentro desse domínio de roteamento, ou seja, oscilação quer dizer TEMPO DE CONVERGÊNCIA, e que sabemos, pode ser bem impactante (dependendo do tamanho da sua estrutura).
Faço uma analogia com Janemba do DBZ, ele consegue se teletransportar entre dimensões de uma forma muito melhor e eficaz,tolerante a falhas e com menos esforço do que o próprio Goku que executa a mesma técnica de forma similar(que possui um delay e pode falhar).
O que quero mostrar com essa analogia,é que podemos ver que de fato era necessário uma forma dos pacotes encaminhados não sofrerem perdas em caso de falha no seu caminho seja por oscilação no caminho ou por indisponibilidade no caminho(ou que isso sejá diminuído ao máximo). Para implementar esse mecanismo, o encaminhamento não pode depender somente das informações de cabeçalho IP para encaminhar o pacote. E como podemos fazer isso? Com LABELS!
O encaminhamento sendo realizado com base em labels(rótulos) anexadas ao pacote IP nos fornece maior agilidade,segurança(rápida convergência) e economia de recursos(CPU e Memória), pois com os equipamentos não tendo mais que consultar (inspecionar) todos os pacotes durante todo o caminho do pacote (o fazendo somente de uma extremidade para a outra), isso resolverá muitos problemas que o encaminhamento tradicional possui e por esse motivo, o MPLS é uma tecnologia necessária (e imprescindível) nos dias de hoje. Abaixo uma imagem que demonstra o que acabei de explicar (não se preocupe com os termos no "MPLS Domain", até o final do artigo você irá entender o que são eles 😉)
MPLS
O MPLS (Multiprotocol Label Switch) é uma tecnologia que combina os benefícios do encaminhamento de pacotes com base na comutação L2 com os benefícios do roteamento L3 (cabeçalho MPLS possui 32 bits e fica entre o cabeçalho L2 e L3).
Por ser multiprotocol, o MPLS se torna atrativo pois ele possui a capacidade de transportar uma pilha de rótulos anexados a um pacote, já que o conceito "label stack" permite novas aplicações como MPLS TE (Traffic Engineering),VPN's (L2/L3VPN) e Fast Rerouting porem não irei abordar sobre esses temas nesse artigo.
O MPLS funciona através de "Label Swapping", que fornece maior escalabilidade do L3 e fornece maior flexibilidade (permitindo que novos serviços de roteamento sejam adicionados sem uma mudança no escopo de roteamento do IGP).
Eu sei, parece confuso esses termo "label" , mas, até o fim do artigo isso ficará bem mais claro. Vamos entender o funcionamento do MPLS.
Funcionamento
Em um nó MPLS, os routers falam MPLS trocam labels onde cada prefixo IP possui label (escopo local) e com isso, é construido a LFIB (Label forwarding information base) que é o banco de dados para encaminhar pacotes com labels por meio de uma rede MPLS. Ou seja, quando um router recebe um pacote IP, é realizado uma pesquisa na CEF (Cisco Express Forwarding) e quando é um pacote com label, a pesquisa é feita na LFIB.Mas você deve estar se perguntando, "o que são esses labels Pedro"?
Conforme a imagem anterior, label é um campo de 20 bits que é responsável por identificar um LSP (Label switch path que irei explicar com mais detalhes a frente)e é alterado a cada roteador MPLS no caminho até o seu destino.
Para que essa comunicação via Labels seja feita, é necessário que os routers troquem essas informação entre eles e possuímos 3 protocolos para realizar isso:
-Tag Distribution Protocol (TDP)
-Label Distribution Protocol (LDP e o comumente usado)
-Resource Reservation Protocol (RSVP, usado para MPLS TE)
OBS: É possível fazer com que o BGP anuncie labels também. Para que isso ocorra, é necessário habilitar a RFC 3107 (Cary Label Information in BGP-4) nos roteadores que fecham peer BGP para que eles anunciem labels MPLS juntamente com os prefixos. Quem sabe eu não faça um artigo sobre isso no futuro? 😉
E como funciona? Bom,no caso do LDP (só irei explicar esse), cada LSR (que explicarei com mais detalhes logo abaixo), cria uma ligação local (nunca se esqueça disso) entre um prefixo e um label.Feito isso, o LSR distribui esse vinculo a todos os seus neighbors LDP e os mesmos armazenam os labels locais e remotos em sua LFIB.
Para que esse label seja compreendido, e para que o LSP seja construido, é necessário que tenhamos um equipamento(Label Switch Router, ou LSR) que interprete esses labels e que construa toda a malha MPLS e é isso que o LSP é. LSP (Label Switch Path) é uma sequencia de LSR's que comuta pacotes com labels por toda a rede MPLS.. Abaixo está uma imagem que mostra como é a arquitetura MPLS com as suas nomenclaturas para ajudar o entendimento.
Existem 3 tipos de LSR's em uma rede MPLS:
Ingress LSR: Que são os LSR's de entrada e recebem um pacote que ainda não possui label.Eles inserem um label na frente do pacote e o envia para um link de dados.
Egress LSR: LSR's de saída que recebem pacotes com label, removem o label, e os envia para o destino final.
Intermediate LSR: LSR's intermediários que recebem um pacote com um label, executam uma operação, e envia o pacote para o próximo salto.Essas operações são POP (pacote que deixa o domínio MPLS e tem o seu label removido do pacote) , PUSH (pacote IP entra em um domínio MPLS e é adicionado um novo rotulo) e SWAP (pacote é transferido dentro do MPLS e possui o seu label trocado já que o seu destino não se encontra nesse router.É adicionado um novo label e um novo salto conforme a LFIB do router). Abaixo um desenho para ilustrar as operações dos labels.
Toda essa explicação dos modos LSR's pode ser vista no desenho anterior onde podemos ver o pacote mudando de labels (parte roxa) em todo o seu caminho.
OBS:Um label é removido no ultimo salto de um domínio MPLS.O PHP (Penultimate hop popping) se aplica e o label é retirado do pacote para reduzir o tamanho do pacote que é encaminhado para o ultimo salto (já que ocorre o aumento do tamanho pacote em 32 bits).
Se um LSR de entrada recebe um pacote IP e encaminha com LABEL, isso é chamado IP-TO-LABEL. Se um LSR receber um pacote com label, ele pode retira-lo e encaminha-lo como um pacote IP tradicional ou pode encaminha-lo com outra label (isso irá depender se o destino do pacote está nesse equipamento ou não). O primeiro cenário se chama LABEL-TO-IP e o segundo LABEL-TO-LABEL. Abaixo está um desenho ilustrando o que acabei de dizer.
Mostrado toda essa teoria, vamos a pratica?
Configuração MPLS.
Utilizando o mesmo cenário do ultimo laboratorio (se você não viu o laboratorio sobre L2VPN e L3VPN,serviços que foram possíveis graças ao MPLS, recomendo fortemente que de uma olhada neles após ler esse artigo pois acredito que eles ficaram ainda mais claro após você acabar esse aqui 😁), possuímos essa rede MPLS configurada entre R1,R2,R3. Como o foco do artigo é puramente o MPLS entre eles, peço que desconsiderem as informações de "CLI-C".
Vamos verificar como configuramos os roteadores.
R1-MPLS
Como podemos ver, possuímos a configuração das interfaces e fechamos um OSPF com R2 e R3. Esse OSPF será o nosso IGP que irá anunciar as nossas redes e os nossos labels.O "mpls ldp sync" e "mpls ldp autoconfig são para configurarmos o LDP de forma dinâmica e sincroniza-lo.
Vejamos R2 e R3!
R2-MPLS
R3-MPLS
E é isto! A configuração está feita. Vamos verificar a tabela LFIB de R1?
R1-MPLS-LFIB
No show acima, podemos ver a LFIB de R1 e se usarmos um "detail" para verificarmos qual label estamos atribuindo localmente para o prefixo das loopbacks de R2 e R3 que aprendemos via OSPF , vemos que do ponto de vista de R1 os labels locais são 18 e 19(que são os labels que este LSR atribuiu e distribuirá aos outros LSR's) e meus labels de saída estão como "Pop Label". O que isso quer dizer? Caso o ip de destino de 10.10.10.2 por exemplo estivesse a mais saltos de distancia, eu receberia um label de saída para poder encaminhar o trafego para ele (se lembram que eu falei que atribuímos um label de entrada e de saida e que ele tem escopo local?) Nesse caso, como R2 já é o próximo salto, o meu outgoing label é "Pop Label", o que significa que eu removo o top label e encaminho o pacote sem label de forma ip tradicional. E se simularmos uma indisponibilidade entre R1 e R2 para vermos se o cenário muda?
E tivemos mudança! Veja que agora para alcançarmos o prefixo 10.10.10.2/32 nos foi atribuído um label de saída (out) no valor de 16, e que minha interface de saída para aquele label mudou para a ETH1/3. Do ponto de vista de R1, agora, caso algum trafego com destino a 10.10.10.2 passe por mim para chegar a ele, R1 não irá inspecionar o pacote, ver o endereço de destino e ai encaminhar para o next hop, ele somente irá ver que o pacote possui um label, e o encaminhará para frente baseado na sua LFIB que consultou a CEF para fazer a ligação.
Espero que esse artigo tenha deixado claro como funciona um pouco a arquitetura do MPLS e quais foram os motivadores e ganhos de se aplicar em sua rede.Muito obrigado a você que leu, e seguimos firmes rumo ao CCIE!