web-dev-qa-db-fra.com

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

J'utilise Jekyll et Vagrant sur mon mac. J'ai trouvé que Jekyll server sera lié à 0.0.0.0:4000 au lieu de 127.0.0.1:4000. De plus, gem server sera lié à 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 exécuter Jekyll server sans Internet. Est-ce un petit bug?

J'utilise aussi Vagrant. J'ai défini la redirection de port (8080 => 4000) dans Vagrantfile, car j’installe Jekyll dans Vagrant machine virtuelle et le 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.1 pour lier le service à 127.0.0.1:4000, 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 est-ce que n'importe qui peut expliquer pourquoi la différence causera ce problème?

235
Ciel

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

"localhost" est normalement le nom d'hôte de l'adresse IP 127.0.0.1. Il est généralement défini dans /etc/hosts (ou l'équivalent 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 en 127.0.0.1.

0.0.0.0 a plusieurs significations, mais dans ce contexte, lorsqu'un serveur reçoit l'ordre d'écouter sur 0.0.0.0, cela signifie "écoute sur toutes les interfaces réseau disponibles". L’adaptateur de bouclage avec l’adresse IP 127.0.0.1 du point de vue du processus serveur ressemble à n’importe quelle autre carte réseau de la machine. Par conséquent, un serveur à qui il est demandé d’écouter sur 0.0.0.0 acceptera également les connexions sur cette interface.

Cela répond, espérons-le, au côté IP de votre question. Jekyll ou Vagrant ne sont pas familiers, mais je suppose que votre transfert de port 8080 => 4000 est lié à une carte réseau particulière. Il ne figure donc pas dans le chemin lorsque vous vous connectez localement à 127.0.0.1

353
Captain Pedantic

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 ne souhaitez pas que d’autres accèdent à votre application.

Cependant, il peut arriver que vous souhaitiez voir comment votre application s'exécute sur un téléphone portable 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 pour vous y connecter à partir d'un autre hôte.

http://Host's IP adress/4000 
14
Sanyam Jain