Ответы:
Первое, что определяет клиент, - какие протоколы доступны. Предположим, что доступны как IPv4, так и IPv6 (в противном случае ответ на выбор протокола тривиален;) Затем будет выполнен поиск DNS для записей A (адрес IPv4) и AAAA (адрес IPv6). Если возвращается только один тип, он будет использовать это. Если оба адреса IPv4 и IPv6 возвращены, поведение по умолчанию немного зависит от клиентского программного обеспечения. Обычно используется RFC 3484 .
В соответствии с официальными стандартами предпочтение должно отдаваться IPv6, но поскольку некоторые (0,01% или менее) машины неправильно настроили IPv6, клиенты стали умнее. В настоящее время большинство браузеров пытаются подключиться через IPv6, но если они не получат рабочее соединение в течение 300 миллисекунд, они попытаются подключиться через IPv4 параллельно. Первое успешное соединение затем используется. Это описано в RFC Happy Eyeballs .
Apple изменила это в Lion. Там операционная система фактически отслеживает производительность всех соединений, и если она определит, что соединение 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 действительно будет принят и увидит широкомасштабное развертывание на рынке малого и среднего бизнеса и персональном рынке, пока пространство IPv4 не станет дорогим товаром.
В какой-то момент в довольно отдаленном будущем, когда IPv6 обеспечивает подавляющее большинство трафика, я мог видеть изменение судьбы для IPv4, где трафик IPv4 должен быть инкапсулирован в обычные пакеты IPv6, а туннельные посредники выполняют аналогичную (но обращенную) роль из-за отсутствие широкой маршрутизации IPv4 / назначений IP.
Я думаю, вы спрашиваете, как приложение решает, как выбрать. Со стороны программы это зависит от реализации приложения. Например, если кодер делает IPv6 более высоким приоритетом, чем IPv4, он сначала попытается использовать getipv6addr (). Если это не настроено или происходит сбой, то он попытается использовать getaddr () и т. Д. На основании этого приложение будет сначала отправлять запрос через IPv6, или наоборот.