Usar cmd
y ping
en Windows me dio los siguientes resultados:
- Pinging "localhost":
- Pinging "192.168.0.10" (dirección IP local):
¿No son las dos situaciones exactamente iguales?
Quiero decir, estoy haciendo ping a la misma interfaz, la misma máquina y la misma dirección. ¿Por qué obtengo resultados tan diferentes?
EDITAR: Aquí está mi ipconfig /all
pantalla:
windows
ip-address
ping
localhost
Diogo
fuente
fuente
Respuestas:
No está haciendo ping a la misma interfaz , sin ninguna interfaz física todavía tiene un "host local".
Su
localhost
se utiliza para referirse a su computadora desde su IP "interna", no desde ninguna IP "externa" de su computadora. Por lo tanto, los paquetes de ping no pasan a través de ninguna interfaz de red física; solo a través de una interfaz virtual de bucle de retorno que envía directamente los paquetes de puerto a puerto sin ningún salto físico.Todavía puede preguntarse por qué se
localhost
está resolviendo::1
, mientras que tradicionalmente esperaríamos que se resuelva en la dirección IPv4127.0.0.1
. Tenga en cuenta que.localhost
tradicionalmente es un TLD (consulte RFC 2606 ) que apunta de nuevo a la dirección IP de retorno de bucle (para IPv4, consulte RFC 3330 , especialmente 127.0.0.0/8).Buscar
localhost
usandonslookup
nos da:Por lo tanto, Windows prefiere usar la dirección IP de bucle de retorno de IPv6
::1
(consulte RFC 2373 ), ya que aparece en primer lugar.Bien, entonces, ¿de dónde viene? Miremos el archivo de hosts.
Hmm, tenemos que mirar la configuración de DNS de Windows.
Este artículo de KB nos habla sobre una configuración que afecta lo que Windows prefiere, enfatizado en negrita:
¿Qué es esta tabla de políticas de prefijo?
Esta tabla decide qué prefijos tienen prioridad sobre otros prefijos durante la resolución de DNS.
Ah, entonces usando esa KB podríamos agregar entradas aquí que denotan que IPv4 tiene mayor prioridad que IPv6.
Nota: No hay ninguna razón para anular este comportamiento, a menos que tenga problemas de compatibilidad. Cambiar esta configuración en nuestro servidor de Windows rompió nuestro servidor de correo, por lo que debe manejarse con cuidado ...
fuente
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.
cuenta el usoTLD
y la nota que se define tradicionalmente . De hecho,ping localhost.
funciona lo que confirma que esto es al menos cierto en el contexto de esta pregunta. Su última oración no es lo que dijo el RFC, sírvase citar si "evita que se convierta en un TLD" porque, por lo que dice , es tradicionalmente un TLD. De lo contrario no se referiríanthe .localhost TLD
localhost
puede ser un TLD si un servidor DNS real responde por él, pero generalmente localhost se define generalmente como un nombre de host en / etc / hosts, en el que se buscan los nombres de host antes de intentar resolver a través de DNS. Como tal,dig localhost
generalmente no devuelve un registro "A" para 127.0.0.1, o un registro AAAA para :: 1. Eso significa que el RFC se equivoca cuando dicetraditionally been statically defined in host DNS implementations
, sino que es devuelto por el servicio de búsqueda de nombres del sistema, que no siempre utiliza el DNS.nslookup
devuelve registros. Entonces, YMMV ...dig
declaraciones Registros A, AAAA y NS paralocalhost
, incluido un registro de autoridad para:localhost. IN NS localhost.
La interfaz de bucle invertido existe independientemente de su (s) interfaz (es) Ethernet.
Incluso sin la complicación de IPv6 , tendría dos direcciones distintas.
Dirección IPv4 de bucle invertido : 127.0.0.1 Dirección IPv4 de
su interfaz Ethernet: 192.168.0.10
La interfaz de bucle invertido podría estar en una capa de software diferente, más remota que el hardware real. Dudo que dependa de alguna manera de su controlador de interfaz Ethernet específico, por ejemplo.
fuente
Localhost y su dirección IP no son lo mismo.
El localhost es una dirección IP de software especial que está vinculada a su sistema. Localhost, o 127.0.0.1, es una dirección de bucle de retorno. Siempre apunta a su sistema, y solo es accesible desde su computadora. Este enrutamiento se produce a nivel del sistema operativo y definitivamente nunca abandona la NIC ... Por lo tanto, no hay posibilidad de que llegue a la red ...
Hacer ping a su propia dirección IP es similar, pero potencialmente involucra a toda la pila de redes, ya que necesita detectar que es su dirección IP y enrutarla correctamente ...
El efecto debería ser el mismo, pero puede haber diferencias.
Por ejemplo, desconecte su cable de red. Haga ping a su dirección IP estática. Es posible que no obtenga una ruta al host u otros errores. Ahora haga ping localhost o 127.0.0.1, y funcionará.
fuente
De las capturas de pantalla me doy cuenta de que esta pregunta no se trata de Linux, pero tal vez sea un "caso práctico" útil.
En ese sistema operativo, si hace ping a una de sus direcciones de adaptador local, se traduce al dispositivo de bucle invertido (pirateo de casos especiales). Esto significa que los paquetes realmente van al dispositivo de bucle invertido (que tiene todas las implicaciones que pueda pensar: por ejemplo, desde un punto de vista de firewall, esos paquetes están llegando a la interfaz de bucle invertido y coincidirán con las reglas para esa interfaz).
El dispositivo al que está asignada la IP nunca verá los paquetes. (Esto es bueno porque no haría lo correcto con esos paquetes: querría enviar los retoños).
Sin embargo, si la interfaz que contiene esa IP debería fallar, ha perdido esa conexión. La asignación a loopback dejará de funcionar.
En otras palabras, es un diseño viable considerar esas direcciones locales como alias para el dispositivo de bucle invertido.
Código de referencias:
http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623
Echa un vistazo a la función
ip_route_output_slow
. Esto llamafib_lookup
, y si esta función devuelve el códigoRTN_LOCAL
,dev_out
se reescribe en loopback:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
fuente
Parece que el alias "Localhost" se está resolviendo en el bucle invertido de IPv6 y, obviamente, cuando utiliza una dirección IPv4, obviamente no lo hace.
fuente
@ebwhite tiene razón sobre qué.
Ahora, el motivo podría ser que tengas configurado Teredo (no puedo distinguirlo de tu captura de pantalla, es mejor conectarlo a un archivo de texto y pegar todo el resultado): el comportamiento de localhost siendo IPv6 es consistente con los sistemas en mi IPv4 solo red con Teredo instalado, pero los sistemas sin él se comportan como espera que llegue
127.0.0.1
cuando hace pinglocalhost
. He probado esto con Windows XP y necesito ver qué hacen mis sistemas Windows 7 y actualizar la pregunta.En general, los sistemas predeterminan a IPv6 si IPv6 está disponible, por lo que su sistema funciona como debería por diseño .
fuente