A maneira mais fácil de entender a diferença entre os dois é através de um exemplo que mostra a natureza hierárquica dos prefixos.
Um exemplo de hierarquia
Um ISP recebeu um prefixo de um RIR (Registro Regional da Internet) que, neste exemplo, assumiremos que é 2001:db8::/32
. Esse prefixo é diferente daquele transmitido aos clientes, no sentido de que o ISP terá que anunciar através do BGP para outros ISPs com os quais é consultado.
O ISP agora vai alocar prefixos para um cliente. Primeiro, eles são atribuídos 2001:db8:0:1::/64
ao link que conecta o roteador ISP ao roteador CPE (equipamento nas instalações do cliente). Este é um prefixo do link porque está atribuído a um link. Como recomendação geral, todos os prefixos de link no IPv6 devem ser /64
.
O roteador ISP enviará anúncios de roteador anunciando esse prefixo e o CPE usará o SLAAC para construir um endereço para a interface externa apontando para o roteador ISP dentro do /64
. Vamos supor que a interface externa tenha o endereço IP 2001:db8:0:1:42:ff:fe00:42/64
(nesta notação /64
está incluída para nos lembrar qual é o tamanho do prefixo do link, mas eu também poderia tê-lo deixado de fora).
Esse prefixo de link é suficiente para o roteador CPE se comunicar com o resto do mundo, mas não ajuda o roteador CPE a oferecer suporte a nenhum cliente na LAN conectado à sua interface interna. O roteador CPE precisa de um prefixo para a LAN que é roteado através desse roteador CPE, portanto, isso é chamado de prefixo roteado .
O prefixo roteado pode ser configurado estaticamente ou através do DHCPv6. Os detalhes exatos de como o roteador CPE negocia um tamanho de prefixo com o servidor DHCPv6 fornecido pelo ISP estão fora do escopo desta resposta. Uma pesquisa por delegação de prefixo pode lhe dizer mais sobre isso. Vamos supor que o prefixo roteado acabe sendo 2001:db8:1::/48
. No roteador ISP, uma entrada da tabela de roteamento será criada indicando que 2001:db8:1::/48
precisa ser roteada através do gateway 2001:db8:0:1:42:ff:fe00:42
. Essa entrada da tabela de roteamento é o recurso que define o prefixo roteado.
O roteador CPE pode ter várias LANs internas, /48
pois pode alocar um /64
prefixo de link para cada LAN interna. Se assumirmos que uma das LANs foi atribuída 2001:db8:1:1::/64
como prefixo do link, um nó nesse link poderá obter o endereço 2001:db8:1:1::42:ff:fe00:43
através do SLAAC. Esse nó pode ser um roteador sem fio que precisa de um prefixo para sua interface sem fio. O CPE pode atribuir 2001:db8:1:100::/60
como prefixo roteado para o roteador sem fio, e o roteador sem fio pode atribuir 2001:db8:1:100::/64
como prefixo de link para a interface sem fio.
Agora, nessa configuração, o que temos é uma hierarquia de prefixos. A seguir, todos estão aninhados um abaixo do outro:
2001:db8::/32
Prefixo anunciado pelo BGP
2001:db8:1::/48
prefixo roteado
2001:db8:1:100::/60
prefixo roteado
2001:db8:1:100::/64
prefixo do link
Como os pacotes são realmente tratados
Quando o roteador ISP recebe um pacote para o 2001:db8:0:1::/64
qual é um prefixo de link, ele executa a descoberta de vizinhos para encontrar o endereço MAC do host no /64
.
Dessa forma, o roteador ISP precisará de uma entrada de cache vizinha separada para cada endereço IP no prefixo do link.
Quando o roteador ISP recebe um pacote para o 2001:db8:1::/48
qual é um prefixo roteado, ele executa a descoberta de vizinhos para encontrar o endereço MAC do gateway 2001:db8:0:1:42:ff:fe00:42
.
Dessa maneira, o roteador ISP precisa apenas de uma entrada de cache de vizinho único para o gateway, a fim de rotear pacotes para qualquer endereço IP dentro do prefixo roteado. Essa propriedade é crucial para a escalabilidade da internet.
Como solucionar a falta de prefixo roteado
Ocasionalmente, os clientes ficam presos a um ISP que fornecerá apenas um prefixo de link e nenhum prefixo roteado. Em tal situação, é possível que o cliente instale um daemon que responda à descoberta de vizinhos para todos os endereços IP em um subintervalo específico do prefixo do link. Isso terá um efeito semelhante à configuração desse prefixo como prefixo roteado. Mas tem várias desvantagens:
- Em geral, os prefixos roteados devem ser menores que
/64
, mas o daemon que responde às solicitações de descoberta de vizinhos pode criar apenas um prefixo "roteado" que seja maior que /64
.
- Aumenta ligeiramente a latência devido a uma ida e volta extra toda vez que um endereço IP não está no cache vizinho no roteador ISP.
- Aumenta a carga no roteador ISP devido à necessidade de descoberta de vizinhos muito mais frequente. É bem provável que o roteador ISP possa encaminhar pacotes para um prefixo de destino já conhecido puramente em hardware, mas a descoberta de vizinhos será feita em software.
- Aumenta o consumo de memória no roteador ISP. Se o ISP alocar um prefixo roteado para cada cliente, poderá facilmente ter apenas uma entrada de cache de vizinho por cliente. Porém, com o daemon de resposta vizinho, isso pode se transformar em milhares de entradas por cliente.
A sobrecarga de processamento no roteador ISP pode ser um problema significativo. Alguns roteadores são tão ruins em lidar com uma enxurrada de pacotes que precisam de descoberta de vizinhos que se transformaram em ataques reais de DoS, e o uso de prefixos de link mais longos (no intervalo /120
- 127
) foi usado como solução alternativa para esses ataques de DoS.
Mesmo que o roteador não seja vulnerável ao ataque DoS, a memória necessária para as entradas de cache vizinhas quando a solução alternativa descrita acima é muito mais cara para o ISP do que os endereços IP de um prefixo roteado seriam, portanto, há poucas razões. para um ISP recusar a distribuição de um prefixo roteado.
Casos especiais em torno de links ponto a ponto
Nos links ponto a ponto (como túneis 6in4 e links PPP), não há necessidade de descoberta de vizinhos. Há apenas uma direção para enviar um pacote nesse link e nenhum endereço de hardware precisa ser procurado antes de enviar o pacote.
Isso significa que a sobrecarga da descoberta de vizinhos não é um problema nesse link. Portanto, ter um link ponto a ponto usando muitos endereços não é um problema, desde que os pontos de extremidade tenham algum acordo sobre quem usa quais endereços. A falta de descoberta de vizinhos significa que também não há detecção de endereço duplicado, portanto, se os dois pontos de extremidade tentarem usar o mesmo endereço, ele não funcionará conforme o esperado (a menos que você esteja esperando que ele se comporte como um endereço anycast).
Há uma ressalva a ser lembrada nos links ponto a ponto. Cada ponto final pressupõe que todos os endereços no link para o qual ele não foi designado sejam atribuídos ao outro lado. Isso significa que endereços não utilizados em um link ponto a ponto tendem a disparar um loop de roteamento. Esse loop de roteamento (e vários outros casos de loops de roteamento) podem ser evitados por um terminal que nunca envia um pacote diretamente de volta ao nó do qual foi recebido. Portanto, um pacote recebido de um link ponto a ponto não deve ser enviado de volta pelo mesmo link ponto a ponto, desde que um endpoint acerte isso, o loop de roteamento será interrompido. Como um nó lateral na Ethernet, é válido receber um pacote e encaminhá-lo de volta para o mesmo link, mas é uma boa idéia evitar fazer isso se for encaminhado de volta para o mesmo endereço MAC de onde foi recebido.
Como a maioria dos endereços em um link ponto a ponto será encaminhada para a outra extremidade do link sem a necessidade de descoberta de vizinhos, ela se parece muito com um prefixo roteado. Por exemplo, se o ISP atribuiu 2001: db8: 42 :: / 64 a um link ponto a ponto com os endpoints atribuídos aos endereços 2001: db8: 42 :: 1 e 2001: db8: 42 :: 2 e, em seguida, pacotes para a maioria dos endereços em 2001: o db8: 42 :: / 64 será encaminhado do ISP para o cliente da mesma maneira que faria se este fosse um prefixo roteado usando 2001: db8: 42 :: 2 como gateway.
Isso significa que um certo hack é possível. No CPE, é possível configurar 2001: db8: 42 :: / 64 como prefixo do link na LAN. Para que o CPE saiba em qual dos dois links está um determinado destino, a configuração real no link ponto a ponto em direção ao ISP precisaria ser alterada para 2001: db8: 42 :: / 126. Tudo isso funcionará com uma exceção menor: os hosts na LAN não podem se comunicar com os quatro endereços IP em 2001: db8: 42 :: / 126. Como eles provavelmente não precisavam se comunicar com eles de qualquer maneira, isso não é um grande problema. No entanto, não é recomendável usar esse hack, a configuração correta é obter um prefixo roteado do ISP.
Outro truque para salvar endereços é alocar apenas endereços globais para um prefixo roteado e usar endereços RFC 4193 para o link ponto a ponto. No entanto, esse é um truque bobo, pois ainda apresenta algumas desvantagens para resolver um problema inexistente.
Também é possível não atribuir nenhum prefixo a um link ponto a ponto. Desde que cada nó de extremidade tenha outra interface na qual tenha um endereço global, eles poderão usar o endereço atribuído à outra interface ao se comunicar no link ponto a ponto. Não conheço nenhuma desvantagem dessa abordagem, portanto, se você achar que essa abordagem para apontar para apontar links simplifica sua configuração de rede, sinta-se à vontade para usá-la, mas não a use como uma medida para salvar endereços.
Casos de uso para um prefixo roteado
- Roteamento hierárquico, como no meu primeiro exemplo, é para o que os prefixos roteados foram projetados.
- VPN / túneis adicionam outra camada à hierarquia de roteadores que precisam de prefixos. Embora sejam hardware virtual e não real, eles não são diferentes em termos de endereçamento e precisam de um prefixo roteado, como faria com um link físico.
- Atribuindo muitos endereços a um host . Existem casos de uso para atribuir muitos endereços a um único host. Para alguns endereços, eles podem ser simplesmente atribuídos e manipulados com a descoberta de vizinhos para cada uma das entradas de cache que houver endereços. Mas se milhares de endereços forem necessários, um prefixo roteado é melhor.
Um exemplo mais detalhado do último ponto seria recursores de DNS. Como não vejo o DNSSEC recebendo muita atenção até terminar o combate ao IPv4, são necessárias outras medidas contra o envenenamento do DNS. Foi feito um esforço para obter o máximo de entropia possível nas consultas. O ID e o número da porta podem conter no máximo 32 bits de entropia, outros poucos bits podem ser mantidos na solicitação se letras maiúsculas e minúsculas forem misturadas no nome do domínio a ser resolvido. Você raramente chegará a mais de 48 bits no total dessa maneira. A atribuição de um total /64
ao recursor DNS permitiria aumentar a entropia em 64 bits de uma só vez, o que é mais do que todos os outros esforços combinados.