Как серверы / компьютеры / пользователи / приложения узнают, что запрашивают ресурс через Интернет с IPv6-адресом и IPv4-адресом?
3 ответа
Первое, что определяет клиент, - какие протоколы доступны. Предположим, что доступны как 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 сэкономит время и деньги (зачем поддерживать два протокола, когда одного достаточно?).
Промежуточный шаг, который используется сейчас, называется туннелированием. По сути, пакеты IPv6 перемещаются внутри пакетов IPv4, пока не достигнут точки, в которой они могут быть лишены инкапсуляции IPv4 и отправлены на другую сторону в полной сети IPv6. Конечно, здесь гораздо сложнее, но основная концепция в целом одинакова.
По мере того, как все больше и больше устройств станут поддерживать IPv6, и люди будут лучше знакомы с использованием адресов, использование IPv6 будет расти. Я не верю (личное мнение), что IPv6 действительно будет принят и увидит широкомасштабное развертывание на SMB и персональном рынке, пока пространство IPv4 не станет дорогим товаром.
В какой-то момент в довольно отдаленном будущем, когда IPv6 обеспечивает подавляющее большинство трафика, я мог видеть изменение судьбы для IPv4, где трафик IPv4 должен быть инкапсулирован в обычные пакеты IPv6, а туннельные брокеры выполняют аналогичную (но обращенную) роль из-за отсутствие широкой маршрутизации IPv4 / назначений IP.
Я думаю, вы спрашиваете, как приложение решает, как выбрать. Со стороны программы это зависит от реализации приложения. Например, если кодер делает IPv6 более высоким приоритетом, чем IPv4, он сначала попытается использовать getipv6addr(). Если это ненастроено или не удалось, тогда он попытается использовать getaddr() и т.д. Исходя из этого, приложение сначала отправит запрос через IPv6, либо наоборот.