kann jemand erklären, wie es ping 0
funktioniert und es zu übersetzen 127.0.0.1
.
[champu@testsrv ]$ ping 0
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.013 ms
--- 0 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.013/0.026/0.039/0.013 ms
linux
networking
Rahul Patil
quelle
quelle
Antworten:
Besonderes (und AFAICT) leicht unterdokumentiertes Verhalten bei iputils
ping
: Sie pingen sich selbst an.Wenn Sie
ping 0
dies tun, geschieht Folgendes (aus Gründen der Übersichtlichkeit stark bearbeitet und kommentiert):inet_aton()
ist nicht POSIX, aber ich gehe davon aus, dass es das Verhalten kopiert,inet_addr()
wenn weniger als 4 Dezimalpunkte konvertiert werden. Im Fall einer einzelnen Zahl ohne Punkte wird sie einfach in der binären Netzwerkadresse gespeichert und0x00000000
entspricht der gepunkteten Form0.0.0.0
.Sie können dies sehen, wenn Sie
strace
(als root):Sie können die Änderung auch sehen, wenn Sie sich stattdessen an eine bestimmte Schnittstelle binden :
Während 0 als 0.0.0.0 und eine Broadcast-Adresse behandelt werden kann, ist dies in vielen Fällen eindeutig nicht das, was Ping tut . In Sonderfällen bedeutet dies "die primäre IP der fraglichen Schnittstelle" (mit etwas zusätzlicher Behandlung für Multicast- / Broadcast-Fälle).
RFC 1122 §3.2.1.3 erläutert das Verhalten: Sowohl 0.0.0.0 als auch die IP-Adresse mit ausgeblendetem Netzwerk (die "Host-Nummer", z. B. 0.0.0.1 bei Loopback) bedeuten "dieser Host in diesem Netzwerk".
Zumindest im Fall von 0 oder 0.0.0.0
ping
verhält sich iputils so , dass andere Pings und andere Betriebssysteme sich möglicherweise anders verhalten. Zum Beispiel pingt FreeBSD 0.0.0.0 über die Standardroute (was meines Erachtens nicht "korrekt" ist).ping 1
oder0.0.0.1
nicht ganz wie erhofft funktionieren (jedenfalls nicht für mich, iputils-sss20101006 ).quelle