J'ai demandé quelle était l'origine de la décision de faire de l'adresse IP de localhost
127.0.0.1
. Quel est le "sens" de 127
? quel est le "sens" de 0.0.1
?
Réponses
Trop de publicités?127 est le dernier numéro de réseau dans 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 dans le sous-réseau. 127.0.0.0
ne peut pas être utilisé car ce serait le numéro de fil. Mais en utilisant d'autres numéros pour la partie hôte devrait fonctionner correctement et revenir à l'utilisation de 127.0.0.1
. Vous pouvez essayer vous-même en pingant 127.1.1.1
si vous le souhaitez. Pourquoi ont-ils attendu jusqu'au dernier numéro de réseau pour implémenter cela ? Je ne pense pas que ce soit documenté.
La première mention que je trouve concernant l'attribution de 127 en tant que bouclage RFC 990 rédigé par Reynolds et Postel :
L'adresse zéro doit être interprétée comme signifiant "ceci", comme dans "ce réseau là".
Par exemple, l'adresse 0.0.0.37 pourrait être interprétée comme signifiant l'hôte 37 de ce réseau.
...
Le numéro de réseau de classe A 127 est assigné la fonction "bouclage", c'est-à-dire, un datagramme envoyé par un protocole de niveau supérieur à une adresse réseau 127 doit boucler à l'intérieur de l'hôte. Aucun datagramme "envoyé" à une adresse réseau 127 ne devrait apparaître sur aucun réseau nulle part.
Déjà en septembre 1981 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\]
En 1981, 0 et 127 étaient les seuls réseaux de classe A réservés. 0 était utilisé pour pointer vers un hôte spécifique, laissant ainsi 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 été plus logique de choisir 1.0.0.0 pour le bouclage mais cela avait déjà été attribué au BBN Packet Radio Network.
Les concepteurs d'Internet connaissaient vraiment le fonctionnement du matériel, et ils ont conçu en gardant à l'esprit une implémentation de bas niveau.
Les valeurs 0, 127 et 255 sont spéciales en langage d'assemblage sur 8 bits et en programmation en langage machine car il existe des "astuces" que vous pouvez utiliser pour tester ces valeurs et basculer vers un code différent en utilisant des instructions plus petites qui s'exécutent plus rapidement que pour d'autres entiers. 127 est le plus grand entier signé sur 8 bits, donc l'incrémenter de 1 provoquera un dépassement signé. De même, l'incrémenter à 255 provoquera un dépassement non signé. Charger simplement la valeur 0 dans un registre mettra généralement un drapeau zéro sur la puce. Imaginez que le programme de mise en réseau ressemble à ceci en pseudocode :
if (valeur == 0) faireLocal();
if (valeur == 127) faireBouclage();
if (valeur == 255) faireRéseau();
Bien que cela dépende de la puce, à cette époque, la plupart des puces pouvaient coder ces tests avec 2 mots, 3 mots et 3 mots respectivement (total de 8 mots) et en outre, ces tests particuliers avaient tous probablement pour effet de s'exécuter en 1 cycle d'horloge chacun. Utiliser toute autre valeur nécessiterait probablement 4 mots chacun (total de 12 mots), une augmentation de 50% de la taille du code et probablement une augmentation de 50% du temps d'exécution également.
Parce que lorsque ces normes ont été créées, les ordinateurs étaient lents et généralement limités à des registres de 8 bits. Comparer des nombres à des nombres était très lent, surtout si ces nombres devaient être récupérés de la mémoire, qui était alors VRAIMENT lente. Les registres, c'est-à-dire le stockage "sur CPU", étaient beaucoup plus rapides.
De plus, ces anciens ordinateurs disposaient d'instructions spéciales et 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, maintenant voyez une connexion avec 127, qui est le nombre avec tous les bits binaires "1" sauf le plus à gauche = signe?).
Par conséquent, ces nombres étaient spéciaux, car ils permettaient des astuces de programmation pour économiser beaucoup de cycles CPU sur des opérations fréquemment effectuées.
Vous ne verriez jamais un "IF CallerIP = "0" mais une instruction "IF NotZero(CallerIP)".
Vous pouvez consulter d'anciennes instructions en langage d'assemblage comme "BEQ, BNE" (processeurs 6502) pour des explications plus longues. Consultez également cette page.
En fin de compte :
0, 255 et 127 pouvaient tous être vérifiés avec une seule instruction, la plus rapide. Même des langages de programmation plus élevés comme le langage C ont des fonctions de comparaison "raccourci" que le compilateur peut optimiser en une seule instruction en interne.
Les programmeurs des années 70 et 80 ont vraiment produit des architectures magnifiques avec des ressources super rares, derrière des normes comme le numéro IP il y a beaucoup de réflexion et de génie.
Si vous réfléchissez à ce que signifie une adresse IP localhost ou de bouclage, vous réalisez que vous ne souhaitez jamais voir cette adresse, ou le réseau auquel elle appartient, en dehors d'un hôte. (À l'intérieur d'un hôte, il fait trop sombre pour la voir. Désolé pour Mark Twain.)
Ainsi, quelqu'un a dû choisir un réseau IP pour représenter cette adresse localhost. Je ne me souviens pas de qui l'a choisie en premier, mais elle est spécifiée dans la demande de commentaires de l'IETF qui est périodiquement émise en tant que "Exigences de l'hôte".
Cela a été fait il y a si longtemps que l'idée de "gaspiller" une adresse de classe A entière n'est même pas entrée dans l'esprit de qui que ce soit à l'époque.
L'utilité de localhost est que vous pouvez vous parler en utilisant une adresse IP codée en dur. Cela était utilisé bien avant l'existence du Système de Noms de Domaine. Vous pourriez en fait utiliser n'importe laquelle des adresses valides en 127.x.x.x, mais personne ne le fait jamais. Vous ne pouvez pas tricher et utiliser 127 comme un vrai réseau car la demande de commentaires "Exigences du routeur" interdit de router ce réseau sur n'importe quel internet.
- Réponses précédentes
- Plus de réponses