Mengapa saya bisa melakukan ping 127.1?

11

Saya tahu IPv6 memungkinkan nol berturut-turut dihilangkan. Tapi bagaimana dengan IPv4? Saya belum menemukan referensi untuk ini di Internet, termasuk Wikipedia dan RFC 791 - Protokol Internet. Dokumen ini menyarankan bahwa "Leading nol dapat dihilangkan" di alamat IPv4 (cari istilah 'dihilangkan'). Tidak cukup spesifik.

Lihatlah sesi shell ini:

[~]$ ping -c 1 127.1
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[~]$ ping -c 1 127.0.1
PING 127.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms

--- 127.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
[~]$ ssh 127.1 :
The authenticity of host '127.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.1' (ECDSA) to the list of known hosts.
[email protected]'s password: 

Jelas, baik ping dan ssh mengerti 127.1 dan 127.0.1 sama dengan 127.0.0.1. Di mana ini ditentukan?

Alexandre de Verteuil
sumber
7
Halaman manual ini yang ditautkan dalam posting Stack Overflow ini mungkin ada di depan Anda.
nerdwaller
1
Itu gaya notasi kuno, tapi ya: itu bekerja :-)
Sander Steffann
1
@nerdwaller: Silakan posting itu sebagai jawaban. (Bonus poin jika Anda mencari tahu mengapa ping 0.0.0.0atau ping 0bekerja dengan cara yang sama ...)
user1686

Jawaban:

14

Ada posting Stack Overflow dari sekitar setahun yang lalu menanyakan hal serupa ( posting ini ).

Alasan utamanya adalah bagaimana inet_aton()( halaman manual ) mengubah oktet menjadi alamat biner.

abcd

Masing-masing dari empat bagian numerik menentukan byte alamat; byte ditugaskan dalam urutan kiri ke kanan untuk menghasilkan alamat biner.

abc

Bagian a dan b menentukan dua byte pertama dari alamat biner. Bagian c ditafsirkan sebagai nilai 16-bit yang mendefinisikan dua byte paling kanan dari alamat biner. Notasi ini sesuai untuk menentukan alamat jaringan Kelas B yang sudah ketinggalan zaman.

ab

Bagian a menentukan byte pertama dari alamat biner. Bagian b ditafsirkan sebagai nilai 24-bit yang mendefinisikan tiga byte paling kanan dari alamat biner. Notasi ini cocok untuk menentukan alamat jaringan Kelas C (ketinggalan zaman).

Sebuah

Nilai a ditafsirkan sebagai nilai 32-bit yang disimpan langsung ke alamat biner tanpa penataan ulang byte.

Ini tidak didefinisikan oleh POSIX. Apa pun - tetapi tersedia cukup luas.

nerdwaller
sumber
1
Luar biasa, dan saya juga memeriksa pos yang Anda tautkan di Stack Overflow. Itu memiliki wawasan besar tentang bagaimana sistem angka yang berbeda dapat digunakan. @grawity Wikipedia mengatakan 0.0.0.0/8 adalah jaringan saat ini. Saya berasumsi 0.0.0.0/32 harus host saat ini dan ping itu hanya mengharapkan / 32 "jaringan". Saya belum menemukan referensi eksplisit.
Alexandre de Verteuil
2
@AlexandredeVerteuil: ping mengharapkan host , bukan jaringan ... jadi ya, / 32 untuk IPv4.
user1686
3

Ini adalah peninggalan dari masa lalu pengalamatan classful. 127.1berarti jaringan 127, tuan rumah 1. (Dan, ya, 127.257legal karena jaringan 127dapat memiliki lebih dari 256 host.

David Schwartz
sumber
127.257 yang berarti secara khusus 127.0.1.1, alamat yang sebenarnya saya lihat pada aktivator server KMS lama yang bekerja pada Windows 8.0
Paul Stelian