Відповіді:
Перше, що визначає клієнт - це які протоколи доступні. Припустимо, що доступні як IPv4, так і IPv6 (інакше відповідь, який протокол вибрати, є тривіальним;) Після цього буде здійснено пошук DNS для записів A (IPv4) та AAAA (IPv6 адреса). Якщо буде повернуто лише один тип, він буде використовувати це. Якщо повертаються і IPv4, і IPv6 адреси, поведінка за замовчуванням трохи залежить від програмного забезпечення клієнта. Зазвичай використовується RFC 3484 .
Згідно з офіційними стандартами, він повинен віддавати перевагу IPv6, але оскільки є деякі (0,01% або менше) машини, які неправильно налаштували IPv6, клієнти стали розумнішими. Більшість браузерів сьогодні намагаються підключитися через IPv6, але якщо вони не отримають робочого з'єднання протягом 300 мілісекунд, вони спробують підключитися через IPv4 паралельно. Перше успішне з'єднання використовується. Про це висвітлено у RFC Happy Eyeballs .
Apple змінила це в Леві. Там операційна система фактично відстежує продуктивність усіх підключень, і якщо вона визначить, що з'єднання IPv4 має меншу затримку, ніж з'єднання IPv6, вона почне віддавати перевагу IPv4. Але якщо з'єднання IPv4 стає повільнішим, воно може перейти до IPv6. Погляньте на цю нитку списку розсилки для обговорення цієї функції.
Для користувача не має значення, чи використовується IPv4 або IPv6, якщо це працює. IPv4 та IPv6 повинні забезпечуватися однаково добре. Веб-сайти повинні працювати точно так само над IPv4, як над IPv6 тощо.
IPv4 залишиться використовуватиметься на довгі роки. Він стане непридатним, коли нові сервіси (веб-сайти, ігри тощо) будуть розгорнуті лише через IPv6, оскільки більше нових IPv4-адрес не можна використовувати. І в якийсь момент все, що працює над IPv4, також буде працювати над IPv6. У той момент відключення IPv4 заощадить час та гроші (навіщо підтримувати два протоколи, коли одного достатньо?).
apt-get update
наприклад, намагається підключитися до хостів ipv6, але сам хост навіть не має IPv6 адреси, окрім своєї локальної посилання.
Проміжний крок, який зараз використовується, відомий як тунелювання. По суті, пакети IPv6 пересуваються всередині пакетів IPv4, поки вони не досягнуть точки, в якій вони можуть бути позбавлені інкапсуляції IPv4 та відправлені з іншого боку по повній мережі IPv6. Звичайно, тут набагато більше складності, але основна концепція за великим рахунком однакова в цілому.
Оскільки все більше і більше пристроїв стають здатними до IPv6, і люди стають більш звичними до використання адрес, IPv6 побачить збільшення використання. Я не вірю (особиста думка), що IPv6 по-справжньому буде сприйнятий і побачить масштабну розгортання на SMB та особистому ринку, поки простір IPv4 не стане дорогим товаром.
У якийсь момент досить далекого майбутнього, коли IPv6 притаманна переважній більшості трафіку, я міг побачити перелом долі для IPv4, де трафік IPv4 повинен бути капсульований всередині звичайних пакетів IPv6, а брокери тунелів виконують аналогічну (але зворотну) роль завдяки відсутність широкого IPv4 маршрутизації / призначення IP.
Я думаю, ви запитуєте, як додаток вирішує, як вибрати. З боку програми це залежить від реалізації програми. Якщо, наприклад, кодер робить IPv6 вищим пріоритетом, ніж IPv4, він спершу спробує використовувати getipv6addr (). Якщо це не налаштовано або виходить з ладу, тоді він спробує використовувати getaddr () тощо.