Quelle est la différence entre 0.0.0.0, 127.0.0.1 et localhost?

271

J'utilise Jekyllet Vagrantsur mon mac. J'ai trouvé que Jekyll serverse lierait à la 0.0.0.0:4000place de 127.0.0.1:4000. Liera également gem serverà cette adresse par défaut. Je peux toujours le visiter via http://localhost:port. Mais pour Jekyll, il semble que le paramètre par défaut (par exemple 0.0.0.0:4000) nécessite un accès Internet. Je ne peux pas courir Jekyll serversans Internet. Est-ce un petit bug?

J'utilise aussi Vagrant. J'ai défini la redirection de port (8080 => 4000) dans Vagrantfile, depuis que j'installe Jekyllsur Vagrantune machine virtuelle et que je la teste sous Macintosh. Si j'utilise le paramètre par défaut (0.0.0.0:4000), cela fonctionne. Je peux le visiter depuis mon safari avec http://localhost:8080. Mais s'il n'y a pas Internet, je ne peux pas me lier à 0.0.0.0:4000. J'utilise jekyll server -H 127.0.0.1pour lier le service à la 127.0.0.1:4000place, alors je ne peux pas le visiter via http://localhost:8080.

Quelqu'un peut-il expliquer la différence entre 0.0.0.0, 127.0.0.1 et localhost ? Et quelqu'un peut-il expliquer pourquoi la différence causera ce problème ?

Ciel
la source
Cet article peut vous aider howtogeek.com/225487/…
fangxing

Réponses:

408

127.0.0.1est normalement l'adresse IP attribuée à l'interface "loopback" ou locale uniquement. Il s'agit d'une "fausse" carte réseau qui ne peut communiquer qu'au sein du même hôte. Il est souvent utilisé lorsque vous souhaitez qu'une application compatible réseau ne serve que des clients sur le même hôte. Un processus qui écoute les 127.0.0.1connexions ne recevra que les connexions locales sur ce socket.

"localhost" est normalement le nom d'hôte de l' 127.0.0.1adresse IP. Il est généralement défini dans /etc/hosts(ou l'équivalent de Windows nommé «hôtes» quelque part sous %WINDIR%). Vous pouvez l'utiliser comme n'importe quel autre nom d'hôte - essayez "ping localhost" pour voir comment il se résout 127.0.0.1.

0.0.0.0a plusieurs significations différentes, mais dans ce contexte, lorsqu'un serveur est invité à écouter, 0.0.0.0cela signifie "écouter sur toutes les interfaces réseau disponibles". L'adaptateur de bouclage avec adresse IP 127.0.0.1du point de vue du processus de serveur ressemble à n'importe quel autre adaptateur réseau sur la machine, donc un serveur auquel il est demandé d'écouter 0.0.0.0acceptera également les connexions sur cette interface.

J'espère que cela répond au côté IP de votre question. Je ne connais pas Jekyll ou Vagrant, mais je suppose que votre redirection de port 8080 => 4000est en quelque sorte liée à une carte réseau particulière, donc elle n'est pas sur le chemin lorsque vous vous connectez localement à127.0.0.1

Capitaine Pedantic
la source
Hmm, ping localhostsemble fonctionner sur Windows même sans que le fichier hosts pointe 127.0.0.1vers localhost.
Pacerier
D'accord avec Pacerier. Au moins sous Windows, localhost se comporte comme 0.0.0.0 (et non 127.0.0.1) par défaut
drodsou
5
"Ceci est généralement correct, sauf pour votre description de la liaison à 0.0.0.0. Cela ne se lie pas à toutes les interfaces réseau disponibles comme vous l'avez décrit, mais se lie plutôt à toutes les adresses . Dans les piles TCP, cela s'appelle INADDR_ANY - de la réponse supprimée de @strangemonad.
Piotr Dobrogost
15

Dans la version actuelle de Jekyll, la valeur par défaut est http://127.0.0.1:4000/ .
C'est bien, si vous êtes connecté à un réseau mais que vous ne voulez pas que quelqu'un d'autre accède à votre application.

Cependant, il peut arriver que vous souhaitiez voir comment votre application s'exécute sur un mobile ou à partir d'un autre ordinateur portable / ordinateur.

Dans ce cas, vous pouvez utiliser

jekyll serve --host 0.0.0.0

Cela lie votre application à l'hôte et à la prochaine utilisation suivante pour s'y connecter à partir d'un autre hôte

http://host's IP adress/4000 
Sanyam Jain
la source