Qual é a diferença entre 127.0.0.1 e localhost

157

Supondo que o seguinte esteja definido em .../hosts:

127.0.0.1 localhost

Quais são, se houver alguma, as diferenças reais entre usar 127.0.0.1e localhostcomo o nome do servidor, especialmente ao executar processos em execução local que estão escutando conexões?

Boêmio
fonte
15
Você poderia dizer que localhosté independente de protocolo, tanto o IPv4 quanto o IPv6 funcionarão.
Steve-o

Respostas:

122

Bem, a diferença mais provável é que você ainda precisa fazer uma pesquisa real em localhostalgum lugar.

Se você usar 127.0.0.1, o software (inteligente) apenas transformará isso diretamente em um endereço IP e o utilizará. Algumas implementações gethostbynamedetectarão o formato pontilhado (e presumivelmente o formato IPv6 equivalente) e não farão nenhuma pesquisa.

Caso contrário, o nome deve ser resolvido. E não há garantia de que seu hostsarquivo será realmente usado para essa resolução (primeiro ou de todo), para que localhostpossa se tornar um endereço IP totalmente diferente .

Com isso, quero dizer que, em alguns sistemas, um hostsarquivo local pode ser ignorado. O host.confarquivo controla isso no Linux (e em muitos outros Unices).

paxdiablo
fonte
6
A principal diferença é que a conexão pode ser feita via Domínio Unix soquete, como indicado aqui: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confseleciona se hostsou DNS é usado primeiro para uma pesquisa de host, se o nss estiver em execução.
Mark Lakata
@DonViegues Esse é o design específico do MySQL e da IMO. Ele verá o host local e tenta usar o soquete unix em vez de se conectar usando IP, mas para 127.0.0.1 ele apenas usa IP.
Arman Ordookhani
@ArmanOrdookhani AFAIK se você estiver se conectando a um host remoto via SSH e depois a um MySQL (como um túnel SSH para acessar o servidor MySQL), você precisará usar o 127.0.0.1, pois a coisa toda passa por TC / IP. Porém, se dois processos em execução na mesma máquina quiserem se conectar, o host local (soquete unix) será mais rápido / terá problemas de sobrecarga. Obrigado!
Don Viegues 30/07/19
1
@DonViegues Sim, você está certo, o soquete unix tem menos sobrecarga que o TCP / IP. Eu só queria mencionar que esse comportamento é específico do MySQL e não algo no sistema operacional ou no nível da rede.
Arman Ordookhani 30/07/19
36

A Wikipedia resume bem isso:

Em sistemas de computadores modernos, o host local como um nome de host se traduz em um endereço IPv4 no bloco de rede 127.0.0.0/8 (loopback), geralmente 127.0.0.1 ou :: 1 no IPv6.

A única diferença é que ele procuraria no DNS o sistema que localhostresolve. Essa pesquisa é muito, muito rápida. Por exemplo, para stackoverflow.comvocê digitar isso na barra de endereços (ou usar um bookmarklet que aponta aqui). De qualquer maneira, você chegou aqui através de um nome de host. localhostfornece uma funcionalidade semelhante.

Ryan Bigg
fonte
11
Isso é realmente importante. localhost pode resolver para um endereço IPv6, enquanto 127.0.0.1 não pode. O uso do host local em um sistema somente IPv6 pode funcionar, enquanto 127.0.0.1 não funcionará, pois o IPv4 não está disponível.
Erwin Jansen
32

alguns aplicativos tratam "localhost" especialmente. o cliente mysql tratará o localhost como uma solicitação para conectar-se ao soquete do domínio unix local em vez de usar o tcp para conectar-se ao servidor no 127.0.0.1. Isso pode ser mais rápido e pode estar em uma zona de autenticação diferente.

Não conheço outros aplicativos que tratam o host local de maneira diferente da 127.0.0.1, mas provavelmente existem alguns.

Wayne Walker
fonte
8

Bem, por IP é mais rápido.

Basicamente, quando você chama pelo nome do servidor, ele é convertido em IP original.

Mas seria difícil memorizar um IP, por esse motivo o nome de domínio foi criado.

Pessoalmente eu uso em http://localhostvez de http://127.0.0.1ou http://username.

A mascára
fonte
localhost é mais rápido, é não usar TCP / IP
Don Viegues
@ Don Viegues - o que você diz é contraditório com as outras respostas neste tópico. Você pode elaborar?
Dikla
Sim, copiarei e colo outro comentário meu: A principal diferença é que a conexão pode ser feita via soquete de domínio Unix, conforme indicado aqui: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
5
@DonViegues que é específico ao MySQL, que está lidando localhostde uma maneira especial . Outros aplicativos provavelmente ainda procurarão localhost.
William Denniss
0

Não há nada diferente. Um é mais fácil de lembrar do que o outro. Geralmente, você define um nome para associar a um endereço IP. Você não precisa especificar localhost para 127.0.0.1, você pode especificar qualquer nome que desejar.

d_ethier
fonte
-3

A principal diferença é que a conexão pode ser feita via Unix Domain Socket, conforme indicado aqui: localhost vs. 127.0.0.1

Don Viegues
fonte
6
A resposta que você vinculou é um caso especial específico do MySQL, que não se aplica em geral. en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss