¿Cuál es la diferencia entre la dirección IP 0.0.0.0 y 127.0.0.1?

220

Sé que 127.0.0.1 ~ 127.255.255.254 son las direcciones IP de bucle invertido para la mayoría de los sistemas operativos modernos, y estas direcciones IP pueden usarse para referirse a nuestra propia computadora.

Pero, ¿qué es 0.0.0.0? Parece que también se refiere a la computadora local, entonces, ¿cuál es la diferencia ?

Y, ¿podría explicarme las siguientes conexiones IP?

captura de pantalla de netstat -an output

Jichao
fuente
66
También eche un vistazo a esta pregunta, ya que proporciona detalles sobre lo que 0.0.0.0 es (y no es): serverfault.com/questions/228629/…
Ellie Kesselman
Un sistema operativo moderno estaría utilizando ::1como dirección de bucle invertido.
Kasperd

Respuestas:

157

Lo único es que no estás diciendo "todas las direcciones deberían tener acceso", eso se hace en tu firewall (s) y / o el software del servidor y / u otras capas de seguridad como tcpwrappers.

0.0.0.0, en este contexto, significa "todas las direcciones IP en la máquina local" (de hecho, probablemente, "todas las direcciones IPv4 en la máquina local"). Por lo tanto, si su máquina de servidor web tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y permite que un demonio de servidor web como apache escuche en 0.0.0.0, será accesible en ambas direcciones IP. Pero solo para lo que puede contactar esas direcciones IP y los puertos web.

Tenga en cuenta que, en un contexto diferente (enrutamiento) 0.0.0.0 generalmente significa la ruta predeterminada (la ruta al "resto de" Internet, aparte de las rutas en su red local, etc.).

Lee B
fuente
Entonces, ¿quiere decir que el socket del servidor web está vinculado a cualquier dirección disponible cuando escucha en 0.0.0.0?
onmyway133
0.0.0.0significa la ruta predeterminada solo si va acompañada de un prefijo /0(o máscara de red 0.0.0.0)
minmaxavg
A tener en cuenta: si algún proceso escucha en 0.0.0.0, será accesible en direcciones IP de todas las interfaces de red de la máquina que incluyen la dirección configurada actualmente de la interfaz de bucle de retorno. Pero si el proceso sólo se escucha en un puerto <portNumber> de direcciones de bucle, por ejemplo, 127.0.0.1, y luego el proceso sólo se puede acceder desde la misma máquina por la orientación exactamente 127.0.0.1: <portNumber> . ¡Prueba esta herramienta de Python para jugar!
Gab 是 好人
77

Cuando un servicio está escuchando en 0.0.0.0, esto significa que está escuchando en todas las interfaces de red configuradas, cuando escucha en 127.0.0.1 el servicio solo está vinculado a la interfaz de bucle invertido (solo disponible en la máquina local)

slubman
fuente
38

La dirección IP 0.0.0.0puede tener significados muy diferentes, dependiendo de dónde se use.

  • No es una dirección válida para una interfaz de red real, junto con cualquier otra dirección en la subred 0.0.0.0/8 (es decir, cualquier dirección que comience con 0.).
  • No se puede usar como la dirección de origen en ningún paquete IP, a menos que esto suceda cuando una computadora aún no conoce su propia dirección IP y está tratando de adquirir una (ejemplo clásico: DHCP).
  • Si se usa en una tabla de enrutamiento, identifica la puerta de enlace predeterminada; una ruta a 0.0.0.0 es la predeterminada, es decir, la que se usa cuando no hay más rutas específicas disponibles para una dirección de destino.
  • Por último, cuando se ve en la salida del netstatcomando (que es lo que solicitó), significa que un socket determinado está escuchando en todas las direcciones IP disponibles que tiene la computadora; cuando una computadora tiene más de una dirección IP, un socket puede vincularse solo a una dirección específica y un par de puertos, o a un puerto y a todas las direcciones; si ve una dirección IP allí, significa que el socket está escuchando solo en ese puerto y esa dirección específica; si ve 0.0.0.0, significa que está escuchando en ese puerto en todas las direcciones de la máquina, incluida la de bucle invertido ( 127.0.0.1).
Massimo
fuente
3
¿Qué significa si rizas 0.0.0.0? ¿Curl está realmente contactando y enviando una solicitud a través de las interfaces disponibles? ¿Cómo sabe qué interfaz es la correcta? Entiendo cómo un servidor puede escuchar en todas las interfaces, pero cuál es el mecanismo para que un cliente solicite todas las interfaces, como cuando curl 0.0.0.0 o curl [::].
CMCDragonkai
1
Es muy probable que el sistema operativo lo bloquee, ya que no solo tiene sentido desde la perspectiva de la red. Intentar ping 0.0.0.0en un sistema Windows da como resultado un mensaje de error.
Massimo
curl 0.0.0.0cede connection refuseden Arch Linux. ping 0.0.0.0, por otro lado, parece ser un alias para el ping 127.0.0.1que funciona bien.
Matthias Braun
@MatthiasBraun connection refusedpodría deberse a que curl intenta conectarse de forma predeterminada al puerto 80 / tcp. Trate de encontrar los puertos abiertos con nmap -sV localhosty luego para, por ejemplo, si 631 / tcp: curl 0.0.0.0:631.
Pablo A
27

La respuesta de Lee B es correcta, pero aquí hay algunos RFC relevantes en caso de que esté interesado.

0.0.0.0:

De RFC1122 , Sección 3.1.2.3:

Ahora resumimos los casos especiales importantes para las direcciones IP de Clase A, B y C, utilizando la siguiente notación para una dirección 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.

Solo eso, "este host en esta red" ... como dice la respuesta de Lee B, esto se traduce en todas las direcciones IP disponibles en su host. Alojar un servicio en 0.0.0.0 alojará automáticamente ese servicio en cada interfaz direccionable.

127.0.0.1:

De RFC5735 :

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.

La diferencia entre 0.0.0.0 y la dirección de bucle invertido 127.0.0.1 es que la dirección de bucle invertido está diseñada para permitir una interfaz IP completamente funcional dentro del propio host, independientemente de cómo se vea el resto de la configuración de la red. Cualquier tráfico enviado al dispositivo de bucle invertido se recibe inmediatamente en él. No es tanto que la red de bucle invertido "se refiera" a su propio host ... es más como si tuviera un mini segmento de red en su host al que se pueden abrir y conectar dispositivos, procesos y sockets.


fuente
4

En términos simples: escuchar en 0.0.0.0 significa escuchar desde cualquier lugar que tenga acceso de red a esta computadora, por ejemplo, desde esta misma computadora, desde la red local o desde Internet, mientras que escuchar en 127.0.0.1 significa solo escuchar desde esta misma computadora

Hải Phong
fuente