¿Por qué es localhost IP 127.0.0.1?

85

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?

Roee Adler
fuente
2
Tengo curiosidad por esto también. El loopback de IPv6 es 0: 0: 0: 0: 0: 0: 0: 1, lo que tiene sentido para mí.
hyperslug
1
Sí, el localhost de IPv6 no
genera
21
¡Todavía no he visto un tapete de puerta "No hay lugar como 0: 0: 0: 0: 0: 0: 0: 1"!
William Hilsum
99
@Wil Comprímalo en "no hay lugar como :: 1" y obtendrá un poco más de negocios.
new123456
66
@WilliamHilsum amplíelo a "No hay lugar como 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" y cargue más.
Nick T

Respuestas:

87

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 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 usarlo 127.0.0.1. Puede probarlo haciendo ping 127.1.1.1si lo desea. ¿Por qué esperaron hasta el último número de red para implementar esto? No creo que esté documentado.

John T
fuente
14
Las únicas razones por las que los vería elegir arbitrariamente 127 es que es un número fácil de recordar (01111111), y tal vez permitían 16 millones de direcciones de host para poder comunicarse solo y consigo mismo (como la forma en que usan algunos programas y componentes de Windows puertos hoy en día). Los RFC solo mencionaron realmente que es una práctica estándar que 127.0.0.1/32 se use para loopback. Es bastante nebuloso en cuanto a lo que pretendían para el resto del bloque, aparte de que regresa al host y nunca golpea la red, de ahí mi especulación anterior.
RoyalKnight
2
Tener todas las direcciones de bloque revertidas a 127.0.0.1 depende de la implementación y podría ser una peculiaridad de la pila de Linux. Solaris al menos requiere que una interfaz esté vinculada a la dirección de destino para que su prueba de ping tenga éxito.
jlliagre
56

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:

La dirección cero debe interpretarse como "esto", 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 de retorno", es decir, un datagrama enviado por un protocolo de nivel superior a una dirección de red 127 debe volver al bucle dentro del host. Ningún datagrama "enviado" a una dirección de red 127 debería aparecer en ninguna red en ningún lugar.

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

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

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.

hiperslug
fuente
23

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:

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

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.

Joseph Bui
fuente
1
Tenga en cuenta que usé "palabras" porque las máquinas antiguas en ese entonces tenían tamaños de palabras inusuales, pero a menudo todavía usaban aritmética de 8 bits. Para un 8088, habría dicho "bytes".
Joseph Bui
5

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.

kwe
fuente
4

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 :)

Kolypto
fuente
25
¿Cómo es que es obvio de nuevo?
Roee Adler
Creo que simplemente eligieron algo simple. Nuevamente, todos los "1" están reservados, por lo que se agregó un cero :)
kolypto
Entonces, ¿por qué no 10111111? :) o 11011111 o 11101111 o 11110111 o 11111011 o 11111101 o algo así?
Mushex Antaranian
1
No. Inténtalo de nuevo.
Ardee Aram
4

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.

Dario Fumagalli
fuente
Gran respuesta. Esta es realmente la explicación más clara y sensata.
not2qubit
En realidad, cuando se diseñó la IP y se establecieron algunos de los primeros cimientos para ella, trabajar con datos en múltiplos enteros de 8 bits no era un hecho. Muchas arquitecturas en ese momento tenían registros y tamaños de palabras en múltiplos de 12 o 18 bits, por ejemplo. Esta es una razón por la cual octal era tan popular en ese momento; 18 bits se pueden representar como exactamente 6 dígitos octales sin pérdida ni desperdicio; 12 bits son 4 dígitos octales. Las microcomputadoras generalmente funcionaban en cantidades de 8 bits, pero fue mucho más tarde cuando las microcomputadoras comenzaron a conectarse regularmente (especialmente directamente) a Internet.
un CVn