sexta-feira, 7 de fevereiro de 2014

Tecnologia Cisco® CEF no Encaminhamento de Pacotes

Olá Pessoal.

CEF (Cisco Express Forwarding) é o nome dado à avançada tecnologia de encaminhamento layer-3 empregada na maioria dos equipamentos da Cisco. Uma definição comumente adotada pela Cisco destaca que "a tecnologia CEF otimiza o desempenho e a escalabilidade para redes com grande volumes e diferentes padrões de tráfego, como ocorre em ambientes de produção que possuem muitas aplicações web baseadas nos padrões da Internet."

Técnicamente essa é uma definição correta da tecnologia CEF, mas o que realmente isso quer dizer e como essa tecnologia implica em excelente desempenho no processo de comutação/encaminhamento de pacotes? É essa resposta o objeto de discussão desse artigo...

Antes de entrar na discussão da tecnologia CEF propriamente dita é conveniente apresentar um breve histórico da evolução das tecnologias de comutação adotadas pela Cisco, a saber:

  • Process Switching
  • Fast Switching
  • CEF

A mais antiga e simples das técnicas de encaminhamento é denominada Process-Switching e consiste basicamente na necessidade de ação direta do processador principal na decisão de encaminhamento de cada pacote individual. Essa técnica possui desempenho ruim, ou seja, é lenta, porque cada pacote entrante em uma interface de rede passa, minimamente, pelas seguintes etapas:

  1. Leitura e Retirada do Cabeçalho de Camada 2
  2. Cópia do Pacote de Camada 3 na Memória da CPU (Plano de Controle)
  3. Lookup no Plano de Controle e Decisão de Encaminhamento
  4. Realização de Processos Complementares
  5. Recálculo da Função CRC p/ Geração de Novo Cabeçalho Layer-2
  6. Reencapsulamento Layer-2 do Pacote Layer-3
  7. Encaminhamento do Quadro na Interface de Saída 

Acontece que todo esse processo é bastante oneroso no consumo de processamento, principalmente no que diz respeito ao lookup no plano de controle (destaque em vermelho) que envolve outros protocolos como o ARP (IPv4) ou NDP (IPv6) para descobrir o endereço físico associado ao IP do vizinho. Essa é a forma tradicional de encaminhamento adotada na maioria dos roteadores residenciais e de pequeno porte (SOHO), inclusive em vários Sistemas Operacionais terminais, o que explica esses sistemas/dispositivos não terem o mesmo desempenho de um roteador profissional. 

Uma alternativa a esse processamento individual ocorre quando uma interface de um roteador gera uma interrupção no processador principal ao receber um pacote para que a decisão de encaminhamento seja tomada com base em tabelas auxiliares (estruturas de dados) previamente armazenadas. Por enquanto essa é uma descrição bastante generalista, mas é válido associar essa segunda abordagem com as técnicas Fast-Switching e CEF.

A diferença entre as técnicas Fast-Switching e CEF consiste na forma pela qual cada uma dessas técnicas irá construir/armazenar essas estruturas de dados que serão posteriormente utilizadas no processo de decisão para agilizar o encaminhamento dos pacotes.

Através da técnica Fast-Switching o processo anterior ocorre apenas para o primeiro pacote de um mesmo fluxo. O primeiro pacote de um fluxo é copiado na memória da CPU (plano de controle) para que seja realizado o procedimento de busca (lookup) e reencapsulamento em um novo frame, afinal a cada salto mudam as informações dos vizinhos (origem/destino). A diferença é que o processamento desse primeiro pacote implica na construção de uma estrutura de dados chamada "fastswitching cache" que será consultada no processo de encaminhamento dos demais pacotes que pertençam ao mesmo fluxo (direcionados para o mesmo destino), dispensando, assim, todo o processamento anteriormente mencionado para cada pacote individual. Nessa tabela ficam armazenadas informações sobre os endereços IP e MAC do destino e sua respectiva interface de saída.

Podemos dizer que Fast-Switching também utiliza a CPU (plano de controle), no entanto o resultado da tomada de decisão de encaminhamento de um pacote implica no armazenamento em cache (plano de dados) de como alcançar um dado destino. Todos os demais pacotes direcionados para o mesmo destino são encaminhados mais rapidamente através da consulta desse cache, dispensando o processo de lookup tradicional por pacote individual. O ponto negativo é que cada novo fluxo irá requerer a intervenção do processador principal, uma vez que cada pacote encaminhado para um destino desconhecido nas tabelas de cache será marcado como "punted" e direcionado para a CPU do plano de controle, aumentando a latência de encaminhamento.

A tecnologia CEF representa uma evolução do processo de encaminhamento adotado nos roteadores para que esses dispositivos sejam capazes de encaminhar pacotes mais rapidamente com melhor desempenho. No CEF existem duas estruturas de dados principais:

  • Tabela de Adjacência: Tomando como referência a tecnologia Ethernet, essa(s) tabela(s) é/são construída(s) a partir da Tabela ARP para mapear endereços IP em MAC com o objetivo de otimizar o desempenho com menos ação dos protocolos ARP/NDP. Ela também é construída para armazenar informações de endereços físicos de outras tecnologias, a exemplo de Frame-Relay, ATM, PPP, etc.

  • FIB (Forwarding Information Base): É uma tabela bastante enxuta que fica armazenada no plano de dados e que é construída a partir da tabela de roteamento que, por sua vez, é construída a partir da RIB (Routing Information Base) armazenada no plano de controle do roteador. Essa tabela é construída a partir de tecnologia proprietária da Cisco e possui excelente desempenho no processo de busca a informações sobre os prefixos de rede, próximo salto e interface de saída.

Fonte: CCNP Practical Studies: Switching (Justin Menga)

Com a adoção da tecnologia CEF o tratamento dos pacotes passa pelas seguintes etapas:

  1. Leitura e Retirada do Cabeçalho de Camada 2
  2. Lookup na Tabela FIB (Plano de Dados)
  3. Leitura na Tabela de Adjacência
  4. Reencapsulamento Layer-2 do Pacote Layer-3
  5. Encaminhamento na Interface de Saída

Reparem na figura que o lookup é feito no próprio plano de dados através da FIB, sem necessidade de resolução nenhuma no plano de controle. Um roteador com CEF ativo (padrão) não precisa marcar pacotes como "punted" (exceto aqueles destinados a interfaces diretamente conectadas) porque se um dado destino não estiver na FIB, então ele não existe!

Em síntese, o segredo do desempenho otimizado da tecnologia CEF é resultado direto do método proprietário adotado pela Cisco para construir a FIB no plano de dados a partir da RIB no plano de controle. Uma vez que essa estrutura fica no plano de dados, não há necessidade de consumo da CPU do plano de controle. Por fim, trago alguns comandos de visualização que devem ajudar o leitor a enxergar melhor a implementação prática desses conceitos nos dispositivos roteadores:

!--- Visualização da Tabela de Adjacência do CEF
Router# show adjacency
Router# show adjacency summary
Router# show adjacency detail
Router# show adjacency internal

!--- Visualização da Tabela FIB do CEF
Router# show ip cef

!--- Visualização do Cache do FastSwitching
Router# show ip cache [opções]

Abraço.

Samuel.

5 comentários: