Qual é a diferença entre 0.0.0.0, 127.0.0.1 e localhost?

271

Estou usando Jekylle Vagrantno meu mac. Eu achei que Jekyll servervai ligar para em 0.0.0.0:4000vez de 127.0.0.1:4000. Também gem serverserá vinculado a este endereço por padrão. Ainda posso visitá-lo via http://localhost:port. Mas Jekyll, parece que a configuração padrão (por exemplo, 0.0.0.0:4000) requer acesso à Internet. Não consigo correr Jekyll serversem Internet. É um pequeno bug?

Eu também uso Vagrant. Eu configurei o encaminhamento de porta (8080 => 4000) no Vagrantfile, desde que instalo Jekyllna Vagrantmáquina virtual e testo no Macintosh. Se eu usar a configuração padrão (0.0.0.0:4000), ela funcionará. Eu posso visitá-lo no meu safari com http://localhost:8080. Mas se não houver internet, não posso vincular a 0.0.0.0:4000. Em vez disso, eu uso o jekyll server -H 127.0.0.1serviço BIND para vincular o serviço .127.0.0.1:4000http://localhost:8080

Alguém pode explicar a diferença entre 0.0.0.0, 127.0.0.1 e localhost ? E alguém pode explicar por que a diferença causará esse problema ?

Ciel
fonte
Este artigo pode ser útil em howtogeek.com/225487/…
fangxing

Respostas:

408

127.0.0.1normalmente é o endereço IP atribuído à interface "loopback" ou somente local. Este é um adaptador de rede "falso" que pode se comunicar apenas no mesmo host. É frequentemente usado quando você deseja que um aplicativo com capacidade de rede atenda apenas clientes no mesmo host. Um processo que está escutando 127.0.0.1conexões receberá apenas conexões locais nesse soquete.

"localhost" é normalmente o nome do host do 127.0.0.1endereço IP. Geralmente é definido /etc/hosts(ou o equivalente do Windows chamado "hosts" em algum lugar abaixo %WINDIR%). Você pode usá-lo como qualquer outro nome de host - tente "ping localhost" para ver como ele se resolve 127.0.0.1.

0.0.0.0tem alguns significados diferentes, mas nesse contexto, quando um servidor é instruído a ouvir, 0.0.0.0isso significa "ouvir em todas as interfaces de rede disponíveis". O adaptador de loopback com endereço IP 127.0.0.1da perspectiva do processo do servidor se parece com qualquer outro adaptador de rede na máquina, portanto, um servidor solicitado a ouvir 0.0.0.0também aceitará conexões nessa interface.

Espero que isso responda ao lado do IP da sua pergunta. Não estou familiarizado com Jekyll ou Vagrant, mas acho que o encaminhamento de porta 8080 => 4000está de alguma forma vinculado a um adaptador de rede específico, portanto, não está no caminho quando você se conecta localmente a127.0.0.1

Capitão Pedantic
fonte
Hmm, ping localhostparece funcionar no Windows, mesmo sem o arquivo hosts apontando 127.0.0.1para localhost.
Pacerier 23/07
Concordo com Pacerier. Pelo menos no Windows, o host local se comporta como 0.0.0.0 (não 127.0.0.1) por padrão
drodsou
5
"Isso está correto, exceto pela descrição da ligação ao 0.0.0.0. Isso não se liga a todas as interfaces de rede disponíveis, como você descreveu, mas se liga a todos os endereços . Nas pilhas TCP, isso é conhecido como INADDR_ANY - da resposta excluída #strangemonad.
Piotr Dobrogost
15

Na versão atual do Jekyll, o padrão é http://127.0.0.1:4000/ .
Isso é bom se você estiver conectado a uma rede, mas não desejar que mais ninguém acesse seu aplicativo.

No entanto, pode acontecer que você queira ver como o aplicativo é executado em um celular ou em outro laptop / computador.

Nesse caso, você pode usar

jekyll serve --host 0.0.0.0

Isso vincula seu aplicativo ao host e o próximo uso a seguir para conectar-se a ele de algum outro host

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