Quando pensamos em roteamento de pacotes entendemos que o roteador simplesmente recebe a rota e encaminha tráfego de acordo com o prefixo destino, mas muitas coisas acontecem antes disso poder efetivamente acontecer, um pedaço desse todo é a FIB e RIB, é sobre elas que vamos falar brevemente nesse artigo.

 

De forma resumida, podemos falar que a RIB (Routing Information Base) pode ser visualizada como uma base de dados onde informações que são utilizadas pelo protocolo de roteamento são armazenadas, é através dessas informações que o protocolo de roteamento escolhe o melhor caminho para um certo prefixo.

 

Como cada protocolo de roteamento possui uma forma diferente de calcular o melhor caminho para um prefixo, a RIB de cada protocolo possui informações especificas a ele, por exemplo, na RIB do BGP temos o campo AS_PATH, já em outro protocolo como EIGRP esse campo não existe, pois não é utilizado por ele.

 

Quando cada protocolo de roteamento faz seus cálculos e escolhe o melhor caminho para um destino essas rotas são injetadas na tabela de roteamento. Vamos um pegar o exemplo utilizando a topologia abaixo:



 

 

                                                                              

Temos dois roteadores, R1 e R2. Entre eles temos uma sessão iBGP (AS64512) e um processo OSPF na área 0, R1 está anunciando as redes 10.10.10.0/24 e 10.10.11.0/24 em ambos protocolos.

 

Relembrando que a distância administrativa (AD) do OSPF é 110 enquanto de iBGP é 200, então é esperado que na tabela de roteamento de R2 as rotas OSPF sejam inseridas na tabela de roteamento.

 

 

 

E é exatamente o que acontece, as rotas OSPF são injetadas na tabela de roteamento.

 

Normalmente os protocolos de roteamento não ‘reclamam’ quando as suas rotas não são inseridas na tabela de roteamento, mas quando usamos BGP é possível ver falhas na RIB com o comando ‘show ip bgp rib-failure’, o comando mostra o motivo da rota não ter sido escolhida para a tabela de roteamento, no exemplo abaixo, as rotas não foram utilizadas pois a distância administrativa delas (200) são maiores que as do OSPF (110).

 

 

Idealmente poderíamos simplesmente utilizar a RIB para encaminhar pacotes, mas isso não é possível, pois rotas estáticas ou geradas por BGP podem apontar para next-hops que não estão diretamente conectados, o roteador não saberia para onde encaminhar o pacote baseado apenas no IP, é necessário saber qual interface o pacote vai utilizar.

 

Quando a rota BGP é calculada com as informações da RIB a interface de saída não é calculada, diferentemente de rotas OSPF. Então para essas rotas que não possuem interface de saída, o roteador precisar fazer uma pesquisa recursiva (‘recursive lookup’) para descobrir por qual interface o pacote precisa sair.

 

No passado, o roteador fazia essa recursive lookup no primeiro pacote (process switching) para um destino e fazia cache dessa informação para utilizar para pacotes subsequentes (fast switching), mas na medida que a quantidade de prefixos foi aumentando e mais tráfego sendo controlado pelos roteadores esse processo resultava em consumo altíssimo de CPU que impactava diretamente na entrega de tráfego.

 

FIB (Forwarding Information Base) e CEF (Cisco Express Forwarding) foram criados para resolver esse problema. Quando rotas são copiadas da RIB para a FIB os atributos do next-hop da rota são calculados, as interfaces de saída são computadas e múltiplas entradas são criadas quando vários caminhos para o mesmo destino existem.

 

A rota BGP quando é inserida na FIB mantém a informação do next-hop calculada pelo protoloco na RIB, mas também trás a informação de qual interface o tráfego será encaminhado para chegar ao destino, isso permitirá ao roteador saber exatamente por onde encaminhar os pacotes e qual encapsulamento precisará utilizar.

 

 

A informação da interface de saída é consumida da ‘adjacency table’.

 

 

Pudemos entender então que a RIB é um espaço no roteador em que os protocolos de roteamento utilizam para fazer seus cálculos e tentar instalar a suas rotas na tabela de roteamento.

 

A FIB é derivada do resultado dos cálculos da RIB junto com as informações da adjacency table, é com essa informação que o roteador é capaz de encaminhar pacotes para os destinos de forma adequada.

 

Espero poder entrar em mais detalhes em artigos futuros, mas de forma resumida essa era a informação que gostaria de passar.