¿Por qué la IP localhost es 127.0.0.1?

¿Por qué la IP localhost es 127.0.0.1?

Me preguntaba cuál es el origen de la decisión de tomar localhostla dirección IP 127.0.0.1. Cuál es el significado de 127? Cuál es el significado de 0.0.1?

Respuesta1

127 es el último número de red en una red de clase A con una máscara de subred de 255.0.0.0. 127.0.0.1es la primera dirección asignable en la subred. 127.0.0.0no se puede utilizar porque ese sería el número de cable. Pero usar cualquier otro número para la parte del host debería funcionar bien y volver a usar 127.0.0.1. Puedes probarlo tú mismo haciendo ping 127.1.1.1si lo deseas. ¿Por qué esperaron hasta el último número de red para implementar esto? No creo que esté documentado.

Respuesta2

La primera mención que puedo encontrar sobre la asignación de 127 como loopback es de noviembre de 1986.RFC 990escrito por Reynolds y Postel:

La dirección cero debe interpretarse en el sentido de "esta", como en "esta red".

Por ejemplo, la dirección 0.0.0.37 podría interpretarse como el host 37 en esta red.

...

Al número de red de clase A 127 se le asigna la función de "bucle", es decir, un datagrama enviado por un protocolo de nivel superior a una dirección de red 127 debe regresar dentro del host. Ningún datagrama "enviado" a una dirección de red 127 debería aparecer en ninguna red en ningún lugar.

Ya en septiembre de 1981RFC 790, 0 y 127 ya estaban reservados:

000.rrr.rrr.rrr Reservado [JBP]
...
127.rrr.rrr.rrr Reservado [JBP]

0 y 127 eran las únicas redes Clase A reservadas en 1981. 0 se usaba para apuntar a un host específico, por lo que quedaba 127 para loopback.

Sé que esto no responde la pregunta, pero esto es lo más atrás que pude profundizar. Podría haber tenido más sentido elegir 1.0.0.0 para loopback, pero eso ya se le dio a BBN Packet Radio Network.

Respuesta3

Los diseñadores de Internet realmente sabían cómo funcionaba el hardware y lo diseñaron teniendo en mente una implementación de bajo nivel.

Los valores 0, 127 y 255 son especiales en la programación en lenguaje de máquina y ensamblador de 8 bits porque hay "trucos" que puede usar para probar estos valores y pasar a código diferente usando instrucciones más pequeñas que se ejecutan más rápido que para otros números enteros. 127 es el entero de 8 bits con signo más alto, por lo que incrementarlo en 1 provocará un desbordamiento con signo. De manera similar, incrementar 255 provocará un desbordamiento sin signo. Simplemente cargar el valor 0 en un registro generalmente establecerá una bandera de cero en el chip. Imagine que el programa de red se ve así en pseudocódigo:

if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();

Aunque depende del chip, en aquellos días la mayoría de los chips podían codificar estas pruebas con 2 palabras, 3 palabras y 3 palabras respectivamente (un total de 8 palabras) y, además, era probable que todas esas pruebas en particular se ejecutaran en 1 ciclo de reloj cada una. Usar cualquier otro valor probablemente requeriría 4 palabras cada uno (12 palabras en total), un aumento del 50 % en el tamaño del código y probablemente también un aumento del 50 % en el tiempo de ejecución.

Respuesta4

Si piensa en lo que significa una dirección IP localhost o loopback, se dará cuenta de que nunca querrá ver esa dirección, o la red a la que pertenece, fuera de un host. (Dentro de un host, está demasiado oscuro para verlo. Disculpas a Mark Twain).

Entonces, alguien tuvo que elegir una red IP para representar esta dirección de host local. No recuerdo quién lo eligió primero, pero se especifica en la Solicitud de comentarios del IETF que se publica periódicamente como "Requisitos del host".

Se hizo hace tanto tiempo que la idea de "desperdiciar" una dirección entera de clase A no pasó por la mente de nadie en ese momento.

La utilidad de localhost es que puedes hablar contigo mismo utilizando una dirección IP codificada. Se utilizó mucho antes de que existiera el sistema de nombres de dominio. De hecho, podrías usar cualquiera de las direcciones válidas 127.xxx, pero nadie lo hace. No puede escabullirse y utilizar 127 como una red real porque el RFC "Requisitos del enrutador" no permite enrutar esa red en Internet.

información relacionada