¿127.1 es una dirección IP válida?

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 .

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!

Sí. Es un pequeño detalle conocido del análisis de direcciones IPv4 que, si hay menos de cuatro partes especificadas en la dirección, la última parte se trata como un entero de tantos bytes como sea necesario para completar la dirección en cuatro bytes. Por lo tanto, 128.10.5 es lo mismo que 128.10.0.5, y 127.1 es lo mismo que 127.0.0.1. 127.65536 sería lo mismo que 127.1.0.0.

Este es un remanente del direccionamiento con clase, y permite que la parte del host de una dirección IP se especifique como un entero entero. Técnicamente, el uso de una dirección de dos partes solo es válido con una red de clase A y una dirección de tres partes solo es válida con una red de clase B. Como 127 es clase A, 127.1 es válido.

No, no es una dirección IP válida.

Utilizamos 2 versiones de dirección IP: IPv4 e IPv6.

IPv4 tiene 4 octetos

IPv6 tiene 8 bloques de cuatro números hexadecimales.

ha mencionado solo 2 números decimales separados por un punto

No es una dirección IP válida.

puede consultar mi otra respuesta detallada en el enlace mencionado a continuación.

La respuesta de Pradeep Giddappa a ¿Cuál es la diferencia entre las direcciones IPv4, IPv6 y MAC de un dispositivo?

Gracias

Pradeep G

Esta es una pregunta desordenada.

La dirección IP válida generalmente significa IP direccionable externamente en Internet. Las direcciones IP no válidas significan la dirección IP para el uso interno de la red NAT.

Desde ese punto de vista, 127.1.0.0 o 127.0.0.1 es una IP no válida (rango de bucle invertido, que es 127.0.0.0/8 o 127.0.0.0 – 127.255.255.255).

¿Puedes hacer ping a 127.1 y esperar resultados válidos? Acabo de pinchar 127.1 en Linux / SuSE y se tradujo a 127.0.0.1. No es algo que esperaba, y no es algo que usaría en el futuro. Una dirección IP numérica siempre debe incluir los 4 bytes separados por tres puntos. Cualquier otra cosa es locura y eventualmente te morderá en el culo.

127.1 es una dirección válida, es una notación abreviada que las computadoras reconocen para 127.0.0.1. La razón tiene que ver con traducir la representación decimal al binario que la computadora reconoce: 01111111 00000000 00000000 00000001

Sin embargo, esta definitivamente no es una dirección enrutable. Se llama reservado como una dirección de bucle de retorno local y generalmente se usa para pruebas. Es común que las computadoras tengan este conjunto como la dirección de bucle de retorno local. Luego se puede verificar que la pila de protocolos funciona correctamente fuera de tener una conexión de red. Básicamente, comprueba que el protocolo IP puede aceptar datos de la capa de aplicación, reducirla y volver a subirla.

También se asocia comúnmente con los nombres localhost o loopback.

Para agregar a la excelente respuesta de Kelly Kinkade , 127.1 es una dirección de bucle invertido.

Por convención, cualquier octeto de alto orden que falte en una dirección IPv4 se rellenará implícitamente con ceros.

127.1 se convierte en 127.0.0.1

127.1.1 se convierte en 127.1.0.1

Entonces 127.1 es una dirección IP válida, aunque no canónica.

En IPv6, el relleno cero debe ser explícito, con la notación ::.

Por ejemplo, 2600 :: aaaa es la abreviatura de 2600: 0000: 0000: 0000: 0000: 0000: 0000: aaaa.

No. 127.0.0.1 es, pero tiene cuatro bytes, no dos.