¿Por qué puedo hacer ping a 127.1?

11

Sé que IPv6 permite omitir ceros consecutivos. ¿Pero qué hay de IPv4? No he encontrado ninguna referencia a esto en Internet, incluyendo Wikipedia y RFC 791 - Protocolo de Internet. Este documento sugiere que "los ceros iniciales se pueden omitir" en una dirección IPv4 (busque el término 'omitido'). No lo suficientemente específico.

Echa un vistazo a esta sesión de 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: 

Claramente, tanto ping como ssh entienden que 127.1 y 127.0.1 son lo mismo que 127.0.0.1. ¿Dónde se especifica esto?

Alexandre de Verteuil
fuente
77
Esta página de manual vinculada en esta publicación de desbordamiento de pila puede estar en tu callejón.
nerdwaller 01 de
1
Es un estilo de notación antiguo, pero sí: funciona :-)
Sander Steffann
1
@nerdwaller: publíquelo como respuesta. (Puntos de bonificación si ping 0.0.0.0ping 0
descubre

Respuestas:

14

Hay una publicación de Stack Overflow de hace aproximadamente un año que pregunta algo similar ( esta publicación ).

La razón principal es cómo inet_aton()( página de manual ) convierte los octetos en la dirección binaria.

a B C D

Cada una de las cuatro partes numéricas especifica un byte de la dirección; los bytes se asignan en orden de izquierda a derecha para producir la dirección binaria.

a B C

Las partes ayb especifican los dos primeros bytes de la dirección binaria. La parte c se interpreta como un valor de 16 bits que define los dos bytes más a la derecha de la dirección binaria. Esta notación es adecuada para especificar (anticuadas) direcciones de red de clase B.

ab

La parte a especifica el primer byte de la dirección binaria. La parte b se interpreta como un valor de 24 bits que define los tres bytes más a la derecha de la dirección binaria. Esta notación es adecuada para especificar direcciones de red Clase C (anticuadas).

una

El valor a se interpreta como un valor de 32 bits que se almacena directamente en la dirección binaria sin ningún reordenamiento de bytes.

POSIX no define esto, pero está disponible ampliamente.

nerdwaller
fuente
1
Impresionante, y también verifiqué la publicación que vinculaste en Stack Overflow. Tenía grandes ideas sobre cómo se pueden usar diferentes sistemas de números. @grawity Wikipedia dice que 0.0.0.0/8 es la red actual. Supongo que 0.0.0.0/32 debe ser el host actual y que ping solo espera / 32 "redes". Sin embargo, no he encontrado una referencia explícita.
Alexandre de Verteuil
2
@AlexandredeVerteuil: ping espera hosts , no redes ... así que sí, / 32 para IPv4.
user1686
3

Es una reliquia de los viejos tiempos del direccionamiento con clase. 127.1significa red 127, host 1. (Y sí, 127.257es legal porque la red 127puede tener más de 256 hosts.

David Schwartz
fuente
127.257 significa en particular 127.0.1.1, una dirección que realmente veo en el antiguo activador del servidor KMS que funcionaba en Windows 8.0
Paul Stelian