Em redes Linux, há alguma diferença entre criar um endereço IP com uma /32
sub-rede pointopoint GATEWAY
habilitada e um endereço /32
com uma rota adicional GATEWAY
?
( pointopoint
in ifconfig
é a peer
opção em ip address
, e o IFF_POINTOPOINT
sinalizador no kernel.)
Concretamente, existe alguma diferença (por exemplo, no comportamento de roteamento ou desempenho) entre os comandos
ip addr add 1.2.3.4/32 peer 1.2.3.1 dev eth0
e
ip addr add 1.2.3.4/32 dev eth0
ip route add 1.2.3.1 dev eth0
onde 1.2.3.1
fica o portal?
Pergunta bônus: se não há diferença, por que foi pointopoint
adicionado ao kernel?
No nível do kernel, o comportamento de roteamento é o mesmo. Tanto as máscaras de sub-rede regulares quanto os endereços de peer PtP são traduzidos para rotas com escopo de link (aquelas com
proto kernel
) para que um tipo separado de pesquisa não precise ser feito.Mas esse é o caso agora. Eu suspeito que você pode ter a linha do tempo invertida e que IFF_POINTOPOINT pode ter sido adicionado muito, muito antes de tal roteamento se tornar possível de configurar de forma genérica. (Não para Linux; Linux apenas reimplementou essa API em particular.)
O roteamento IPv4 inicial era "classificado" – inicialmente não havia máscara de sub-rede porque ela estava implícita no endereço (certos endereços eram "classe A", etc.), com os comprimentos de prefixo de cada classe codificados em cada pilha de rede.
Então, quando você configura um endereço IP em um ambiente classful, você apenas escreve
ifconfig foo0 192.168.1.5
mas não há lugar para especificar o/32
normask 255.255.255.255
porque tais conceitos ainda não existiam em IP – em vez disso, o sistema automaticamente "saberia" que 192.x era um endereço de Classe C e, portanto, um /24, e essa era sua única opção (até que a criação de sub-redes fosse "inventada" anos depois).Portanto, um sinalizador adicional seria necessário para substituir esse comportamento para links ponto a ponto, como PPP ou outras interfaces seriais.
Talvez outra pessoa analise o código-fonte inicial do Unix e do BSD para verificar isso.
A sub-rede foi uma adição posterior ao IPv4 – na verdade, parece que também costumava haver um sinalizador IFF_SUBNET para habilitar explicitamente o recurso de sub-rede, pelo menos no SunOS 3 – e a super-rede veio ainda mais tarde. (Ou seja, havia até sistemas que permitiam que você sub-rede um endereço de classe C para um /26, mas não permitiam que você o tornasse um /22.)
Por fim, o "CIDR" totalmente genérico foi adotado, mas levou muitos anos para se tornar universal.
A capacidade de designar um endereço de peer ainda serve a um propósito hoje; por exemplo, para protocolos de roteamento como OSPF para determinar o endereço de peer em links não compatíveis com broadcast. Em geral, OSPF tratará a 'sub-rede' ou 'peer' designados de forma diferente das rotas gerais de escopo de link – os primeiros são anunciados implicitamente como parte da topologia (ou seja, parte do LSA do 'roteador'), os últimos têm que ser importados como rotas "externas".