¿Cuál es la diferencia entre 0.0.0.0, 127.0.0.1 y localhost?
Estoy usando Jekyll
y Vagrant
en mi mac. Descubrí que Jekyll server
se unirá a 0.0.0.0:4000
en lugar de 127.0.0.1:4000
. También gem server
se vinculará 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 server
sin Internet. ¿Es un pequeño error?
Yo también uso Vagrant
. Configuré el reenvío de puertos (8080 => 4000) en Vagrantfile, ya que lo instalo Jekyll
en Vagrant
una 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, suelo jekyll server -H 127.0.0.1
vincular el servicio 127.0.0.1:4000
, luego no puedo visitarlo a través de 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 ?
127.0.0.1
Normalmente es la dirección IP asignada a la interfaz "loopback" o solo local. Este es un adaptador de red "falso" que sólo 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.1
conexiones solo recibirá conexiones locales en ese socket.
"localhost" normalmente es el nombre de host de la 127.0.0.1
dirección IP. Por lo general, se configura en /etc/hosts
(o el equivalente de Windows denominado "hosts", generalmente en C:\Windows\System32\Drivers\etc\hosts
). Puedes usarlo como cualquier otro nombre de host; intenta ping localhost
ver cómo se resuelve en 127.0.0.1
.
0.0.0.0
tiene un par de significados diferentes, pero en este contexto, cuando a un servidor se le dice que escuche, 0.0.0.0
eso significa "escuchar en todas las interfaces de red disponibles". El adaptador de bucle invertido con dirección IP 127.0.0.1
desde la perspectiva del proceso del servidor se parece a cualquier otro adaptador de red en la máquina, por lo que un servidor al que se le dice que escuche 0.0.0.0
también aceptará conexiones en esa interfaz.
Con suerte, eso responde al lado de propiedad intelectual de su pregunta. No estoy familiarizado con Jekyll o Vagrant, pero supongo que el reenvío de puertos 8080 => 4000
está vinculado de alguna manera a un adaptador de red en particular, por lo que no está en la ruta cuando se conecta localmente a127.0.0.1
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 quiere que nadie más acceda a su aplicación.
Sin embargo, puede suceder que quieras ver cómo se ejecuta tu aplicación en un móvil o desde algún otro portátil/ordenador.
En ese caso, puedes usar
jekyll serve --host 0.0.0.0
Esto vincula su aplicación al host y el siguiente uso lo sigue para conectarse desde algún otro host.
http://host's IP adress/4000
Explicaré la diferencia entre 127.0.0.1 y 0.0.0.0 con un ejemplo:
Imagine que ejecuta cualquier servidor web (por ejemplo, Nginx) en una máquina remota para que cualquiera en Internet pueda acceder a él.
Si su servidor web Nginx escucha 127.0.0.1:80, nadie podrá acceder a él excepto usted que haya iniciado sesión en este servidor.
En caso de que el servidor web escuche 0.0.0.0:80, cualquier persona en Internet podrá conectarse a su servidor escribiendo en el navegador la dirección IP de su servidor.
Tenga en cuenta que en lugar del puerto 80 podría haber cualquier puerto que se escuche. Tomé 80 para este ejemplo porque es un puerto predeterminado para servidores web y el navegador no obliga al usuario a escribirlo después de ingresar la dirección IP.