Por que a solicitação de vizinhos IPv6 usa multicast em vez de endereço unicast?

Por que a solicitação de vizinhos IPv6 usa multicast em vez de endereço unicast?

Estou no Linux e quero fazer ping fe80::1234:56ff:fe12:3456%eth0que está conectado ao mesmo switch Ethernet da minha eth0interface. Ainda não me comuniquei, fe80::1234:56ff:fe12:3456então não tenho seu endereço MAC armazenado em cache (não está em ip neigh list). Quando eu corro

ping fe80::1234:56ff:fe12:3456%eth0

eu envio

  • Pacote de solicitação de vizinho ICMP dentro
  • Datagrama IPv6 com endereço de destino multicast ff02::1:ff12:3456dentro
  • Quadro Ethernet com endereço de destino multicast 33:33:ff:12:34:56.

Entendo que ff02::1:ff12:3456é construído a partir de 24 bits inferiores de endereço MAC e nós que compartilham os mesmos bits ouvem neste endereço multicast. Mas por que é especificado desta forma? Por que não apenas enviar o pacote ICMP para o endereço IPv6 de destino diretamente, deixando o endereço MAC multicast cuidar de distribuí-lo para possíveis candidatos? Assim:

  • Pacote de solicitação de vizinho ICMP dentro
  • Datagrama IPv6 com endereço de destino unicast fe80::1234:56ff:fe12:3456dentro
  • Quadro Ethernet com endereço de destino multicast 33:33:ff:12:34:56.

Responder1

A Ethernet, embora esteja em todos os lugares, não é a única tecnologia da camada 2.

Percorrendo "Pacotes IPv6 encerrados"RFCsrevelará diversas camadas de links, incluindoBluetooth de baixa energia Redes de área pessoal ITU-T G.9959,canal de fibra. Também alternativas obsoletas como Token Ring ou FDDI.

Camadas de link que implementam multicast mapeiam endereços multicast IPv6 para suas implementações. Aqueles que não funcionam em torno disso. Talvez os links ponto a ponto permitam que um roteador rastreie os ouvintes multicast. Ou talvez uma implementação de transmissão, embora o envio para todos os nós como ARP não seja o ideal.

Descoberta de vizinhona pilha IP tem a vantagem de uma abstração consistente e reutilização de código. Um pacote IP direcionado pode ser criado para obter o endereço da camada de enlace. Incluindo hardware inimaginável na época em que o código da camada 3 foi escrito.

Veja também: Por que você precisa da solicitação de vizinho IPv6 para obter o endereço MAC?

Responder2

Acho que os respondentes não entenderam sua pergunta :-). Também tenho esta pergunta e penso que, como Stefan van den Akker (autor da pergunta aqui -https://networkengineering.stackexchange.com/questions/63841/why-not-put-unicast-address-in-ipv6-packet-containing-ndp-neighbor-solicitation) disse, isso pode resolver o problema de roteamento indesejado:

(Um problema que posso imaginar com essa abordagem é que os roteadores podem rotear meu pacote para fora do link quando eu solicito o endereço unicast global de um dispositivo que não está no mesmo link, o que seria um comportamento indesejado.)

E também para uniformidade (o multicast ipv6 é convertido em multicast ethernet e a exceção a esta regra para solicitação de vizinhos quebraria a uniformidade).

Não tenho outras idéias, exceto as mencionadas acima, porque, é claro, a camada de rede do kernel do sistema operacional pode construir qualquer pacote necessário que desejar. E também um pacote com endereço MAC multicast e endereço IPv6 unicast.

informação relacionada