Introduction
Este documento descreve como a polarização do Cisco Express Forwarding (CEF) pode causar o uso inadequado de caminhos redundantes para uma rede de destino. A polarização de CEF é o efeito quando um algoritmo de hash escolhe um caminho específico e os caminhos redundantes permanecem completamente sem uso.
Prerequisites
Requirements
Não existem requisitos específicos para este documento.
Componentes Utilizados
As informações neste documento são baseadas em um switch Cisco Catalyst 6500 executado em um Supervisor Engine 720.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.
Informações de Apoio
O CEF comuta os pacotes com base na tabela de roteamento que é preenchida pelos protocolos de roteamento, como o EIGRP (Enhanced Interior Gateway Routing Protocol) e o OSPF (Open Shortest Path First). O CEF executa o balanceamento de carga quando a tabela de roteamento (RIB) é calculada. Em um projeto de rede hierárquico, pode haver muitos caminhos redundantes de custo igual de Camada 3 (L3). Considere essa topologia em que o tráfego flui da camada de acesso através da distribuição e do núcleo e para o data center.
Suponha que, para acessar a rede 10.1.1.1 do Roteador 1 (R1) [Top Left], há dois caminhos de mesmo custo (L1, L2). A decisão sobre qual dos dois links é usado é feita por um algoritmo de hash. Por padrão, o IP de origem (SIP) e o IP de destino (DIP) são usados como parâmetros no algoritmo de hash.
Aqui está uma descrição de como o algoritmo de hash funciona:
Quando há apenas dois caminhos, o switch/roteador executa uma operação exclusiva - OR (XOR) nos bits de ordem inferior (um bit quando um dos dois links precisa ser selecionado, dois bits para os links 3-4 e assim por diante) do SIP e do DIP. A operação XOR do mesmo SIP e DIP sempre resulta no uso do pacote do mesmo link.
O pacote passa então para a camada de distribuição, onde o mesmo algoritmo de hash é usado junto com a mesma entrada de hash, e seleciona um único link para todos os fluxos, o que deixa o outro link subutilizado. Esse processo é chamado polarização CEF (uso do mesmo algoritmo de hash e da mesma entrada de hash que resulta no uso de um único link de multi-caminho de custo igual (ECMP) para TODOS os fluxos).
Este exemplo ilustra este processo em mais detalhes:
- O tráfego originado de 10.240.18.1 e destinado a 10.240.20.1 entra na rede no Roteador A e é comutado por CEF. Como há dois caminhos de mesmo custo para a rede 10.240.20.0/24, os endereços de origem e de destino no pacote passam pelo algoritmo de hash e o resultado é um caminho específico usado para alcançar o destino. Nesse caso, o caminho percorrido pelos pacotes é em direção ao Roteador C. A partir daí, os pacotes vão para o Roteador F e para seu destino final.
- O tráfego originado de 10.240.18.2 e destinado a 10.240.20.1 entra na rede no Roteador A e também é comutado pelo CEF. Como há dois caminhos de mesmo custo para a rede 10.240.20.0/24, os endereços de origem e destino no pacote passam pelo algoritmo de hash e o CEF escolhe um caminho. Nesse caso, o caminho que os pacotes seguem é em direção ao Roteador B.
- O tráfego originado de 10.240.18.3 e destinado a 10.240.20.1 entra na rede no Roteador A e também é comutado por CEF. Como há dois caminhos de mesmo custo para a rede 10.240.20.0/24, os endereços de origem e destino no pacote passam pelo algoritmo de hash e o CEF escolhe um caminho. Nesse caso, o caminho que os pacotes seguem é em direção ao Roteador B.
- Os pacotes originados de 10.240.18.2 e 10.240.18.3 chegam ao Roteador B, que novamente tem dois caminhos de custo igual para alcançar 10.240.20.1. Ele executa novamente esses conjuntos de pares de origem e destino através do algoritmo de hash, que produz os mesmos resultados que o algoritmo de hash no Roteador A produziu. Isso significa que ambos os fluxos de pacotes passam por um caminho - neste caso, o link em direção ao Roteador E. O link em direção ao Roteador D não recebe tráfego.
- Depois que o tráfego originado de 10.240.18.2 e 10.240.18.3 é recebido no Roteador E, ele é comutado ao longo do caminho até o Roteador F e, em seguida, até seu destino final.
Como evitar a polarização do CEF
- Alternar entre as configurações de entrada padrão (SIP e DIP) e full (portas SIP + DIP + Camada 4) em cada camada da rede.
O Catalyst 6500 fornece algumas opções para o algoritmo de hash:
- Padrão - Use o endereço IP origem e destino, com pesos desiguais dados a cada link para evitar a polarização.
- Simples - Use o endereço IP de origem e de destino, com peso igual atribuído a cada link.
- Completo - Use o endereço IP origem e destino e o número de porta da Camada 4, com pesos desiguais.
- Full Simple - Use o endereço IP origem e destino e o número de porta da Camada 4, com os mesmos pesos fornecidos a cada link.
6500(config)#mls ip cef load-sharing ?
full load balancing algorithm to include L4 ports
simple load balancing algorithm recommended for a single-stage CEF router
6500(config)#mls ip cef load-sharing full ?
simple load balancing algorithm recommended for a single-stage CEF router
<cr>
Atualmente, não existem comandos para verificar o algoritmo de compartilhamento de carga em uso. A melhor maneira de descobrir qual método está em uso é verificar a configuração atual por meio do comando show running-config. Se nenhuma configuração estiver presente iniciando com mls ip cef load-sharing, o algoritmo de peso desigual de origem e de destino está em uso.
Note: 1) O Catalyst 6500 não suporta o compartilhamento de carga por pacote. 2) A opção completa NÃO inclui um ID universal em hash. Se for usado em todas as camadas de uma topologia multicamada, a polarização é possível. É aconselhável usar a opção simples com este comando para obter melhor compartilhamento de carga e para usar menos adjacências de hardware.
- Alternar entre um número par e ímpar de links ECMP em cada camada da rede.
O balanceamento de carga CEF não depende de como as rotas de protocolo são inseridas na tabela de roteamento. Portanto, as rotas OSPF exibem o mesmo comportamento do EIGRP. Em uma rede hierárquica onde há vários roteadores que executam o compartilhamento de carga em uma linha, todos usam o mesmo algoritmo para compartilhamento de carga.
O algoritmo de hash faz balanceamento de carga desta maneira por padrão:
1: 1
2: 7-8
3: 1-1-1
4: 1-1-1-2
5: 1-1-1-1-1
6: 1-2-2-2-2-2
7: 1-1-1-1-1-1-1
8: 1-1-1-2-2-2-2-2
O número antes dos dois-pontos representa o número de caminhos de custo igual. O número após os dois-pontos representa a proporção do tráfego encaminhado por caminho.
Isto significa que:
- Para dois caminhos de custo igual, o compartilhamento de carga é de 46,666% a 53,333%, não 50% a 50%.
- Para três caminhos de custo igual, o compartilhamento de carga é de 33,33% a 33,33% a 33,33% (como esperado).
- Para quatro caminhos de custo igual, o compartilhamento de carga é de 20%-20%-20%-40% e não de 25%-25%-25%-25%.
Isso ilustra que, quando há um número par de enlaces ECMP, o tráfego não é balanceado de carga
Uma maneira de desativar a polarização CEF é o peso anti-polarização, que foi introduzido na versão 12.2(17d)SXB2.
Para habilitar o peso anti-polarização, digite este comando:
6500(config)# mls ip cef load-sharing full simple
Use este comando se houver dois caminhos de custo igual e ambos precisarem ser usados igualmente. A adição da palavra-chave simple permite que o hardware use o mesmo número de adjacências que na adjacência de CEF do Cisco IOS®. Sem a palavra-chave simples, o hardware instala entradas de adjacência adicionais para evitar a polarização da plataforma.
- O Cisco IOS introduziu um conceito chamado unique-ID/universal-ID que ajuda a evitar a polarização do CEF. Esse algoritmo, chamado de algoritmo universal (o padrão nas versões atuais do Cisco IOS), adiciona um valor específico do roteador de 32 bits à função hash (chamada de ID universal - esse é um valor gerado aleatoriamente no momento da inicialização do switch que pode ser controlado manualmente). Isso separa a função de hash em cada roteador com um ID exclusivo, que garante que o mesmo hash do par origem/destino seja um valor diferente em roteadores diferentes ao longo do caminho. Esse processo oferece um melhor compartilhamento de carga em toda a rede e contorna o problema de polarização. Esse conceito de ID exclusivo não funciona para um número par de caminhos de custo igual devido a uma limitação de hardware, mas funciona perfeitamente para um número ímpar de caminhos de custo igual. Para superar esse problema, o Cisco IOS adiciona um link à tabela de adjacência de hardware quando há um número par de caminhos de custo igual para fazer com que o sistema acredite que há um número ímpar de links de custo igual.
Para configurar um valor personalizado para o ID universal, use:
6500(config)ip cef load-sharing algorithm universal