Conhecendo o BGP ( Border Gateway Protocol para os íntimos )

Este post acabou sendo criado porque citei o BGP outro dia no trabalho, me perguntaram o que seria ele, e eu acabei ficando meio sem palavras na hora. Naquele momento, como em muitas vezes me toquei que eu sabia como o conceito funcionava, o que era, mas não sabia expressar em palavras claramente o que o mesmo era.

Ou seja, talvez ele não fosse tão claro para mim o quanto parecia. Assim, resolvi pesquisar um pouco e trazer aqui no blog o que é realmente o BGP.

A tendência do assunto Network voltar aqui é porque estou bem envolvido com CISCO no momento e também, pretendo começar meu preocesso de certificação nos produtos da empresa. Por mais que se negue, CISCO é sinônimo de redes.

BGP
Well, então vamos ao assunto do Post, o BGP. O que é o BGP ? BGP é o famoso Border Gateway Protocol ( numa tradução tosca, protocolo de borda do gateway ), que é muito utilizado por provedores de serviços de dados e logicamente, estruturas gigantes de redes.

Em suma, o BGP é um protocolo de roteamento interdomínios. Ele foi criado para tentar sanar o problema dos buracos negros da internet, pois tenta eliminar os famosos loops da internet nas famosas topologias “caóticas” que temos por aí.

O BGP é um protocolo de conversa. Na realidade, ele troca informações de acesso a rede, inclusive a lista das trajetórias dos ASs ( Autonomous Systems ), com outros sistemas BGP.

Sendo mais prático vamos a um cenário. Quando um roteador se conecta pela primeira vez à rede, os roteadores BGP trocam as suas tabelas de roteamento completas. Assim, cada um conhece tudo que o outro conhece. Com isto, a cada mudança de rota, todos os roteadores irão conhecer as rotas do outro, formando uma “comunidade” que sabe qual o melhor caminho a ser tomado para chegada a um lugar qualquer.

Isto acontece porque o protocolo BGP possui um algoritmo de métricas que lhe diz o melhor caminho. Lembra das aulas de automatos finitos em computação e você achava que não tinha aplicação nenhuma para aquilo. Está aqui.

Quando um pacote é lançado a rede, os roteadores escolhem, via este pré-conhecimento o melhor caminho para enviar o mesmo. Esta escolha vai levar em conta quantos ASs vão ser acessados, quantos Hopes de rede vão ser alcançados e por aí vai etc.

O BGP gera quatro tipos de mensagens básicas ( nota mental CTRL+C CTRL+V da Wikipedia ) .

1. Abertura (open message) – abre uma sessão de comunicação entre BGP pares (peers) e é a primeira mensagem enviada de cada lado depois que uma conexão de protocolo de transporte é estabelecida; essa mensagem é confirmada usando uma mensagem de keep-alive enviada pelo roteador par e tem que ser confirmada antes da atualizações, notificações e outras mensagens de keep-alive.

2. Atualização (update message) – é usada para informar atualizações de rotas para outros sistemas BGP, permitindo que os roteadores possam construir uma visão consistente da topologia da rede, usando o TCP para garantir uma entrega confiável; essas mensagens podem retirar rotas inviáveis (unfeasible routes) da tabela de roteamento e simultaneamente informar uma nova rota.

3. Notificação (notification message) – é enviada quando uma condição de erro é detectada; elas são usadas para encerrar uma sessão ativa e informar a quaisquer roteadores conectados do porque do encerramento da sessão.

4. Keep-alive – notifica aos roteadores BGP pares que um dispositivo está ativo.

Para não ficar escrevendo mais e mais sobre este protocolo e soar mais maçante do que eu já acabei sendo ( até para mim, pois copei os últimos quatro parágrafos da Wikipedia ), indico o artigo da Wikipedia e mais os artigos da RNP para quem quiser conhecer mais um pouco sobre isto.

Quanto a Network, o assunto começa a ser abordado aqui com este post e iremos discutir mais e mais isto por aqui. Roteadores são os maiores amigos de um SysAdmin 🙂

Em tempo, para quem quiser saber, os Autonomous Systems são um conjunto de prefixos de ips detidos por uma operadora de internet ( em geral, as que vendem links de dados ) onde há definidas regras de roteamento. Ou seja, é o dono da bola que vai falar para o seu pacote para onde ele vai ou deixa de ir. Daí a necessidade do BGP 🙂