Si vous faites beaucoup de bricolage sur le réseau, configurez des applications basées sur le LAN et des outils de serveur, ou si vous êtes simplement curieux, vous avez probablement remarqué qu’il y a une différence entre l’hôte local et l’adresse IP locale. Lisez la suite pour découvrir les différences.
La question
Le lecteur SuperUser Diogo veut savoir pourquoi la commande ping traite différemment l’hôte local et l’adresse IP locale alors qu’en surface, ils semblent être la même chose:
L’utilisation de cmd et de ping sur Windows m’a donné les résultats suivants:
Ping « localhost »:
Ping « 192.168.0.10 » (adresse IP locale):
Les deux situations ne sont-elles pas exactement les mêmes?
Je veux dire, je cingle la même interface, la même machine et la même adresse. Pourquoi ai-je des résultats si différents?
De toute évidence, il y a une sorte de différence, mais que se passe-t-il exactement lorsque vous basculez entre les deux?
La réponse
Tom Wijsman, contributeur SuperUser, offre les informations suivantes sur les différences subtiles entre les deux:
Vous ne pingez pas la même interface, sans aucune interface physique, vous avez toujours un «hôte local».
Votre localhost
est utilisé pour désigner votre ordinateur à partir de son adresse IP «interne», et non à partir des adresses IP «externes» de votre ordinateur. Ainsi, les paquets ping ne passent par aucune interface réseau physique; uniquement via une interface de boucle virtuelle qui envoie directement les paquets d’un port à l’autre sans aucun saut physique.
Vous pourriez encore vous demander pourquoi localhost
se résout à ::1
, alors que traditionnellement, nous nous attendrions à ce qu’il se résolve à l’adresse IPv4 127.0.0.1
. Noter que .localhost
est traditionnellement un TLD (voir RFC 2606) qui pointe vers l’adresse IP de bouclage (pour IPv4, voir RFC 3330, en particulier 127.0.0.0/8).
Regardant vers le haut localhost
utilisant nslookup
nous donne:
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
Ainsi, Windows préfère utiliser l’adresse IP de bouclage IPv6 ::1
(voir RFC 2373) car il est répertorié en premier.
D’accord, 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 regarder les paramètres DNS de Windows.
Cet article de la base de connaissances nous parle d’un paramètre qui affecte ce que Windows préfère, mis en évidence en gras:
- Dans l’Éditeur du Registre, recherchez et 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 et 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:
- Taper
0
pour activer tous les composants IPv6. (Paramètre par défaut de Windows) - Taper
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 le protocole Internet version 4 (IPv4) sur IPv6 en modifiant les entrées dans la table de stratégie de préfixe. Pour plus d’informations, voir Sélection des adresses de source et de destination. - Taper
0x20
pour préférer IPv4 à IPv6 en modifiant les entrées dans la table des règles de préfixe. - Taper
0x10
pour désactiver IPv6 sur toutes les interfaces non tunnel (à la fois sur le LAN et le protocole point à point [PPP] interfaces). - Taper
0x01
pour désactiver IPv6 sur toutes les interfaces de tunnel. Il s’agit notamment du protocole ISATAP (Intra-Site Automatic Tunnel Addressing Protocol), 6to4 et Teredo. - Taper
0x11
pour désactiver toutes les interfaces IPv6 à l’exception de l’interface de bouclage IPv6.
- Taper
- Redémarrez l’ordinateur pour que ce paramètre prenne effet.
Quelle est cette table de stratégie de préfixe?
netsh interface ipv6 show prefixpolicies
(ou alors 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écide quels préfixes ont la priorité sur les autres préfixes lors de la résolution DNS.
Ah, donc en utilisant cette base de connaissances, nous pourrions ajouter ici des entrées indiquant que IPv4 a une priorité plus élevée que IPv6.
Noter: 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 cassé notre serveur de messagerie, il doit donc être manipulé avec précaution…
Il n’y a rien que nous aimons plus qu’une réponse approfondie et informative avec des documents de support liés à revendre. Il est clair que l’hôte local et l’adresse IP locale sont des entités distinctes, servent des objectifs différents, et maintenant nous savons tous pourquoi.
Avez-vous quelque chose à ajouter à l’explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d’autres utilisateurs de Stack Exchange férus de technologie? Consultez le fil de discussion complet ici.