Was ist der Unterschied zwischen IP-Adresse 0.0.0.0 und 127.0.0.1?

220

Ich weiß, dass 127.0.0.1 ~ 127.255.255.254 die Loopback-IP-Adressen für die meisten modernen Betriebssysteme sind, und diese IP-Adressen können verwendet werden, um auf unseren eigenen Computer zu verweisen.

Aber was ist 0.0.0.0? Anscheinend bezieht es sich auch auf den lokalen Computer. Wo liegt also der Unterschied ?

Und könnten Sie mir die folgenden IP-Verbindungen erklären:

Screenshot der Ausgabe von netstat -an

Jichao
quelle
6
Schauen Sie sich auch diese Frage an, da sie Details darüber enthält, was 0.0.0.0 ist (und was nicht): serverfault.com/questions/228629/…
Ellie Kesselman
Ein modernes Betriebssystem würde ::1als Loopback-Adresse verwenden.
Kasperd

Antworten:

157

Das Einzige, was Sie nicht sagen, ist, dass "nicht alle Adressen Zugriff haben sollten". Dies geschieht in Ihren Firewalls und / oder der Serversoftware und / oder in anderen Sicherheitsebenen wie tcpwrappers.

0.0.0.0 bedeutet in diesem Zusammenhang "alle IP-Adressen auf dem lokalen Computer" (in der Tat wahrscheinlich "alle IPv4-Adressen auf dem lokalen Computer"). Wenn Ihr Webserver-Rechner also zwei IP-Adressen hat, 192.168.1.1 und 10.1.2.1, und Sie einem Webserver-Daemon wie apache erlauben, 0.0.0.0 abzuhören, ist er unter diesen beiden IP-Adressen erreichbar. Aber nur, was kann diese IP-Adressen und den Web-Port (s) kontaktieren.

Beachten Sie, dass in einem anderen Kontext (Routing) 0.0.0.0 normalerweise die Standardroute bedeutet (die Route zum "Rest" des Internets, abgesehen von Routen in Ihrem lokalen Netzwerk usw.).

Lee B
quelle
Sie meinen also, dass der Socket des Webservers an alle verfügbaren Adressen gebunden ist, wenn er auf 0.0.0.0 lauscht?
Onmyway133
0.0.0.0bedeutet die Standardroute nur, wenn sie mit einem Präfix /0(oder einer Netzmaske 0.0.0.0) versehen ist
minmaxavg
Zu beachten: Wenn ein Prozess 0.0.0.0 abhört, ist er unter den IP-Adressen aller Netzwerkschnittstellen des Computers erreichbar, einschließlich der aktuell konfigurierten Adresse der Loopback-Schnittstelle. Wenn der Prozess jedoch nur einen Port <portNumber> einer Loopback-Adresse abhört, z. B. 127.0.0.1, und der Prozess dann nur von demselben Computer aus erreichbar ist , indem genau 127.0.0.1: <portNumber> ausgewählt wird . Probieren Sie dieses Python-Tool zum Spielen aus!
Gab 是 好人
77

Wenn ein Dienst 0.0.0.0 überwacht, bedeutet dies, dass er alle konfigurierten Netzwerkschnittstellen überwacht. Wenn er 127.0.0.1 überwacht, ist der Dienst nur an die Loopback-Schnittstelle gebunden (nur auf dem lokalen Computer verfügbar).

Slubman
quelle
38

Die IP-Adresse 0.0.0.0kann je nach Verwendungszweck sehr unterschiedliche Bedeutungen haben.

  • Es ist keine gültige Adresse, die einer tatsächlichen Netzwerkschnittstelle zusammen mit einer anderen Adresse im Subnetz 0.0.0.0/8 zugewiesen wird (dh eine Adresse, die mit beginnt 0.).
  • Es kann nicht als Quelladresse für ein IP-Paket verwendet werden, es sei denn, ein Computer kennt noch keine eigene IP-Adresse und versucht, eine zu ermitteln (klassisches Beispiel: DHCP).
  • Bei Verwendung in einer Routing-Tabelle wird das Standard-Gateway identifiziert. Eine Route zu 0.0.0.0 ist die Standardroute, dh die Route, die verwendet wird, wenn für eine Zieladresse keine spezifischere Route verfügbar ist.
  • In der Ausgabe des netstatBefehls (nach der Sie gefragt haben) heißt es schließlich, dass ein bestimmter Socket alle verfügbaren IP-Adressen abhört, über die der Computer verfügt. Wenn ein Computer mehr als eine IP-Adresse hat, kann ein Socket nur an ein bestimmtes Adress- und Portpaar oder an einen Port und alle Adressen gebunden werden . Wenn Sie dort eine IP-Adresse sehen, bedeutet dies, dass der Socket nur diesen Port und diese bestimmte Adresse überwacht. Wenn Sie sehen 0.0.0.0, bedeutet dies, dass dieser Port an allen Adressen des Computers abgehört wird, einschließlich der Loopback-Adresse ( 127.0.0.1).
Massimo
quelle
3
Was bedeutet es, wenn Sie 0.0.0.0 locken? Kontaktiert und sendet curl tatsächlich eine Anfrage über verfügbare Schnittstellen? Woher weiß es, welches Interface das richtige ist? Ich verstehe, wie ein Server auf allen Schnittstellen lauscht, aber wie ein Client alle Schnittstellen anfordert, z. B. wenn ich 0.0.0.0 oder curl [::] mache.
CMCDragonkai
1
Das Betriebssystem wird Sie sehr wahrscheinlich daran hindern, da dies nicht nur aus Netzwerksicht sinnvoll ist. Wenn Sie versuchen, ping 0.0.0.0auf einem Windows-System zu arbeiten, wird eine Fehlermeldung angezeigt.
Massimo
curl 0.0.0.0ergibt sich connection refusedauf Arch Linux. ping 0.0.0.0Andererseits scheint es sich um einen Alias ​​zu handeln, für ping 127.0.0.1den alles in Ordnung ist.
Matthias Braun
@MatthiasBraun Das connection refusedkönnte daran liegen, dass Curl standardmäßig versucht, eine Verbindung zu Port 80 / TCP herzustellen . Versuchen Sie , Ihre offene Ports mit zu finden nmap -sV localhostund dann zB wenn 631 / tcp: curl 0.0.0.0:631.
Pablo A
27

Die Antwort von Lee B ist richtig, aber hier sind einige relevante RFCs für den Fall, dass Sie interessiert sind.

0.0.0.0:

In RFC1122 , Abschnitt 3.1.2.3:

Wir fassen nun die wichtigen Sonderfälle für IP-Adressen der Klassen A, B und C unter Verwendung der folgenden Notation für eine IP-Adresse zusammen:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Nur das, "dieser Host in diesem Netzwerk" ... wie die Antwort von Lee B besagt, werden alle verfügbaren IP-Adressen auf Ihrem Host übersetzt. Durch das Hosten eines Dienstes unter 0.0.0.0 wird dieser Dienst automatisch auf jeder adressierbaren Schnittstelle gehostet.

127.0.0.1:

Von RFC5735 :

127.0.0.0/8 - Dieser Block wird zur Verwendung als Loopback-Adresse des Internet-Hosts zugewiesen. Ein Datagramm, das von einem übergeordneten Protokoll an eine beliebige Adresse in diesem Block gesendet wird, kehrt im Host zurück. Dies wird normalerweise nur mit 127.0.0.1/32 für Loopback implementiert. Wie in [RFC1122], Abschnitt 3.2.1.3 beschrieben, werden Adressen im gesamten 127.0.0.0/8-Block in keinem Netzwerk legitim angezeigt.

Der Unterschied zwischen 0.0.0.0 und der Loopback-Adresse 127.0.0.1 besteht darin, dass die Loopback-Adresse eine voll funktionsfähige IP-Schnittstelle innerhalb des Hosts selbst ermöglicht, unabhängig davon, wie der Rest des Netzwerk-Setups gegebenenfalls aussieht. An das Loopback-Gerät gesendeter Datenverkehr wird sofort empfangen. Es ist nicht so sehr, dass das Loopback-Netzwerk auf Ihren eigenen Host "verweist". Es ist eher so, als hätten Sie ein Mini-Netzwerksegment in Ihrem Host, das Geräte, Prozesse und Sockets öffnen und eine Verbindung herstellen kann.


quelle
4

In einfachen Worten: Mit 0.0.0.0 zuhören bedeutet, von jedem Ort aus zuzuhören, der über Netzwerkzugriff auf diesen Computer verfügt, z. B. von diesem Computer aus, über ein lokales Netzwerk oder über das Internet. Mit 127.0.0.1 zuhören bedeutet, nur von diesem Computer aus zuzuhören

Hải Phong
quelle