Pourquoi puis-je envoyer une requête ping à 127.1?

11

Je sais que IPv6 permet d'omettre des zéros consécutifs. Mais qu'en est-il d'IPv4? Je n'ai trouvé aucune référence à cela sur Internet, y compris Wikipedia et RFC 791 - Internet Protocol. Ce document suggère que «les zéros non significatifs peuvent être omis» dans une adresse IPv4 (recherchez le terme «omis»). Pas assez précis.

Découvrez cette session shell:

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

Clairement, ping et ssh comprennent que 127.1 et 127.0.1 sont identiques à 127.0.0.1. Où est-ce spécifié?

Alexandre de Verteuil
la source
7
Cette page de manuel liée dans ce post Stack Overflow peut être dans votre allée.
nerdwaller
1
C'est un style de notation ancien, mais oui: ça marche :-)
Sander Steffann
1
@nerdwaller: Veuillez poster cela comme réponse. (Points bonus si vous comprenez pourquoi ping 0.0.0.0ou ping 0fonctionne de la même manière ...)
user1686

Réponses:

14

Il y a un article Stack Overflow d'il y a environ un an demandant quelque chose de similaire ( cet article ).

La raison principale est la façon dont inet_aton()( page de manuel ) convertit les octets en adresse binaire.

a B c d

Chacune des quatre parties numériques spécifie un octet de l'adresse; les octets sont attribués de gauche à droite pour produire l'adresse binaire.

abc

Les parties a et b spécifient les deux premiers octets de l'adresse binaire. La partie c est interprétée comme une valeur de 16 bits qui définit les deux octets les plus à droite de l'adresse binaire. Cette notation convient pour spécifier des adresses de réseau de classe B (dépassées).

un B

La partie a spécifie le premier octet de l'adresse binaire. La partie b est interprétée comme une valeur de 24 bits qui définit les trois octets les plus à droite de l'adresse binaire. Cette notation convient pour spécifier des adresses de réseau de classe C (démodées).

une

La valeur a est interprétée comme une valeur de 32 bits qui est stockée directement dans l'adresse binaire sans aucun réarrangement d'octets.

Ce n'est pas défini par POSIX.anything - mais il est disponible assez largement.

nerdwaller
la source
1
Génial, et j'ai également vérifié le post auquel vous avez lié sur Stack Overflow. Il a permis de mieux comprendre comment différents systèmes numériques peuvent être utilisés. @grawity Wikipedia indique que 0.0.0.0/8 est le réseau actuel. Je suppose que 0.0.0.0/32 doit être l'hôte actuel et que le ping n'attend que / 32 "réseaux". Je n'ai cependant pas trouvé de référence explicite.
Alexandre de Verteuil
2
@AlexandredeVerteuil: ping attend des hôtes , pas des réseaux ... donc oui, / 32 pour IPv4.
user1686
3

C'est une relique de l'ancien temps de l'adressage avec classe. 127.1signifie réseau 127, hôte 1. (Et, oui, 127.257c'est légal car le réseau 127peut avoir plus de 256 hôtes.

David Schwartz
la source
127.257 signifiant en particulier 127.0.1.1, une adresse que je vois en fait sur l'ancien activateur de serveur KMS qui fonctionnait sur Windows 8.0
Paul Stelian