Warum ist localhost IP 127.0.0.1?

85

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

Roee Adler
quelle
2
Ich bin auch neugierig. Der IPv6-Loopback ist 0: 0: 0: 0: 0: 0: 0: 1, was für mich sinnvoll ist.
Hyperslug
1
Ja, der localhost von IPv6 wirft nicht zu viele Fragen auf :)
Roee Adler
21
Ich habe noch keine "Es gibt keinen Ort wie 0: 0: 0: 0: 0: 0: 0: 1" Türmatte gesehen!
William Hilsum
9
@Wil Komprimiere es auf "Es gibt keinen Ort wie :: 1" und du bekommst ein bisschen mehr Geschäft.
new123456
6
@WilliamHilsum erweitern Sie es auf "Es gibt keinen Ort wie 0000: 0000: 0000: 0000: 0000: 0000: 0001" und laden Sie mehr auf.
Nick T

Antworten:

87

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 wäre. Die Verwendung anderer Zahlen für den Host-Teil sollte jedoch problemlos funktionieren und zur Verwendung zurückkehren 127.0.0.1. Sie können es selbst versuchen, indem Sie pingen, 127.1.1.1wenn Sie möchten. Warum haben sie bis zur letzten Netzwerknummer gewartet, um dies umzusetzen? Ich glaube nicht, dass es dokumentiert ist.

John T
quelle
14
Der einzige Grund, warum sie sich willkürlich für 127 entschieden haben, ist, dass es eine leicht zu merkende Nummer ist (01111111), und vielleicht haben sie 16 Millionen Hostadressen zugelassen, damit sie nur mit sich selbst kommunizieren können (wie es einige Programme und Windows-Komponenten tun) Häfen heutzutage). Die RFCs haben nur wirklich erwähnt, dass es üblich ist, 127.0.0.1/32 als Loopback zu verwenden. Es ist ziemlich nebulös, was sie für den Rest des Blocks vorsahen, abgesehen davon, dass sie zum Host zurückkehrten und das Netzwerk nie erreichten, daher meine obige Spekulation.
RoyalKnight
2
Wenn alle Blockadressen auf 127.0.0.1 zurückgesetzt werden, hängt dies von der Implementierung ab und ist möglicherweise nur eine Besonderheit des Linux-Stacks. Für Solaris muss mindestens eine Schnittstelle an die Zieladresse gebunden sein, damit der Ping-Test erfolgreich ist.
Juli
56

Die früheste Erwähnung, die ich in Bezug auf die Zuweisung von 127 als Loopback finden kann, ist der von Reynolds und Postel verfasste RFC 990 vom November 1986 :

Die Adresse Null ist wie in "diesem Netzwerk" als "dies" zu interpretieren.

Beispielsweise 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, dh ein Datagramm, das von einem Protokoll höherer Ebene an eine Netzwerkadresse 127 gesendet wird, sollte innerhalb des Hosts zurückgeschleift werden. Kein Datagramm, das an eine Netzwerkadresse 127 "gesendet" wurde, sollte jemals in einem Netzwerk irgendwo auftauchen.

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 1981 die einzigen reservierten Klasse-A-Netzwerke. 0 wurde verwendet, um auf einen bestimmten Host zu verweisen, sodass 127 für Loopback übrig blieb.

Ich weiß, das beantwortet die Frage nicht, aber das ist so weit zurück, wie ich graben konnte. Es hätte vielleicht mehr Sinn gemacht, 1.0.0.0 für Loopback zu wählen, aber das wurde bereits an BBN Packet Radio Network weitergegeben.

Hyperslug
quelle
23

Die Designer des Internets wussten wirklich, wie die Hardware funktioniert, und sie entwickelten unter Berücksichtigung der Implementierung auf niedriger Ebene.

Die Werte 0, 127 und 255 sind speziell für die 8-Bit-Assembler- und Maschinensprachenprogrammierung geeignet, da Sie "Tricks" verwenden können, um diese Werte zu testen und mit kleineren Befehlen, die schneller als für andere Ganzzahlen ausgeführt werden, in anderen Code zu verzweigen. 127 ist die höchste 8-Bit-Ganzzahl mit Vorzeichen. Wenn Sie sie also um 1 erhöhen, kommt es zu einem Überlauf mit Vorzeichen. In ähnlicher Weise führt das Inkrementieren von 255 zu einem vorzeichenlosen Überlauf. Das bloße Laden des Wertes 0 in ein Register setzt normalerweise ein Null-Flag auf dem Chip. Stellen Sie sich vor, das Netzwerkprogramm sieht im Pseudocode folgendermaßen aus:

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

Obwohl es vom Chip abhängt, konnten die meisten Chips diese Tests in jenen Tagen mit 2 Wörtern, 3 Wörtern bzw. 3 Wörtern (insgesamt 8 Wörtern) codieren, und außerdem wurden diese speziellen Tests wahrscheinlich alle in jeweils einem Taktzyklus ausgeführt. Die Verwendung eines anderen Werts würde wahrscheinlich jeweils 4 Wörter (insgesamt 12 Wörter) erfordern, eine Erhöhung der Codegröße um 50% und wahrscheinlich auch eine Erhöhung der Ausführungszeit um 50%.

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

Wenn Sie sich überlegen, was eine Localhost- oder Loopback-IP-Adresse bedeutet, stellen Sie fest, dass Sie diese Adresse oder das Netzwerk, zu dem diese Adresse gehört, niemals außerhalb eines Hosts anzeigen möchten. (In einem Host ist es zu dunkel, um es zu sehen. Entschuldigung an Mark Twain.)

Also musste jemand ein IP-Netzwerk auswählen, um diese Localhost-Adresse darzustellen. Ich erinnere mich nicht, wer es zuerst gewählt hat, aber es ist in der IETF-Anforderung für Kommentare angegeben, die regelmäßig als "Host-Anforderungen" ausgegeben wird.

Es ist so lange her, dass die Idee, eine ganze Klasse-A-Adresse zu "verschwenden", damals noch niemandem in den Sinn kam.

Der Nutzen von localhost besteht darin, dass Sie mit einer fest codierten IP-Adresse mit sich selbst sprechen können. Es wurde lange vor dem Domain Name System verwendet. Sie könnten tatsächlich eine der gültigen Adressen 127.xxx verwenden, aber niemand tut dies jemals. 127 kann nicht als echtes Netzwerk verwendet werden, da der RFC "Router-Anforderungen" nicht zulässt, dass dieses Netzwerk jemals in einem Internet geroutet wird.

kwe
quelle
4

Erstens zeigt der gesamte Bereich 127.xxx auf Ihren lokalen Host.
127 in der Binärdatei ist "01111111". "11111111" = 255 und 0 sind reserviert, daher liegt die Wahl auf der Hand :)

kolypto
quelle
25
Wie kommt es, dass es wieder offensichtlich ist?
Roee Adler
Ich glaube, sie haben einfach etwas gewählt. Auch hier sind alle "1" reserviert, daher wurde eine Null hinzugefügt :)
kolypto
Warum also nicht 10111111? :) oder 11011111 oder 11101111 oder 11110111 oder 11111011 oder 11111101 oder so ähnlich?
Mushex Antaranian
1
Nee. Versuch es noch einmal.
Ardee Aram
4

Denn als diese Standards erstellt wurden, waren Computer langsam und normalerweise auf 8-Bit-Register beschränkt. Zahlen mit Zahlen zu vergleichen war sehr langsam, besonders wenn diese Zahlen von hinten geholt werden mussten, dann WIRKLICH langsamer Speicher. Register, also "CPU on Board" -Speicher, waren viel schneller.

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

Daher waren dies spezielle Zahlen, weil sie es ermöglichten, mit Programmiertricks viele CPU-Zyklen bei häufig ausgeführten Operationen einzusparen.

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

Weitere Erklärungen finden Sie in alten Montageanleitungen wie "BEQ, BNE" (6502 CPUs). Auch überprüfen Sie diese Seite .

Schlussendlich:

0, 255 und 127 konnten alle mit einer einzigen, schnellsten Anweisung überprüft werden. Selbst höherwertige Sprachen wie C verfügen über "Shortuct" -Vergleichsfunktionen, die der Compiler intern zu einer einzigen Anweisung optimieren kann.

In den 70er und 80er Jahren haben Programmierer wirklich großartige Architekturen mit äußerst knappen Ressourcen erstellt. Hinter Standards wie der IP-Nummerierung steckt viel Nachdenken und Genialität.

Dario Fumagalli
quelle
Gute Antwort. Dies ist wirklich die klarste und sinnvollste Erklärung.
not2qubit
Tatsächlich war die Arbeit mit Daten in ganzzahligen Vielfachen von 8 Bit nicht selbstverständlich, als IP entworfen und einige der frühen Grundlagen dafür gelegt wurden. Viele Architekturen hatten zu dieser Zeit beispielsweise Register und Wortgrößen in Vielfachen von 12 oder 18 Bit. Dies ist einer der Gründe, warum Octal zu dieser Zeit so beliebt war. 18 Bits können als genau 6 Oktalstellen ohne Verlust und ohne Verschwendung dargestellt werden. 12 Bits sind 4 Oktalzeichen. Mikrocomputer arbeiteten normalerweise in 8-Bit-Mengen, aber erst viel später wurden Mikrocomputer regelmäßig (insbesondere direkt) mit dem Internet verbunden.
ein