Qual é a diferença entre 127.0.0.1 e 0.0.0.0?

178

Eu entendo que 127.0.0.1 aponta para localhost , e 0.0.0.0 (me corrija se eu estiver errado). Então, qual a diferença entre 127.0.0.1 e 0.0.0.0?

    
por Sagnik Sarkar 02.08.2015 / 15:17

4 respostas

173

Qual é a diferença entre 127.0.0.1 e 0.0.0.0?

  • 127.0.0.1 é o endereço de loopback (também conhecido como localhost).

  • 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 (um nenhum espaço reservado de endereço específico).

    In the context of a route entry, it usually means the default route.

    In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.

O que é o endereço IP 127.0.0.1?

127.0.0.1 is the loopback Internet protocol (IP) address also referred to as the "localhost." The address is used to establish an IP connection to the same machine or computer being used by the end-user.

The same convention is defined for computer’s that support IPv6 addressing using the connotation of ::1. Establishing a connection using the address 127.0.0.1 is the most common practice; however, using any IP address in the range of 127...* will function in the same or similar manner. The loopback construct gives a computer or device capable of networking the capability to validate or establish the IP stack on the machine.

Fonte: 127.0.0.1 - Quais são os seus usos e por que é importante?

Endereços Especiais

The class A network number 127 is assigned the "loopback" function, that is, a datagram sent by a higher level protocol to a network 127 address should loop back inside the host. No datagram "sent" to a network 127 address should ever appear on any network anywhere.

Fonte: Números de rede

Se é uma classe inteira A, qual é o ponto de outros valores arbitrários para os últimos três octetos?

The purpose of the loopback range is testing of the TCP/IP protocol implementation on a host. Since the lower layers are short-circuited, sending to a loopback address allows the higher layers (IP and above) to be effectively tested without the chance of problems at the lower layers manifesting themselves. 127.0.0.1 is the address most commonly used for testing purposes.

Fonte: IP Reservado, Loopback e Endereços Particulares

Para mais informações, consulte link question O que é o dispositivo de loopback e como eu o uso? e por que o endereço IP de loopback é de 127.0.0.1 a 127.255.255.254? .

O que é o endereço IP 0.0.0.0?

"0.0.0.0" is a valid address syntax. So it should parse as valid wherever an IP address in traditional dotted-decimal notation is expected. Once parsed, and converted to workable numeric form, then its value determines what happens next.

The all-zero value does have a special meaning. So it is "valid", but has a meaning that may not be appropriate (and thus treated as not valid) for particular circumstances. It is basically the "no particular address" placeholder. For things like address binding of network connections, the result can be to assign an appropriate interface address to the connection. If you are using it to configure an interface, it can remove an address from the interface, instead. It depends on the context of use to determine what "no particular address" really does.

In the context of a route entry, it usually means the default route. That happens as a result more of the address mask, which selects the bits to compare. A mask of "0.0.0.0" selects no bits, so the compare will always succeed. So when such a route is configured, there is always somewhere for packets to go (if configured with a valid destination).

In some cases, merely "0" will also work and have the same effect. But this is not guaranteed. The "0.0.0.0" form is the standard way to say "no particular address" (in IPv6 that is "::0" or just "::").

Fonte: Qual é o significado do endereço IP 0.0.0.0

In the Internet Protocol version 4 the address 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown or non applicable target. To give a special meaning to an otherwise invalid piece of data is an application of in-band signaling.

In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.

In the context of routing, 0.0.0.0 usually means the default route, i.e. the route which leads to "the rest of" the internet instead of somewhere on the local network.

Uses include:

  • The address a host claims as its own when it has not yet been assigned an address. Such as when sending the initial DHCPDISCOVER packet when using DHCP.
  • The address a host assigns to itself when address request via DHCP has failed, provided the host's IP stack supports this. This usage has been replaced with the APIPA mechanism in modern operating systems.
  • A way to specify "any IPv4-host at all". It is used in this way when specifying a default route.
  • A way to explicitly specify that the target is unavailable.1
  • A way to specify "any IPv4 address at all". It is used in this way when configuring servers (i.e. when binding listening sockets). This is known to TCP programmers as INADDR_ANY. (bind(2) binds to addresses, not interfaces.)

In IPv6, the all-zeros-address is written as "::".

Fonte: 0.0.0.0

Descoberta / solicitação de DHCP

When a client boots up for the first time, it is said to be in the Initializing state, and transmits a DHCPDISCOVER message on its local physical subnet over User Datagram Protocol (UDP) port 67 (BootP server). Since the client has no way of knowing the subnet to which it belongs, the DHCPDISCOVER is an all subnets broadcast (destination IP address of 255.255.255.255), with a source IP address of 0.0.0.0. The source IP address is 0.0.0.0, since the client does not have a configured IP address. If a DHCP server exists on this local subnet and is configured and operating correctly, the DHCP server will hear the broadcast and respond with a DHCPOFFER message. If a DHCP server does not exist on the local subnet, there must be a DHCP/BootP Relay Agent on this local subnet to forward the DHCPDISCOVER message to a subnet that contains a DHCP server.

This relay agent can either be a dedicated host (for example, Microsoft Windows Server), or router (for example, a Cisco router configured with interface level IP helper statements).

...

After the client receives a DHCPOFFER, it responds with a DHCPREQUEST message, indicating its intent to accept the parameters in the DHCPOFFER, and moves into the Requesting state. The client may receive multiple DHCPOFFER messages, one from each DHCP server that received the original DHCPDISCOVER message. The client chooses one DHCPOFFER and responds to that DHCP server only, implicitly declining all other DHCPOFFER messages. The client identifies the selected server by populating the Server Identifier option field with the DHCP server's IP address. The DHCPREQUEST is also a broadcast, so all DHCP servers that sent a DHCPOFFER will see the DHCPREQUEST, and each will know whether its DHCPOFFER was accepted or declined. Any additional configuration options that the client requires will be included in the options field of the DHCPREQUEST message. Even though the client has been offered an IP address, it will send the DHCPREQUEST message with a source IP address of 0.0.0.0. At this time, the client has not yet received verification that it is clear to use the IP address.

...

Client-Server Conversation for Client Obtaining DHCP Address Where Client and DHCP Server Reside on Same Subnet

Enter image description here

Fonte: Compreensão e solução de problemas DHCP no Catalyst Switch ou Enterprise Networks

Rota padrão

This document explains how to configure a default route, or gateway of last resort. These IP commands are used:

  • ip default-gateway

  • ip default-network

  • and ip route 0.0.0.0 0.0.0.0

ip route 0.0.0.0 0.0.0.0

Creating a static route to network 0.0.0.0 0.0.0.0 is another way to set the gateway of last resort on a router. As with the ip default-network command, using the static route to 0.0.0.0 is not dependent on any routing protocols. However, ip routing must be enabled on the router.

Note: IGRP does not understand a route to 0.0.0.0. Therefore, it cannot propagate default routes created using the ip route 0.0.0.0 0.0.0.0 command. Use the ip default-network command to have IGRP propagate a default route.

Fonte: Configurando um gateway do último recurso usando comandos de IP

    
por 02.08.2015 / 20:33
106

Eles não são iguais.

127.0.0.1 faz parte da rede 127/8 que é reservada e aponta para o mesmo computador.

0.0.0.0 é um endereço IP especial que significa coisas diferentes dependendo do contexto.

In the Internet Protocol Version 4, the address 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown or non-applicable target. To give a special meaning to an otherwise invalid piece of data is an application of in-band signaling.

Você pode ter enganado o 0.0.0.0 para 127.0.0.1 quando você olha para o netstat e vê o endereço local ouvindo como 0.0.0.0, mas essa é uma maneira diferente de usar o 0.0.0.0.

In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.

In the context of routing, 0.0.0.0 usually means the default route, i.e. the route which leads to "the rest of" the internet instead of somewhere on the local network.

link

    
por 02.08.2015 / 15:55
13

127.0.0.1 um dos endereços do computador local, mas qualquer endereço 127.xyz também é outro endereço do computador (chamado "endereço de loopback"), exceto 127.0.0.0 (sub-rede de loopback) e 127.255.255.255 (endereço de broadcast para a sub-rede de loopback).

127.x.y.z significa "aqui".

0.0.0.0 é totalmente diferente: 0.0.0.0 não é o endereço de qualquer coisa , é o joker, como * no shell.

Você não pode enviar dados para 0.0.0.0 ou abrir ativamente uma conexão TCP para 0.0.0.0 porque não há nada lá; 0.0.0.0 não é nem mesmo um endereço inacessível ou não roteável, não tem sentido em um contexto em que um endereço é esperado .

Você pode usar o joker 0.0.0.0 em contextos onde um endereço pode ser opcionalmente fornecido , para significar eu não me importo .

Por exemplo, quando você ativa ativamente uma conexão TCP com algum servidor TCP (um servidor TCP é criado por um TCP passivo aberto), você precisa especificar o endereço do servidor TCP (IP e número da porta), e você pode opcionalmente escolha um endereço local. (Como o seu soquete não é um soquete do servidor, ninguém pode abrir uma conexão com ele e o endereço do seu lado da conexão geralmente não é muito importante.)

A chamada do sistema bind é usada para escolher o endereço local de um soquete TCP. Os dados passados para bind são realmente um conjunto de restrições: restrição no endereço IP, restrição na porta TCP. A notação de texto usual é IP: port. 0.0.0.0:0 significa que qualquer IP de qualquer porta é aceitável, é a restrição nula. 0.0.0.0:20 significa que a porta local deve ser 20, qualquer IP é aceitável (0.0.0.0:20 é usado por servidores FTP em conformidade para conexão de dados no modo ativo).

O subsistema TCP / IP escolherá o endereço para o seu lado da conexão TCP se você não escolher um, usando a tabela de roteamento, com base no endereço de destino: o endereço do soquete TCP local será o endereço local associado à rota correspondente ao endereço de destino.

Eu mencionei anteriormente o shell "meta-caractere" * , mas o poder de combinar meta-caracteres com caracteres como *foo* (qualquer nome de arquivo contendo "foo") não existe com restrições de endereço IP, é tudo ou nada: um único endereço IP é considerado aceitável ou todos os endereços são. A lógica não não determina que deve ser assim. Você poderia estender a interface com uma linguagem de restrição mais rica.

Precisão:

A sentença 127.x.y.z significa "aqui" não implica que todos esses endereços sejam os mesmos. Eles representam diferentes "localizações" (endereços de soquete), dentro do "computador" local, dentro da pilha de IP local, na verdade.

Observação: um computador com virtualização (emulação, virtualização de hardware, paravirtualização, o que você imaginar ...) tem várias pilhas de IP independentes.

    
por 03.08.2015 / 18:38
3

Geralmente, você usa o endereço de vinculação 0.0.0.0 para permitir conexões de redes e origens externas. Muitos servidores como o MySQL normalmente se ligam ao 127.0.0.1, permitindo apenas conexões de loopback, exigindo que o administrador mude para 0.0.0.0 para habilitar a conectividade externa.

    
por 03.08.2015 / 07:55