548 Stimmen

Was ist der Unterschied zwischen 0.0.0.0, 127.0.0.1 und localhost?

Ich benutze Jekyll und Vagrant auf meinem Mac. Ich habe festgestellt, dass Jekyll Server anstatt von 127.0.0.1:4000 an 0.0.0.0:4000 binden wird. Auch Gem Server wird standardmäßig an diese Adresse binden. Ich kann es immer noch über http://localhost:port besuchen. Aber für Jekyll scheint es so zu sein, dass die Standardeinstellung (z.B. 0.0.0.0:4000) Internetzugriff erfordert. Ich kann Jekyll Server nicht ohne Internetverbindung ausführen. Ist es ein kleiner Fehler?

Ich benutze auch Vagrant. Ich habe Portweiterleitung (8080 => 4000) in der Vagrantfile eingestellt, da ich Jekyll in der Vagrant virtuellen Maschine installiert habe und es unter Macintosh getestet habe. Wenn ich die Standardeinstellung (0.0.0.0:4000) benutze, funktioniert es. Ich kann es von meinem Safari aus mit http://localhost:8080 besuchen. Aber wenn es kein Internet gibt, kann ich nicht an 0.0.0.0:4000 binden. Ich benutze jekyll server -H 127.0.0.1, um den Dienst stattdessen an 127.0.0.1:4000 zu binden, dann kann ich es nicht über http://localhost:8080 besuchen.

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

738voto

Captain Pedantic Punkte 6854

127.0.0.1 wird normalerweise der IP-Adresse des "Loopback" oder lokal-eigenen Interfaces zugewiesen. Dies ist ein "fiktiver" Netzwerkadapter, der nur innerhalb des gleichen Hosts kommunizieren kann. Es wird oft verwendet, wenn Sie möchten, dass eine netzwerkfähige Anwendung nur Clients im selben Host bedient. Ein Prozess, der auf 127.0.0.1 auf Verbindungen lauscht, empfängt nur lokale Verbindungen auf diesem Socket.

"localhost" ist normalerweise der Hostname für die IP-Adresse 127.0.0.1. Es ist normalerweise in der Datei /etc/hosts (oder dem Windows-Äquivalent namens "hosts", normalerweise unter C:\Windows\System32\Drivers\etc\hosts) festgelegt. Sie können es genauso wie jeden anderen Hostnamen verwenden - versuchen Sie ping localhost, um zu sehen, wie es sich zu 127.0.0.1 auflöst.

0.0.0.0 hat ein paar verschiedene Bedeutungen, aber in diesem Kontext, wenn einem Server gesagt wird, auf 0.0.0.0 zu lauschen, bedeutet dies "auf jedem verfügbaren Netzwerkinterface zu lauschen". Der Loopback-Adapter mit der IP-Adresse 127.0.0.1 sieht aus der Sicht des Serverprozesses genauso aus wie jeder andere Netzwerkadapter auf dem Rechner. Daher wird ein Server, dem gesagt wird, auf 0.0.0.0 zu lauschen, auch Verbindungen auf diesem Interface akzeptieren.

Das beantwortet hoffentlich die IP-Seite Ihrer Frage. Ich bin nicht mit Jekyll oder Vagrant vertraut, aber ich vermute, dass Ihr Portforwarding 8080 => 4000 irgendwie an einen bestimmten Netzwerkadapter gebunden ist, sodass es nicht im Pfad liegt, wenn Sie lokal eine Verbindung zu 127.0.0.1 herstellen.

49voto

sprutex Punkte 331

Ich werde den Unterschied zwischen 127.0.0.1 und 0.0.0.0 am Beispiel erklären:

Stellen Sie sich vor, Sie betreiben einen beliebigen Webserver (z. B. Nginx) auf einem entfernten Rechner, so dass jeder im Internet darauf zugreifen kann.

Wenn Ihr Nginx-Webserver auf 127.0.0.1:80 hört, kann niemand außer Ihnen, der auf diesem Server angemeldet ist, darauf zugreifen.

Wenn der Webserver jedoch auf 0.0.0.0:80 hört, kann jeder im Internet eine Verbindung zu Ihrem Server herstellen, indem er die IP-Adresse Ihres Servers im Browser eingibt.

Bitte beachten Sie, dass anstelle von Port 80 jeder beliebige Port gehört werden kann. Ich habe 80 für dieses Beispiel ausgewählt, da dies ein Standardport für Webserver ist und der Browser den Benutzer nicht zwingt, ihn nach Eingabe der IP-Adresse einzugeben.

39voto

Sanyam Jain Punkte 2558

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

Es kann jedoch vorkommen, dass Sie sehen möchten, wie Ihre Anwendung auf einem Mobilgerät oder von einem anderen Laptop/Computer läuft.

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 folgendes verwendet, um eine Verbindung von einem anderen Host aus herzustellen

http://host's IP adress/4000

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X