Por que o IP localhost 127.0.0.1?

77

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

    
por Roee Adler 29.08.2009 / 07:39

6 respostas

85

127 é o último número de rede em uma rede de classe A com uma máscara de sub-rede de 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 qualquer outro número para a parte do host deve funcionar bem e voltar a usar 127.0.0.1 . Você mesmo pode tentar fazendo o ping de 127.1.1.1 , se desejar. Por que eles esperaram até o último número de rede para implementar isso? Não acho que esteja documentado.

    
por 29.08.2009 / 07:50
54

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

The address zero is to be interpreted as meaning "this", as in "this network".

For example, the address 0.0.0.37 could be interpreted as meaning host 37 on this network.

...

The class A network number 127 is assigned the "loopback" function, that is, a datagram sent by a higher level protocol to a network 127 address should loop back inside the host. No datagram "sent" to a network 127 address should ever appear on any network anywhere.

Já em setembro de 1981, RFC 790 , 0 e 127 já estavam reservados:

000.rrr.rrr.rrr                 Reserved                     [JBP]
...
127.rrr.rrr.rrr                 Reserved                     [JBP]

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

Eu sei que isso não responde a pergunta, mas isso é o mais antigo possível. Pode ter sido mais sensato escolher 1.0.0.0 para loopback, mas isso já foi dado à BBN Packet Radio Network.

    
por 29.08.2009 / 09:21
22

Os designers da Internet realmente sabiam como o hardware funcionava e projetaram com uma 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 em linguagem de máquina porque existem "truques" que podem ser usados para testar esses valores e desviar para código diferente usando instruções menores que executam mais rápido que outros inteiros. 127 é o maior número inteiro de 8 bits assinado, portanto incrementá-lo por 1 causará um estouro assinado. Da mesma forma, incrementar 255 causará estouro não assinado. Simplesmente carregar o valor 0 em um registrador geralmente irá definir um sinalizador zero no chip. Imagine o programa de rede com esta aparência no pseudocódigo:

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

Embora dependa do chip, nesses dias a maioria dos chips poderia codificar esses testes com 2 palavras, 3 palavras e 3 palavras respectivamente (total de 8 palavras) e, além disso, todos os testes específicos seriam executados em um 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 um aumento de 50% no tempo de execução.

    
por 15.04.2011 / 17:36
5

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

Então, alguém precisou escolher uma rede IP para representar esse endereço de host local. Não me lembro de quem o escolheu primeiro, mas está especificado no IETF Request for Comments que é emitido periodicamente como "Requisitos do Host".

Isso foi feito há muito tempo, que a ideia de "desperdiçar" um endereço inteiro da turma A não entrava na mente de ninguém na época.

O utilitário de localhost é que você pode falar sozinho usando um endereço IP codificado. Foi usado muito antes do sistema de nomes de domínio. Você pode realmente usar qualquer um dos endereços válidos 127.x.x.x, mas ninguém o faz. Você não pode se esgueirar e usar 127 como uma rede real, porque o RFC "Requisitos do roteador" não permite que você faça o roteamento dessa rede em qualquer Internet.

    
por 29.08.2009 / 08:02
4

Primeiro, todo o intervalo 127.x.x.x aponta para o seu localhost.
127 em binário é "01111111". "11111111" = 255 e 0 são reservados, então a escolha é óbvia:)

    
por 29.08.2009 / 23:21
3

Porque quando esses padrões foram criados, os computadores eram lentos e geralmente limitados a registros de 8 bits. Comparar números com números era muito lento, especialmente se esses números tivessem que ser buscados na parte de trás, então REALMENTE retardaria a memória. Registros, isto é, o armazenamento "CPU on board" era 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", "inteiro negativo / positivo" (onde o sinal era ... adivinhe, o bit mais à esquerda, agora conexão com 127, que é o número com todos os binários "1", exceto o mais à esquerda = sinal?).

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

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

Você poderia verificar antigas instruções de montagem como "BEQ, BNE" (CPUs 6502) para explicações mais longas. Também verifique esta página .

No final:

0, 255 e 127 podem ser verificados com uma instrução mais rápida. Ainda mais linguagens de alto nível como o C possuem funções de comparação de "encurtamento" que o compilador pode otimizar internamente em uma única instrução.

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

    
por 11.07.2013 / 10:23