wake-up-neo.com

Warum gibt es einen Unterschied zwischen Ping "localhost" und Ping "local IP address"?

Die Verwendung von cmd und ping unter Windows hat zu folgenden Ergebnissen geführt:

  • Ping "localhost":

Enter image description here

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

Enter image description here

Sind nicht beide Situationen genau gleich?

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

BEARBEITEN: Hier ist mein ipconfig /all Bildschirm:

Enter image description here

32
Diogo

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

Ihre localhost wird verwendet, um von ihrer "internen" IP auf Ihren Computer zu verweisen, nicht von einer "externen" IP Ihres Computers. Die Ping-Pakete durchlaufen also keine physische Netzwerkschnittstelle. Nur über eine virtuelle Loopback-Schnittstelle, die die Pakete direkt von Port zu Port sendet, ohne dass physische Hops erforderlich sind.

Vielleicht fragen Sie sich immer noch, warum localhost in ::1 aufgelöst wird, während wir normalerweise erwarten, dass es in die IPv4-Adresse 127.0.0.1 aufgelöst wird. Beachten Sie, dass .localhost traditionell eine TLD ist (siehe RFC 2606 ), die auf die Loopback-IP-Adresse verweist (für IPv4 siehe RFC 3330 , insbesondere 127.0.0.0/8).

Wenn Sie localhost mit nslookup nachschlagen, erhalten Sie:

nslookup localhost

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

Daher bevorzugt Windows die IPv6-Loopback-IP-Adresse ::1 (siehe RFC 2373 ), da diese zuerst aufgeführt wird.

Okay, also, wo kommt es her, 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.

In diesem KB-Artikel wird eine Einstellung beschrieben, die sich auf die von Windows bevorzugten Einstellungen auswirkt.

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

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

    Hinweis: Wenn der Eintrag DisabledComponents nicht verfügbar ist, müssen Sie ihn erstellen. Gehen Sie hierzu folgendermaßen vor

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

    2. Typ DisabledComponents, Und die EINGABETASTE dann drückt.

    3. Doppelklicken Sie auf DisabledComponents.

  3. Geben Sie einen der folgenden Werte in das Feld Wert ein, um das IPv6-Protokoll auf den gewünschten Status zu konfigurieren, 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 mit Ausnahme der IPv6-Loopback-Schnittstelle zu deaktivieren. Mit diesem Wert wird auch Windows so konfiguriert, dass es IPv6 (Internet Protocol Version 4) 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 vorzuziehen, indem Sie die Einträge in der Präfix-Richtlinientabelle ändern.
    • Geben Sie 0x10 ein, um IPv6 auf allen Nicht-Tunnel-Schnittstellen zu deaktivieren (sowohl auf LAN- als auch auf PPP-Schnittstellen).
    • Geben Sie 0x01 ein, um IPv6 auf allen Tunnelschnittstellen zu deaktivieren. Dazu gehören das standortinterne automatische Tunneladressierungsprotokoll (ISATAP), 6to4 und Teredo.
    • Geben Sie 0x11 ein, um alle IPv6-Schnittstellen mit Ausnahme der IPv6-Loopback-Schnittstelle zu deaktivieren.
  4. Starten Sie den Computer neu, damit diese Einstellung wirksam wird.

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

In dieser Tabelle wird festgelegt, 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 hat als IPv6.

Hinweis: Es gibt keinen Grund, dieses Verhalten zu überschreiben, es sei denn, es treten kompatible Probleme auf. Wenn Sie diese Einstellung auf unserem Windows Server ändern, ist unser Mail-Server kaputt gegangen. Gehen Sie also vorsichtig damit um ...

45
Tamara Wijsman

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

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

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

Die Loopback-Schnittstelle befindet sich möglicherweise in einer anderen Softwareschicht, die von der realen Hardware weiter entfernt ist. Ich bezweifle, dass dies in irgendeiner Weise von Ihrem spezifischen Ethernet-Schnittstellentreiber abhängt.

20
RedGrittyBrick

Localhost und Ihre IP-Adresse sind nicht dasselbe.

Der Localhost ist eine spezielle Software-IP-Adresse, die mit Ihrem System verknüpft ist. Localhost oder 127.0.0.1 ist eine Loopback-Adresse. Es verweist immer auf Ihr System und ist nur von Ihrem Computer aus zugänglich. Dieses Routing findet auf Betriebssystemebene statt und verlässt auf keinen Fall die Netzwerkkarte. Es besteht also keine Chance, dass die Netzwerkkarte das Netzwerk erreicht.

Das Pingen Ihrer eigenen IP-Adresse ist ähnlich, betrifft jedoch möglicherweise den gesamten Netzwerkstapel, da festgestellt werden muss, dass es sich um Ihre IP-Adresse handelt, und die korrekte Weiterleitung erfolgt . ...

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

Ziehen Sie zum Beispiel das Netzwerkkabel ab. Pingen Sie Ihre statische IP-Adresse. Möglicherweise erhalten Sie keine Route zum Host oder andere Fehler. Pingen Sie jetzt localhost oder 127.0.0.1 und es wird funktionieren.

11

Mir ist auf den Screenshots klar, dass es sich bei dieser Frage nicht um Linux handelt, aber es ist vielleicht ein nützliches "Beispiel".

Wenn Sie unter diesem Betriebssystem eine Ihrer lokalen Adapteradressen anpingen, wird sie in das Loopback-Gerät übersetzt (Sonderfall-Hack). Dies bedeutet, dass die Pakete tatsächlich an das Loopback-Gerät gesendet werden (was alle möglichen Auswirkungen hat: Aus Sicht der Firewall kommen diese Pakete beispielsweise auf der Loopback-Schnittstelle an und stimmen mit den Regeln für diese Schnittstelle überein).

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

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

Mit anderen Worten, es ist ein praktikables Konzept, diese lokalen Adressen als Aliase für das Loopback-Gerät zu betrachten.

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 RTN_LOCAL zurückgibt, wird dev_out in ein Loopback umgeschrieben:

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

6
Kaz

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

5
EBGreen

@ebwhite stimmt worüber.

Nun, der Grund könnte sein, dass Sie Teredo eingerichtet haben (ich kann es Ihrem Screenshot nicht entnehmen, es in eine Textdatei umzuleiten und die gesamte Ausgabe einzufügen ist besser) - der Das Verhalten von localhost als IPv6 ist konsistent mit den Systemen in meinem IPv4 -Netzwerk, auf denen Teredo installiert ist. Systeme ohne IPv4 verhalten sich jedoch wie Sie Erwarten Sie 127.0.0.1, wenn Sie localhost anpingen. Ich habe dies mit Windows XP getestet und muss sehen, was meine Windows 7-Systeme tun und die Frage aktualisieren.

Im Allgemeinen werden IPv6-Systeme standardmäßig verwendet, wenn IPv6 verfügbar ist. In diesem Fall funktioniert Ihr System standardmäßig wie gewünscht .

1
Journeyman Geek