web-dev-qa-db-fra.com

Pourquoi y a-t-il une différence entre ping "localhost" et ping "adresse IP locale"?

L'utilisation de cmd et ping sous Windows m'a donné les résultats suivants:

  • Ping "localhost":

Enter image description here

  • Pinging "192.168.0.10" (adresse IP locale):

Enter image description here

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?

EDIT: Voici mon écran ipconfig /all:

Enter image description here

32
Diogo

Vous ne lancez pas la même interface , sans aucune interface physique, vous avez toujours un "hôte local".

Votre localhost est utilisé pour faire référence à votre ordinateur à partir de son adresse IP "interne", et non à partir de toute adresse IP "externe" de votre ordinateur. Ainsi, les paquets ping ne passent 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 pouvez toujours vous demander pourquoi localhost résout en ::1, alors que traditionnellement, nous nous attendions à ce que ce soit l'adresse IPv4 127.0.0.1. Notez 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).

Regarder 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 ), car elle est répertoriée en premier.

D'accord, d'où vient-il, examinons le fichier hosts.

type %WINDIR%\System32\Drivers\Etc\Hosts

...
# 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, mis en évidence en gras:

  1. Dans l'Éditeur du Registre, recherchez, puis cliquez sur la sous-clé de registre suivante:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. 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:

    1. Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).

    2. Tapez DisabledComponents, puis appuyez sur Entrée.

    3. Double-cliquez sur DisabledComponents.

  3. 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:

    • Tapez 0 pour activer tous les composants IPv6. (Paramètre par défaut de Windows)
    • Tapez 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 de l'adresse source et de destination.
    • Tapez 0x20 pour préférer IPv4 à IPv6 en modifiant les entrées de la table de règles de préfixe.
    • Tapez 0x10 pour désactiver IPv6 sur toutes les interfaces non-tunnel (sur les interfaces de réseau local et de protocole point à point [PPP]).
    • Tapez 0x01 pour désactiver IPv6 sur toutes les interfaces de tunnel. Ceux-ci incluent les protocoles ISATAP (6), 6to4 et Teredo du protocole d’adressage automatique intra-site.
    • Tapez 0x11 pour désactiver toutes les interfaces IPv6 à l'exception de l'interface de bouclage IPv6.
  4. 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 qui indiquent qu'IPv4 a une priorité 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 ...

45
Tamara Wijsman

L’interface de bouclage existe indépendamment de votre ou vos interfaces Ethernet.

Même sans la complication de IPv6 , vous auriez deux adresses distinctes.

Loopback IPv4 adresse: 127.0.0.1
L'adresse IPv4 de votre interface Ethernet: 192.168.0.10

L’interface de bouclage pourrait bien se trouver dans une couche logicielle différente, plus éloignée du matériel réel. Je doute que cela dépend par exemple de votre pilote d’interface Ethernet spécifique.

20
RedGrittyBrick

Localhost et votre adresse IP ne sont pas la même chose.

Le localhost est une adresse IP uniquement logicielle spéciale, liée à votre système. Localhost, ou 127.0.0.1, est une adresse de bouclage. Il pointe toujours vers votre système et n’est accessible que depuis votre ordinateur. Ce routage se produit au niveau du système d'exploitation et ne quitte définitivement jamais la carte réseau ... Il n'y a donc aucune chance pour qu'il atteigne le réseau ....

Envoyer une requête ping à votre propre adresse IP est similaire, mais implique potentiellement l’ensemble de la pile de mise en réseau, car elle doit détecter qu’il s’agit de votre adresse IP et la router correctement ...

L'effet devrait être le même, mais il peut y avoir des différences.

Par exemple, débranchez votre câble réseau. Cinglez votre adresse IP statique. Vous pouvez obtenir aucune route à héberger, ou d'autres erreurs. Ping maintenant localhost ou 127.0.0.1, et cela fonctionnera.

11

Je réalise à partir des captures d'écran que cette question ne concerne pas Linux, mais elle constitue peut-être un "cas d'école" utile.

Sur cet OS, si vous envoyez une requête ping à l’une de vos adresses d’adaptateur local, elle est traduite dans le périphérique de bouclage (cas particulier). Cela signifie que les paquets vont réellement au périphérique de bouclage (ce qui a toutes les implications que vous pourriez penser: par exemple, du point de vue du pare-feu, ces paquets arrivent sur l'interface de bouclage et respecteront les règles de cette interface).

Le périphérique auquel l'adresse IP est assignée ne verra jamais les paquets. (C’est bien parce que cela ne ferait pas le bon choix avec ces paquets: il voudrait faire sortir les ventouses.)

Cependant, si l'interface qui contient cette adresse IP devait tomber en panne, vous avez perdu cette connexion. Le mappage en boucle cessera de fonctionner.

En d’autres termes, c’est une conception viable de considérer ces adresses locales comme des alias du périphérique de bouclage.

Références de code:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623

Regardez la fonction ip_route_output_slow. Ceci appelle fib_lookup, et si cette fonction renvoie le code RTN_LOCAL, dev_out est réécrit dans le bouclage:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769

6
Kaz

Il semble que l'alias "Localhost" résolve le bouclage IPv6 et que vous utilisez explicitement une adresse IPv4, ce n'est évidemment pas le cas.

5
EBGreen

@ebwhite a raison sur quoi.

Maintenant, le pourquoi pourrait être que vous avez Teredo mis en place (je ne peux pas dire à partir de votre capture d'écran, le rediriger vers un fichier texte et en collant le tout la sortie est meilleure) - le comportement de localhost étant IPv6 est cohérent avec les systèmes de mon IPv4 uniquement le réseau avec Teredo installé, mais les systèmes qui en sont dépourvus se comportent comme vous le souhaitiez obtenir 127.0.0.1 lorsque vous lancez un ping localhost. J'ai testé cela avec Windows XP et j'ai besoin de voir ce que font mes systèmes Windows 7 et de mettre à jour la question.

Généralement, les systèmes utilisent IPv6 par défaut si IPv6 est disponible. Votre système fonctionne donc correctement par conception .

1
Journeyman Geek