Me preguntaba cuál es el origen de la decisión de tomar localhost
la dirección IP 127.0.0.1
. ¿Cuál es el "significado" de 127
? ¿Cuál es el "significado" de 0.0.1
?
networking
localhost
ip
loopback
Roee Adler
fuente
fuente
Respuestas:
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.1
es la primera dirección asignable en la subred.127.0.0.0
no se puede usar 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 usarlo127.0.0.1
. Puede probarlo haciendo ping127.1.1.1
si lo desea. ¿Por qué esperaron hasta el último número de red para implementar esto? No creo que esté documentado.fuente
La primera mención que puedo encontrar sobre la asignación de 127 como loopback es noviembre de 1986 RFC 990 escrito por Reynolds y Postel:
Incluso en septiembre de 1981, RFC 790 , 0 y 127 ya estaban reservados:
0 y 127 fueron las únicas redes reservadas de Clase A en 1981. 0 se utilizó para apuntar a un host específico, por lo que dejó 127 para loopback.
Sé que esto no responde la pregunta, pero esto es lo más atrás que pude cavar. 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.
fuente
Los diseñadores de Internet realmente sabían cómo funcionaba el hardware, y lo diseñaron con una implementación de bajo nivel en mente.
Los valores 0, 127 y 255 son especiales en el ensamblaje de 8 bits y la programación en lenguaje de máquina porque hay "trucos" que puede usar para probar estos valores y bifurcarse a diferentes códigos usando instrucciones más pequeñas que se ejecutan más rápido que para otros enteros. 127 es el entero de 8 bits con signo más alto, por lo que su incremento en 1 provocará un desbordamiento de signo. Del mismo modo, incrementar 255 causará un desbordamiento sin signo. Simplemente cargar el valor 0 en un registro generalmente establecerá un indicador de cero en el chip. Imagine que el programa de red se ve así en pseudocódigo:
Aunque depende del chip, en esos 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, esas pruebas particulares probablemente se ejecutarían en 1 ciclo de reloj cada una. El uso de cualquier otro valor probablemente requeriría 4 palabras cada una (un total de 12 palabras), 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.
fuente
Si piensa en lo que significa una dirección IP localhost o loopback, se da cuenta de que nunca quiere ver esa dirección, o la red a la que pertenece esa dirección, 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 IETF que se publica periódicamente como "Requisitos de host".
Se hizo hace tanto tiempo, que la idea de "desperdiciar" una dirección completa de clase A no entró en la mente de nadie en ese momento.
La utilidad de localhost es que puedes hablar contigo mismo usando una dirección IP codificada. Se usó mucho antes de que existiera el Sistema de nombres de dominio. En realidad, podría usar cualquiera de las direcciones válidas 127.xxx, pero nadie lo hace nunca. No puede colarse y usar 127 como una red real porque el RFC "Requisitos del enrutador" no permite el enrutamiento de esa red en cualquier Internet.
fuente
Primero, todo el rango 127.xxx apunta a su localhost.
127 en binario es "01111111". "11111111" = 255 y 0 están reservados, por lo que la elección es obvia :)
fuente
Porque cuando se crearon esos estándares, las computadoras eran lentas y generalmente se limitaban a registros de 8 bits. La comparación de números con números era muy lenta, especialmente si esos números debían buscarse desde atrás, entonces REALMENTE ralentizan la memoria. Los registros, es decir, el almacenamiento de "CPU a bordo" fueron mucho más rápidos.
Además, esas viejas computadoras tenían instrucciones especiales y más rápidas para detectar "igual a cero", "diferente a cero", "entero negativo / positivo" (donde estaba el signo ... adivina qué, el bit más a la izquierda, ahora ve una conexión con 127 , ese es el número con todos los "1" binarios, excepto el signo más a la izquierda =).
Por lo tanto, esos eran números especiales, porque permitían trucos de programación para ahorrar muchos ciclos de CPU en operaciones realizadas con frecuencia.
Nunca vería una instrucción "IF CallerIP =" 0 "sino una instrucción" IF NotZero (CallerIP) ".
Puede consultar las antiguas instrucciones de montaje como "BEQ, BNE" (6502 CPU) para obtener explicaciones más largas. También revise esta página .
En el final:
0, 255 y 127 podrían verificarse con una sola y más rápida instrucción. Incluso más lenguajes de alto nivel como C tienen funciones de comparación "shortuct" que el compilador puede optimizar internamente en una sola instrucción.
Los programadores de los años 70 y 80 realmente produjeron arquitecturas magníficas con recursos súper escasos, detrás de estándares como la numeración IP hay mucho pensamiento y genialidad.
fuente