Risposte:
La prima cosa che determina un client è quali protocolli sono disponibili. Supponiamo che siano disponibili sia IPv4 che IPv6 (altrimenti la risposta a quale protocollo scegliere è banale;) Quindi eseguirà una ricerca DNS per entrambi i record A (indirizzo IPv4) e AAAA (indirizzo IPv6). Se viene restituito un solo tipo, lo utilizzerà. Se vengono restituiti gli indirizzi IPv4 e IPv6, il comportamento predefinito dipende un po 'dal software client. Di solito viene utilizzato RFC 3484 .
Secondo gli standard ufficiali dovrebbe preferire IPv6, ma poiché ci sono alcune macchine (0,01% o meno) che hanno configurato erroneamente IPv6, i client sono diventati più intelligenti. La maggior parte dei browser in questi giorni tenterà di connettersi tramite IPv6, ma se non ottengono una connessione funzionante entro 300 millisecondi, proveranno a connettersi su IPv4 in parallelo. Viene quindi utilizzata la prima connessione riuscita. Questo è coperto da Happy Eyeballs RFC .
Apple ha cambiato questo in Lion. Lì il sistema operativo in realtà tiene traccia delle prestazioni di tutte le connessioni e se determina che la connessione IPv4 ha una latenza inferiore rispetto alla connessione IPv6, inizierà a preferire IPv4. Ma se la connessione IPv4 diventa più lenta, potrebbe tornare a IPv6. Dai un'occhiata a questo thread della mailing list per una discussione su questa funzionalità.
Per l'utente non dovrebbe importare se si utilizza IPv4 o IPv6, purché funzioni. IPv4 e IPv6 dovrebbero essere forniti ugualmente bene. I siti Web dovrebbero funzionare esattamente allo stesso modo su IPv4 come su IPv6, ecc.
IPv4 rimarrà in uso per molti anni a venire. Diventerà inutilizzabile una volta che i nuovi servizi (siti Web, giochi, ecc.) Saranno distribuiti solo su IPv6 perché non ci sono più nuovi indirizzi IPv4 da utilizzare. E a un certo punto tutto ciò che funziona su IPv4 funzionerà anche su IPv6. A quel punto la disabilitazione di IPv4 farà risparmiare tempo e denaro (perché mantenere due protocolli quando uno è sufficiente?).
apt-get update
ad esempio, tenta di connettersi agli host ipv6, ma l'host stesso non ha nemmeno un indirizzo IPv6, a parte il suo link-local.
Il passaggio intermedio attualmente in uso è noto come tunneling. Essenzialmente i pacchetti IPv6 viaggiano all'interno dei pacchetti IPv4 fino a quando non raggiungono un punto in cui possono essere rimossi dall'incapsulamento IPv4 e inviati dall'altra parte su una rete IPv6 completa. Naturalmente c'è molta più complessità di così, ma il concetto di base in generale è lo stesso su tutta la linea.
Man mano che sempre più dispositivi diventano IPv6 e le persone acquisiscono maggiore familiarità con l'utilizzo degli indirizzi, IPv6 vedrà un maggiore utilizzo. Non credo (opinione personale) che IPv6 sarà veramente abbracciato e vedrà un lancio su larga scala nel mercato SMB e personale fino a quando lo spazio IPv4 diventerà un prodotto costoso.
Ad un certo punto in un futuro abbastanza lontano, quando IPv6 alimenta la stragrande maggioranza del traffico, ho potuto vedere un'inversione del destino per IPv4, in cui il traffico IPv4 deve essere incapsulato all'interno dei pacchetti IPv6 regolari e i broker di tunnel svolgono un ruolo simile (ma invertito) a causa di la mancanza di routing IPv4 / assegnazioni IP estese.
Penso che tu stia chiedendo come un'app decide come scegliere. Dal lato del programma, dipende dall'implementazione dell'applicazione. Se il programmatore rende IPv6 una priorità più alta rispetto a IPv4, ad esempio, proverà innanzitutto a utilizzare getipv6addr (). Se questo non è configurato o fallisce, allora proverà a usare getaddr (), ecc. In base a ciò, l'app invierà prima la richiesta tramite IPv6 o viceversa.