Ich habe mich gefragt, woher die Entscheidung für die localhost
IP-Adresse stammt 127.0.0.1
. Was ist die "Bedeutung" von 127
? Was ist die "Bedeutung" von 0.0.1
?
networking
localhost
ip
loopback
Roee Adler
quelle
quelle
Antworten:
127 ist die letzte Netzwerknummer in einem Klasse-A-Netzwerk mit einer Subnetzmaske von
255.0.0.0
.127.0.0.1
ist die erste zuweisbare Adresse im Subnetz.127.0.0.0
kann 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ückkehren127.0.0.1
. Sie können es selbst versuchen, indem Sie pingen,127.1.1.1
wenn Sie möchten. Warum haben sie bis zur letzten Netzwerknummer gewartet, um dies umzusetzen? Ich glaube nicht, dass es dokumentiert ist.quelle
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 :
Bereits im September 1981 waren RFC 790 , 0 und 127 reserviert:
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.
quelle
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:
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%.
quelle
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.
quelle
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 :)
quelle
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.
quelle