
Eu me perguntei qual é a origem da decisão de tomar localhost
o endereço IP 127.0.0.1
. Qual é o significado de 127
? qual é o significado de 0.0.1
?
Responder1
127 é o último número de rede em uma rede classe A com 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.0
não pode ser usado porque esse seria o número do fio. Mas usar quaisquer outros números para a parte do host deve funcionar bem e voltar a usar 127.0.0.1
. Você pode tentar fazer um ping, 127.1.1.1
se desejar. Por que esperaram até o último número de rede para implementar isso? Não creio que esteja documentado.
Responder2
A menção mais antiga que posso encontrar sobre a atribuição do 127 como loopback é de novembro de 1986RFC 990de autoria de Reynolds e Postel:
O endereço zero deve ser interpretado como significando “esta”, como em “esta rede”.
Por exemplo, o endereço 0.0.0.37 poderia ser interpretado como significando o host 37 nesta rede.
...
À rede classe A número 127 é atribuída a função "loopback", ou seja, um datagrama enviado por um protocolo de nível superior para um endereço de rede 127 deve retornar dentro do host. Nenhum datagrama “enviado” para um endereço de rede 127 deveria aparecer em qualquer rede em qualquer lugar.
Já em setembro de 1981RFC 790, 0 e 127 já estavam reservados:
000.rrr.rrr.rrr Reservado [JBP] ... 127.rrr.rrr.rrr Reservado [JBP]
0 e 127 eram as únicas redes Classe A reservadas em 1981. 0 era usado para apontar para um host específico, deixando 127 para loopback.
Eu sei que isso não responde à pergunta, mas isso é o mais antigo que pude cavar. Pode ter feito mais sentido escolher 1.0.0.0 para loopback, mas isso já foi fornecido à BBN Packet Radio Network.
Responder3
Os projetistas da Internet realmente sabiam como o hardware funcionava e projetaram tendo em mente a implementação de baixo nível.
Os valores 0, 127 e 255 são especiais em montagem de 8 bits e programação em linguagem de máquina porque existem "truques" que você pode usar para testar esses valores e ramificar para códigos diferentes 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 com sinal mais alto, portanto, incrementá-lo em 1 causará um estouro de sinal. Da mesma forma, incrementar 255 causará estouro não assinado. Simplesmente carregar o valor 0 em um registrador normalmente definirá um sinalizador zero no chip. Imagine que o programa de rede se pareça com isto em pseudocódigo:
if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();
Embora dependa do chip, naquela época 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 seriam 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 também.
Responder4
Se você pensar sobre o que significa um endereço IP de host local ou de loopback, perceberá que nunca deseja ver esse endereço, ou a rede à qual esse endereço pertence, fora de um host. (Dentro de um host, está muito escuro para vê-lo. Peço desculpas a Mark Twain.)
Então, alguém teve que escolher uma rede IP para representar esse endereço localhost. Não me lembro quem o escolheu primeiro, mas está especificado na solicitação de comentários da IETF, emitida periodicamente como "Requisitos do host".
Isso foi feito há tanto tempo que a ideia de “desperdiçar” um endereço inteiro de classe A não passou pela cabeça de ninguém na época.
A utilidade 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. Na verdade, você poderia usar qualquer um dos endereços válidos 127.xxx, mas ninguém o faz. Você não pode se esgueirar e usar 127 como uma rede real porque a RFC "Requisitos do roteador" proíbe o roteamento dessa rede em qualquer Internet.