Usar cmd
e ping
no Windows me deu os seguintes resultados:
- Pingando "localhost":
- Ping "192.168.0.10" (endereço IP local):
As duas situações não são exatamente iguais?
Quero dizer, estou executando ping na mesma interface, na mesma máquina e no mesmo endereço. Por que obtenho resultados tão diferentes?
EDIT: Aqui está minha ipconfig /all
tela:
windows
ip-address
ping
localhost
Diogo
fonte
fonte
Respostas:
Você não está executando ping na mesma interface , sem nenhuma interface física, você ainda possui um "host local".
Seu
localhost
é usado para se referir ao seu computador a partir do IP "interno", não de nenhum IP "externo" do seu computador. Portanto, 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 em porta sem nenhum salto físico.Você ainda pode se perguntar por que
localhost
está resolvendo::1
, enquanto tradicionalmente esperamos que ele resolva para o endereço IPv4127.0.0.1
. Observe que.localhost
tradicionalmente é um TLD (consulte a RFC 2606 ) que aponta para o endereço IP de loopback (para IPv4, consulte a RFC 3330 , especialmente 127.0.0.0/8).Olhar para cima
localhost
usandonslookup
nos fornece:Portanto, o Windows prefere usar o endereço IP de retorno de loop IPv6
::1
(consulte RFC 2373 ), conforme listado primeiro.Ok, então, de onde ele vem, vamos dar uma olhada no arquivo hosts.
Hmm, temos que olhar para as configurações de DNS do Windows.
Este artigo da KB nos fala sobre uma configuração que afeta o que o Windows prefere, enfatizada em negrito:
O que é essa tabela de política de prefixo?
Esta tabela decide quais prefixos têm precedência sobre outros prefixos durante a resolução do DNS.
Ah, então, usando esse KB, poderíamos adicionar entradas aqui que indicam que o IPv4 tem precedência mais alta que o IPv6.
Nota: Não há motivo para substituir esse comportamento, a menos que você esteja enfrentando problemas compatíveis. A alteração dessa configuração em nosso Windows Server interrompeu nosso servidor de correio, portanto deve ser manuseada com cuidado ...
fonte
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.
Observe o usoTLD
e observe que é tradicionalmente definido . De fato,ping localhost.
trabalhos que confirmam que isso é pelo menos verdadeiro no contexto desta questão. Sua última frase não é o que a RFC disse; por favor, cite se ela "impede que ela se torne um TLD" porque, pelo que diz , é tradicionalmente um TLD. Então eles não se referem athe .localhost TLD
localhost
pode ser um TLD se um servidor DNS real responder por isso, mas geralmente localhost é geralmente definido como um nome de host em / etc / hosts, no qual os nomes de host são pesquisados antes de tentar resolver por DNS. Como tal,dig localhost
geralmente não retorna um registro "A" para 127.0.0.1 ou um registro AAAA para :: 1. Isso significa que a RFC está enganada quando diztraditionally been statically defined in host DNS implementations
, mas é retornada pelo serviço de pesquisa de nomes do sistema, que nem sempre usa o DNS.nslookup
retorna registros. Então, YMMV ...dig
retornos A, AAAA e NS registra paralocalhost
, incluindo um registro de autoridade para:localhost. IN NS localhost.
A interface de loopback existe independentemente da (s) interface (s) Ethernet.
Mesmo sem a complicação do IPv6, você teria dois endereços distintos.
Endereço IPv4 de loopback : 127.0.0.1 Endereço IPv4 da
sua interface Ethernet: 192.168.0.10
A interface de loopback pode estar em uma camada de software diferente, mais remota do hardware real. Duvido que dependa de alguma forma do seu driver de interface Ethernet específico, por exemplo.
fonte
Localhost e seu endereço IP não são a mesma coisa.
O host local é um endereço IP exclusivo de software especial, vinculado ao seu sistema. Localhost, ou 127.0.0.1, é um endereço de loop back. Ele sempre aponta para o seu sistema e só pode ser acessado no seu computador. Esse roteamento ocorre no nível do sistema operacional e, definitivamente, nunca sai da NIC ... Portanto, não há chance de atingir a rede ....
O ping do seu próprio endereço IP é semelhante, mas potencialmente envolve toda a pilha de rede, pois ele precisa detectar que é o seu endereço IP e encaminhá-lo corretamente ...
O efeito deve ser o mesmo, mas pode haver diferenças.
Por exemplo, desconecte seu cabo de rede. Faça ping no seu endereço IP estático. Você pode não encontrar uma rota para hospedar ou outros erros. Agora execute ping localhost ou 127.0.0.1 e ele funcionará.
fonte
Percebo pelas capturas de tela que esta pergunta não é sobre Linux, mas talvez seja um "caso em questão" útil.
Nesse sistema operacional, se você executar ping em um dos endereços do adaptador local, ele será convertido para o dispositivo de loopback (caso especial hack). Isso significa que os pacotes realmente vão para o dispositivo de loopback (que tem todas as implicações que você pode pensar: por exemplo, do ponto de vista do firewall, esses pacotes estão chegando na interface de loopback e corresponderão às regras dessa interface).
O dispositivo ao qual o IP está atribuído nunca verá os pacotes. (Isso é bom porque não faria a coisa certa com esses pacotes: desejaria enviar os otários para fora).
No entanto, se a interface que contém esse IP cair, você perderá essa conexão. O mapeamento para loopback irá parar de funcionar.
Portanto, em outras palavras, é um projeto viável considerar esses endereços locais como aliases para o dispositivo de loopback.
Referências de código:
http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623
Dê uma olhada na função
ip_route_output_slow
. Isso chamafib_lookup
e, se essa função retorna o códigoRTN_LOCAL
,dev_out
é reescrito para loopback:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
fonte
Parece que o alias "Localhost" está resolvendo o loopback do IPv6 e, quando você usa explicitamente um endereço IPv4, obviamente não.
fonte
@ebwhite está certo sobre o que.
Agora, o motivo pode ser o fato de você ter configurado o Teredo (não sei da sua captura de tela, canalizando-o para um arquivo de texto e colando toda a saída é melhor) - o comportamento do host local sendo IPv6 é consistente com os sistemas no meu Rede IPv4 apenas com o teredo instalado, mas os sistemas sem ele se comportam conforme o esperado
127.0.0.1
quando você faz pinglocalhost
. Eu testei isso com o Windows XP e preciso ver o que meus sistemas Windows 7 fazem e atualizar a pergunta.Geralmente, os sistemas usam o IPv6 como padrão se o IPv6 estiver disponível; portanto, seu sistema está funcionando como deveria por design .
fonte