
Usar cmd
y ping
en Windows me dio los siguientes resultados:
- Haciendo ping a "localhost":
- Haciendo ping a "192.168.0.10" (dirección IP local):
¿No son ambas situaciones exactamente iguales?
Quiero decir, estoy haciendo ping a la misma interfaz, a la misma máquina y a la misma dirección. ¿Por qué obtengo resultados tan diferentes?
EDITAR: Aquí está mi ipconfig /all
pantalla:
Respuesta1
No estás haciendo ping a la misma interfaz, sin interfaces físicas todavía tienes un "host local".
Su localhost
se utiliza para referirse a su computadora desde su IP "interna", no desde ninguna IP "externa" de su computadora. Entonces, los paquetes ping no pasan a través de ninguna interfaz de red física; solo a través de una interfaz de bucle virtual que envía directamente los paquetes de un puerto a otro sin ningún salto físico.
Quizás aún se pregunte por qué localhost
se resuelve en ::1
, mientras que tradicionalmente esperaríamos que se resuelva en la dirección IPv4 127.0.0.1
. Tenga en cuenta que .localhost
tradicionalmente es un TLD (consulteRFC 2606) que apunta a la dirección IP del bucle invertido (para IPv4, consulteRFC 3330, especialmente 127.0.0.0/8).
Buscar localhost
usando nslookup
nos da:
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
Por lo tanto, Windows prefiere utilizar la dirección IP de bucle invertido IPv6 ::1
(consulteRFC 2373) como aparece en primer lugar.
Bien, entonces, ¿de dónde viene? Veamos el archivo de hosts.
type %WINDIR%\System32\Drivers\Etc\Hosts
...
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
...
Mmmm, tenemos que mirar la configuración de DNS de Windows.
Este artículo de la base de conocimientonos informa sobre una configuración que afecta lo que prefiere Windows, resaltada en negrita:
En el Editor del Registro, busque y luego haga clic en la siguiente subclave del Registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
Haga doble clic en DisabledComponents para modificar la entrada DisabledComponents.
Nota: Si la entrada DisabledComponents no está disponible, debe crearla. Para hacer esto, siga estos pasos:
En el menú Editar, seleccione Nuevo y luego haga clic en Valor DWORD (32 bits).
Escriba DisabledComponents y luego presione ENTRAR.
Haga doble clic en Componentes deshabilitados.
Escriba cualquiera de los siguientes valores en el campo Información del valor: para configurar el protocolo IPv6 en el estado deseado y luego haga clic en Aceptar:
- Escriba
0
para habilitar todos los componentes IPv6. (Configuración predeterminada de Windows)- Escriba
0xffffffff
para deshabilitar todos los componentes de IPv6, excepto la interfaz de bucle invertido de IPv6. Este valor también configura Windows para que prefiera usar el Protocolo de Internet versión 4 (IPv4) sobre IPv6 modificando las entradas en la tabla de políticas de prefijo. Para obtener más información, consulte Selección de direcciones de origen y destino.- Escriba
0x20
para preferir IPv4 sobre IPv6 modificando las entradas en la tabla de políticas de prefijo.- Escriba
0x10
para deshabilitar IPv6 en todas las interfaces que no sean de túnel (tanto en interfaces LAN como de protocolo punto a punto [PPP]).- Escriba
0x01
para deshabilitar IPv6 en todas las interfaces del túnel. Estos incluyen el Protocolo de direccionamiento automático de túneles dentro del sitio (ISATAP), 6to4 y Teredo.- Escriba
0x11
para deshabilitar todas las interfaces IPv6 excepto la interfaz de bucle invertido IPv6.Reinicie la computadora para que esta configuración surta efecto.
¿Qué es esta tabla de políticas de prefijo?
netsh interface ipv6 show prefixpolicies
(oprefixpolicy
en versiones 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 3ffe::/16
1 10 ::/96
Esta tabla decide qué prefijos tienen prioridad sobre otros prefijos durante las resoluciones de DNS.
Ah, entonces usando ese KB podríamos agregar entradas aquí que indiquen 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 Windows rompió nuestro servidor de correo, por lo que debe manejarse con cuidado...
Respuesta2
Elinterfaz de bucle invertidoexiste independientemente de su(s) interfaz(es) Ethernet.
Incluso sin la complicación deIPv6tendrías dos direcciones distintas.
Bucle invertidoIPv4dirección: 127.0.0.1
Dirección IPv4 de su interfaz Ethernet: 192.168.0.10
La interfaz loopback bien podría estar en una capa de software diferente, más alejada del hardware real. Dudo que dependa de alguna manera de su controlador de interfaz Ethernet específico, por ejemplo.
Respuesta3
Localhost y su dirección IP no son lo mismo.
El localhost es una dirección IP exclusiva de software especial que está vinculada a su sistema. Localhost, o 127.0.0.1, es una dirección de bucle invertido. Siempre apunta a su sistema y solo se puede acceder a él desde su computadora. Este enrutamiento ocurre a nivel del sistema operativo y definitivamente nunca sale de 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 toda la pila de redes, ya que necesita detectar que es su dirección IP yencaminarlo 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 ninguna ruta al host u otros errores. Ahora haga ping a localhost o 127.0.0.1 y funcionará.
Respuesta4
Parece que el alias "Localhost" se está resolviendo en el loopback IPv6 y cuando usas explícitamente una dirección IPv4, obviamente no es así.