La séance de questions et réponses d’aujourd’hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté.
La question
Le lecteur SuperUser, Diogo, veut savoir pourquoi la commande ping traite l’hôte local et l’adresse IP locale de manière différente, alors qu’ils semblent en apparence être la même chose:
Using cmd and ping on Windows gave me the following results:
Pinging “localhost”:
I mean, I’m pinging the same interface, the same machine and the same address. Why do I get such different results?
De toute évidence, il y a une différence, mais que se passe-t-il exactement lorsque vous passez de l'un à l'autre?
La réponse
Tom Wijsman, contributeur à SuperUser, offre les informations suivantes sur les différences subtiles entre les deux:
You are not pinging the same interface, without any physical interfaces you still have a “local host”.
Your
localhost
est utilisé pour faire référence à votre ordinateur à partir de son adresse IP «interne», et non à partir des adresses IP «externes» de votre ordinateur. Ainsi, les paquets ping ne transitent par aucune interface réseau physique; uniquement via une interface virtuelle de bouclage qui envoie directement les paquets d'un port à l'autre sans aucun saut physique.
Vous pourriez encore vous demander pourquoi
localhost
est résolu à
::1
alors que traditionnellement nous nous attendions à ce qu’il soit résolu en adresse IPv4
127.0.0.1
. Notez que
.localhost
est traditionnellement un TLD (voir RFC 2606) qui renvoie à l'adresse IP en boucle (pour IPv4, voir RFC 3330, en particulier 127.0.0.0/8).
Levant les yeux
localhost
en utilisant
nslookup
nous donne:
nslookup localhost
… Name: localhost Addresses:::1 127.0.0.1
Ainsi, Windows préfère utiliser l'adresse IP en boucle IPv6
::1
(voir RFC 2373) comme il est listé en premier.
Très bien, d’où vient-il, regardons le fichier hosts.
type %WINDIR%System32DriversEtcHosts
… # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost #::1 localhost …
Hmm, nous devons examiner les paramètres DNS de Windows.
Cet article de la Base de connaissances décrit un paramètre qui affecte ce que Windows préfère, souligné en gras:
-
Dans l'Éditeur du Registre, recherchez, puis cliquez sur la sous-clé de registre suivante:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters
-
Double-cliquez sur DisabledComponents pour modifier l'entrée DisabledComponents.Remarque: si l'entrée DisabledComponents n'est pas disponible, vous devez la créer. Pour le faire, suivez ces étapes:
- Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).
- Tapez DisabledComponents, puis appuyez sur Entrée.
- Double-cliquez sur DisabledComponents.
-
Tapez l'une des valeurs suivantes dans le champ Données de la valeur: pour configurer le protocole IPv6 à l'état souhaité, puis cliquez sur OK:
-
Type
0
pour activer tous les composants IPv6. (Paramètre par défaut de Windows)
-
Type
0xffffffff
pour désactiver tous les composants IPv6, à l'exception de l'interface de bouclage IPv6. Cette valeur configure également Windows pour qu'il préfère utiliser Internet Protocol version 4 (IPv4) sur IPv6 en modifiant les entrées du tableau de stratégie de préfixe. Pour plus d'informations, voir Sélection d'adresses source et de destination.
-
Type
0x20
préférer IPv4 à IPv6 en modifiant les entrées du tableau des stratégies de préfixe.
-
Type
0x10
pour désactiver IPv6 sur toutes les interfaces non-tunnel (sur les interfaces de réseau local et de protocole point à point [PPP]).
-
Type
0x01
désactiver IPv6 sur toutes les interfaces de tunnel. Ceux-ci incluent les protocoles ISATAP (6), 6to4 et Teredo.
-
Type
0x11
pour désactiver toutes les interfaces IPv6 à l'exception de l'interface de bouclage IPv6.
- Redémarrez l'ordinateur pour que ce paramètre prenne effet.
Quelle est cette table de politique de préfixe?
netsh interface ipv6 show prefixpolicies
(ou
prefixpolicy
sur les versions antérieures)
Precedence Label Prefix ---------- ----- -------------------------------- 50 0::1/128 45 13 fc00::/7 40 1::/0 10 4::ffff:0:0/96 7 14 2002::/16 5 5 2001::/32 1 11 fec0::/10 1 12 3ffe::/16 1 10::/96
Cette table détermine quels préfixes ont la priorité sur les autres préfixes lors des résolutions DNS.
Alors, en utilisant cette base de connaissances, nous pourrions ajouter ici des entrées indiquant que la priorité IPv4 est supérieure à IPv6.
Remarque: Il n'y a aucune raison de remplacer ce comportement, sauf si vous rencontrez des problèmes de compatibilité. La modification de ce paramètre sur notre serveur Windows a brisé notre serveur de messagerie, il doit donc être manipulé avec précaution…
Nous n’aimons rien de plus qu’une réponse complète et informative avec des documents d’assistance liés à conserver. Il est clair que l’hôte local et l’adresse IP locale sont des entités distinctes, ont des objectifs différents, et nous savons tous pourquoi.
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.