Para que serve o endereço IP 127.0.0.2?

39

Estou executando o exemplo no hiredis, que está usando "127.0.0.2" como o IP do servidor redis e está funcionando corretamente. Na verdade, o servidor redis está sendo executado na mesma máquina. Eu sei que "127.0.0.1" é o endereço IP de "lo", mas e quanto a "127.0.0.2"? É o mesmo que "127.0.0.1"?


fonte

Respostas:

37

Sim:

Os padrões de rede IPv4 reservam todo o bloco de endereços 127.0.0.0/8 para fins de loopback. Isso significa que qualquer pacote enviado para um desses 16.777.214 endereços (127.0.0.1 a 127.255.255.254) é retornado em loop. O IPv6 possui apenas um endereço, :: 1.

Vários padrões da IETF (Internet Engineering Task Force) reservam o bloco de endereços IPv4 127.0.0.0/8, na notação CIDR e o endereço IPv6 :: 1 para esse fim. O endereço IPv4 mais comum usado é 127.0.0.1. Geralmente esses endereços de loopback são mapeados para os nomes de host, host local ou loopback.

ou do próprio RFC:

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 deste bloco deve retornar dentro do host. Isso geralmente é implementado usando apenas 127.0.0.1/32 para loopback, mas nenhum endereço dentro desse bloco deve aparecer em nenhuma rede em qualquer lugar [RFC1700, página 5].

Por diversão, tente fazer o ping:

$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
icyrock.com
fonte
A página da Wikipedia mudou desde então e agora diz "embora qualquer endereço no intervalo 127.0.0.1 a 127.255.255.254 esteja mapeado para ela", tornando a essência desta resposta em conflito direto com a Wikipedia.
SilverSkin
6
@SilverSkin Você se importaria de explicar o que você quer dizer? A única diferença entre o que está em resposta e o que está na Wikipedia agora é que eles (corretamente) excluíram 127.0.0.0 e 127.255.255.255, que são endereços de rede / transmissão. A essência ainda é a mesma - 127.xxx == 127.0.0.1 (exceto 127.0.0.0 e 127.255.255.255, o que é esperado em qualquer rede / 8).
icyrock.com 20/09/12
1
Portanto, não há diferença entre vincular a 127.0.0.1 versus vincular a 127.0.0.124? Então, por que os contratados se incomodam com 127.0.0.2, se é o mesmo endereço? Além disso, o que acontece se você enviou uma mensagem para 127.0.0.0?
CMCDragonkai
7
É preciso mencionar que não é o mesmo no OS X, que apenas rota 127.0.0.1 para loopback. Veja aqui .
Wenbing Li
6
@CMCDragonkai 127.0.0.1 e 127.0.0.124 podem estar na mesma interface, mas não são o mesmo endereço. Pode-se usar um ip incomum como 127.0.0.2 se alguém quiser usar configurar um serviço em uma porta comum e não interferir com outros serviços que podem ser ouvindo essa mesma porta em 127.0.0.1
Keith Reynolds
6
  • "Todos os 127.x.x.xendereços estão restritos à máquina local?" Sim
  • “Todos os 127.x.x.xendereços estão vinculados à lointerface” Sim
  • “Os 127.x.x.xendereços são roteados pela rede?” Não

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. - RFC5735

  • “É 127.0.0.2o mesmo que 127.0.0.1?” NO

Enquanto 127.0.0.1to 127.255.255.254são todos os endereços locais vinculados à interface lo. Eles não são os mesmos. Você pode usar cada endereço para vincular um serviço diferente à mesma porta. Por exemplo, 16 milhões de servidores Web na porta 80, acessíveis apenas a partir da máquina local (se você não ficar sem memória ou outro recurso primeiro)

Acabei de configurar um serviço de docker ao qual vincular 127.0.0.2:80. Eu adicionei um alias para /etc/hosts. Agora eu posso conectar a ele via http://myserver, mas não via http://127.0.0.1ou http://localhost. No entanto, está disponível apenas para esta máquina. Como é, apenas, na lointerface.

Em seguida, configurei outro serviço de docker ao qual vincular 127.0.0.3:80e um serviço python ativado localhost:80e outro ativado 127.0.0.4:80.


Isso pode não funcionar em todos os sistemas operacionais. Estou usando o Debian (9) Gnu / Linux, Linux kernel 4.9.0-3-amd64. Alguns SOs podem tratar todos os endereços 127.0.0.1127.255.255.254da mesma forma. Alguns podem funcionar apenas com 127.0.0.1.

Veja também

ctrl-alt-delor
fonte
Vamos continuar esta discussão no chat .
ctrl-alt-Delor
Levei cerca de uma hora de pesquisa, mas finalmente consegui entender o que você estava tentando transmitir. Atualizei a citação do artigo da Wikipedia na resposta aceita. Como a declaração citada mudou ao longo dos anos, citei uma declaração diferente, para restaurar as informações originais contidas na resposta.
Ramhound 2/17/17
1

Não é uma resposta geral abrangente (já existe uma). Esta resposta minha mostra um exemplo de onde 127.0.0.2foi usado para resolver o problema.

Extrair:

O OP tentou testar algum software em um caso em que sua conexão com um servidor foi rejeitada. Isso foi feito no servidor por uma iptablesregra temporária que rejeita todo o tráfego do IP do cliente. O cliente pôde imediatamente "ver" a conexão foi rejeitada.

O problema apareceu quando essa pessoa moveu o software do servidor para a mesma máquina que o cliente e tentou usar a interface de loopback. A regra foi definida para bloquear a comunicação, 127.0.0.1mas as informações rejeitadas por uma conexão foram submetidas à mesma regra e nunca chegaram ao software cliente que foi interrompido (presumivelmente até o tempo limite).

A solução foi usar 127.0.0.2como endereço do servidor e definir uma regra que rejeite as conexões com ele. As informações sobre uma rejeição foram 127.0.0.1e puderam passar para o software cliente.

Kamil Maciorowski
fonte