Ich führe das Beispiel in hiredis aus, das "127.0.0.2" als IP des Redis-Servers verwendet und ordnungsgemäß ausgeführt wird. Tatsächlich läuft der Redis-Server auf demselben Computer. Ich weiß, dass "127.0.0.1" die IP-Adresse von "lo" ist, aber wie wäre es mit "127.0.0.2"? Ist es dasselbe wie "127.0.0.1"?
IPv4-Netzwerkstandards reservieren den gesamten 127.0.0.0/8-Adressblock für Loopback-Zwecke. Dies bedeutet, dass jedes Paket, das an eine dieser 16.777.214 Adressen (127.0.0.1 bis 127.255.255.254) gesendet wird, zurückgeschleift wird. IPv6 hat nur eine einzige Adresse: :: 1.
Verschiedene Standards der Internet Engineering Task Force (IETF) reservieren zu diesem Zweck den IPv4-Adressblock 127.0.0.0/8 in CIDR-Notation und die IPv6-Adresse :: 1. Die am häufigsten verwendete IPv4-Adresse ist 127.0.0.1. In der Regel werden diese Loopback-Adressen den Hostnamen localhost oder loopback zugeordnet.
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, sollte innerhalb des Hosts zurückgeschleift werden. Dies wird normalerweise nur mit 127.0.0.1/32 für Loopback implementiert, aber in keinem Netzwerk sollten Adressen innerhalb dieses Blocks jemals irgendwo auftauchen [RFC1700, Seite 5].
Probieren Sie es aus, indem Sie pingen:
$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
Die Wikipedia-Seite hat sich seitdem geändert und lautet nun "obwohl ihr eine Adresse im Bereich von 127.0.0.1 bis 127.255.255.254 zugeordnet ist", wodurch der Kern dieser Antwort in direktem Konflikt mit Wikipedia steht.
SilverSkin
6
@ SilverSkin Würde es Ihnen etwas ausmachen zu erklären, was Sie meinen? Der einzige Unterschied zwischen der Antwort und der aktuellen Wikipedia-Version besteht darin, dass 127.0.0.0 und 127.255.255.255 (korrekt) ausgeschlossen wurden, bei denen es sich um Netzwerk- / Broadcast-Adressen handelt. Der Kern ist immer noch derselbe - 127.xxx == 127.0.0.1 (mit Ausnahme von 127.0.0.0 und 127.255.255.255, die in jedem / 8-Netzwerk erwartet werden).
icyrock.com
1
Es gibt also keinen Unterschied zwischen der Bindung an 127.0.0.1 und der Bindung an 127.0.0.124? Warum kümmert sich der hiredis also um 127.0.0.2, wenn es die gleiche Adresse ist? Was passiert auch, wenn Sie eine Nachricht an 127.0.0.0 gesendet haben?
CMCDragonkai,
7
Man muss erwähnen, dass es in OS X nicht dasselbe ist, das nur 127.0.0.1 zum Loopback weiterleitet. Sehen Sie hier .
Wenbing Li
6
@CMCDragonkai 127.0.0.1 und 127.0.0.124 befinden sich möglicherweise auf derselben Schnittstelle, haben jedoch nicht dieselbe Adresse. Man kann eine ungewöhnliche IP-Adresse wie 127.0.0.2 verwenden, wenn man einen Dienst auf einem gemeinsamen Port einrichten und andere Dienste, die denselben Port auf 127.0.0.1 abhören, nicht stören möchte
Keith Reynolds
6
"Sind alle 127.x.x.x Adressen auf den lokalen Computer beschränkt?" Ja
„Sind alle 127.x.x.xAdressen an das gebunden ?lo Schnittstelle " Ja
„Werden 127.x.x.xAdressen über das Netzwerk weitergeleitet?“ Nein
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. - RFC5735
"Ist 127.0.0.2das gleiche wie 127.0.0.1?" NEIN
Während 127.0.0.1an 127.255.255.254alle lokalen Adressen Schnittstelle gebundenlo . Sie sind nicht gleich. Sie können jede Adresse verwenden, um einen anderen Dienst an denselben Port zu binden. ZB 16 Millionen Webserver auf Port 80, nur von der lokalen Maschine aus zugänglich (wenn Ihnen nicht zuerst der Speicher oder eine andere Ressource ausgeht)
Ich habe gerade einen Docker-Dienst zum Binden eingerichtet 127.0.0.2:80. Ich habe dann einen Alias hinzugefügt /etc/hosts. Jetzt kann ich über http://myserver, aber nicht über http://127.0.0.1oder eine Verbindung herstellen http://localhost. Es ist jedoch nur für diese Maschine verfügbar. Wie es ist, nur auf der loSchnittstelle.
Ich habe dann einen anderen Docker-Dienst zum Binden 127.0.0.3:80und einen Python-Dienst für localhost:80und einen anderen für eingerichtet 127.0.0.4:80.
Dies funktioniert möglicherweise nicht auf allen Betriebssystemen. Ich benutze Debian (9) Gnu / Linux, Linux-Kernel 4.9.0-3-amd64. Einige Betriebssysteme können alle Adressen 127.0.0.1→ 127.255.255.254gleich behandeln. Einige arbeiten möglicherweise nur mit127.0.0.1 .
Ich habe ungefähr eine Stunde lang recherchiert, aber ich konnte endlich verstehen, was Sie zu vermitteln versuchten. Ich habe das Zitat aus dem Wikipedia-Artikel in der akzeptierten Antwort aktualisiert. Da sich die zitierte Aussage im Laufe der Jahre geändert hat, habe ich eine andere Aussage zitiert, um die ursprüngliche Information, die die Antwort enthielt, wiederherzustellen.
Ramhound
1
Keine umfassende allgemeine Antwort (es gibt bereits eine). Meine Antwort zeigt ein Beispiel, mit dem 127.0.0.2das Problem gelöst wurde.
Extrakt:
Das dortige OP hat versucht, eine Software in einem Fall zu testen, in dem die Verbindung zu einem Server abgelehnt wurde. Dies wurde auf dem Server von einem temporären getaniptables Regel durchgeführt, die den gesamten Datenverkehr von der Client-IP ablehnt. Der Client konnte sofort "sehen", dass die Verbindung abgelehnt wurde.
Das Problem trat auf, als diese Person die Serversoftware auf denselben Computer wie der Client verschob und versuchte, die Loopback-Schnittstelle zu verwenden. Die Regel wurde festgelegt, um die Kommunikation von zu blockieren, 127.0.0.1aber die Informationen, von denen eine Verbindung abgelehnt wurde, wurden derselben Regel unterworfen und erreichten nie die Client-Software, die sich aufgehängt hatte (vermutlich bis zum Timeout).
Die Lösung bestand darin, 127.0.0.2als Serveradresse eine Regel festzulegen, die Verbindungen zu diesem Server ablehnt . Die Informationen über eine Ablehnung gingen an 127.0.0.1und konnten an die Client-Software weitergeleitet werden.
127.x.x.x
Adressen auf den lokalen Computer beschränkt?" Ja127.x.x.x
Adressen an das gebunden ?lo
Schnittstelle " Ja127.x.x.x
Adressen über das Netzwerk weitergeleitet?“ Nein127.0.0.2
das gleiche wie127.0.0.1
?" NEINWährend
127.0.0.1
an127.255.255.254
alle lokalen Adressen Schnittstelle gebundenlo
. Sie sind nicht gleich. Sie können jede Adresse verwenden, um einen anderen Dienst an denselben Port zu binden. ZB 16 Millionen Webserver auf Port 80, nur von der lokalen Maschine aus zugänglich (wenn Ihnen nicht zuerst der Speicher oder eine andere Ressource ausgeht)Ich habe gerade einen Docker-Dienst zum Binden eingerichtet
127.0.0.2:80
. Ich habe dann einen Alias hinzugefügt/etc/hosts
. Jetzt kann ich überhttp://myserver
, aber nicht überhttp://127.0.0.1
oder eine Verbindung herstellenhttp://localhost
. Es ist jedoch nur für diese Maschine verfügbar. Wie es ist, nur auf derlo
Schnittstelle.Ich habe dann einen anderen Docker-Dienst zum Binden
127.0.0.3:80
und einen Python-Dienst fürlocalhost:80
und einen anderen für eingerichtet127.0.0.4:80
.Dies funktioniert möglicherweise nicht auf allen Betriebssystemen. Ich benutze Debian (9) Gnu / Linux, Linux-Kernel 4.9.0-3-amd64. Einige Betriebssysteme können alle Adressen
127.0.0.1
→127.255.255.254
gleich behandeln. Einige arbeiten möglicherweise nur mit127.0.0.1
.siehe auch
quelle
Keine umfassende allgemeine Antwort (es gibt bereits eine). Meine Antwort zeigt ein Beispiel, mit dem
127.0.0.2
das Problem gelöst wurde.Extrakt:
Das dortige OP hat versucht, eine Software in einem Fall zu testen, in dem die Verbindung zu einem Server abgelehnt wurde. Dies wurde auf dem Server von einem temporären getan
iptables
Regel durchgeführt, die den gesamten Datenverkehr von der Client-IP ablehnt. Der Client konnte sofort "sehen", dass die Verbindung abgelehnt wurde.Das Problem trat auf, als diese Person die Serversoftware auf denselben Computer wie der Client verschob und versuchte, die Loopback-Schnittstelle zu verwenden. Die Regel wurde festgelegt, um die Kommunikation von zu blockieren,
127.0.0.1
aber die Informationen, von denen eine Verbindung abgelehnt wurde, wurden derselben Regel unterworfen und erreichten nie die Client-Software, die sich aufgehängt hatte (vermutlich bis zum Timeout).Die Lösung bestand darin,
127.0.0.2
als Serveradresse eine Regel festzulegen, die Verbindungen zu diesem Server ablehnt . Die Informationen über eine Ablehnung gingen an127.0.0.1
und konnten an die Client-Software weitergeleitet werden.quelle