Seleção de roteamento: especificidade versus métrica


17

Entendo que o Linux escolhe a rota mais específica para o destino quando faz a seleção de roteamento . Mas e a métrica de uma rota? Tem uma prioridade mais alta que a especificidade da rota?

Uma referência aos detalhes do algoritmo de seleção de roteamento usado pelo Linux também seria apreciada.

Respostas:


26

A métrica de rotas é definir a preferência entre rotas com a mesma especificidade. Isso vale para o roteamento em geral (por exemplo, Cisco, Windows, etc). Portanto, o modelo funciona como:

  1. Encontre a rota mais específica (também conhecida como a correspondência de prefixo mais longa * )
  2. Se houver várias rotas com a mesma especificidade, escolha aquela com a menor distância administrativa (isso distingue coisas como rotas diretamente conectadas, rotas estáticas e vários protocolos de roteamento).
  3. Dentro desse protocolo de roteamento e rota específica (se a especificidade da rota e a distância administrativa forem iguais), escolha a rota com a métrica mais baixa

Observe que há outras coisas que poderiam estar em um roteamento baseado em políticas que permitem fazer coisas como rotear com base no endereço IP de origem. Mas especificidade de rota, distância administrativa e métrica são o que eu consideraria as três principais coisas.

* É chamado de correspondência de prefixo mais longa porque se parece com uma sub-rede em binário (/ 24 por exemplo) 11111111.11111111.11111111.00000000. Portanto, um roteador pode apenas verificar o prefixo 1s binário e parar quando atingir o zero e, em seguida, corresponder ao prefixo.


11
Isso não é verdade no Linux, onde não há distinção entre distância métrica e distância administrativa.
JCH

11
@jch Faz quagga e co. imitar o AD definindo a métrica de acordo? (Não que o seu objetivo não é vital, apenas curioso)
Kyle Brandt

11
Não, o Quagga implementa o AD internamente no zebradaemon e envia apenas as rotas selecionadas para o kernel - para que o kernel nunca precise lidar com o AD. Eu precisaria verificar, mas acho que o Quagga define a métrica do kernel como um valor constante.
JCH

Só quero mencionar que isso não se aplica às pontes ethernet, por exemplo, duas rotas idênticas através de dispositivos diferentes com a mesma métrica ainda resultaram no desvio do tráfego no link mais longo e incorreto.
Areeb Soo Yasir

9

O Linux fornece várias ferramentas para seleção de roteamento flexível.

Tabela de roteamento único

No caso mais simples, existe apenas uma tabela de roteamento do kernel e nenhuma rota com o atributo SRC. Esta tabela contém várias rotas, que foram colocadas lá manualmente ( ip route add), pelo daemon DHCP ou pelos daemons de roteamento. Nesse caso, o kernel escolhe:

  • a rota mais específica;
  • se houver várias rotas igualmente específicas, aquela com a menor métrica do kernel.

Observe que a métrica do kernel (exibida por ip route show) é escolhida pelo daemon de roteamento e não está necessariamente relacionada à métrica de nenhum protocolo de roteamento específico. Por exemplo, o Quagga usa a mesma métrica para todas as rotas instaladas no kernel, independentemente da métrica do protocolo.

Rotas específicas da fonte

O Linux também suporta rotas com um atributo SRC, que apenas correspondem aos pacotes com um determinado endereço de origem. O SRC funciona apenas para IPv6 e estava com bugs até muito recentemente (3.11, se a memória servir); Eu não recomendo usá-lo, a menos que você saiba o que está fazendo.

Várias tabelas de roteamento

Se você precisar de mais flexibilidade do que o descrito acima, precisará jogar com várias tabelas de roteamento e escrever regras para escolher uma tabela de roteamento específica para cada pacote. Uma técnica comum é despachar no endereço de origem para simular rotas específicas da fonte. Outra técnica é executar cada daemon de roteamento em sua própria tabela de roteamento e simular a "distância administrativa" da Cisco. Tudo isso é descrito em detalhes no capítulo 4 do LARTC .


Não é isso que o srcatributo faz. Você deseja ler man ip-routeou outros documentos. E funciona com IPv4. Eu o uso para obter todo o tráfego, incluindo o tráfego do roteador, através de um único túnel IPSec de rede a rede.
Zan Lynx 22/09

11
O RTA_SRCatributo faz exatamente o que eu disse; pode ser acessado com a fromopção do ipcomando A opção ipdo comando srcdefine o RTA_PREFSRCatributo, que é o que você descreve.
jch 02/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.