Estoy ejecutando el ejemplo en hiredis, que usa "127.0.0.2" como IP del servidor redis, y se está ejecutando correctamente. En realidad, el servidor redis se está ejecutando en la misma máquina. Sé que "127.0.0.1" es la dirección IP de "lo", pero ¿qué tal "127.0.0.2"? ¿Es lo mismo que "127.0.0.1"?
Los estándares de red IPv4 reservan el bloque de direcciones 127.0.0.0/8 completo para propósitos de bucle invertido. Eso significa que cualquier paquete enviado a una de esas 16.777.214 direcciones (127.0.0.1 a 127.255.255.254) se devuelve en bucle. IPv6 tiene una sola dirección, :: 1.
Varios estándares del Grupo de trabajo de ingeniería de Internet (IETF) reservan el bloque de dirección IPv4 127.0.0.0/8, en notación CIDR y la dirección IPv6 :: 1 para este propósito. La dirección IPv4 más común utilizada es 127.0.0.1. Comúnmente, estas direcciones de bucle invertido se asignan a los nombres de host, localhost o bucle invertido.
127.0.0.0/8: este bloque se asigna para su uso como la dirección de bucle invertido del host de Internet. Un datagrama enviado por un protocolo de nivel superior a una dirección en cualquier lugar dentro de este bloque debe regresar dentro del host. Esto se implementa normalmente usando solo 127.0.0.1/32 para loopback, pero ninguna dirección dentro de este bloque debe aparecer en ninguna red en ningún lugar [RFC1700, página 5].
Para divertirse, intente hacer 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
La página de Wikipedia ha cambiado desde entonces, y ahora dice "aunque cualquier dirección en el rango 127.0.0.1 a 127.255.255.254 está asignada a ella", lo que hace que la esencia de esta respuesta esté en conflicto directo con Wikipedia.
SilverSkin
66
@SilverSkin ¿Te importaría explicar a qué te refieres? La única diferencia entre lo que está en respuesta y lo que está en Wikipedia ahora es que (correctamente) excluyeron 127.0.0.0 y 127.255.255.255, que son direcciones de red / difusión. La esencia sigue siendo la misma: 127.xxx == 127.0.0.1 (excepto 127.0.0.0 y 127.255.255.255, que se espera en cualquier red / 8).
icyrock.com
1
Entonces, ¿no hay diferencia entre vincular a 127.0.0.1 versus vincular a 127.0.0.124? Entonces, ¿por qué los contratados se molestan con 127.0.0.2, si es la misma dirección? ¿Qué sucede también si envió un mensaje a 127.0.0.0?
CMCDragonkai
77
Es necesario mencionar que no es lo mismo en OS X, que solo 127.0.0.1 enruta al loopback. Ver aquí .
Wenbing Li
66
@CMCDragonkai 127.0.0.1 y 127.0.0.124 pueden estar en la misma interfaz pero no son la misma dirección. Se podría usar una IP poco común como 127.0.0.2 si se quiere usar configurar un servicio en un puerto común y no interferir con otros servicios que pueden estar escuchando ese mismo puerto en 127.0.0.1
Keith Reynolds
6
"¿Todas las 127.x.x.xdirecciones están restringidas a la máquina local?" Sí
"¿Están todas las 127.x.x.xdirecciones vinculadas a la lointerfaz" Sí
“¿Las 127.x.x.xdirecciones se enrutan a través de la red?” No
127.0.0.0/8: este bloque se asigna para su uso como dirección de bucle invertido de host de Internet. Un datagrama enviado por un protocolo de nivel superior a una
dirección en cualquier lugar dentro de este bloque se repite dentro del host. Esto
normalmente se implementa utilizando solo 127.0.0.1/32 para loopback. Como se
describe en [RFC1122], Sección 3.2.1.3, las direcciones dentro del bloque 127.0.0.0/8 completo no aparecen legítimamente en ninguna red en ninguna parte. - RFC5735
“¿Es 127.0.0.2lo mismo que 127.0.0.1?” NO
Mientras 127.0.0.1que 127.255.255.254son todas las direcciones locales vinculadas a la interfaz lo. Ellos no son los mismos. Puede usar cada dirección para vincular un servicio diferente en el mismo puerto. Por ejemplo, 16 millones de servidores web en el puerto 80, solo accesibles desde la máquina local (si no se queda sin memoria u otro recurso primero)
Acabo de configurar un servicio de acoplador para enlazar 127.0.0.2:80. Luego agregué un alias a /etc/hosts. Ahora puedo conectarme a través de http://myserver, pero no a través de http://127.0.0.1o http://localhost. Sin embargo, solo está disponible para esta máquina. Como es, solo, en la lointerfaz.
Luego configuré otro servicio de acoplador para vincular 127.0.0.3:80, y un servicio de Python localhost:80y otro 127.0.0.4:80.
Esto puede no funcionar en todos los sistemas operativos. Estoy usando Debian (9) Gnu / Linux, kernel de Linux 4.9.0-3-amd64. Algunos sistemas operativos pueden tratar todas las direcciones 127.0.0.1→ 127.255.255.254igual. Algunos solo pueden funcionar 127.0.0.1.
Me llevó cerca de una hora de investigación, pero finalmente pude entender lo que intentabas transmitir. He actualizado la cita del artículo de Wikipedia en la respuesta aceptada. Como la declaración citada ha cambiado a lo largo de los años, cité una declaración diferente para restaurar la información original que contenía la respuesta.
Ramhound
1
No es una respuesta general integral (ya hay una). Esta respuesta mía muestra un ejemplo donde 127.0.0.2se utilizó para resolver el problema.
Extraer:
El OP allí intentó probar algún software en un caso cuando se rechazó su conexión a un servidor. Esto se hizo en el servidor mediante una iptablesregla temporal que rechaza todo el tráfico de la IP del cliente. El cliente pudo inmediatamente "ver" que la conexión fue rechazada.
El problema apareció cuando esta persona movió el software del servidor a la misma máquina que el cliente e intentó usar la interfaz de bucle invertido. La regla se configuró para bloquear la comunicación, 127.0.0.1pero la información que rechazó una conexión se sometió a la misma regla y nunca llegó al software del cliente que colgó (presumiblemente hasta el tiempo de espera).
La solución fue usarla 127.0.0.2como la dirección del servidor y establecer una regla que rechace las conexiones a él. La información sobre un rechazo fue 127.0.0.1y pudo pasar al software del cliente.
127.x.x.x
direcciones están restringidas a la máquina local?" Sí127.x.x.x
direcciones vinculadas a lalo
interfaz" Sí127.x.x.x
direcciones se enrutan a través de la red?” No127.0.0.2
lo mismo que127.0.0.1
?” NOMientras
127.0.0.1
que127.255.255.254
son todas las direcciones locales vinculadas a la interfazlo
. Ellos no son los mismos. Puede usar cada dirección para vincular un servicio diferente en el mismo puerto. Por ejemplo, 16 millones de servidores web en el puerto 80, solo accesibles desde la máquina local (si no se queda sin memoria u otro recurso primero)Acabo de configurar un servicio de acoplador para enlazar
127.0.0.2:80
. Luego agregué un alias a/etc/hosts
. Ahora puedo conectarme a través dehttp://myserver
, pero no a través dehttp://127.0.0.1
ohttp://localhost
. Sin embargo, solo está disponible para esta máquina. Como es, solo, en lalo
interfaz.Luego configuré otro servicio de acoplador para vincular
127.0.0.3:80
, y un servicio de Pythonlocalhost:80
y otro127.0.0.4:80
.Esto puede no funcionar en todos los sistemas operativos. Estoy usando Debian (9) Gnu / Linux, kernel de Linux 4.9.0-3-amd64. Algunos sistemas operativos pueden tratar todas las direcciones
127.0.0.1
→127.255.255.254
igual. Algunos solo pueden funcionar127.0.0.1
.ver también
fuente
No es una respuesta general integral (ya hay una). Esta respuesta mía muestra un ejemplo donde
127.0.0.2
se utilizó para resolver el problema.Extraer:
El OP allí intentó probar algún software en un caso cuando se rechazó su conexión a un servidor. Esto se hizo en el servidor mediante una
iptables
regla temporal que rechaza todo el tráfico de la IP del cliente. El cliente pudo inmediatamente "ver" que la conexión fue rechazada.El problema apareció cuando esta persona movió el software del servidor a la misma máquina que el cliente e intentó usar la interfaz de bucle invertido. La regla se configuró para bloquear la comunicación,
127.0.0.1
pero la información que rechazó una conexión se sometió a la misma regla y nunca llegó al software del cliente que colgó (presumiblemente hasta el tiempo de espera).La solución fue usarla
127.0.0.2
como la dirección del servidor y establecer una regla que rechace las conexiones a él. La información sobre un rechazo fue127.0.0.1
y pudo pasar al software del cliente.fuente