Was ist der Unterschied zwischen 0.0.0.0, 127.0.0.1 und localhost?

270

Ich benutze Jekyllund Vagrantauf meinem Mac. Ich habe festgestellt, dass Jekyll serverdas an binden wird, 0.0.0.0:4000anstatt 127.0.0.1:4000. Wird gem serverauch standardmäßig an diese Adresse gebunden. Ich kann es immer noch über besuchen http://localhost:port. Aber Jekyll, so scheint es , dass die Standardeinstellung (zB 0.0.0.0:4000) einen Internetzugang erforderlich. Ich kann nicht Jekyll serverohne Internet laufen . Ist es ein kleiner Fehler?

Ich benutze auch Vagrant. Ich habe die Portweiterleitung (8080 => 4000) in Vagrantfile festgelegt, da ich sie Jekyllin einer Vagrantvirtuellen Maschine installiere und unter Macintosh teste . Wenn ich die Standardeinstellung (0.0.0.0:4000) verwende, funktioniert es. Ich kann es von meiner Safari mit besuchen http://localhost:8080. Aber wenn es kein Internet gibt, kann ich mich nicht an 0.0.0.0:4000 binden. Ich jekyll server -H 127.0.0.1binde 127.0.0.1:4000stattdessen, um den Dienst zu binden , dann kann ich ihn nicht über besuchen http://localhost:8080.

Kann jemand den Unterschied zwischen 0.0.0.0, 127.0.0.1 und localhost erklären ? Und kann jemand erklären, warum der Unterschied dieses Problem verursacht ?

Ciel
quelle
Dieser Artikel kann hilfreich sein howtogeek.com/225487/…
Fangxing

Antworten:

406

127.0.0.1ist normalerweise die IP-Adresse, die der "Loopback" - oder Nur-Lokal-Schnittstelle zugewiesen ist. Dies ist ein "gefälschter" Netzwerkadapter, der nur innerhalb desselben Hosts kommunizieren kann. Es wird häufig verwendet, wenn eine netzwerkfähige Anwendung nur Clients auf demselben Host bedienen soll. Ein Prozess, der auf 127.0.0.1Verbindungen wartet, empfängt nur lokale Verbindungen an diesem Socket.

"localhost" ist normalerweise der Hostname für die 127.0.0.1IP-Adresse. Es ist normalerweise in /etc/hosts(oder dem Windows-Äquivalent mit dem Namen "Hosts" irgendwo darunter %WINDIR%) eingestellt. Sie können es wie jeden anderen Hostnamen verwenden - versuchen Sie "ping localhost", um zu sehen, wie es aufgelöst wird 127.0.0.1.

0.0.0.0hat verschiedene Bedeutungen, aber wenn in diesem Zusammenhang ein Server angewiesen wird, abzuhören 0.0.0.0, bedeutet dies "jede verfügbare Netzwerkschnittstelle abhören". Der Loopback-Adapter mit IP-Adresse 127.0.0.1aus Sicht des Serverprozesses sieht genauso aus wie jeder andere Netzwerkadapter auf dem Computer, sodass ein Server, der zum Abhören aufgefordert 0.0.0.0wird, auch Verbindungen auf dieser Schnittstelle akzeptiert.

Das beantwortet hoffentlich die IP-Seite Ihrer Frage. Ich bin nicht mit Jekyll oder Vagrant vertraut, aber ich vermute, dass Ihre Portweiterleitung 8080 => 4000irgendwie an einen bestimmten Netzwerkadapter gebunden ist, sodass sie nicht im Pfad enthalten ist, wenn Sie eine lokale Verbindung herstellen127.0.0.1

Kapitän Pedantic
quelle
Hmm, ping localhostscheint zu funktionieren unter Windows auch ohne die Host - Datei zeigt 127.0.0.1auf localhost.
Pacerier
Stimmen Sie mit Pacerier überein. Zumindest unter Windows verhält sich localhost standardmäßig wie 0.0.0.0 (nicht 127.0.0.1)
drodsou
5
"Dies ist größtenteils korrekt, mit Ausnahme Ihrer Beschreibung der Bindung an 0.0.0.0. Dies bindet nicht an jede verfügbare Netzwerkschnittstelle, wie Sie beschrieben haben, sondern an alle Adressen . In TCP-Stacks wird dies als INADDR_ANY bezeichnet - aus gelöschter Antwort von @strangemonad.
Piotr Dobrogost
15

In der aktuellen Version von Jekyll wird standardmäßig http://127.0.0.1:4000/ verwendet .
Dies ist gut, wenn Sie mit einem Netzwerk verbunden sind, aber nicht möchten, dass andere Personen auf Ihre Anwendung zugreifen.

Es kann jedoch vorkommen, dass Sie sehen möchten, wie Ihre Anwendung auf einem Mobiltelefon oder einem anderen Laptop / Computer ausgeführt wird.

In diesem Fall können Sie verwenden

jekyll serve --host 0.0.0.0

Dadurch wird Ihre Anwendung an den Host gebunden und anschließend von einem anderen Host aus eine Verbindung hergestellt

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