Respostas:
A primeira coisa que um cliente determina é quais protocolos estão disponíveis. Vamos supor que o IPv4 e o IPv6 estejam disponíveis (caso contrário, a resposta para qual protocolo escolher é trivial;) Ele fará uma pesquisa de DNS para os registros A (endereço IPv4) e AAAA (endereço IPv6). Se apenas um tipo for retornado, ele será usado. Se os endereços IPv4 e IPv6 forem retornados, o comportamento padrão dependerá um pouco do software cliente. Normalmente, o RFC 3484 é usado.
De acordo com os padrões oficiais, ele deve preferir o IPv6, mas como existem algumas máquinas (0,01% ou menos) que configuraram o IPv6 de maneira incorreta, os clientes se tornaram mais inteligentes. Atualmente, a maioria dos navegadores tentará se conectar pelo IPv6, mas se eles não conseguirem uma conexão operacional em 300 milissegundos, tentarão se conectar pelo IPv4 em paralelo. A primeira conexão bem-sucedida é então usada. Isso é coberto pelo RFC Happy Eyeballs .
A Apple mudou isso no Lion. Lá, o sistema operacional controla o desempenho de todas as conexões e, se determinar que a conexão IPv4 possui uma latência menor que a conexão IPv6, começará a preferir o IPv4. Mas se a conexão IPv4 se tornar mais lenta, poderá voltar para o IPv6. Dê uma olhada neste tópico da lista de discussão para uma discussão sobre esse recurso.
Para o usuário, não importa se o IPv4 ou IPv6 é usado, desde que funcione. IPv4 e IPv6 devem ser fornecidos igualmente bem. Os sites devem funcionar exatamente da mesma maneira em IPv4 e em IPv6 etc.
O IPv4 permanecerá em uso por muitos anos. Ele se tornará inutilizável quando novos serviços (sites, jogos, etc.) forem implantados apenas no IPv6, porque não há mais endereços IPv4 novos a serem usados. E, em algum momento, tudo o que funciona com IPv4 também funcionará com IPv6. Nesse momento, desabilitar o IPv4 economizará tempo e dinheiro (por que manter dois protocolos quando um é suficiente?).
apt-get update
por exemplo, tenta conectar-se a hosts ipv6, mas o próprio host nem sequer possui um endereço IPv6, além do endereço link-local.
A etapa intermediária que está sendo usada agora é conhecida como encapsulamento. Essencialmente, pacotes IPv6 viajam dentro de pacotes IPv4 até atingirem um ponto em que podem ser retirados do encapsulamento IPv4 e enviados para o outro lado em uma rede IPv6 completa. É claro que há muito mais complexidade do que isso, mas o conceito básico em geral é o mesmo em todos os aspectos.
À medida que mais e mais dispositivos se tornam capazes de IPv6, e as pessoas se familiarizam mais com o uso dos endereços, o IPv6 verá um aumento no uso. Não acredito (opinião pessoal) que o IPv6 será realmente adotado e verá uma implantação em larga escala no mercado de pequenas e médias empresas e até que o espaço IPv4 se torne um produto caro.
Em algum momento no futuro bastante distante, quando o IPv6 fornecer uma grande maioria de tráfego, pude ver uma reversão do destino do IPv4, em que o tráfego IPv4 deve ser encapsulado em pacotes IPv6 regulares e os intermediários de túnel desempenham um papel semelhante (mas invertido) devido a a falta de roteamento amplo de IPv4 / atribuições de IP.
Acho que você está perguntando como um aplicativo decide como escolher. Do lado do programa, isso depende da implementação do aplicativo. Se o codificador fizer do IPv6 uma prioridade mais alta que o IPv4, por exemplo, ele primeiro tentará usar getipv6addr (). Se isso não estiver configurado ou falhar, ele tentará usar getaddr () etc. Com base nisso, o aplicativo enviará a solicitação pelo IPv6 primeiro ou vice-versa.