Je me suis demandé quelle est l'origine de la décision de prendre localhost
l'adresse IP 127.0.0.1
. Quel est le "sens" de 127
? quel est le "sens" de 0.0.1
?
Je me suis demandé quelle est l'origine de la décision de prendre localhost
l'adresse IP 127.0.0.1
. Quel est le "sens" de 127
? quel est le "sens" de 0.0.1
?
Réponses:
127 est le dernier numéro de réseau d’un réseau de classe A avec un masque de sous-réseau de 255.0.0.0
. 127.0.0.1
est la première adresse assignable du sous-réseau. 127.0.0.0
ne peut pas être utilisé car ce serait le numéro de fil. Mais l'utilisation de tout autre numéro pour la partie hôte devrait fonctionner correctement et revenir à l'utilisation 127.0.0.1
. Vous pouvez essayer vous-même en faisant un ping 127.1.1.1
si vous le souhaitez. Pourquoi ont-ils attendu le dernier numéro de réseau pour implémenter cela? Je ne pense pas que c'est documenté.
La première mention que je puisse trouver concernant la mission de 127 en tant que bouclage est la RFC 990 de novembre 1986 rédigée par Reynolds et Postel:
L'adresse zéro doit être interprétée comme signifiant "ceci", comme dans "ce réseau".
Par exemple, l'adresse 0.0.0.37 pourrait être interprétée comme signifiant l'hôte 37 sur ce réseau.
...
La fonction de "bouclage" est attribuée au numéro de réseau de classe A 127, c'est-à-dire qu'un datagramme envoyé par un protocole de niveau supérieur à une adresse de réseau 127 doit revenir en boucle à l'intérieur de l'hôte. Aucun datagramme "envoyé" à une adresse de réseau ne devrait jamais apparaître sur aucun réseau, où que ce soit.
Dès septembre 1981, les RFC 790 , 0 et 127 étaient déjà réservés:
000.rrr.rrr.rrr Réservé [JBP] ... 127.rrr.rrr.rrr réservé [JBP]
0 et 127 étaient les seuls réseaux de classe A réservés en 1981. 0 était utilisé pour pointer vers un hôte spécifique, de sorte qu'il en restait 127 pour le bouclage.
Je sais que cela ne répond pas à la question, mais c'est aussi loin que j'ai pu creuser. Il aurait peut-être semblé plus judicieux de choisir 1.0.0.0 pour le bouclage, mais cela avait déjà été donné à BBN Packet Radio Network.
Les concepteurs d’Internet savaient vraiment comment le matériel fonctionnait et ils ont conçu pour une implémentation de bas niveau.
Les valeurs 0, 127 et 255 sont spéciales dans la programmation en assemblage 8 bits et en langage machine car il existe des "astuces" que vous pouvez utiliser pour tester ces valeurs et passer à un code différent à l'aide d'instructions plus petites s'exécutant plus rapidement que pour les autres entiers. 127 est le plus grand nombre entier signé de 8 bits, aussi, l'incrémenter de 1 entraînera un dépassement de signature. De même, l'incrémentation de 255 entraînera un débordement non signé. Le simple chargement de la valeur 0 dans un registre définit généralement un indicateur zéro sur la puce. Imaginez que le programme réseau ressemble à ceci en pseudocode:
if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();
Bien que cela dépende de la puce, la plupart des puces pouvaient alors coder ces tests avec 2 mots, 3 mots et 3 mots respectivement (8 mots au total). De plus, ces tests particuliers étaient tous susceptibles de s'exécuter en 1 cycle d'horloge chacun. L'utilisation de toute autre valeur nécessiterait probablement 4 mots chacun (12 mots au total), une augmentation de 50% de la taille du code et probablement une augmentation de 50% du temps d'exécution.
Si vous réfléchissez à ce que signifie une adresse IP d'hôte local ou de bouclage, vous réalisez que vous ne voulez jamais voir cette adresse, ni le réseau auquel cette adresse appartient, en dehors d'un hôte. (À l'intérieur d'un hôte, il fait trop sombre pour le voir. Toutes mes excuses à Mark Twain.)
Donc, quelqu'un devait choisir un réseau IP pour représenter cette adresse localhost. Je ne me souviens pas du premier qui l'a choisi, mais cela est spécifié dans la demande de commentaires de l'IETF qui est périodiquement publiée en tant que "Configuration requise pour l'hôte".
Cela avait été fait il y a si longtemps que l'idée de "gâcher" une adresse entière de la classe A n'était entrée dans l'esprit de personne à l'époque.
L'utilité de localhost est que vous pouvez vous parler en utilisant une adresse IP codée en dur. Il était utilisé bien avant la mise en place du système de noms de domaine. Vous pouvez en fait utiliser n'importe laquelle des adresses valides 127.xxx, mais personne ne le fait jamais. Vous ne pouvez pas utiliser furtivement 127 comme un véritable réseau, car le RFC "Exigences de routeur" interdit tout routage de ce réseau sur Internet.
Tout d’abord, l’ensemble de la plage 127.xxx pointe vers votre hôte local.
127 en binaire est "01111111". "11111111" = 255 et 0 sont réservés, le choix est donc évident :)
Parce que lors de la création de ces normes, les ordinateurs étaient lents et généralement limités à des registres à 8 bits. La comparaison des chiffres avec les nombres était très lente, surtout si ces nombres devaient être récupérés à partir de la mémoire arrière, VRAIMENT lente. Les registres, c’est-à-dire le stockage "CPU sur carte", étaient beaucoup plus rapides.
De plus, ces anciens ordinateurs avaient des instructions spéciales plus rapides pour détecter "égal à zéro", "différent de zéro", "entier négatif / positif" (où le signe était ... devinez quoi, le bit le plus à gauche, voyons maintenant une connexion avec 127 , c’est le nombre avec tous les "1" binaires sauf le signe = le plus à gauche?).
Par conséquent, il s’agissait de numéros spéciaux, car ils permettaient à la logique de programmation d’économiser de nombreux cycles de processeur pour les opérations fréquemment effectuées.
Vous ne verrez jamais un "IF CallerIP =" 0 "mais une instruction" IF NotZero (CallerIP) ".
Vous pouvez consulter des instructions de montage anciennes telles que "BEQ, BNE" (6502 CPU) pour de plus amples explications. Consultez également cette page .
À la fin:
Les valeurs 0, 255 et 127 peuvent toutes être vérifiées avec une seule instruction, la plus rapide. Encore plus de langages de haut niveau tels que C ont des fonctions de comparaison "shortuct" que le compilateur peut optimiser en interne en une seule instruction.
Les programmeurs des années 70 et 80 ont vraiment produit de magnifiques architectures avec des ressources extrêmement rares. Derrière des normes telles que la numérotation IP, il y a beaucoup de réflexion et de génie.