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

271

Estoy usando Jekylly Vagranten mi mac. Descubrí que Jekyll serverse unirá a en 0.0.0.0:4000lugar de 127.0.0.1:4000. También gem serverse unirá a esta dirección de forma predeterminada. Todavía puedo visitarlo a través de http://localhost:port. Pero para Jekyll, parece que la configuración predeterminada (por ejemplo, 0.0.0.0:4000) requiere acceso a Internet. No puedo correr Jekyll serversin Internet. ¿Es un pequeño error?

Yo también lo uso Vagrant. He configurado el reenvío de puertos (8080 => 4000) en Vagrantfile, ya que lo instalo Jekyllen Vagrantuna máquina virtual y lo pruebo en Macintosh. Si uso la configuración predeterminada (0.0.0.0:4000), funciona. Puedo visitarlo desde mi safari con http://localhost:8080. Pero si no hay internet, no puedo vincularme a 0.0.0.0:4000. En su lugar, utilizo jekyll server -H 127.0.0.1para vincular el servicio 127.0.0.1:4000, luego no puedo visitarlo a través http://localhost:8080.

¿Alguien puede explicar la diferencia entre 0.0.0.0, 127.0.0.1 y localhost ? ¿Y alguien puede explicar por qué la diferencia causará este problema ?

Ciel
fuente
Este artículo puede ser útil howtogeek.com/225487/…
fangxing

Respuestas:

408

127.0.0.1es normalmente la dirección IP asignada a la interfaz de "bucle invertido" o solo local. Este es un adaptador de red "falso" que solo puede comunicarse dentro del mismo host. A menudo se usa cuando desea que una aplicación con capacidad de red solo atienda a clientes en el mismo host. Un proceso que está escuchando 127.0.0.1conexiones solo recibirá conexiones locales en ese socket.

"localhost" es normalmente el nombre de host para la 127.0.0.1dirección IP. Por lo general, se establece en /etc/hosts(o el equivalente de Windows llamado "hosts" en algún lugar debajo %WINDIR%). Puede usarlo como cualquier otro nombre de host: intente "hacer ping localhost" para ver cómo se resuelve 127.0.0.1.

0.0.0.0tiene un par de significados diferentes, pero en este contexto, cuando se le dice a un servidor que escuche 0.0.0.0eso significa "escuchar en cada interfaz de red disponible". El adaptador de bucle invertido con dirección IP 127.0.0.1desde la perspectiva del proceso del servidor se parece a cualquier otro adaptador de red en la máquina, por lo que un servidor que debe escuchar 0.0.0.0también aceptará conexiones en esa interfaz.

Espero que conteste el lado IP de su pregunta. No estoy familiarizado con Jekyll o Vagrant, pero supongo que su reenvío de puertos 8080 => 4000está de alguna manera vinculado a un adaptador de red en particular, por lo que no está en el camino cuando se conecta localmente a127.0.0.1

Capitán Pedantic
fuente
Hmm, ping localhostparece que funciona en Windows , incluso sin el archivo de hosts que apunta 127.0.0.1a localhost.
Pacerier
De acuerdo con Pacerier. Al menos en Windows, localhost se comporta como 0.0.0.0 (no 127.0.0.1) de forma predeterminada
drodsou
55
"Esto es en su mayoría correcto, excepto por su descripción de vinculación a 0.0.0.0. Esto no se vincula a todas las interfaces de red disponibles como lo ha descrito, sino que se vincula a todas las direcciones . En las pilas TCP, esto se conoce como INADDR_ANY - por respuesta eliminada de @strangemonad.
Piotr Dobrogost
15

En la versión actual de Jekyll, el valor predeterminado es http://127.0.0.1:4000/ .
Esto es bueno si está conectado a una red pero no desea que nadie más acceda a su aplicación.

Sin embargo, puede suceder que desee ver cómo se ejecuta su aplicación en un dispositivo móvil o desde otra computadora portátil / computadora.

En ese caso, puedes usar

jekyll serve --host 0.0.0.0

Esto vincula su aplicación al host y el siguiente uso siguiente para conectarse desde otro host

http://host's IP adress/4000 
Sanyam Jain
fuente