¿Cuál es la diferencia entre 127.0.0.1 y 0.0.0.0?

235

Entiendo que 127.0.0.1 apunta localhost, y también 0.0.0.0 (corrígeme si me equivoco). Entonces, ¿cuál es la diferencia entre 127.0.0.1 y 0.0.0.0?

Sagnik Sarkar
fuente
1
Puede interesarle esta discusión sobre el rastreador de errores de Chrome sobre cómo manejar la 0.0.0.0entrada de direcciones.
Jeremy Banks
66
En la mayoría de las configuraciones de servidor 0.0.0.0 significa, ¡escuche en TODAS las direcciones! Esto hará que su servidor esté disponible en Internet. Si lo hace para un servidor local sin ninguna seguridad (solo está escuchando en localhost, ¿verdad?) Eso es malo. ¡No hagas eso!
Josef
56
Responde tu pregunta literalmente, la diferencia es 2130706433.
Shaz
2
@Mast oh, ¿eres una de las personas que configura un sistema totalmente inseguro, porque el firewall lo arreglará todo? Por lo general, estos sistemas se pueden encontrar con shodan.io : 3 El siguiente nivel de esta mentalidad es "podemos usar totalmente una instalación de WordPress de 5 años, tenemos un WAF". ¡No recomiendo a nadie que vaya por este camino, nunca!
Josef
2
@Shaz Me gustaría votar tu comentario, pero como actualmente está en 42, no puedo hacerlo ...
Jenny D

Respuestas:

221

¿Cuál es la diferencia entre 127.0.0.1 y 0.0.0.0?

  • 127.0.0.1 es la dirección de bucle invertido (también conocido como localhost).

  • 0.0.0.0 es una metadirección no enrutable utilizada para designar un objetivo no válido, desconocido o no aplicable (un marcador de posición de dirección no particular).

    En el contexto de una entrada de ruta, generalmente significa la ruta predeterminada.

    En el contexto de los servidores, 0.0.0.0 significa "todas las direcciones IPv4 en la máquina local". Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible a ambas IP.


¿Qué es la dirección IP 127.0.0.1?

127.0.0.1 es la dirección de protocolo de Internet de bucle invertido (IP) también conocida como "localhost". La dirección se utiliza para establecer una conexión IP a la misma máquina o computadora que utiliza el usuario final.

La misma convención se define para las computadoras que admiten el direccionamiento IPv6 utilizando la connotación de :: 1. Establecer una conexión usando la dirección 127.0.0.1 es la práctica más común; sin embargo, usando cualquier dirección IP en el rango de 127 .. . * funcionará de la misma manera o similar. La construcción loopback le da a una computadora o dispositivo capaz de conectar en red la capacidad de validar o establecer la pila de IP en la máquina.

Fuente: 127.0.0.1 - ¿Cuáles son sus usos y por qué es importante?


Direcciones especiales

El número de red de clase A 127 tiene asignada la función de "bucle de retorno", es decir, un datagrama enviado por un protocolo de nivel superior a una dirección de red 127 debe regresar en bucle dentro del host. Ningún datagrama "enviado" a una dirección de red 127 debería aparecer en ninguna red en ningún lugar.

Fuente: Números de red


Si se trata de una clase A completa, ¿cuál es el punto de otros valores arbitrarios para los últimos tres octetos?

El propósito del rango de bucle invertido es probar la implementación del protocolo TCP / IP en un host. Dado que las capas inferiores están en cortocircuito, el envío a una dirección de bucle invertido permite que las capas superiores (IP y superiores) se prueben efectivamente sin la posibilidad de que se manifiesten problemas en las capas inferiores. 127.0.0.1 es la dirección más utilizada con fines de prueba.

Fuente: IP reservada, bucle invertido y direcciones privadas

Para obtener más información, consulte la pregunta https://askubuntu.com ¿ Qué es el dispositivo loopback y cómo lo uso? ¿ Y por qué la dirección IP de bucle invertido es 127.0.0.1 a 127.255.255.254? .


¿Qué es la dirección IP 0.0.0.0?

"0.0.0.0" es una sintaxis de dirección válida. Por lo tanto, debe analizarse como válido siempre que se espere una dirección IP en notación decimal con puntos tradicional. Una vez analizado y convertido a una forma numérica viable, su valor determina lo que sucede a continuación.

El valor todo cero tiene un significado especial. Por lo tanto, es "válido", pero tiene un significado que puede no ser apropiado (y por lo tanto tratado como no válido) para circunstancias particulares. Básicamente es el marcador de posición "sin dirección particular". Para cosas como el enlace de direcciones de las conexiones de red, el resultado puede ser asignar una dirección de interfaz apropiada a la conexión. Si lo está utilizando para configurar una interfaz, puede eliminar una dirección de la interfaz. Depende del contexto de uso para determinar qué hace realmente "ninguna dirección en particular".

En el contexto de una entrada de ruta, generalmente significa la ruta predeterminada . Eso sucede como resultado de más de la máscara de dirección, que selecciona los bits para comparar. Una máscara de "0.0.0.0" no selecciona bits, por lo que la comparación siempre tendrá éxito. Entonces, cuando se configura una ruta de este tipo, siempre hay un lugar para que los paquetes vayan (si está configurado con un destino válido).

En algunos casos, simplemente "0" también funcionará y tendrá el mismo efecto. Pero esto no está garantizado. El formulario "0.0.0.0" es la forma estándar de decir "ninguna dirección en particular" (en IPv6 que es ":: 0" o simplemente "::").

Fuente: ¿Cuál es el significado de la dirección IP 0.0.0.0?


En la versión 4 del Protocolo de Internet, la dirección 0.0.0.0 es una metadirección no enrutable que se utiliza para designar un objetivo no válido, desconocido o no aplicable. Para dar un significado especial a un dato de otra manera inválido es una aplicación de señalización en banda.

En el contexto de los servidores, 0.0.0.0 significa "todas las direcciones IPv4 en la máquina local". Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible a ambas IP.

En el contexto del enrutamiento, 0.0.0.0 generalmente significa la ruta predeterminada, es decir, la ruta que conduce al "resto" de Internet en lugar de en algún lugar de la red local.

Los usos incluyen:

  • La dirección que un host reclama como propia cuando aún no se le ha asignado una dirección. Como cuando se envía el paquete DHCPDISCOVER inicial cuando se usa DHCP.
  • La dirección que un host se asigna a sí mismo cuando la solicitud de dirección a través de DHCP ha fallado, siempre que la pila IP del host lo admita. Este uso ha sido reemplazado por el mecanismo APIPA en los sistemas operativos modernos.
  • Una forma de especificar "cualquier host IPv4 en absoluto". Se utiliza de esta manera cuando se especifica una ruta predeterminada.
  • Una forma de especificar explícitamente que el objetivo no está disponible. 1
  • Una forma de especificar "cualquier dirección IPv4". Se utiliza de esta manera cuando se configuran servidores (es decir, cuando se vinculan sockets de escucha). Los programadores de TCP lo conocen como INADDR_ANY. (bind (2) se une a las direcciones, no a las interfaces).

En IPv6, la dirección de todos ceros se escribe como "::".

Fuente: 0.0.0.0


Descubrimiento / solicitud de DHCP

Cuando un cliente se inicia por primera vez, se dice que se encuentra en el estado Inicializando y transmite un mensaje DHCPDISCOVER en su subred física local a través del puerto 67 del Protocolo de datagramas de usuario (UDP) (servidor BootP). Dado que el cliente no tiene forma de conocer la subred a la que pertenece, DHCPDISCOVER es una transmisión de todas las subredes (dirección IP de destino 255.255.255.255), con una dirección IP de origen de 0.0.0.0. La dirección IP de origen es 0.0.0.0, ya que el cliente no tiene una dirección IP configurada.Si existe un servidor DHCP en esta subred local y está configurado y funciona correctamente, el servidor DHCP escuchará la transmisión y responderá con un mensaje DHCPOFFER. Si no existe un servidor DHCP en la subred local, debe haber un Agente de retransmisión DHCP / BootP en esta subred local para reenviar el mensaje DHCPDISCOVER a una subred que contenga un servidor DHCP.

Este agente de retransmisión puede ser un host dedicado (por ejemplo, Microsoft Windows Server) o un enrutador (por ejemplo, un enrutador Cisco configurado con instrucciones de ayuda de IP de nivel de interfaz).

...

Después de que el cliente recibe un DHCPOFFER, responde con un mensaje DHCPREQUEST, indicando su intención de aceptar los parámetros en el DHCPOFFER, y pasa al estado Solicitante. El cliente puede recibir múltiples mensajes DHCPOFFER, uno de cada servidor DHCP que recibió el mensaje DHCPDISCOVER original. El cliente elige un DHCPOFFER y responde solo a ese servidor DHCP, rechazando implícitamente todos los demás mensajes DHCPOFFER. El cliente identifica el servidor seleccionado rellenando el campo de opción Identificador de servidor con la dirección IP del servidor DHCP. El DHCPREQUEST también es una transmisión, por lo que todos los servidores DHCP que enviaron un DHCPOFFER verán el DHCPREQUEST, y cada uno sabrá si su DHCPOFFER fue aceptado o rechazado. Cualquier opción de configuración adicional que requiera el cliente se incluirá en el campo de opciones del mensaje DHCPREQUEST.Aunque se le haya ofrecido una dirección IP al cliente, enviará el mensaje DHCPREQUEST con una dirección IP de origen de 0.0.0.0. En este momento, el cliente aún no ha recibido la verificación de que está claro usar la dirección IP.

...

Conversación cliente-servidor para el cliente que obtiene la dirección DHCP donde el cliente y el servidor DHCP residen en la misma subred

Ingrese la descripción de la imagen aquí

Fuente: Comprensión y resolución de problemas de DHCP en Catalyst Switch o Enterprise Networks


Ruta por defecto

Este documento explica cómo configurar una ruta predeterminada o una puerta de enlace de último recurso. Se utilizan estos comandos IP:

  • ip default-gateway

  • ip default-network

  • y ruta ip 0.0.0.0 0.0.0.0

ruta ip 0.0.0.0 0.0.0.0

Crear una ruta estática a la red 0.0.0.0 0.0.0.0 es otra forma de configurar la puerta de enlace de último recurso en un enrutador. Al igual que con el comando ip default-network, el uso de la ruta estática a 0.0.0.0 no depende de ningún protocolo de enrutamiento. Sin embargo, el enrutamiento IP debe estar habilitado en el enrutador.

Nota: IGRP no entiende una ruta a 0.0.0.0. Por lo tanto, no puede propagar rutas predeterminadas creadas con el comando ip route 0.0.0.0 0.0.0.0. Use el comando ip default-network para que IGRP propague una ruta predeterminada.

Fuente: Configuración de una puerta de enlace de último recurso mediante comandos IP

DavidPostill
fuente
3
En el contexto de los servidores, 0.0.0.0 significa "todas las direcciones IPv4 en la máquina local". Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible a ambas IP. - eso lo hizo por mí
Rafael Eyng
112

Ellos no son los mismos.

127.0.0.1 es parte de la red 127/8 que está reservada y apunta a la misma computadora.

0.0.0.0 es una dirección IP especial que significa diferentes cosas según el contexto.

En la versión 4 del Protocolo de Internet, la dirección 0.0.0.0 es una metadirección no enrutable que se utiliza para designar un objetivo no válido, desconocido o no aplicable. Para dar un significado especial a un dato de otra manera inválido es una aplicación de señalización en banda.

Es posible que haya confundido 0.0.0.0 con 127.0.0.1 cuando mira netstat y ve la dirección local escuchando como 0.0.0.0, pero esta es una forma diferente de usar 0.0.0.0.

En el contexto de los servidores, 0.0.0.0 significa "todas las direcciones IPv4 en la máquina local". Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible a ambas IP.

En el contexto del enrutamiento, 0.0.0.0 generalmente significa la ruta predeterminada, es decir, la ruta que conduce al "resto" de Internet en lugar de en algún lugar de la red local.

https://en.wikipedia.org/wiki/0.0.0.0

Cristian Dobre
fuente
0.0.0.0a veces también puede indicar una transmisión, es decir, a todas las computadoras en la red.
James Mertz
8
@KronoS Pensé que las transmisiones son cosas como 255.255.255.255(o de manera más realista algo así como 192.168.1.255para una red local)
Nick T
1
@NickT Ah, tienes razón :A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks.
James Mertz, el
@KronoS Estás confundiendo la dirección de transmisión con loopback. El loopback es 0.0.0.0 que, como se describió anteriormente, escucha todas las direcciones locales. La transmisión (de una manera simple) es el 255 de las redes para "transmitir" a todas las direcciones en esa red.
Desorden
Esto está incompleto: muchos sistemas operativos realmente le permiten conectarse a 0.0.0.0, que luego se comporta como una dirección de bucle invertido.
Grawity
16

127.0.0.1 es una de las direcciones de la computadora local, pero cualquier dirección 127.xyz también es otra dirección de la computadora (llamada "dirección de bucle invertido"), excepto 127.0.0.0 (subred de bucle invertido) y 127.255.255.255 (dirección de difusión para el subred de bucle invertido).

127.xyz significa "aquí".

0.0.0.0 es totalmente diferente: 0.0.0.0 no es la dirección de nada , es el comodín, como *en shell.

No puede enviar datos a 0.0.0.0 o abrir activamente una conexión TCP a 0.0.0.0 porque no hay nada allí; 0.0.0.0 ni siquiera es una dirección inalcanzable o no enrutable, no tiene sentido en un contexto donde se espera una dirección .

Puede usar el comodín 0.0.0.0 en contextos donde se puede proporcionar opcionalmente una dirección , lo que significa que no me importa .

Por ejemplo, cuando abre activamente una conexión TCP a algún servidor TCP (un servidor TCP es creado por un TCP abierto pasivo), debe especificar la dirección del servidor TCP (IP y número de puerto), y opcionalmente puede elegir un dirección local. (Debido a que su socket no es un socket de servidor, nadie puede abrir una conexión a él y la dirección en su lado de la conexión generalmente no es muy importante).

La bindllamada al sistema se usa para elegir la dirección local de un socket TCP. Los datos pasados bindson realmente un conjunto de restricciones: restricción en la dirección IP, restricción en el puerto TCP. La notación de texto habitual es IP: puerto. 0.0.0.0:0 significa que cualquier IP y cualquier puerto es aceptable, es la restricción nula. 0.0.0.0:20 significa que el puerto local debe ser 20, cualquier IP es aceptable (0.0.0.0:20 se usa al conformar servidores FTP para la conexión de datos en modo activo).

El subsistema TCP / IP elegirá la dirección para su lado de la conexión TCP si no elige una, utilizando la tabla de enrutamiento, basada en la dirección de destino: la dirección de socket TCP local será la dirección local asociada con la ruta correspondiente a la dirección de destino.

Anteriormente mencioné el "meta-carácter" del shell *, pero el poder de combinar meta-caracteres con caracteres como *foo*(cualquier nombre de archivo que contenga "foo") no existe con restricciones de dirección IP, es todo o nada: una sola dirección IP se considera aceptable o todas las direcciones lo son. La lógica no dicta que debe ser así. Puede ampliar la interfaz con un lenguaje de restricción más rico.

Precisión:

La oración 127.xyz significa "aquí" no implica que todas estas direcciones sean iguales. Representan diferentes "ubicaciones" (direcciones de socket), dentro de la "computadora" local, dentro de la pila de IP local.

Observación: una computadora con virtualización (emulación, virtualización de hardware, paravirtualización, lo que se te ocurra ...) tiene múltiples pilas de IP independientes.

curioso
fuente
Cuando escribí una dirección aleatoria que comenzaba con 127 (por ejemplo, 127.16.23.42) en mi navegador, no se conectaba a localhost.
whoKnows
@whoKnows Por supuesto. localhost es 127.0.0.1, no 127.16.23.42.
curioso
Veo. Entonces, 127.0.0.1 significa localhost, pero 127.xyz podría significar la computadora local, si se configuró de esa manera.
whoKnows
2
@whoKnows No: 127.xyz pertenece a esta computadora para cualquier xy z. "localhost" es solo un nombre para 127.0.0.1, así que olvídate de "localhost". Use el indicador -no -dde netstatprogramas relacionados para mostrar direcciones numéricas, no nombres. 127.0.0.1 no es la misma dirección IP que 127.16.23.42. Entonces, 127.0.0.1:80 y 127.16.23.42:80 representan direcciones de punto final TCP distintas, no se puede encontrar un servidor web en una dirección en la otra dirección.
curioso
6

Por lo general, utiliza bind-address 0.0.0.0 para permitir conexiones desde redes y fuentes externas. Muchos servidores como MySQL generalmente se unen a 127.0.0.1 permitiendo solo conexiones de bucle invertido, lo que requiere que el administrador lo cambie a 0.0.0.0 para habilitar la conectividad externa.

Marek Bejda
fuente