Czy ktoś może wyjaśnić, jak ping 0
działa i co to tłumaczy 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
źródło
źródło
Odpowiedzi:
Specjalne (i AFAICT) nieco niedokumentowane zachowanie w iputils
ping
: pingujesz siebie.Jeśli
ping 0
tak się dzieje (mocno edytowane i komentowane dla jasności):inet_aton()
nie jest POSIX, ale zakładam, że kopiuje zachowanie,inet_addr()
gdy konwertowane są mniej niż 4 kropki dziesiętne. W przypadku pojedynczego numeru bez kropek jest on po prostu zapisywany w binarnym adresie sieciowym i0x00000000
jest równoważny postaci kropkowanej0.0.0.0
.Możesz to zobaczyć, jeśli
strace
(jako root):Możesz również zobaczyć zmianę, jeśli zamiast tego powiążesz z określonym interfejsem:
Podczas gdy 0 może być traktowane jako 0.0.0.0 i adres rozgłoszeniowy w wielu przypadkach , wyraźnie nie robi tego ping . W przypadkach specjalnych oznacza to „podstawowy adres IP danego interfejsu” (z pewną dodatkową obsługą przypadków multiemisji / emisji).
RFC 1122 §3.2.1.3 wyjaśnia zachowanie: zarówno 0.0.0.0, jak i adres IP z maskowaną siecią („numer hosta”, np. 0.0.0.1 w przypadku pętli zwrotnej) oznaczają „ten host w tej sieci”.
Przynajmniej w przypadku 0 lub 0.0.0.0 tak
ping
zachowuje się iputils , inne pingi i inne systemy operacyjne mogą zachowywać się inaczej. Na przykład FreeBSD pinguje 0.0.0.0 domyślną trasą (co nie uważam za zachowanie „poprawne”).ping 1
lub0.0.0.1
nie działają tak, jak się spodziewano (i tak nie dla mnie, iputils-sss20101006 ).źródło