Como a ligação 0.0.0.0 acontece no linux?

4

Um ping para 0.0.0.0 responde de 127.0.0.1 . No entanto, se eu desligar o loopback do host local e manter outra interface com outro ip, o ping 0.0.0.0 dará um erro

$ping 0.0.0.0 connect: Invalid argument

O 0.0.0.0 não deveria ouvir todas as interfaces? Então, basicamente, como exatamente uma ligação 0.0.0.0 funciona da perspectiva da rede? como o ping 0.0.0.0 funciona apenas para loopback e não para outra interface?

  • Atualização Eu li em outro lugar e recebi uma resposta semelhante aqui (você não pode pingar 0.0.0.0).
[anshup@s2 ~]$ ping 0.0.0.0 PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.009 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.009 ms
^C
--- 0.0.0.0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2551ms
rtt min/avg/max/mdev =
0.009/0.009/0.010/0.002 ms

Então, o que exatamente está acontecendo aqui se não conseguirmos fazer o ping de 0.0.0.0 ? e reiterando a pergunta, por que 0.0.0.0 responde apenas do loopback e não de qualquer outra interface no host?

    
por Anshu Prateek 07.05.2013 / 14:58

2 respostas

17

0.0.0.0/0 não é um endereço, mas uma identidade de rede (usada para roteamento e significa 'Todas as redes'). como tal, você não pode fazer o ping. Se você quisesse fazer ping em todos os sistemas, usaria 255.255.255.255 . Cada rede tem dois endereços especiais, a Identidade e a Transmissão, geralmente em .0 e .255 , respectivamente.

por exemplo, na rede 192.168.5.0/24 , a identidade = 192.168.5.0 e a transmissão = 192.168.5.255 . o primeiro host é 192.168.5.1 e o último é 192.168.5.254 . Observe que nenhum host pode usar o endereço Identity ou Broadcast como seu próprio endereço IP.

o gateway padrão do host é, por definição, a rota que você utiliza para alcançar todas as redes desconhecidas, portanto, 0.0.0.0/0 é apenas uma referência a Todas as Redes.

Editar: A razão pela qual o loopback está respondendo é o comportamento 'indefinido' não especificado em RFC1700 . De acordo com a RFC, um endereço que começa com 0 (quando expresso em Decimal) nunca é permitido como um destino (apenas como a origem de um pacote de broadcast), portanto o autor de sua pilha de rede escolhe a resposta do loopback.

Quando tento executar o ping de 0.0.0.0 em um prompt do Win7 / powershell, simplesmente recebo a mensagem 'PING: transmitido com falha. Falha geral.' Portanto, isso é claramente um comportamento específico para uma determinada pilha do sistema operacional, ou talvez até mesmo específico do driver. Se você fornecer seu sistema operacional, poderemos encontrar mais, mas não responderá a perguntas significativas, já que seu comportamento específico de implementação não é regido pelos padrões de rede. Meu palpite é que seu sistema operacional é simplesmente aliasing todos os endereços inválidos como 127.x.y.z endereços.

    
por 07.05.2013 / 15:47
1

Na versão 4 do Internet Protocol, o endereço 0.0.0.0 é um meta-endereço não roteável usado para designar um destino inválido, desconhecido ou não aplicável .

    
por 07.05.2013 / 15:27