Adakah yang bisa menjelaskan bagaimana cara ping 0
kerjanya dan itu diterjemahkan 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
sumber
sumber
Jawaban:
Perilaku khusus (dan AFAICT) yang sedikit tidak terdokumentasi dalam iputils
ping
: Anda melakukan ping sendiri.Jika Anda
ping 0
inilah yang terjadi (diedit dan dikomentari untuk kejelasan):inet_aton()
bukan POSIX, tapi saya berasumsi itu menyalin perilakuinet_addr()
ketika kurang dari 4 desimal sedang dikonversi. Dalam kasus nomor tunggal dot-less, itu hanya disimpan ke alamat jaringan biner, dan0x00000000
setara dengan bentuk bertitik0.0.0.0
.Anda dapat melihat ini jika
strace
(sebagai root):Anda juga dapat melihat perubahan jika Anda mengikat antarmuka tertentu :
Sementara 0 dapat diperlakukan sebagai 0.0.0.0 dan alamat broadcast dalam banyak kasus itu jelas bukan apa yang dilakukan ping . Ini khusus-kasus ini berarti "IP utama dari antarmuka yang bersangkutan" (dengan beberapa penanganan tambahan untuk kasus multicast / broadcast).
RFC 1122 §3.2.1.3 menjelaskan perilaku: baik 0.0.0.0 dan alamat IP dengan jaringan ditutup ("nomor host", misalnya 0.0.0.1 dalam kasus loopback) berarti "host ini di jaringan ini".
Setidaknya dalam kasus 0 atau 0.0.0.0 itulah yang
ping
berperilaku iputils , ping lain dan OS lain mungkin berperilaku berbeda. Misalnya ping FreeBSD 0.0.0.0 melalui rute default (yang saya pikir tidak benar "perilaku").ping 1
atau0.0.0.1
tidak cukup bekerja seperti yang diharapkan (bukan untuk saya, iputils-sss20101006 ).sumber