Was ist der Unterschied zwischen 127.0.0.1 und localhost?

157

Angenommen, Folgendes ist definiert in .../hosts:

127.0.0.1 localhost

Was sind, wenn überhaupt, die tatsächlichen Unterschiede zwischen der Verwendung von 127.0.0.1und localhostals Servername, insbesondere wenn lokal laufende Prozesse getroffen werden, die auf Verbindungen warten?

Böhmisch
quelle
15
Man könnte sagen, es localhostist protokollunabhängig, sowohl IPv4 als auch IPv6 funktionieren.
Steve-o

Antworten:

122

Nun, der höchstwahrscheinliche Unterschied ist , dass Sie immer noch einen tatsächlichen zu tun haben Nachschlag von localhostirgendwo.

Wenn Sie verwenden 127.0.0.1, wandelt (intelligente) Software diese direkt in eine IP-Adresse um und verwendet sie. Einige Implementierungen von gethostbynameerkennen das gepunktete Format (und vermutlich das entsprechende IPv6-Format) und führen überhaupt keine Suche durch.

Andernfalls muss der Name aufgelöst werden. Und es gibt keine Garantie dafür, dass Ihre hostsDatei tatsächlich (zuerst oder überhaupt) für diese Auflösung verwendet wird , sodass localhostmöglicherweise eine völlig andere IP-Adresse verwendet wird.

Damit meine ich, dass auf einigen Systemen eine lokale hostsDatei umgangen werden kann. Die host.confDatei steuert dies unter Linux (und vielen anderen Unices).

paxdiablo
quelle
6
Der Hauptunterschied besteht darin, dass die Verbindung über Unix Domain Socket hergestellt werden kann, wie hier angegeben: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confWählt aus, ob hostsoder DNS zuerst für eine Hostsuche verwendet wird, wenn nss ausgeführt wird.
Mark Lakata
@ DonViegues Das ist MySQL-spezifisch und IMO schlechtes Design. Es wird localhost sehen und versucht, Unix-Socket zu verwenden, anstatt eine Verbindung über IP herzustellen, aber für 127.0.0.1 wird nur IP verwendet.
Arman Ordookhani
@ArmanOrdookhani AFAIK Wenn Sie über SSH eine Verbindung zu einem Remote-Host und von dort zu einem MySQL (wie einem SSH-Tunnel, um den MySQL-Server zu erreichen) herstellen, müssen Sie 127.0.0.1 verwenden, da das Ganze über TC / IP läuft. Wenn jedoch zwei Prozesse, die auf demselben Computer ausgeführt werden, eine Verbindung herstellen möchten, ist localhost (Unix-Socket) schneller / hat einen zusätzlichen Aufwand. Vielen Dank!
Don Viegues
1
@DonViegues Ja, Sie haben Recht, Unix-Socket hat weniger Overhead als TCP / IP. Ich wollte nur erwähnen, dass dieses Verhalten spezifisch für MySQL ist und nicht auf Betriebssystem- oder Netzwerkebene.
Arman Ordookhani
35

Wikipedia fasst das gut zusammen:

Auf modernen Computersystemen wird localhost als Hostname in eine IPv4-Adresse im Netzblock 127.0.0.0/8 (Loopback) übersetzt, normalerweise 127.0.0.1 oder :: 1 in IPv6.

Der einzige Unterschied besteht darin, dass im DNS nach dem System gesucht wird, in das aufgelöst wird localhost. Diese Suche ist sehr, sehr schnell. Um zu stackoverflow.comIhnen zu gelangen, geben Sie dies beispielsweise in die Adressleiste ein (oder verwenden Sie ein Lesezeichen, auf das hier verwiesen wird). In jedem Fall sind Sie über einen Hostnamen hierher gekommen. localhostbietet eine ähnliche Funktionalität.

Ryan Bigg
quelle
11
Das ist eigentlich wichtig. localhost kann in eine IPv6-Adresse aufgelöst werden, 127.0.0.1 nicht. Die Verwendung von localhost auf einem IPv6-System kann nur funktionieren, während 127.0.0.1 dies nicht tut, da IPv4 nicht verfügbar ist.
Erwin Jansen
31

Einige Anwendungen behandeln "localhost" speziell. Der MySQL-Client behandelt localhost als eine Anforderung, eine Verbindung zum lokalen Unix-Domain-Socket herzustellen, anstatt tcp zu verwenden, um eine Verbindung zum Server unter 127.0.0.1 herzustellen. Dies kann schneller sein und sich in einer anderen Authentifizierungszone befinden.

Ich kenne keine anderen Apps, die localhost anders behandeln als 127.0.0.1, aber es gibt wahrscheinlich einige.

Wayne Walker
quelle
8

Nun, per IP ist schneller.

Grundsätzlich wird beim Aufrufen nach Servernamen die ursprüngliche IP-Adresse konvertiert.

Es ist jedoch schwierig, sich eine IP zu merken. Aus diesem Grund wurde der Domainname erstellt.

Persönlich benutze ich http://localhostanstelle von http://127.0.0.1oder http://username.

Die Maske
quelle
localhost ist schneller, verwendet kein TCP / IP
Don Viegues
@ Don Viegues - was Sie sagen, widerspricht den anderen Antworten in diesem Thread. Können Sie das näher erläutern?
Dikla
Ja, ich werde einen anderen Kommentar von mir kopieren und einfügen: Der Hauptunterschied besteht darin, dass die Verbindung über Unix Domain Socket hergestellt werden kann, wie hier angegeben: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
5
@DonViegues, das spezifisch für MySQL ist und localhostauf besondere Weise behandelt wird . Andere Anwendungen werden wahrscheinlich noch nachschlagen localhost.
William Denniss
0

Es gibt nichts anderes. Einer ist leichter zu merken als der andere. Im Allgemeinen definieren Sie einen Namen, der einer IP-Adresse zugeordnet werden soll. Sie müssen localhost für 127.0.0.1 nicht angeben, Sie können einen beliebigen Namen angeben.

d_ethier
quelle
-3

Der Hauptunterschied besteht darin, dass die Verbindung über Unix Domain Socket hergestellt werden kann, wie hier angegeben: localhost vs. 127.0.0.1

Don Viegues
quelle
6
Die Antwort, die Sie verlinkt haben, ist ein MySQL-spezifischer Sonderfall, der im Allgemeinen nicht gilt. en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss