288 votos

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

Sé que 127.0.0.1 ~ 127.255.255.254 son las direcciones IP de loopback para la mayoría de sistemas operativos modernos, y estas direcciones IP pueden ser usadas para referirse a nuestro propio ordenador.

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

Y, ¿podrías explicar las siguientes conexiones IP para mí?

captura de pantalla de la salida de netstat -an

8 votos

También echa un vistazo a esta pregunta, ya que da detalles sobre qué es y qué no es 0.0.0.0: serverfault.com/questions/228629/…

1 votos

Un sistema operativo moderno estaría utilizando ::1 como dirección de bucle de retorno.

196voto

volatilevoid Puntos 2072

Lo único es que no estás diciendo "todas las direcciones deberían tener acceso" -- eso se hace en tu(s) firewall(s) y/o en el software del servidor y/o en 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 tu máquina servidor web tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y permites a un demonio servidor web como Apache escuchar en 0.0.0.0, será accesible en ambas de esas direcciones IP. Pero solo para lo que pueda contactar esas direcciones IP y los puerto(s) web.

Nótese que, en un contexto diferente (enrutamiento) 0.0.0.0 usualmente significa la ruta por defecto (la ruta hacia "el resto" de internet, aparte de las rutas en tu red local, etc.).

0 votos

¿Entonces quieres decir que el socket del servidor web está enlazado a cualquier dirección disponible cuando escucha en 0.0.0.0?

2 votos

0.0.0.0 significa la ruta predeterminada solo si está acompañada por el prefijo /0 (o la máscara de red 0.0.0.0)

2 votos

Es importante tener en cuenta que si algún proceso escucha en 0.0.0.0, será accesible en las direcciones IP de todas las interfaces de red de la máquina, incluida la dirección actualmente configurada de la interfaz de bucle de retorno. Pero si el proceso solo escucha en un puerto de una dirección de bucle local, por ejemplo, 127.0.0.1, entonces el proceso solo será accesible desde la misma máquina al apuntar exactamente a 127.0.0.1:. ¡Intenta usar esta herramienta de Python para divertirte!

100voto

slubman Puntos 1129

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

52voto

yulia Puntos 16

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

  • No es una dirección válida para asignar a 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 empiece con 0.).
  • No se puede utilizar como la dirección de origen en ningún paquete IP, a menos que esto suceda cuando una computadora todavía no conoce su propia dirección IP y está tratando de adquirir una (ejemplo clásico: DHCP).
  • Si se utiliza 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 utiliza cuando no hay ninguna ruta más específica disponible para una dirección de destino.
  • Por último, cuando se ve en la salida del comando netstat (que es lo que preguntaste), significa que un socket dado 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 estar enlazado solo a un par de dirección y puerto específico, o a un puerto y todas las direcciones; si ves una dirección IP allí, significa que ese socket está escuchando solo en ese puerto y esa dirección específica; si ves 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).

3 votos

¿Qué significa si haces curl 0.0.0.0? ¿Curl en realidad está contactando y enviando una solicitud a través de interfaces disponibles? ¿Cómo sabe cuál es la correcta? Entiendo cómo un servidor podría escuchar en todas las interfaces, pero ¿cuál es el mecanismo para que un cliente solicite todas las interfaces, como cuando hago curl 0.0.0.0 o curl [::]?

1 votos

Es muy probable que el sistema operativo te impida hacer eso, ya que no tiene sentido desde la perspectiva de la red. Intentar hacer ping 0.0.0.0 en un sistema Windows resulta en un mensaje de error.

0 votos

curl 0.0.0.0 arroja conexión rechazada en Arch Linux. ping 0.0.0.0, en cambio, parece ser un alias de ping 127.0.0.1 que funciona correctamente.

32voto

kce Puntos 9227

La respuesta de Lee B es correcta, pero aquí tienes algunos RFC relevantes en caso de que te interese.

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:

{ , }

       o
{ , ,  }

...

(a) { 0, 0 }

     Este host en esta red. NO DEBE ser enviado, excepto como
     una dirección de origen como parte de un procedimiento de inicialización
     mediante el cual el host aprende su propia dirección IP.

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

127.0.0.1:

De RFC5735:

127.0.0.0/8 - Este bloque está asignado para ser utilizado como la dirección de bucle de retorno del host de Internet. Un datagrama enviado por un protocolo de nivel superior a una dirección en cualquier lugar dentro de este bloque se redirige dentro del host. Normalmente esto se implementa utilizando solamente 127.0.0.1/32 para el bucle de retorno. Como se describe en [RFC1122], Sección 3.2.1.3, las direcciones dentro de todo el bloque 127.0.0.0/8 no aparecen legítimamente en ninguna red en ningún lugar.

La diferencia entre 0.0.0.0 y la dirección de bucle de retorno 127.0.0.1 es que la dirección de bucle de retorno está diseñada para permitir una interfaz IP completamente funcional dentro del propio host, independientemente de cómo se vea la configuración de red restante. Cualquier tráfico enviado al dispositivo de bucle de retorno es recibido inmediatamente en él. No es tanto que la red de bucle de retorno "se refiera" a tu propio host... más bien es como si tuvieras un segmento de red mini en tu host donde los dispositivos, procesos y sockets pueden abrirse y conectarse.

12voto

Hải Phong Puntos 171

En términos simples: Escuchar en 0.0.0.0 significa escuchar desde cualquier parte que tenga acceso a la red de 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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X