Estou no Linux e quero fazer ping fe80::1234:56ff:fe12:3456%eth0
que está conectado ao mesmo switch Ethernet da minha eth0
interface. Ainda não me comuniquei, fe80::1234:56ff:fe12:3456
entã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:3456
dentro - 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:3456
dentro - 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.