Por que o localhost IP 127.0.0.1?

85

Gostaria de saber qual é a origem da decisão de tomar localhosto endereço IP 127.0.0.1. Qual é o "significado" de 127? qual é o "significado" de 0.0.1?

Roee Adler
fonte
2
Também estou curioso sobre isso. O loopback do IPv6 é 0: 0: 0: 0: 0: 0: 0: 1, o que faz sentido para mim.
Hyperslug 29/08/2009
1
Sim, localhost do IPv6 não levanta muitas perguntas :)
Roee Adler
21
Ainda não vi um tapete de porta "Não há lugar como 0: 0: 0: 0: 0: 0: 0: 1"!
William Hilsum 04/09/09
9
@ Wil Compactá-lo para "não há lugar como :: 1" e você terá um pouco mais de negócios.
New123456 04/04
6
@WilliamHilsum expanda-o para "Não há lugar como 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" e cobra mais.
Nick T

Respostas:

87

127 é o último número de rede em uma rede classe A com uma máscara de sub-rede 255.0.0.0. 127.0.0.1é o primeiro endereço atribuível na sub-rede. 127.0.0.0não pode ser usado porque esse seria o número do fio. Mas o uso de outros números para a parte do host deve funcionar bem e voltar ao uso 127.0.0.1. Você pode tentar você mesmo executando o ping, 127.1.1.1se desejar. Por que eles esperaram até o último número de rede para implementar isso? Eu não acho que esteja documentado.

John T
fonte
14
As únicas razões pelas quais eu os veria escolher arbitrariamente 127 é que é um número fácil de lembrar (01111111), e talvez eles estivessem permitindo que 16 milhões de endereços de host pudessem se comunicar apenas consigo mesmo (como alguns programas e componentes do Windows usam hoje em dia). Os RFCs realmente mencionaram apenas que é uma prática padrão que 127.0.0.1/32 seja usado para loopback. É bastante nebuloso o que eles pretendiam para o resto do bloco, além de voltar ao host e nunca atingir a rede, daí a minha especulação acima.
RoyalKnight
2
A reversão de todos os endereços de bloco para 127.0.0.1 depende da implementação e pode ser apenas uma peculiaridade da pilha do Linux. O Solaris exige pelo menos que uma interface seja vinculada ao endereço de destino para que seu teste de ping seja bem-sucedido.
Jlliagre
56

A primeira menção que posso encontrar sobre a atribuição de 127 como loopback é novembro de 1986 RFC 990, de autoria de Reynolds e Postel:

O endereço zero deve ser interpretado como significando "isto", como em "esta rede".

Por exemplo, o endereço 0.0.0.37 poderia ser interpretado como significando o host 37 nesta rede.

...

O número de rede classe A 127 é atribuído à função "loopback", isto é, um datagrama enviado por um protocolo de nível superior a um endereço de rede 127 deve retornar dentro do host. Nenhum datagrama "enviado" para um endereço de rede 127 deve aparecer em qualquer rede em qualquer lugar.

Mesmo em setembro de 1981, as RFC 790 , 0 e 127 já estavam reservadas:

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

0 e 127 eram as únicas redes reservadas de Classe A em 1981. 0 foi usado para apontar para um host específico, de modo que deixou 127 para loopback.

Eu sei que isso não responde à pergunta, mas isso é o mais antigo que eu pude cavar. Poderia ter feito mais sentido escolher 1.0.0.0 para loopback, mas isso já foi dado à BBN Packet Radio Network.

hyperslug
fonte
23

Os designers da Internet realmente sabiam como o hardware funcionava e os projetaram com a implementação de baixo nível em mente.

Os valores 0, 127 e 255 são especiais na montagem de 8 bits e na programação de linguagem de máquina, pois existem "truques" que você pode usar para testar esses valores e ramificar para código diferente usando instruções menores que são executadas mais rapidamente do que para outros números inteiros. 127 é o número inteiro de 8 bits mais alto e assinado, portanto, incrementá-lo em 1 causará um estouro assinado. Da mesma forma, incrementar 255 causará um estouro sem sinal. Simplesmente carregar o valor 0 em um registrador geralmente definirá um sinalizador zero no chip. Imagine que o programa de rede se parece com isso no pseudocódigo:

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

Embora dependa do chip, naqueles dias a maioria dos chips podia codificar esses testes com 2 palavras, 3 palavras e 3 palavras, respectivamente (total de 8 palavras) e, além disso, esses testes específicos provavelmente eram executados em 1 ciclo de clock cada. Usar qualquer outro valor provavelmente exigiria 4 palavras cada (total de 12 palavras), um aumento de 50% no tamanho do código e provavelmente um aumento de 50% no tempo de execução.

Joseph Bui
fonte
1
Observe que eu usei "palavras" porque as máquinas antigas naquela época tinham tamanhos de palavras incomuns, mas elas ainda usavam aritmética de 8 bits. Para um 8088, eu teria dito "bytes".
31711 Joseph Bui
5

Se você pensar no significado de um host local ou endereço IP de loopback, percebe que nunca deseja ver esse endereço ou a rede à qual esse endereço pertence, fora de um host. (Dentro de um host, está escuro demais para vê-lo. Desculpas a Mark Twain.)

Então, alguém teve que escolher uma rede IP para representar este endereço de host local. Não me lembro de quem o escolheu primeiro, mas está especificado na solicitação de comentários da IETF, emitida periodicamente como "Requisitos de host".

Isso foi feito há muito tempo, que a idéia de "desperdiçar" um endereço inteiro de classe A não passou pela cabeça de ninguém na época.

O utilitário do localhost é que você pode conversar consigo mesmo usando um endereço IP codificado. Foi usado muito antes de existir o Sistema de Nomes de Domínio. Você poderia realmente usar qualquer um dos endereços válidos 127.xxx, mas ninguém nunca usa. Você não pode esgueirar-se e usar 127 como uma rede real porque o RFC "Requisitos de roteador" proíbe o roteamento dessa rede em qualquer Internet.

kwe
fonte
4

Primeiro, todo o intervalo 127.xxx aponta para o seu host local.
127 no binário é "01111111". "11111111" = 255 e 0 são reservados, portanto a escolha é óbvia :)

Kolypto
fonte
25
Como é óbvio de novo?
Roee Adler 30/08/09
Eu acredito que eles apenas escolheram algo simples. Novamente, todos os "1" s é reservado, por isso, um zero foi adicionado :)
kolypto
então por que não 10111111? :) ou 11011111 ou 11101111 ou 11110111 ou 11111011 ou 11111101 ou algo parecido?
Mushex Antaranian
1
Não. Tente novamente.
Ardee Aram
4

Porque quando esses padrões foram criados, os computadores eram lentos e geralmente limitados a registros de 8 bits. A comparação de números com números era muito lenta, especialmente se esses números tivessem que ser buscados na parte de trás e, em seguida, MUITO memória lenta. Registros, ou seja, o armazenamento "CPU on board" foi muito mais rápido.

Além disso, esses computadores antigos tinham instruções especiais e mais rápidas para detectar "igual a zero", "diferente de zero", "número inteiro negativo / positivo" (onde o sinal estava ... adivinhem, o bit mais à esquerda, agora veja uma conexão com 127 , esse é o número com todo o binário "1", exceto o sinal = mais à esquerda =).

Portanto, esses eram números especiais, porque permitiam que truques de programação economizassem muitos ciclos de CPU em operações realizadas com freqüência.

Você nunca veria uma instrução "IF CallerIP =" 0 ", mas" IF NotZero (CallerIP) ".

Você pode verificar as instruções de montagem antigas como "BEQ, BNE" (6502 CPUs) para obter explicações mais longas. Verifique também esta página .

No final:

0, 255 e 127 podem ser verificados com uma instrução mais rápida. Linguagens ainda mais de alto nível, como C, têm funções de comparação de "atalho" que o compilador pode otimizar internamente em uma única instrução.

Nos anos 70 e 80, os programadores realmente produziram arquiteturas magníficas com recursos escassos; por trás de padrões como a numeração IP, há muito pensamento e genialidade.

Dario Fumagalli
fonte
Ótima resposta. Esta é realmente a explicação mais clara e sensata.
not2qubit
Na verdade, quando o IP foi projetado e algumas das bases iniciais foram estabelecidas, trabalhar com dados em múltiplos inteiros de 8 bits não era um dado. Muitas arquiteturas da época tinham registros e tamanhos de palavras em múltiplos de 12 ou 18 bits, por exemplo. Esta é uma das razões pelas quais o octal era tão popular na época; 18 bits podem ser representados como exatamente 6 dígitos octais sem perda e sem desperdício; 12 bits são 4 dígitos octais. Os microcomputadores normalmente trabalhavam em quantidades de 8 bits, mas somente muito mais tarde os microcomputadores começaram a ser conectados regularmente (especialmente diretamente) à Internet.
um CVn