Qual é a diferença entre o endereço IP 0.0.0.0 e 127.0.0.1?

220

Eu sei que 127.0.0.1 ~ 127.255.255.254 são os endereços IP de auto-retorno para a maioria dos sistemas operacionais modernos, e esses endereços IP podem ser usados ​​para se referir ao nosso próprio computador.

Mas o que é 0.0.0.0? Parece que também se refere ao computador local, então qual é a diferença ?

E, você poderia explicar as seguintes conexões IP para mim:

captura de tela da saída netstat -an

Jichao
fonte
6
Também ter um olhar para esta questão, uma vez que dá detalhes sobre o que 0.0.0.0 é (e não é): serverfault.com/questions/228629/...
Ellie Kesselman
Um sistema operacional moderno estaria usando ::1como endereço de loopback.
Kasperd #

Respostas:

157

A única coisa é que você não está dizendo "todos os endereços devem ter acesso" - isso é feito no (s) firewall (s) e / ou no software do servidor e / ou em outras camadas de segurança, como tcpwrappers.

0.0.0.0, nesse contexto, significa "todos os endereços IP na máquina local" (de fato provavelmente "todos os endereços IPv4 na máquina local"). Portanto, se a máquina do servidor da web tiver dois endereços IP, 192.168.1.1 e 10.1.2.1, e você permitir que um daemon do servidor da web, como o apache, escute no 0.0.0.0, ele poderá ser acessado nos dois endereços IP. Mas apenas para o que pode entrar em contato com esses endereços IP e as portas da web.

Observe que, em um contexto diferente (roteamento), 0.0.0.0 geralmente significa a rota padrão (a rota para "o resto da" Internet), além das rotas na rede local etc.).

Lee B
fonte
então você quer dizer que o soquete do servidor da web está vinculado a qualquer endereço disponível quando ele escuta no 0.0.0.0?
onmyway133
0.0.0.0significa a rota padrão única se for acompanhada por prefixo /0(ou máscara de rede 0.0.0.0)
minmaxavg
Observe: se algum processo escutar em 0.0.0.0, ele poderá ser acessado em endereços IP de todas as interfaces de rede da máquina, que incluem o endereço atualmente configurado da interface de loopback. Mas se o processo ouvir apenas em uma porta <portNumber> de um endereço de loopback, por exemplo, 127.0.0.1, e o processo somente poderá ser acessado na mesma máquina , visando exatamente 127.0.0.1: <portNumber> . Experimente esta ferramenta python para jogar!
12136 Gab Gabinete
77

Quando um serviço está escutando em 0.0.0.0, isso significa que ele está escutando em todas as interfaces de rede configuradas. Ao escutar em 127.0.0.1, o serviço está vinculado apenas à interface de loopback (disponível apenas na máquina local)

slubman
fonte
38

O endereço IP 0.0.0.0pode ter significados muito diferentes, dependendo de onde é usado.

  • Não é um endereço válido a ser dado a uma interface de rede real, junto com qualquer outro endereço na sub-rede 0.0.0.0/8 (ou seja, qualquer endereço que comece com 0.).
  • Ele não pode ser usado como endereço de origem em nenhum pacote IP, a menos que isso aconteça quando um computador ainda não conhece seu próprio endereço IP e está tentando adquirir um (exemplo clássico: DHCP).
  • Se usado em uma tabela de roteamento, ele identifica o gateway padrão; uma rota para 0.0.0.0 é a rota padrão, ou seja, aquela usada quando não há mais uma rota específica disponível para um endereço de destino.
  • Por fim, quando visto na saída do netstatcomando (que é o que você solicitou), significa que um determinado soquete está escutando todos os endereços IP disponíveis que o computador possui; quando um computador possui mais de um endereço IP, um soquete pode ser vinculado apenas a um endereço e par de portas específicos ou a uma porta e todos os endereços; se você vir um endereço IP lá, significa que o soquete está escutando apenas nessa porta e nesse endereço específico; se você vir 0.0.0.0, significa que está escutando nessa porta em todos os endereços da máquina, incluindo o de loopback ( 127.0.0.1).
Massimo
fonte
3
O que significa se você enrola 0.0.0.0? O curl está realmente entrando em contato e enviando uma solicitação através das interfaces disponíveis? Como ele sabe qual interface é a correta? Eu entendo como um servidor pode escutar em todas as interfaces, mas qual é o mecanismo para um cliente solicitar todas as interfaces, como quando eu enrolo 0.0.0.0 ou enrolar [::].
CMCDragonkai
1
O sistema operacional provavelmente o impedirá de fazer isso, pois não faz apenas sentido da perspectiva da rede. Tentar ping 0.0.0.0em um sistema Windows resulta em uma mensagem de erro.
Massimo
curl 0.0.0.0produz connection refusedno Arch Linux. ping 0.0.0.0, por outro lado, parece ser um alias para o ping 127.0.0.1qual funciona bem.
Matthias Braun
@MatthiasBraun connection refusedpode ser porque o curl, por padrão, tenta se conectar à porta 80 / tcp. Tente encontrar as portas abertas com nmap -sV localhoste, em seguida, para, por exemplo, se 631 / tcp: curl 0.0.0.0:631.
Pablo A
27

A resposta de Lee B está certa, mas aqui estão algumas RFCs relevantes, caso você esteja interessado.

0.0.0.0:

Do RFC1122 , Seção 3.1.2.3:

Agora, resumimos os casos especiais importantes para os endereços IP das classes A, B e C, usando a seguinte notação para um endereço IP:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Apenas isso, "este host nesta rede" ... como a resposta de Lee B afirma que isso se traduz em todos os endereços IP disponíveis no seu host. A hospedagem de um serviço no 0.0.0.0 hospedará esse serviço automaticamente em todas as interfaces endereçáveis.

127.0.0.1:

De RFC5735 :

127.0.0.0/8 - Este bloco é atribuído para uso como o endereço de loopback do host da Internet. Um datagrama enviado por um protocolo de nível superior para um endereço em qualquer lugar dentro desse bloco volta para dentro do host. Isso é normalmente implementado usando apenas 127.0.0.1/32 para loopback. Conforme descrito em [RFC1122], Seção 3.2.1.3, os endereços dentro de todo o bloco 127.0.0.0/8 não aparecem legitimamente em nenhuma rede em nenhum lugar.

A diferença entre 0.0.0.0 e o endereço de loopback 127.0.0.1 é que o endereço de loopback foi projetado para permitir uma interface IP totalmente funcional no próprio host, independentemente da aparência do restante da configuração de rede, se houver. Qualquer tráfego enviado ao dispositivo de loopback é recebido imediatamente nele. Não é tanto que a rede de loopback "se refira" ao seu próprio host ... é mais como se você tivesse um mini segmento de rede em seu host que dispositivos, processos e soquetes possam abrir e conectar.


fonte
4

Em termos simples: ouvir em 0.0.0.0 significa ouvir em qualquer lugar que tenha acesso à rede neste computador, por exemplo, neste mesmo computador, na rede local ou na Internet, enquanto ouvir em 127.0.0.1 significa ouvir apenas nesse mesmo computador

Hải Phong
fonte