Quelle est la différence entre 127.0.0.1 et localhost

157

En supposant que ce qui suit est défini dans .../hosts:

127.0.0.1 localhost

Quelles sont, le cas échéant, les différences réelles entre l'utilisation 127.0.0.1et localhostcomme nom de serveur, en particulier lorsque vous frappez des processus s'exécutant localement et à l'écoute des connexions?

Bohème
la source
15
Vous pourriez dire que localhostc'est indépendant du protocole, IPv4 et IPv6 fonctionneront.
Steve-o le

Réponses:

122

Eh bien, la différence la plus probable est que vous avez encore à faire une réelle recherche de localhostquelque part.

Si vous utilisez 127.0.0.1, un logiciel (intelligent) transformera simplement cela directement en adresse IP et l'utilisera. Certaines implémentations de gethostbynamedétecteront le format pointillé (et probablement le format IPv6 équivalent) et ne feront pas du tout de recherche.

Sinon, le nom doit être résolu. Et il n'y a aucune garantie que votre hostsfichier sera réellement utilisé pour cette résolution (d'abord ou pas du tout) et localhostpeut donc devenir une adresse IP totalement différente .

J'entends par là que, sur certains systèmes, un hostsfichier local peut être contourné. Le host.conffichier contrôle cela sur Linux (et de nombreux autres Unices).

paxdiablo
la source
6
La principale différence est que la connexion peut être établie via un socket de domaine Unix, comme indiqué ici: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confsélectionne si hostsou DNS est utilisé en premier pour une recherche d'hôte, si nss est en cours d'exécution.
Mark Lakata
@DonViegues C'est une conception spécifique à MySQL et une mauvaise conception de l'OMI. Il verra localhost et essaiera d'utiliser unix-socket au lieu de se connecter en utilisant IP mais pour 127.0.0.1 il utilise juste IP.
Arman Ordookhani
@ArmanOrdookhani AFAIK si vous vous connectez à un hôte distant via SSH, puis de là à un MySQL (comme un tunnel SSH pour atteindre le serveur MySQL), vous devez utiliser 127.0.0.1, car le tout passe par TC / IP. Mais si 2 processus s'exécutant sur la même machine veulent se connecter, localhost (socket unix) est plus rapide / a une surcharge. Merci!
Don Viegues
1
@DonViegues Oui, vous avez raison, le socket unix a moins de surcharge que TCP / IP. Je voulais juste mentionner que ce comportement est spécifique à MySQL et non au niveau du système d'exploitation ou du réseau.
Arman Ordookhani
36

Wikipédia résume bien cela:

Sur les systèmes informatiques modernes, localhost en tant que nom d'hôte se traduit par une adresse IPv4 dans le bloc réseau 127.0.0.0/8 (bouclage), généralement 127.0.0.1, ou :: 1 en IPv6.

La seule différence est que cela chercherait dans le DNS le système à quoi il localhostrésout. Cette recherche est vraiment, vraiment rapide. Par exemple, pour vous y rendre, stackoverflow.comsaisissez-le dans la barre d'adresse (ou utilisez un bookmarklet pointant ici). Quoi qu'il en soit, vous êtes arrivé ici via un nom d'hôte. localhostfournit une fonctionnalité similaire.

Ryan Bigg
la source
11
C'est en fait important. localhost peut se résoudre en une adresse IPv6, contrairement à 127.0.0.1. L'utilisation de localhost sur un système IPv6 uniquement peut fonctionner, contrairement à 127.0.0.1 car IPv4 n'est pas disponible.
Erwin Jansen
32

certaines applications traiteront spécialement "localhost". le client mysql traitera localhost comme une demande de connexion au socket de domaine local unix au lieu d'utiliser tcp pour se connecter au serveur sur 127.0.0.1. Cela peut être plus rapide et se trouver dans une zone d'authentification différente.

Je ne connais pas d'autres applications qui traitent localhost différemment de 127.0.0.1, mais il y en a probablement.

Wayne Walker
la source
8

Eh bien, par IP, c'est plus rapide.

Fondamentalement, lorsque vous appelez par nom de serveur, il est converti en IP d'origine.

Mais il serait difficile de mémoriser une adresse IP, pour cette raison le nom de domaine a été créé.

Personnellement, j'utilise à la http://localhostplace de http://127.0.0.1ou http://username.

Le masque
la source
localhost est plus rapide, n'utilise pas TCP / IP
Don Viegues
@Don Viegues - ce que vous dites est en contradiction avec les autres réponses de ce fil. Peux-tu élaborer?
Dikla
Oui, je vais copier et coller mon autre commentaire: la principale différence est que la connexion peut être établie via Unix Domain Socket, comme indiqué ici: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
5
@DonViegues qui est spécifique à MySQL, qui gère localhostd'une manière particulière . D'autres applications chercheront probablement encore localhost.
William Denniss
0

Il n'y a rien de différent. L'un est plus facile à retenir que l'autre. En général, vous définissez un nom à associer à une adresse IP. Vous n'avez pas à spécifier localhost pour 127.0.0.1, vous pouvez spécifier le nom de votre choix.

d_ethier
la source
-3

La principale différence est que la connexion peut être établie via Unix Domain Socket, comme indiqué ici: localhost vs 127.0.0.1

Don Viegues
la source
6
La réponse que vous avez liée est un cas particulier spécifique à MySQL, elle ne s'applique pas en général. en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss