Dlaczego mogę pingować 127.1?

11

Wiem, że IPv6 pozwala na pomijanie kolejnych zer. A co z IPv4? Nie znalazłem żadnego odniesienia do tego w Internecie, w tym Wikipedii i RFC 791 - Protokół internetowy. Ten dokument sugeruje, że „Zera wiodące można pominąć” w adresie IPv4 (wyszukaj termin „pominięty”). Nie dość szczegółowe.

Sprawdź tę sesję powłoki:

[~]$ 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: 

Oczywiście zarówno ping, jak i ssh rozumieją, że 127.1 i 127.0.1 są takie same jak 127.0.0.1. Gdzie to jest określone?

Alexandre de Verteuil
źródło
7
Ta strona podręcznika, do której prowadzi link w tym przepełnieniu stosu, może znajdować się tuż obok ciebie.
nerdwaller
1
To starożytny styl notacji, ale tak: działa :-)
Sander Steffann
1
@nerdwaller: Prześlij to jako odpowiedź. (Punkty bonusowe, jeśli dowiesz się, dlaczego ping 0.0.0.0lub ping 0działa w ten sam sposób ...)
user1686

Odpowiedzi:

14

Istnieje post przepełnienia stosu sprzed około roku z pytaniem o coś podobnego ( ten post ).

Głównym powodem jest to, w jaki sposób inet_aton()( strona podręcznika) konwertuje oktety na adres binarny.

abcd

Każda z czterech części liczbowych określa bajt adresu; bajty są przypisywane w kolejności od lewej do prawej w celu wygenerowania adresu binarnego.

ABC

Części a i b określają pierwsze dwa bajty adresu binarnego. Część c jest interpretowana jako 16-bitowa wartość, która definiuje skrajnie prawe dwa bajty adresu binarnego. Notacja ta nadaje się do określania (przestarzałych) adresów sieciowych klasy B.

ab

Część a określa pierwszy bajt adresu binarnego. Część b jest interpretowana jako 24-bitowa wartość, która definiuje skrajnie prawe trzy bajty adresu binarnego. Notacja ta nadaje się do określania (przestarzałych) adresów sieciowych klasy C.

za

Wartość a jest interpretowana jako wartość 32-bitowa, która jest przechowywana bezpośrednio w adresie binarnym bez zmiany kolejności bajtów.

Nie jest to zdefiniowane przez POSIX. Wszystko - ale jest dostępne dość szeroko.

nerdwaller
źródło
1
Wspaniale, sprawdziłem także post, do którego linkujesz w Stack Overflow. Miał świetny wgląd w to, jak można wykorzystywać różne systemy liczbowe. @grawity Wikipedia twierdzi, że obecna sieć to 0.0.0.0/8. Zakładam, że 0.0.0.0/32 musi być bieżącym hostem i że ping oczekuje tylko / 32 „sieci”. Nie znalazłem jednak wyraźnego odniesienia.
Alexandre de Verteuil
2
@AlexandredeVerteuil: ping oczekuje hostów , a nie sieci ... więc tak, / 32 dla IPv4.
user1686
3

To relikt z dawnych czasów klasowych przemówień. 127.1oznacza sieć 127, host 1. (I tak, 127.257jest to legalne, ponieważ sieć 127może mieć więcej niż 256 hostów.

David Schwartz
źródło
127,257, w szczególności 127.0.1.1, adres, który faktycznie widzę na starym aktywatorze serwera KMS, który działał w systemie Windows 8.0
Paul Stelian