Perché localhost IP 127.0.0.1?


85

Mi chiedevo quale sia l'origine della decisione di prendere localhostl'indirizzo IP 127.0.0.1. Qual è il "significato" di 127? qual è il "significato" di 0.0.1?


2
Sono curioso anche di questo. Il loopback IPv6 è 0: 0: 0: 0: 0: 0: 0: 1, il che ha senso per me.
hyperslug,

1
Sì, l'host locale di IPv6 non pone troppe domande :)
Roee Adler,

21
Non ho ancora visto un tappetino "Non c'è posto come 0: 0: 0: 0: 0: 0: 0: 1"!
William Hilsum,

9
Comprimilo in "Non c'è posto come :: 1" e avrai un po 'più di affari.
nuovo123456,

6
@WilliamHilsum espanderlo in "Non c'è posto come 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" e caricare di più.
Nick T,

Risposte:


87

127 è l'ultimo numero di rete in una rete di classe A con una subnet mask di 255.0.0.0. 127.0.0.1è il primo indirizzo assegnabile nella sottorete. 127.0.0.0non può essere utilizzato perché sarebbe il numero del filo. Ma l'utilizzo di qualsiasi altro numero per la parte host dovrebbe funzionare correttamente e ripristinare l'utilizzo 127.0.0.1. Puoi provarlo tu stesso eseguendo il ping 127.1.1.1se lo desideri. Perché hanno atteso l'ultimo numero di rete per implementarlo? Non credo sia documentato.


14
Le uniche ragioni per cui li vedrei scegliere arbitrariamente 127 è che è un numero facile da ricordare (01111111), e forse stavano permettendo a 16 milioni di indirizzi host di poter comunicare solo con se stesso e con se stesso (come il modo in cui alcuni programmi e componenti di Windows usano porti al giorno d'oggi). Le RFC hanno solo menzionato che è una pratica standard per 127.0.0.1/32 da utilizzare per il loopback. È piuttosto nebuloso su ciò che intendevano per il resto del blocco a parte il fatto che tornasse all'host e non colpisse mai la rete, quindi la mia precedente speculazione.
RoyalKnight,

2
Avere tutti gli indirizzi di blocco che ritornano a 127.0.0.1 dipende dall'implementazione e potrebbe forse essere solo una peculiarità dello stack Linux. Solaris richiede almeno un'interfaccia da associare all'indirizzo di destinazione affinché il test del ping abbia esito positivo.
jlliagre,

56

La prima menzione che posso trovare sull'assegnazione di 127 come loopback è la RFC 990 del novembre 1986 creata da Reynolds e Postel:

L'indirizzo zero deve essere interpretato nel senso di "questo", come in "questa rete".

Ad esempio, l'indirizzo 0.0.0.37 potrebbe essere interpretato come host di significato 37 su questa rete.

...

Alla classe di rete A numero 127 viene assegnata la funzione "loopback", ovvero un datagramma inviato da un protocollo di livello superiore a un indirizzo di rete 127 dovrebbe tornare indietro all'interno dell'host. Nessun datagramma "inviato" a un indirizzo di rete 127 dovrebbe mai apparire su qualsiasi rete ovunque.

Già nel settembre 1981 RFC 790 , 0 e 127 erano già riservati:

000.rrr.rrr.rrr Riservato [JBP]
...
127.rrr.rrr.rrr Riservato [JBP]

0 e 127 erano le uniche reti di Classe A riservate entro il 1981. 0 era usato per indicare un host specifico, quindi ha lasciato 127 per il loopback.

So che questo non risponde alla domanda, ma è il più lontano possibile. Potrebbe essere stato più sensato scegliere 1.0.0.0 per il loopback, ma questo era già stato dato a BBN Packet Radio Network.


23

I progettisti di Internet sapevano davvero come funzionava l'hardware e progettavano pensando all'implementazione di basso livello.

I valori 0, 127 e 255 sono speciali nella programmazione dell'assembly a 8 bit e nella programmazione del linguaggio macchina poiché esistono "trucchi" che è possibile utilizzare per testare questi valori e diramare su codice diverso utilizzando istruzioni più piccole che vengono eseguite più rapidamente rispetto ad altri numeri interi. 127 è il numero intero a 8 bit con il segno più alto, quindi aumentarlo di 1 provocherà un overflow con segno. Allo stesso modo, l'incremento di 255 provocherà un overflow senza segno. Caricare semplicemente il valore 0 in un registro di solito imposta un flag zero sul chip. Immagina che il programma di rete sia simile a questo in pseudocodice:

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

Sebbene dipenda dal chip, in quei giorni la maggior parte dei chip poteva codificare questi test con 2 parole, 3 parole e 3 parole rispettivamente (totale 8 parole) e inoltre quei particolari test avrebbero potuto essere eseguiti in 1 ciclo di clock ciascuno. L'uso di qualsiasi altro valore richiederebbe probabilmente 4 parole ciascuno (12 parole in totale), un aumento del 50% nella dimensione del codice e probabilmente un aumento del 50% nei tempi di esecuzione.


1
Nota che ho usato "parole" perché le vecchie macchine allora avevano dimensioni di parole insolite, ma spesso usavano ancora l'aritmetica a 8 bit. Per un 8088, avrei detto "byte".
Joseph Bui,

5

Se pensi a cosa significa un localhost o un indirizzo IP di loopback, ti ​​rendi conto di non voler mai vedere quell'indirizzo, o la rete a cui appartiene quell'indirizzo, al di fuori di un host. (All'interno di un host, è troppo buio per vederlo. Chiedo scusa a Mark Twain.)

Quindi, qualcuno ha dovuto scegliere una rete IP per rappresentare questo indirizzo localhost. Non ricordo chi lo scelse per primo, ma è specificato nella richiesta IETF di commenti che viene periodicamente emessa come "Requisiti dell'host".

Fu fatto tanto tempo fa che l'idea di "sprecare" un intero indirizzo di classe A non entrò nella mente di nessuno in quel momento.

L'utilità di localhost è che puoi parlare con te stesso usando un indirizzo IP codificato. Era usato molto prima che esistesse il Domain Name System. Puoi effettivamente utilizzare uno qualsiasi degli indirizzi validi 127.xxx, ma nessuno lo fa mai. Non puoi intrufolarti e usare 127 come una vera rete perché la RFC "Router Requirements" non consente di instradare mai quella rete su qualsiasi Internet.


4

Innanzitutto, l'intera gamma 127.xxx punta al tuo host locale.
127 in binario è "01111111". "11111111" = 255 e 0 sono riservati, quindi la scelta è ovvia :)


25
Come mai è di nuovo ovvio?
Roee Adler,

Credo che abbiano appena scelto qualcosa di semplice. Ancora una volta, tutti gli "1" sono riservati, quindi è stato aggiunto uno zero :)
kolypto

quindi perché non 10111111? :) o 11011111 o 11101111 o 11110111 o 11111011 o 11111101 o qualcosa del genere?
Mushex Antaranian,

1
No. Riprova.
Ardee Aram,

4

Perché quando questi standard sono stati creati, i computer erano lenti e di solito limitati ai registri a 8 bit. Il confronto tra numeri e numeri era molto lento, specialmente se quei numeri dovevano essere recuperati dal retro, quindi VERAMENTE memoria lenta. I registri, ovvero lo storage "CPU on board", erano molto più veloci.

Inoltre quei vecchi computer avevano istruzioni speciali e più veloci per rilevare "uguale a zero", "diverso da zero", "intero negativo / positivo" (dove il segno era ... indovina un po ', il bit più a sinistra, ora vede una connessione con 127 , questo è il numero con tutto il binario "1" tranne il segno più a sinistra =?).

Pertanto quelli erano numeri speciali, perché consentivano ai trucchi di programmazione di salvare molti cicli della CPU su operazioni eseguite di frequente.

Non vedresti mai un'istruzione "IF CallerIP =" 0 "ma un'istruzione" IF NotZero (CallerIP) ".

Puoi andare a controllare le antiche istruzioni di assemblaggio come "BEQ, BNE" (6502 CPU) per spiegazioni più lunghe. Controlla anche questa pagina .

Alla fine:

0, 255 e 127 possono essere controllati tutti con un'istruzione più veloce. Anche linguaggi di livello più elevato come C hanno funzioni di confronto "a corto raggio" che il compilatore può ottimizzare internamente in un'unica istruzione.

I programmatori degli anni 70 e 80 hanno davvero prodotto magnifiche architetture con risorse super-scarse, dietro standard come la numerazione IP c'è un sacco di pensiero e genialità.


Bella risposta. Questa è davvero la spiegazione più chiara e sensata.
not2qubit

In realtà, quando era stato progettato l'IP e sono state stabilite alcune delle prime basi per esso, lavorare con i dati in multipli interi di 8 bit non era un dato di fatto. Molte architetture a quel tempo avevano registri e dimensioni delle parole in multipli di 12 o 18 bit, per esempio. Questo è uno dei motivi per cui l'ottale era così popolare all'epoca; 18 bit possono essere rappresentati esattamente come 6 cifre ottali senza perdita e spreco; 12 bit sono 4 cifre ottali. I microcomputer in genere funzionavano in quantità di 8 bit, ma solo molto più tardi i microcomputer iniziarono a essere regolarmente connessi (soprattutto direttamente) a Internet.
un CVn il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.