Question Pourquoi localhost IP 127.0.0.1?


Je me demandais quelle était l'origine de la décision de faire localhostl'adresse IP de 127.0.0.1. Quel est le sens de 127? quel est le sens de 0.0.1?


77
2017-08-29 05:39


origine


Je suis curieux à ce sujet aussi. Le bouclage IPv6 est 0: 0: 0: 0: 0: 0: 0: 1, ce qui est logique pour moi. - hyperslug
Oui, localhost d'IPv6 ne soulève pas trop de questions :) - Roee Adler
Je n'ai pas vu de "Il n'y a pas de place comme 0: 0: 0: 0: 0: 0: 0: 1" tapis de porte encore! - William Hilsum
@Wil Compressez-le sur "il n'y a pas de lieu comme :: 1" et vous aurez un peu plus de travail. - new123456
@WilliamHilsum élargissez-le à "Il n'y a aucun endroit comme 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" et facturez plus. - Nick T


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 utiliser d'autres numéros pour la partie hôte devrait fonctionner correctement et revenir à l'utilisation 127.0.0.1. Vous pouvez l'essayer vous-même en pingant 127.1.1.1 si tu veux. Pourquoi ont-ils attendu le dernier numéro de réseau pour l'implémenter? Je ne pense pas que ce soit documenté.


85
2017-08-29 05:50



La seule raison pour laquelle je les verrais choisir arbitrairement 127, c’est que c’est un numéro facile à retenir (01111111), et peut-être 16 millions d’adresses d’hôte pour pouvoir communiquer avec lui-même et ports de nos jours). Les RFC ne mentionnaient que la pratique standard de 127.0.0.1/32 pour le bouclage. C'est assez nébuleux quant à ce qu’ils ont prévu pour le reste du bloc, à part le fait qu’il retourne à l’hôte et qu’il ne frappe jamais le réseau, d’où la spéculation ci-dessus. - RoyalKnight
Le fait que toutes les adresses de bloc reviennent à 127.0.0.1 dépend de l'implémentation et pourrait être simplement une particularité de la pile Linux. Solaris requiert au moins une interface liée à l'adresse de destination pour que votre test ping réussisse. - jlliagre


La première mention que je peux trouver en ce qui concerne l’affectation de 127 comme bouclage est novembre 1986 RFC 990 écrit par Reynolds et Postel:

L'adresse zéro doit être interprétée   comme signifiant "ceci", comme dans "ceci   réseau".

Par exemple, l'adresse 0.0.0.37   pourrait être interprété comme signifiant hôte   37 sur ce réseau.

...

Le numéro de réseau de classe A 127 est   assigné la fonction "loopback", qui   est, un datagramme envoyé par un niveau supérieur   protocole à une adresse réseau 127   devrait boucler à l'intérieur de l'hôte. Non   datagramme "envoyé" à un réseau 127   l'adresse devrait apparaître sur n'importe quel   réseau n'importe où.

Même dès 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]

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 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 été plus judicieux de choisir 1.0.0.0 pour le bouclage, mais cela a déjà été donné à BBN Packet Radio Network.


53
2017-08-29 07:21





Les concepteurs d’Internet savaient vraiment comment fonctionnait le matériel, et ils ont conçu en fonction d’une implémentation de bas niveau.

Les valeurs 0, 127 et 255 sont spéciales dans l'assemblage 8 bits et la programmation en langage machine car il existe des "astuces" permettant de tester ces valeurs et de passer à 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é de 8 bits, donc l'incrémenter de 1 provoquera un débordement signé. De même, l'incrémentation 255 provoquera un débordement non signé. Le simple fait de charger la valeur 0 dans un registre mettra généralement un drapeau 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 encoder ces tests avec 2 mots, 3 mots et 3 mots respectivement (8 mots au total) et ces tests particuliers étaient tous susceptibles de s’exécuter en 1 cycle chacun. Utiliser n'importe quelle 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.


22
2018-04-15 15:36



Notez que j'ai utilisé des "mots" car les anciennes machines avaient à l'époque des tailles de mots inhabituelles, mais elles utilisaient encore souvent l'arithmétique 8 bits. Pour un 8088, j'aurais dit "octets". - Joseph Bui


Si vous pensez à ce que signifie une adresse IP localhost ou loopback, vous réalisez que vous ne voulez jamais voir cette adresse, ou le réseau auquel cette adresse appartient, en dehors d'un hôte. (Dans un hôte, il fait trop sombre pour le voir. Toutes mes excuses à Mark Twain.)

Ainsi, quelqu'un devait choisir un réseau IP pour représenter cette adresse localhost. Je ne me souviens pas qui l’a choisi en premier, mais il 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».

Il y a si longtemps que l'idée de «gaspiller» toute une adresse de classe A n'entrait dans l'esprit de personne à ce moment-là.

L'utilitaire de localhost est que vous pouvez vous parler en utilisant une adresse IP codée en dur. Il a été utilisé longtemps avant le système de noms de domaine. Vous pouvez effectivement utiliser l'une des adresses valides 127.x.x.x, mais personne ne le fait jamais. Vous ne pouvez pas utiliser furtivement 127 comme un vrai réseau car la RFC "Router Requirements" ne permet jamais de router ce réseau sur Internet.


5
2017-08-29 06:02





Tout d'abord, toute la plage 127.x.x.x pointe vers votre hôte local.
127 en binaire est "01111111". "11111111" = 255 et 0 sont réservés, le choix est donc évident :)


4
2017-08-29 21:21



Comment se fait-il que cela soit encore évident? - Roee Adler
Je crois qu'ils ont juste choisi quelque chose de simple. Encore une fois, tous les "1" sont réservés, donc un zéro a été ajouté :) - kolypto
alors pourquoi pas 10111111? :) ou 11011111 ou 11101111 ou 11110111 ou 11111011 ou 11111101 ou quelque chose comme ça? - Mushex Antaranian
Nan. Réessayer. - Ardee Aram


Parce que lorsque ces normes ont été créées, les ordinateurs étaient lents et généralement limités à des registres à 8 bits. La comparaison des nombres aux nombres était très lente, surtout si ces nombres devaient être récupérés à l'arrière, alors la mémoire était vraiment lente. Les registres, c’est-à-dire le stockage "CPU on board", é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, maintenant voir une connexion avec 127 , c'est le nombre avec tous les binaires "1" sauf le signe le plus à gauche =).

Il s’agissait donc de numéros spéciaux, car ils permettaient à la programmation de faire des économies sur de nombreux cycles de processeur lors d’opérations fréquemment effectuées.

Vous ne verriez jamais une instruction "IF CallerIP =" 0 "mais une instruction" IF NotZero (CallerIP) ".

Vous pouvez consulter les anciennes instructions d'assemblage comme "BEQ, BNE" (6502 CPU) pour des explications plus longues. Aussi vérifier cette page.

À la fin:

0, 255 et 127 peuvent tous être vérifiés avec une seule instruction, la plus rapide. Même les langages de haut niveau tels que C ont des fonctions de comparaison "abrégées" que le compilateur peut optimiser en interne en une seule instruction.

Les programmeurs des années 70 et 80 ont vraiment produit des architectures magnifiques avec des ressources super rares, derrière des standards comme la numérotation IP, il y a beaucoup de réflexion et de génie.


3
2017-07-11 08:23



Très bonne réponse. C'est vraiment l'explication la plus claire et la plus sensée. - not2qubit
En fait, à l'époque de la conception de l'IP et des premiers travaux préparatoires, travailler avec des données en multiples entiers de 8 bits n'était pas une donnée. De nombreuses architectures à cette époque avaient des registres et des tailles de mots multiples de 12 ou 18 bits, par exemple. C'est une des raisons pour lesquelles l'octal était si populaire à l'époque. 18 bits peuvent être représentés par exactement 6 chiffres octaux sans perte ni perte; 12 bits correspond à 4 chiffres octaux. Les micro-ordinateurs fonctionnaient généralement en quantités de 8 bits, mais ce n'était que beaucoup plus tard, les micro-ordinateurs ont commencé à être régulièrement connectés (notamment directement) à Internet. - Michael Kjörling