Warum gibt es einen Unterschied zwischen " ping "localhost" und " ping "IP-Adresse"?

Die Verwendung von cmd und ping unter Windows ergab folgende Ergebnisse:

  • Ping "localhost":

Geben Sie hier die Bildbeschreibung ein

  • Ping "192.168.0.10 "(lokale IP-Adresse):

Geben Sie hier die Bildbeschreibung ein

Sind nicht beide Situationen genau gleich?

Ich meine, ich pinge die gleiche Schnittstelle, die gleiche Maschine und die gleiche Adresse. Warum bekomme ich so unterschiedliche Ergebnisse?

BEARBEITEN: Hier ist mein ipconfig /all Bildschirm:

Geben Sie hier die Bildbeschreibung ein

Author: Peter Mortensen, 2012-04-18

6 answers

Sie pingen nicht dieselbe Schnittstelle, ohne physische Schnittstellen haben Sie immer noch einen "lokalen Host".

Ihr localhost wird verwendet, um von seiner "internen" IP auf Ihren Computer zu verweisen, nicht von irgendwelchen "externen" IPs Ihres Computers. Die Ping-Pakete durchlaufen also keine physische Netzwerkschnittstelle. nur durch eine virtuelle Loop-Back-Schnittstelle, die die Pakete direkt von Port zu Port ohne physische Hops sendet.

Sie fragen sich vielleicht immer noch, warum localhost ist auflösen auf ::1, während wir traditionell erwarten würden, dass es auf die IPv4-Adresse 127.0.0.1 aufgelöst wird. Beachten Sie, dass .localhost traditionell eine TLD ist (siehe RFC 2606), die auf die IP-Adresse der Schleife zurückweist (für IPv4 siehe RFC 3330, insbesondere 127.0.0.0/8).

Wenn wir localhost mit nslookup nachschlagen, erhalten wir:

nslookup localhost

...
Name:    localhost
Addresses:  ::1
          127.0.0.1

Daher bevorzugt Windows die Verwendung der IPv6-Schleife zurück IP-Adresse ::1 (siehe RFC 2373), wie es aufgeführt ist erst.

Okay, also, woher kommt es, schauen wir uns die Hosts-Datei an.

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

...
# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
...

Hmm, wir müssen uns die DNS-Einstellungen von Windows ansehen.

Dieser KB-Artikel informiert uns über eine Einstellung, die sich darauf auswirkt, was Windows bevorzugt, fett hervorgehoben:

  1. Suchen und klicken Sie im Registrierungseditor auf den folgenden Registrierungsunterschlüssel:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. Doppelklicken Sie auf DisabledComponents, um ändern Eintrag "DisabledComponents".

    Hinweis: Wenn der Disabled components-Eintrag nicht verfügbar ist, müssen Sie ihn erstellen. Befolgen Sie dazu folgende Schritte:

    1. Zeigen Sie im Menü Bearbeiten auf Neu und klicken Sie dann auf den Wert DWORD (32-Bit).

    2. Geben Sie Disabledkomponenten ein und drücken Sie die EINGABETASTE.

    3. Doppelklicken Sie auf DisabledComponents.

  3. Geben Sie einen der folgenden Werte in das Feld Wertdaten ein, um IPv6 zu konfigurieren wechseln Sie in den gewünschten Zustand und klicken Sie dann auf OK:

    • Geben Sie 0 ein, um alle IPv6-Komponenten zu aktivieren. (Windows-Standardeinstellung)
    • Geben Sie 0xffffffff ein, um alle IPv6-Komponenten außer der IPv6-Loopback-Schnittstelle zu deaktivieren. Dieser Wert konfiguriert Windows auch so, dass es die Verwendung von Internet Protocol Version 4 (IPv4) gegenüber IPv6 vorzieht, indem Einträge in der Präfix-Richtlinientabelle geändert werden. Weitere Informationen finden Sie unter Auswahl der Quell - und Zieladresse.
    • Geben Sie 0x20 ein, um IPv4 gegenüber IPv6 zu bevorzugen durch Ändern von Einträgen in der Präfix-Richtlinientabelle.
    • Geben Sie 0x10 ein, um IPv6 auf allen Nichttunnel-Schnittstellen (sowohl auf LAN-als auch auf Punkt-zu-Punkt-Protokoll-Schnittstellen [PPP]) zu deaktivieren.
    • Geben Sie 0x01 ein, um IPv6 auf allen Tunnelschnittstellen zu deaktivieren. Diese umfassen Intra-Site Automatic Tunnel Addressing Protocol (ISATAP), 6to4 und Teredo.
    • Geben Sie 0x11 ein, um alle IPv6-Schnittstellen außer der IPv6-Loopback-Schnittstelle zu deaktivieren.
  4. Starten Sie den Computer dafür neu einstellung, um wirksam zu werden.

Was ist diese Präfix-Richtlinientabelle?

netsh interface ipv6 show prefixpolicies (oder prefixpolicy in früheren Versionen)

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

Diese Tabelle entscheidet, welche Präfixe bei DNS-Auflösungen Vorrang vor anderen Präfixen haben.

Ah, mit dieser KB könnten wir hier Einträge hinzufügen, die angeben, dass IPv4 eine höhere Priorität als IPv6 hat.

Hinweis: Es gibt keinen Grund, dieses Verhalten zu überschreiben, es sei denn, Sie erleben kompatibel Problem. Das Ändern dieser Einstellung auf unserem Windows-Server hat unseren Mailserver beschädigt, daher sollte dies sorgfältig gehandhabt werden...

 47
Author: Tamara Wijsman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39

Die Loopback-Schnittstelle existiert unabhängig von Ihren Ethernet-Schnittstellen.

Auch ohne die Komplikation von IPv6 hätten Sie zwei verschiedene Adressen.

Loopback - IPv4 - - Adresse : 127.0.0.1
IPv4-Adresse Ihrer Ethernet-Schnittstelle: 192.168.0.10

Die Loopback-Schnittstelle befindet sich möglicherweise in einer anderen Softwareschicht, die von echter Hardware entfernter ist. Ich bezweifle, dass es in irgendeiner Weise von Ihrem spezifischen Ethernet-Schnittstellentreiber abhängt für Beispiel.

 20
Author: RedGrittyBrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-19 16:20:36

Localhost und Ihre IP-Adresse sind nicht dasselbe.

Der localhost ist eine spezielle Software nur IP-Adresse, die mit Ihrem System verknüpft ist. Localhost oder 127.0.0.1 ist eine Loop-Back-Adresse. Es zeigt immer auf Ihr System und ist nur von Ihrem Computer aus zugänglich. Dieses Routing erfolgt auf Betriebssystemebene und verlässt definitiv nie die NIC... Es besteht also keine Chance, dass es ins Netzwerk gelangt....

Das Pingen Ihrer eigenen IP-Adresse ist ähnlich, beinhaltet jedoch möglicherweise die gesamter Netzwerkstapel, da er erkennen muss, dass es sich um Ihre IP-Adresse handelt, und ihn korrekt weiterleitet...

Der Effekt sollte derselbe sein, aber es kann Unterschiede geben.

Ziehen Sie beispielsweise Ihr Netzwerkkabel ab. Pingen Sie Ihre statische IP-Adresse. Möglicherweise erhalten Sie keine Route zum Host oder andere Fehler. Jetzt ping localhost oder 127.0.0.1, und es wird funktionieren.

 11
Author: Benjamin Schollnick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-18 19:53:27

Ich weiß aus den Screenshots, dass es bei dieser Frage nicht um Linux geht, aber es macht vielleicht einen nützlichen "Fall in Punkt".

Wenn Sie unter diesem Betriebssystem eine Ihrer lokalen Adapteradressen anpingen, wird diese in das Loopback-Gerät übersetzt (Sonderfall Hack). Dies bedeutet, dass die Pakete tatsächlich zum Loopback-Gerät gehen (was alle Implikationen hat, die Sie vielleicht denken: Zum Beispiel aus Firewalling-Sicht kommen diese Pakete auf der Loopback-Schnittstelle herein und stimmen mit Regeln dafür überein Schnittstelle).

Das Gerät,dem die IP zugewiesen ist, sieht die Pakete niemals. (Das ist gut, weil es mit diesen Paketen nicht das Richtige tun würde: Es würde die Saugnäpfe rausschicken wollen.)

Wenn jedoch die Schnittstelle, die diese IP enthält, untergehen sollte, haben Sie diese Verbindung verloren. Die Zuordnung zu Loopback funktioniert nicht mehr.

Mit anderen Worten, es ist ein praktikables Design, diese lokalen Adressen als Aliase für das Loopback zu betrachten ger.

Code-Referenzen:

Http://lxr.linux.no/#linux + v3. 3. 2 / net / ipv4 / route. c#L2623

Schauen Sie sich die Funktion ip_route_output_slow an. Dies ruft fib_lookup auf, und wenn diese Funktion den Code zurückgibt RTN_LOCAL, dev_out wird in Loopback umgeschrieben:

Http://lxr.linux.no/#linux + v3. 3. 2 / net / ipv4 / route. c#L2769

 6
Author: Kaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-19 03:01:03

Es sieht so aus, als würde der Alias "Localhost" in das IPv6-Loopback aufgelöst, und wenn Sie explizit eine IPv4-Adresse verwenden, ist dies offensichtlich nicht der Fall.

 4
Author: EBGreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-21 11:01:47

@ebwhite hat Recht mit was.

Nun, das Warum könnte sein, dass Sie Teredo eingerichtet haben (ich kann es aus Ihrem Screenshot nicht sagen, es an eine Textdatei weiterleiten und die gesamte Ausgabe einfügen ist besser) - das Verhalten von localhost als IPv6 ist konsistent mit den Systemen auf meinem IPv4 nur Netzwerk mit Teredo installiert, aber Systeme ohne es verhalten sich so, wie Sie es erwarten, wenn Sie localhost pingen. Ich habe dies mit Windows XP getestet und muss sehen, was mein Windows 7 systeme tun und aktualisieren die Frage.

Im Allgemeinen verwenden Systeme standardmäßig IPv6, wenn IPv6 verfügbar ist also, Ihr System funktioniert wie es sollte by-design.

 1
Author: Journeyman Geek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-21 11:00:14