Die Verwendung von cmd
und ping
unter Windows hat zu folgenden Ergebnissen geführt:
- Ping "localhost":
- Ping "192.168.0.10" (lokale IP-Adresse):
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?
EDIT: Hier ist mein ipconfig /all
Bildschirm:
windows
ip-address
ping
localhost
Diogo
quelle
quelle
Antworten:
Sie pingen nicht dieselbe Schnittstelle , ohne physische Schnittstellen haben Sie immer noch einen "lokalen Host".
Ihr
localhost
wird verwendet, um von seiner "internen" IP-Adresse auf Ihren Computer zu verweisen, nicht von einer "externen" IP-Adresse 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
die Auflösung in erfolgt::1
, während wir normalerweise erwarten, dass die Auflösung in die IPv4-Adresse erfolgt127.0.0.1
. Beachten Sie, dass dies.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).Nachschlagen
localhost
mitnslookup
gibt uns:Daher bevorzugt Windows die Verwendung der 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.
Hmm, wir müssen uns die DNS-Einstellungen von Windows ansehen.
In diesem KB-Artikel wird eine Einstellung beschrieben, die sich auf die Windows-Einstellungen auswirkt. Diese wird fett hervorgehoben:
Was ist diese Präfix-Richtlinientabelle?
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 außer Kraft zu setzen, 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 vor ...
quelle
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.
Beachten Sie die traditionell definierte Verwendung vonTLD
und note . In der Tat, Arbeiten, die bestätigen, dass dies zumindest im Zusammenhang mit dieser Frage wahr ist. Ihr letzter Satz ist nicht das, was die RFC sagte, bitte angeben , wenn es heißt „es verhindert , dass eine TLD“ , weil von dem, was sie sagt , es ist traditionell eine TLD. Andernfalls würden sie sich nicht darauf beziehenping localhost.
the .localhost TLD
localhost
Dies kann eine TLD sein, wenn ein tatsächlicher DNS-Server darauf antwortet. Im Allgemeinen wird localhost jedoch als Hostname in / etc / hosts definiert, in dem Hostnamen nachgeschlagen werden, bevor versucht wird, sie über DNS aufzulösen. Aus diesem Grund wirddig localhost
normalerweise kein "A" -Datensatz für 127.0.0.1 oder ein AAAA-Datensatz für :: 1 zurückgegeben. Das bedeutet, dass der RFC falsch ist, wenn er sagttraditionally been statically defined in host DNS implementations
, sondern vom Namenssuchdienst des Systems zurückgegeben wird, der nicht immer den DNS verwendet.nslookup
gibt Datensätze zurück. Also, YMMV ...dig
Rückkehr A, AAAA und NS-Datensätze fürlocalhost
, einschließlich eineslocalhost. IN NS localhost.
Die Loopback-Schnittstelle ist unabhängig von Ihren Ethernet-Schnittstellen vorhanden.
Auch ohne die Komplikation von IPv6 hätten Sie zwei unterschiedliche Adressen.
Loopback IPv4 - Adresse: 127.0.0.1
Ihre Ethernet - Schnittstelle der IPv4 - Adresse: 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.
quelle
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 definitiv nie 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 diese korrekt weitergeleitet werden muss .
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.
quelle
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 an
ip_route_output_slow
. Dieser Aufruffib_lookup
und wenn diese Funktion den Code zurückgibtRTN_LOCAL
,dev_out
wird er in einen Loopback umgeschrieben:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
quelle
Es sieht so aus, als würde der Alias "Localhost" in den IPv6-Loopback aufgelöst. Wenn Sie explizit eine IPv4-Adresse verwenden, wird dies offensichtlich nicht der Fall sein.
quelle
@ebwhite stimmt worüber.
Nun könnte der Grund sein , dass Sie Teredo einrichten (ich kann nicht von Ihrem Screenshot sagt, es in eine Textdatei kochend und die gesamte Ausgabe einfügen wird besser) - das Verhalten von localhost seine IPv6 steht im Einklang mit den Systemen auf meinem IPv4- Netzwerk nur mit Teredo installiert, aber Systeme ohne IPv4 verhalten sich so, wie Sie es
127.0.0.1
beim Pingen erwartenlocalhost
. 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. Daher funktioniert Ihr System so, wie es von Entwurf sein sollte .
quelle