Qual è la differenza tra 127.0.0.1 e localhost


157

Supponendo che quanto segue sia definito in .../hosts:

127.0.0.1 localhost

Quali sono, eventualmente, le effettive differenze tra l'utilizzo 127.0.0.1e localhostcome nome del server, in particolare quando si colpiscono processi in esecuzione localmente in attesa di connessioni?


15
Si potrebbe dire che localhostè indipendente dal protocollo, sia IPv4 che IPv6 funzioneranno.
Steve-o,

Risposte:


122

Bene, la differenza più probabile è che devi ancora fare una vera ricerca da localhostqualche parte.

Se lo usi 127.0.0.1, il software (intelligente) lo trasformerà direttamente in un indirizzo IP e lo utilizzerà. Alcune implementazioni di gethostbynamerileveranno il formato punteggiato (e presumibilmente il formato IPv6 equivalente) e non eseguiranno alcuna ricerca.

Altrimenti, il nome deve essere risolto. E non vi è alcuna garanzia che il tuo hostsfile verrà effettivamente utilizzato per quella risoluzione (prima o per niente), quindi localhostpotrebbe diventare un indirizzo IP completamente diverso .

Con ciò intendo che, su alcuni sistemi, un hostsfile locale può essere bypassato. Il host.conffile controlla questo su Linux (e molti altri Unices).


6
La differenza principale è che il collegamento può essere effettuato tramite Unix Domain Socket, come indicato qui: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues

/etc/nsswitch.confseleziona se hostso DNS viene utilizzato per primo per una ricerca host, se nss è in esecuzione.
Mark Lakata,

@DonViegues Questo è specifico per MySQL e cattiva progettazione IMO. Vedrà localhost e proverà a utilizzare unix-socket invece di connettersi tramite IP ma per 127.0.0.1 utilizza solo IP.
Arman Ordookhani,

@ArmanOrdookhani AFAIK se ci si connette a un host remoto tramite SSH e quindi da lì a un MySQL (come un tunnel SSH per raggiungere il server MySQL) è necessario utilizzare 127.0.0.1, poiché tutto va su TC / IP. Ma se 2 processi in esecuzione sulla stessa macchina vogliono connettersi, localhost (socket unix) è più veloce / ha un carico di risorse. Grazie!
Don Viegues,

1
@DonViegues Sì, hai ragione, il socket unix ha un sovraccarico minore di TCP / IP. Volevo solo menzionare questo comportamento specifico di MySQL e non qualcosa a livello di sistema operativo o di rete.
Arman Ordookhani,

36

Wikipedia lo riassume bene:

Sui moderni sistemi informatici, localhost come nome host si traduce in un indirizzo IPv4 nel blocco di rete 127.0.0.0/8 (loopback), in genere 127.0.0.1 o :: 1 in IPv6.

L'unica differenza è che sarebbe cercare nel sistema DNS ciò che si localhostrisolve. Questa ricerca è molto, molto veloce. Ad esempio, per arrivare a stackoverflow.comte lo hai digitato nella barra degli indirizzi (o usato un bookmarklet che puntava qui). Ad ogni modo, sei arrivato qui attraverso un nome host. localhostfornisce una funzionalità simile.


11
Questo è in realtà importante. localhost può risolversi in un indirizzo IPv6, mentre 127.0.0.1 no. L'uso di localhost su un sistema solo IPv6 può funzionare, mentre 127.0.0.1 non funzionerà poiché IPv4 non è disponibile.
Erwin Jansen,

32

alcune applicazioni tratteranno specialmente "localhost". il client mysql considererà localhost come una richiesta di connessione al socket del dominio unix locale invece di usare tcp per connettersi al server su 127.0.0.1. Potrebbe essere più veloce e potrebbe trovarsi in una zona di autenticazione diversa.

Non conosco altre app che trattano localhost in modo diverso da 127.0.0.1, ma probabilmente ce ne sono alcune.


8

Bene, tramite IP è più veloce.

Fondamentalmente, quando chiami per nome del server, viene convertito in IP originale.

Ma sarebbe difficile memorizzare un IP, per questo motivo è stato creato il nome di dominio.

Personalmente uso al http://localhostposto di http://127.0.0.1o http://username.


localhost è più veloce, non utilizza TCP / IP
Don Viegues,

@Don Viegues - ciò che dici è contraddetto dalle altre risposte in questo thread. Puoi elaborare?
Dikla,

Sì, copierò e incollerò altri miei commenti: la differenza principale è che la connessione può essere effettuata tramite Unix Domain Socket, come indicato qui: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues,

5
@DonViegues che è specifico di MySQL, che sta gestendo localhostin modo speciale . Altre applicazioni probabilmente continueranno a cercare localhost.
William Denniss,

0

Non c'è niente di diverso. Uno è più facile da ricordare dell'altro. Generalmente, si definisce un nome da associare a un indirizzo IP. Non è necessario specificare localhost per 127.0.0.1, è possibile specificare qualsiasi nome desiderato.


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.