Esta será una larga explicación, así que tengan paciencia conmigo.
Si lo desea, puede ignorar los siguientes párrafos y pasar directamente a “LA RESPUESTA REAL COMIENZA AQUÍ” o leer la historia a continuación, si le gustan las historias:
Comencemos diciendo que no sabía que “127.1” puede considerarse una dirección válida. Lo que me califica para decir “no sabía” … nada más que el hecho de que … bueno, estuve involucrado en la implementación de una pila de red integrada que alimentaba algunos módems de cable y dsl populares de antaño. Ese era mi trabajo # 2. Les puedo asegurar que mi código NO manejó este caso de 127.1 y ahora me siento mal por eso. Trabajo # 3 en adelante Trabajé en OSPF / BGP para enrutadores de acceso / edge / core y un MSPP. En todos esos casos , utilizamos BSD o Linux en el procesador de ruta . Y aunque debería haberlo hecho … en realidad NO había examinado todo el código de pila de red BSD / Linux . En pocas palabras: no sabía que “127.1” era una dirección válida y aceptable .
- ¿Podemos rastrear la IP del remitente original cuando solo tenemos una copia reenviada?
- ¿Es el protocolo de datagramas de usuario (UDP) una alternativa al protocolo de control de transmisión (TCP)?
- ¿Por qué algunos programas tienen períodos de latencia TCP más altos que otros programas?
- ¿Son tres años un plazo razonable para alcanzar CCIE?
- ¿Qué es TCP incast?
Al principio ignoré esta pregunta, pero luego, vi la respuesta de Kelly Kinkade (la respuesta de Kelly Martin) y me sorprendió cuando leí que 127.1 = 127.0.0.1. Me preguntaba cómo nunca había encontrado este escenario.
De todos modos … queriendo saber por qué esta era una dirección válida en el mundo IPv4 que dejé atrás hace unos años … busqué “127.1” y encontré al culpable.
LA RESPUESTA REAL COMIENZA AQUÍ:
La única razón por la que ve este formato de dirección aceptable y compatible es por cómo se implementa la función inet_aton () en el BSD 4.x original . Echar un vistazo a este código debería hacer que las cosas sean obvias: bsd-inet_aton.c
Antes de saltar sobre mí para golpearme, sí, me doy cuenta de que te he dado una referencia a inet_aton tal como existe en la base de código SSH de Apple, pero mira la licencia en la parte superior de ese archivo. Ese código fue sacado directamente de OpenBSD. OpenBSD está bastante cerca del 4.4 BSD original.
¡OKAY! Ahora, si miras a través de ese código , la verdadera magia ( si podemos llamarlo así ) comienza en la declaración de cambio de caso donde el culpable está oculto . Esencialmente, lo que este código hace es que clasifica la cadena de dirección IP dada en 4 formatos diferentes:
- un entero de 32 bits directo
- una dirección IP de formato de puntos con solo 2 partes , como en este caso de 127.1, donde toma la parte superior (8 bits) como la red y la parte inferior como los últimos 24 bits que representan el host
- una dirección IP de formato punteado con 3 partes con los 8 bits superiores en red, los siguientes 8 bits en subred, los últimos 16 bits en host
- una dirección IP de formato punteado con 4 partes donde cada parte de 8 bits es lo que la gente común como yo considera que es una dirección IP (por ejemplo, 127.0.0.1)
NOTA: Revisé un montón de RFC sobre las especificaciones de dirección IPv4 y NO se menciona que esto sea aceptable o NO. En este caso, la implementación 4.4 BSD ha creado un estándar que todos los demás sistemas operativos (Linux y aparentemente incluso Windows) han seguido ciegamente.
(Tenga en cuenta: que Kelly Kinkade ha confirmado que este artefacto de código ha existido durante mucho tiempo, al menos desde 4.3 BSD. Para ir a lo seguro, mi respuesta real había comenzado con 4.x BSD. 😀 Y si aún no lo ha hecho , Le recomiendo que mire la respuesta de Kelly Kinkade a ¿127.1 es una dirección IP válida?)
El punto importante a tener en cuenta aquí es que todas las siguientes direcciones son válidas :
- 2130706433
- 127,1
- 127.0.1
- 127.0.0.1
Todos ellos representan la misma dirección “127.0.0.1” . En otras palabras, ¡podría escribir “ping ” en cualquiera de esas direcciones y estaría haciendo ping a 127.0.0.1! ¿Cuan genial es eso?
En una nota final, tomé el código OpenBSD / Apple mencionado anteriormente, lo convertí en un programa (un trabajo de hackeo realmente malo) y lo ejecuté a través de gdb antes de escribir esta explicación para asegurarme de que entendía cómo sucedió la interpretación de la dirección. No puedo encontrar una manera de adjuntar mi archivo fuente a mi respuesta aquí (todavía nuevo en Quora) … pero, puedo enviarle mi archivo .c si desea ejecutar el código.
HTH!