Respuestas:
Lo primero que determina un cliente es qué protocolos están disponibles. Supongamos que tanto IPv4 como IPv6 están disponibles (de lo contrario, la respuesta a qué protocolo elegir es trivial;) Luego realizará una búsqueda de DNS para los registros A (dirección IPv4) y AAAA (dirección IPv6). Si solo se devuelve un tipo, lo usará. Si se devuelven las direcciones IPv4 e IPv6, el comportamiento predeterminado depende un poco del software del cliente. Por lo general, se utiliza RFC 3484 .
Según los estándares oficiales, debería preferir IPv6, pero debido a que hay algunas máquinas (0.01% o menos) que han configurado incorrectamente IPv6, los clientes se han vuelto más inteligentes. La mayoría de los navegadores en estos días intentarán conectarse a través de IPv6, pero si no obtienen una conexión que funcione dentro de los 300 milisegundos, intentarán conectarse a través de IPv4 en paralelo. Luego se utiliza la primera conexión que tiene éxito. Esto está cubierto en el Happy Eyeballs RFC .
Apple cambió esto en Lion. Allí, el sistema operativo realmente realiza un seguimiento del rendimiento de todas las conexiones, y si determina que la conexión IPv4 tiene una latencia menor que la conexión IPv6, comenzará a preferir IPv4. Pero si la conexión IPv4 se vuelve más lenta, podría volver a IPv6. Eche un vistazo a este hilo de la lista de correo para una discusión de esta característica.
Para el usuario, no debería importar si se utiliza IPv4 o IPv6, siempre que funcione. IPv4 e IPv6 deben proporcionarse igualmente bien. Los sitios web deberían funcionar exactamente igual sobre IPv4 que sobre IPv6, etc.
IPv4 se mantendrá en uso durante muchos años. Se volverá inutilizable una vez que los nuevos servicios (sitios web, juegos, etc.) se implementen solo a través de IPv6 porque no hay más direcciones IPv4 nuevas para usar. Y en algún momento todo lo que funciona sobre IPv4 también funcionará sobre IPv6. En ese momento, deshabilitar IPv4 ahorrará tiempo y dinero (¿por qué mantener dos protocolos cuando uno es suficiente?).
apt-get update
por ejemplo, intenta conectarse a hosts ipv6, pero el host en sí ni siquiera tiene una dirección IPv6, aparte de su enlace local.
El paso intermedio que se está utilizando ahora se conoce como túnel. Esencialmente, los paquetes IPv6 viajan dentro de los paquetes IPv4 hasta que alcanzan un punto en el que pueden ser despojados de la encapsulación IPv4 y enviados al otro lado en una red IPv6 completa. Por supuesto, hay mucha más complejidad que eso, pero el concepto básico en general es el mismo en todos los ámbitos.
A medida que más y más dispositivos sean compatibles con IPv6, y las personas se familiaricen más con el uso de las direcciones, IPv6 verá un mayor uso. No creo (opinión personal) que IPv6 sea realmente aceptado y vea un despliegue a gran escala en las PYMES y el mercado personal hasta que el espacio IPv4 se convierta en un producto costoso.
En algún momento en un futuro bastante lejano, cuando IPv6 impulse una abrumadora mayoría del tráfico, podría ver una reversión del destino de IPv4, donde el tráfico de IPv4 debe encapsularse dentro de los paquetes regulares de IPv6 y los intermediarios de túnel desempeñan un papel similar (pero invertido) debido a la falta de enrutamiento IPv4 amplio / asignaciones de IP.
Creo que estás preguntando cómo una aplicación decide cómo elegir. Desde el lado del programa, depende de la implementación de la aplicación. Si el codificador hace de IPv6 una prioridad más alta que IPv4, por ejemplo, primero intentará usar getipv6addr (). Si eso no está configurado o falla, intentará usar getaddr (), etc. En base a esto, la aplicación enviará la solicitud a través de IPv6 primero, o viceversa.