Warum ist localhost IP 127.0.0.1?

46548
Roee Adler

Ich habe mich gefragt, woher die Entscheidung stammt, die localhostIP-Adresse festzulegen 127.0.0.1. Was ist die "Bedeutung" von 127? Was ist die "Bedeutung" von 0.0.1?

78
Ich bin auch neugierig darauf. Das IPv6-Loopback ist 0: 0: 0: 0: 0: 0: 0: 1, was für mich sinnvoll ist. hyperslug vor 14 Jahren 2
Ja, der localhost von IPv6 wirft nicht zu viele Fragen auf :) Roee Adler vor 14 Jahren 1
Ich habe noch keine "Es gibt keinen Ort wie die 0: 0: 0: 0: 0: 0: 0: 0: 1" Türmatte! William Hilsum vor 14 Jahren 21
@ Will: Ich werde dein erster Kunde sein :) Roee Adler vor 14 Jahren 0
@Wil Komprimiere es auf "Es gibt keinen Ort wie :: 1" und du bekommst ein bisschen mehr Geschäft. new123456 vor 12 Jahren 9
@WilliamHilsum erweitern Sie es zu "Es gibt keinen Ort wie 0000: 0000: 0000: 0000: 0000: 0000: 0000: 001: 00" und laden Sie mehr auf. Nick T vor 10 Jahren 6
Im Interesse des Interesses habe ich Anfang 2000 versucht, localhost in einem virtuellen Netzwerk neu zu definieren. Linux war ziemlich glücklich, 127.0.0.1/24 zugewiesen zu haben, genauso wie BSD. Aber probiere dasselbe auf einer Windows-Box und schmollte, sobald ich "127" in die Netzwerk-Konfigurationsbox eingab. War entweder Win98 oder WinXP. Criggie vor 6 Jahren 0

6 Antworten auf die Frage

85
John T

127 ist die letzte Netzwerknummer in einem Klasse-A-Netzwerk mit einer Subnetzmaske von 255.0.0.0. 127.0.0.1ist die erste zuweisbare Adresse im Subnetz. 127.0.0.0kann nicht verwendet werden, da dies die Drahtnummer ist. Die Verwendung anderer Zahlen für den Host-Teil sollte jedoch funktionieren und zur Verwendung zurückkehren 127.0.0.1. Sie können es selbst ausprobieren, indem Sie einen Ping-Befehl machen, 127.1.1.1wenn Sie möchten. Warum haben sie bis zur letzten Netzwerknummer gewartet, um dies zu implementieren? Ich glaube nicht, dass es dokumentiert ist.

Der einzige Grund, aus dem ich will, dass sie sich für 127 entschieden haben, ist, dass diese Nummer leicht zu merken ist (01111111), und vielleicht erlaubten sie 16 Millionen Host-Adressen, nur mit sich und sich selbst kommunizieren zu können (wie einige Programme und Windows-Komponenten verwenden Häfen heutzutage). Die RFCs haben nur wirklich erwähnt, dass es üblich ist, 127.0.0.1/32 für Loopback zu verwenden. Es ist ziemlich nebulös, was sie für den Rest des Blocks beabsichtigten, abgesehen davon, dass sie zum Host zurückgelaufen sind und niemals das Netzwerk treffen, daher meine oben genannten Spekulationen. RoyalKnight vor 14 Jahren 14
Wenn alle Blockadressen auf 127.0.0.1 zurückgesetzt werden, ist die Implementierung von Bedeutung und kann nur eine Linux-Stack-Besonderheit sein. Für Solaris muss mindestens eine Schnittstelle an die Zieladresse gebunden sein, damit der Ping-Test erfolgreich ist. jlliagre vor 13 Jahren 2
55
hyperslug

Die früheste Erwähnung, die ich bezüglich 127s Zuordnung als Loopback finden kann, ist November 1986 RFC 990, verfasst von Reynolds und Postel:

Die Adresse Null ist als "dieses" zu verstehen, wie in "dieses Netzwerk".

Zum Beispiel könnte die Adresse 0.0.0.37 als Host 37 in diesem Netzwerk interpretiert werden.

...

Der Klasse A-Netzwerknummer 127 wird die "Loopback" -Funktion zugewiesen, das heißt, ein Datagramm, das von einem Protokoll einer höheren Ebene an eine Netzwerkadresse gesendet wird, sollte innerhalb des Hosts zurücklaufen. Kein Datagramm, das an eine Netzwerkadresse "127" gesendet wurde, sollte jemals in einem Netzwerk irgendwo erscheinen.

Bereits im September 1981 waren RFC 790, 0 und 127 reserviert:

000.rrr.rrr.rrr Reserviert [JBP] ... 127.rrr.rrr.rrr Reserviert [JBP] 

0 und 127 waren die einzigen reservierten Class-A-Netzwerke bis 1981. 0 wurde für das Verweisen auf einen bestimmten Host verwendet, sodass 127 für Loopback übrig blieb.

Ich weiß, das beantwortet die Frage nicht, aber das ist so weit zurück, wie ich es könnte. Es wäre vielleicht sinnvoller gewesen, 1.0.0.0 für Loopback zu wählen, dies wurde jedoch bereits an BBN Packet Radio Network übermittelt.

22
Joseph Bui

Die Designer des Internets wussten wirklich, wie die Hardware funktionierte, und sie wurden für eine einfache Implementierung konzipiert.

Die Werte 0, 127 und 255 sind speziell für die 8-Bit-Assemblierungs- und Maschinensprachen-Programmierung, da Sie mit Hilfe von "Tricks" auf diese Werte testen und mit kleineren Anweisungen, die schneller ausgeführt werden als andere Ganzzahlen, in anderen Code verzweigen können. 127 ist die höchste vorzeichenbehaftete 8-Bit-Ganzzahl. Wenn Sie die Zahl um 1 erhöhen, wird dies zu einem vorzeichenbehafteten Überlauf. In ähnlicher Weise führt das Inkrementieren von 255 zu einem vorzeichenlosen Überlauf. Wenn Sie lediglich den Wert 0 in ein Register laden, wird auf dem Chip normalerweise ein Null-Flag gesetzt. Stellen Sie sich das Netzwerkprogramm im Pseudocode folgendermaßen vor:

if (value == 0) doLocal(); if (value == 127) doLoopback(); if (value == 255) doNetwork(); 

Obwohl dies vom Chip abhängt, konnten die meisten Chips zu dieser Zeit diese Tests mit 2 Wörtern, 3 Wörtern bzw. 3 Wörtern (insgesamt 8 Wörter) codieren, und alle diese Tests würden wahrscheinlich alle in einem Taktzyklus ausgeführt. Die Verwendung eines anderen Wertes würde wahrscheinlich jeweils 4 Wörter (insgesamt 12 Wörter) erfordern, eine 50% ige Zunahme der Codegröße und wahrscheinlich eine um 50% höhere Ausführungszeit.

Beachten Sie, dass ich "Wörter" verwendet habe, weil alte Maschinen damals ungewöhnliche Wortgrößen hatten, sie verwendeten jedoch häufig noch 8-Bit-Arithmetik. Für eine 8088 hätte ich "Bytes" gesagt. Joseph Bui vor 13 Jahren 1
5
kwe

Wenn Sie darüber nachdenken, was eine localhost- oder loopback-IP-Adresse bedeutet, stellen Sie fest, dass Sie diese Adresse oder das Netzwerk, zu dem diese Adresse gehört, außerhalb eines Hosts nie sehen möchten. (In einem Host ist es zu dunkel, um es zu sehen. Entschuldigung an Mark Twain.)

Daher musste jemand ein IP-Netzwerk auswählen, um diese localhost-Adresse darzustellen. Ich kann mich nicht erinnern, wer sich zuerst dafür entschieden hat, aber es wird in der IETF Request for Comments angegeben, die regelmäßig als "Host-Anforderungen" ausgegeben wird.

Es wurde vor so langer Zeit gemacht, dass die Idee, eine komplette Klasse-A-Adresse zu "verschwenden", damals zu keinem Zeitpunkt in den Sinn kam.

Das Dienstprogramm von localhost besteht darin, dass Sie mit einer hartcodierten IP-Adresse mit sich selbst sprechen können. Es wurde lange vor dem Domain Name System verwendet. Sie können tatsächlich eine der gültigen 127.xxx-Adressen verwenden, aber niemand tut dies. Sie können 127 nicht als echtes Netzwerk verwenden, da der RFC "Router Requirements" (Routinganforderungen) das Routing dieses Netzwerks in keinem Internet zulässt.

4
kolypto

Zunächst zeigt der gesamte 127.xxx-Bereich auf Ihren localhost.
127 im Binärformat ist "01111111". "11111111" = 255 und 0 sind reserviert, die Wahl liegt also auf der Hand :)

Wieso ist es wieder offensichtlich? Roee Adler vor 14 Jahren 25
Ich glaube, sie haben sich einfach etwas einfaches ausgesucht. Wieder sind alle "1" reserviert, also wurde eine Null hinzugefügt :) kolypto vor 14 Jahren 0
warum also nicht 10111111? :) oder 11011111 oder 11101111 oder 11110111 oder 11111011 oder 11111101 oder so ähnlich? Mushex Antaranian vor 14 Jahren 0
Nee. Versuchen Sie es nochmal. Ardee Aram vor 10 Jahren 1
3
Dario Fumagalli

Als diese Standards erstellt wurden, waren Computer langsam und normalerweise auf 8-Bit-Register beschränkt. Der Vergleich von Zahlen mit Zahlen war sehr langsam, vor allem, wenn diese Zahlen von der Rückseite abgerufen werden mussten, und zwar WIRKLICH langsamer Speicher. Register, das heißt "CPU on Board" -Speicher waren wesentlich schneller.

Außerdem hatten diese alten Computer spezielle, schnellere Anweisungen, um "gleich Null", "anders als Null", "negative / positive Ganzzahl" zu erkennen (wo das Zeichen war ... raten Sie mal, das ganz linke Bit sieht jetzt eine Verbindung mit 127), das ist die Zahl mit allen binären "1", mit Ausnahme des linken Zeichens?).

Dies waren daher spezielle Zahlen, da es das Programmieren von Tricks war, um bei häufig durchgeführten Operationen eine Menge CPU-Zyklen einzusparen.

Sie würden niemals eine "IF CallerIP =" 0 "- Anweisung sehen, sondern eine" IF NotZero (CallerIP) "- Anweisung.

Sie können alte Installationsanweisungen wie "BEQ, BNE" (6502-CPUs) auf längere Erklärungen überprüfen. Auch überprüfen Sie diese Seite .

Schlussendlich:

Auf 0, 255 und 127 konnte mit einer schnellsten Anweisung geprüft werden. Noch mehr Hochsprachen wie C verfügen über Vergleichsfunktionen, die der Compiler intern zu einer einzigen Anweisung optimieren kann.

Die Programmierer der 70er und 80er Jahre haben wirklich großartige Architekturen mit äußerst knappen Ressourcen produziert. Hinter Standards wie der IP-Nummerierung gibt es viel Nachdenken und Genialität.

Gute Antwort. Dies ist wirklich die klarste und vernünftigste Erklärung. not2qubit vor 6 Jahren 0
Tatsächlich war das Arbeiten mit Daten in ganzzahligen Vielfachen von 8 Bit nicht selbstverständlich, als IP entwickelt wurde und ein Teil der frühen Grundlagen dafür gelegt wurde. Viele Architekturen hatten zu dieser Zeit beispielsweise Register und Wortgrößen in Vielfachen von 12 oder 18 Bit. Dies ist ein Grund, warum Octal damals so beliebt war. 18 Bits können als genau 6 Oktalstellen ohne Verlust und ohne Verschwendung dargestellt werden. 12 Bits sind 4 Oktalstellen. Mikrocomputer arbeiteten in der Regel in 8-Bit-Mengen, aber erst * viel * später wurden Mikrocomputer regelmäßig (vor allem direkt) mit dem Internet verbunden. a CVn vor 6 Jahren 0