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


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? Es scheint, dass es sich auch auf den lokalen Computer bezieht, also was ist das? Unterschied?

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

screenshot of netstat -an output


207
2017-10-25 07:22


Ursprung


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


Antworten:


Das einzige ist, dass Sie nicht sagen "alle Adressen sollten Zugriff haben" - das ist in Ihrer Firewall (s) und / oder der Server-Software und / oder anderen Sicherheitsebenen wie tcpwrappers getan.

0.0.0.0 bedeutet in diesem Zusammenhang "alle IP-Adressen auf dem lokalen Rechner" (wahrscheinlich "alle IPv4-Adressen auf dem lokalen Rechner"). Wenn Ihr Webserver also zwei IP-Adressen hat, 192.168.1.1 und 10.1.2.1, und Sie einem Webserver-Daemon wie Apache erlauben, auf 0.0.0.0 zu hören, ist er an beiden IP-Adressen erreichbar. Aber nur zu dem, was diese IP-Adressen und die Web-Ports kontaktieren können.

Beachten Sie, dass in einem anderen Kontext (Routing) 0.0.0.0 normalerweise die Standardroute (die Route zu "dem Rest des Internets" neben den Routen in Ihrem lokalen Netzwerk usw.) bedeutet.


143
2017-10-25 08:55



Sie meinen also, dass der Socket des Webservers an alle verfügbaren Adressen gebunden ist, wenn er auf 0.0.0.0 hört? - onmyway133
0.0.0.0 bedeutet die Standardroute nur wenn es von Präfix begleitet wird /0 (oder Netzmaske 0.0.0.0) - minmaxavg
Zu beachten: Wenn ein Prozess auf 0.0.0.0 hört, ist er an IP-Adressen aller Netzwerkschnittstellen des Rechners erreichbar, die die aktuell konfigurierte Adresse der Loop-Back-Schnittstelle enthalten. Aber wenn der Prozess nur auf einen Port <portNumber> einer Loopback-Adresse hört, z. 127.0.0.1, und dann ist der Prozess nur erreichbar von der gleichen Maschine durch Targeting genau 127.0.0.1: <Portnummer>. Versuchen diese Python-Werkzeug  spielen! - Gab是好人


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


75
2017-10-25 07:33





Die IP-Adresse 0.0.0.0 kann sehr unterschiedliche Bedeutungen haben, abhängig davon, wo es verwendet wird.

  • Es ist keine gültige Adresse, die einer tatsächlichen Netzwerkschnittstelle zusammen mit einer anderen Adresse im Subnetz 0.0.0.0/8 (d. H. Einer Adresse, die mit 0.).
  • Es kann nicht als Quelladresse eines IP-Pakets verwendet werden, es sei denn, ein Computer erkennt immer noch seine eigene IP-Adresse nicht und versucht, eine zu erhalten (klassisches Beispiel: DHCP).
  • Wenn es in einer Routing-Tabelle verwendet wird, identifiziert es das Standard-Gateway; eine Route zu 0.0.0.0 ist die Standardroute, d. h. diejenige, die verwendet wird, wenn für eine Zieladresse keine spezifischere Route verfügbar ist.
  • Schließlich, wenn man es in der Ausgabe der netstat Befehl (was Sie gefragt haben), bedeutet dies, dass ein gegebener Socket alle verfügbaren IP-Adressen des Computers überwacht; Wenn ein Computer über mehr als eine IP-Adresse verfügt, kann ein Socket nur an ein bestimmtes Adress- und Portpaar oder an einen Port und an eine bestimmte Adresse gebunden werden alles Adressen; Wenn Sie dort eine IP-Adresse sehen, bedeutet dies, dass der Socket nur diesen Port und diese spezifische Adresse abhört; wenn du siehst 0.0.0.0Es bedeutet, dass es an diesem Port abgehört wird alles Adressen der Maschine, einschließlich des Loopbacks (127.0.0.1).

38
2017-08-12 06:45



Was bedeutet es, wenn Sie 0.0.0.0 locken? Ist curl tatsächlich kontaktiert und sendet eine Anfrage über verfügbare Schnittstellen? Woher weiß es, welche Schnittstelle die richtige ist? Ich verstehe, wie ein Server auf allen Schnittstellen zuhören kann, aber was ist der Mechanismus für einen Client, um alle Schnittstellen anzufordern, wie wenn ich curl 0.0.0.0 oder curl [::] mache. - CMCDragonkai
Das Betriebssystem wird Sie sehr wahrscheinlich davon abhalten, da es nicht nur aus der Netzwerkperspektive sinnvoll ist. Versuchen ping 0.0.0.0 auf einem Windows-System führt zu einer Fehlermeldung. - Massimo
curl 0.0.0.0 Erträge connection refusedauf Arch Linux. ping 0.0.0.0Auf der anderen Seite scheint es ein Alias ​​für zu sein ping 127.0.0.1 das funktioniert gut. - Matthias Braun
@MatthiasBraun der connection refused könnte sein, weil curl standardmäßig versucht, eine Verbindung zu Port 80 / tcp herzustellen. Versuchen Sie, Ihre offenen Ports mit zu finden nmap -sV localhost und dann für zB wenn 631 / tcp: curl 0.0.0.0:631. - Pablo Bianchi


Lee B's Antwort ist richtig, aber hier sind einige relevante RFCs, falls Sie interessiert sind.

0.0.0.0:

Von RFC1122, Abschnitt 3.1.2.3:

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

            { <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.

Genau das, "dieser Host in diesem Netzwerk" ... wie die Antwort von Lee B besagt, dass sich dies auf alle verfügbaren IP-Adressen auf Ihrem Host auswirkt. Wenn Sie einen Dienst unter 0.0.0.0 hosten, 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 Internet-Host-Loopback-Adresse zugewiesen. Ein Datagramm, das von einem Protokoll höherer Ebene an eine Adresse innerhalb dieses Blocks gesendet wird, kehrt innerhalb des Hosts zurück. Dies wird normalerweise mit nur 127.0.0.1/32 für Loopback implementiert. Wie in [RFC1122], Abschnitt 3.2.1.3 beschrieben, erscheinen Adressen innerhalb des gesamten 127.0.0.0/8 Blockes nicht legitim in irgendeinem Netzwerk irgendwo.

Der Unterschied zwischen 0.0.0.0 und der Loopback-Adresse 127.0.0.1 besteht darin, dass die Loopback-Adresse eine vollständig funktionsfähige IP-Schnittstelle innerhalb des Hosts selbst ermöglicht, unabhängig davon, wie der Rest des Netzwerk-Setups aussieht. Jeglicher Verkehr, der an das Loopback-Gerät gesendet wird, wird sofort darauf empfangen. Es ist nicht so sehr, dass das Loopback-Netzwerk auf Ihren eigenen Host verweist ... es ist eher so, als ob Sie in Ihrem Host ein Mini-Netzwerksegment haben, das Geräte, Prozesse und Sockets öffnen und verbinden kann.


26
2017-08-12 06:20





Einfach ausgedrückt: Wenn Sie auf 0.0.0.0 hören, hören Sie von überall, wo Netzwerkzugriff auf diesen Computer besteht, z. B. von diesem Computer, vom lokalen Netzwerk oder vom Internet, während 127.0.0.1 nur von diesem Computer gehört wird


3
2017-12-28 10:28