Qual é a diferença entre o Locahost e o endereço IP local?
Se você está fazendo muitos ajustes na rede, configurando aplicativos baseados em LAN e ferramentas de servidor, ou apenas curioso, você provavelmente notou que há uma diferença entre o localhost e o endereço IP local. Leia para aprender as diferenças.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
A questão
Leitor de SuperUsuários O Diogo quer saber porque o comando ping trata o localhost e o endereço IP local de forma diferente quando, na superfície, parecem ser a mesma coisa:
Usando cmd e ping no Windows me deu os seguintes resultados:
Pingando “localhost”:
Ping “192.168.0.10” (endereço IP local):
Ambas as situações não são exatamente as mesmas?
Quer dizer, estou pingando a mesma interface, a mesma máquina e o mesmo endereço. Por que obtenho resultados tão diferentes?
Obviamente, há uma diferença de algum tipo, mas o que exatamente está acontecendo quando você alterna entre os dois?
A resposta
O colaborador do SuperUser, Tom Wijsman, oferece a seguinte percepção das sutis diferenças entre os dois:
Você não está pingando a mesma interface, sem interfaces físicas você ainda tem um "host local".
Seu
localhost
é usado para se referir ao seu computador a partir do seu IP "interno", e não de qualquer IP "externo" do seu computador. Assim, os pacotes de ping não passam por nenhuma interface de rede física; somente através de uma interface de loop back virtual que envia diretamente os pacotes de porta a porta sem nenhum salto físico.Você ainda pode se perguntar por que
localhost
está resolvendo:: 1
, enquanto tradicionalmente esperávamos resolver para o endereço IPv4127.0.0.1
. Observe que.localhost
é tradicionalmente um TLD (consulte RFC 2606) que aponta para o endereço IP de retorno (para IPv4, consulte RFC 3330, especialmente 127.0.0.0/8).Olhando pra cima
localhost
usandonslookup
nos dá:
nslookup localhost
… Nome: localhost Endereços: :: 1 127.0.0.1
Assim, o Windows prefere usar o endereço IP de loop back IPv6
:: 1
(veja RFC 2373) como está listado primeiro.Ok, então, de onde vem, vamos olhar para o arquivo hosts.
tipo% WINDIR% \ System32 \ Drivers \ Etc \ Hosts
… # Resolução de nome localhost é tratada no próprio DNS. # 127.0.0.1 localhost # :: 1 localhost…
Hmm, temos que olhar para as configurações de DNS do Windows.
Este artigo da KB nos informa sobre uma configuração que afeta o que o Windows prefere, enfatizada em negrito:
- No Editor do Registro, localize e clique na seguinte subchave do Registro:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip6 \ Parameters
- Clique duas vezes em DisabledComponents para modificar a entrada DisabledComponents.Nota: Se a entrada DisabledComponents não estiver disponível, você deverá criá-la. Para fazer isso, siga estas etapas:
- No menu Editar, aponte para Novo e clique em Valor DWORD (32 bits)..
- Digite DisabledComponents e pressione ENTER.
- Clique duas vezes em DisabledComponents..
- Digite qualquer um dos seguintes valores no campo Dados do valor: para configurar o protocolo IPv6 para o estado desejado e clique em OK:
- Tipo
0
para habilitar todos os componentes IPv6. (Configuração padrão do Windows)- Tipo
0xffffffff
para desabilitar todos os componentes IPv6, exceto a interface de loopback IPv6. Esse valor também configura o Windows para preferir usar o Protocolo da Internet versão 4 (IPv4) sobre o IPv6, modificando as entradas na tabela de diretivas de prefixo. Para obter mais informações, consulte Seleção de endereço de origem e destino.- Tipo
0x20
preferir o IPv4 ao IPv6 modificando entradas na tabela de diretivas de prefixo.- Tipo
0x10
para desabilitar o IPv6 em todas as interfaces do nontunnel (nas interfaces LAN e PPP [Point-to-Point Protocol]).- Tipo
0x01
para desabilitar o IPv6 em todas as interfaces de túnel. Estes incluem o protocolo ISATAP (Intrast-Site Automatic Tunnel Addressing Protocol), 6to4 e Teredo..- Tipo
0x11
Desabilitar todas as interfaces IPv6, exceto a interface de loopback IPv6.- Reinicie o computador para que esta configuração entre em vigor.
O que é essa tabela de diretivas de prefixo?
netsh interface ipv6 show prefixpolicies
(ouprefixpolicy
em versões anteriores)Precedence Label Prefix ---------- ----- -------------------------------- 50 0 :: 1/128 45 13 fc00 :: / 7 40 1 :: / 0 10 4 :: ffff: 0: 0/96 7 14 2002 :: / 16 5 5 2001 :: / 32 1 11 fec0 :: / 10 1 12 3fre :: / 16 1 10 :: / 96
Esta tabela decide quais prefixos têm precedência sobre outros prefixos durante as resoluções de DNS.
Ah, então usando essa KB nós poderíamos adicionar entradas aqui que denotam que o IPv4 tem precedência mais alta que o IPv6.
Nota: Não há razão para substituir esse comportamento, a menos que você esteja tendo problemas de compatibilidade. Mudar esta configuração no nosso Windows Server quebrou o nosso servidor de e-mail, por isso deve ser manuseado com cuidado…
Não há nada que gostemos mais do que uma resposta completa e informativa com os documentos de suporte vinculados para poupar. Claramente, o localhost e o endereço IP local são entidades distintas, servem a propósitos diferentes e agora todos sabemos por que.
Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.