Happy Eyeballs - алгоритм, позволяющий браузерам быстро выбирать рабочее соединение между IPv4 и IPv6. Разбираем, как он работает, почему браузер может предпочесть один протокол другому, и как эта технология сокращает задержки при открытии сайтов. Узнайте, как проверить используемый протокол и в чём преимущества Happy Eyeballs для пользователей.
Современные сайты могут одновременно поддерживать IPv4 и IPv6, но доступность обоих протоколов не всегда одинакова. Иногда соединение через IPv6 устанавливается медленно или вообще не работает, хотя сайт прекрасно открывается по IPv4. Чтобы пользователь не ждал завершения неудачной попытки, браузеры используют Happy Eyeballs - алгоритм, позволяющий быстрее выбрать рабочее соединение.
Разберём, как устроена эта технология, почему браузер может предпочесть IPv4 и каким образом Happy Eyeballs сокращает задержки при открытии сайтов.
Happy Eyeballs - это алгоритм установления сетевого соединения, который помогает приложениям быстро подключаться к серверам, поддерживающим IPv4 и IPv6. Вместо того чтобы полностью дожидаться результата подключения по одному протоколу, приложение может начать альтернативную попытку через другой.
Проблема связана с тем, что наличие IPv6-адреса ещё не гарантирует стабильную связь. Например, компьютер может иметь настроенный IPv6, но из-за проблем у провайдера или на сетевом маршруте соединение с определённым сервером не устанавливается.
Без механизма переключения приложение могло бы потратить несколько секунд на ожидание тайм-аута, прежде чем попробовать IPv4. Happy Eyeballs позволяет избежать такой задержки, не требуя дополнительных действий от пользователя.
Технология особенно важна в сетях с двойным стеком (Dual Stack), где IPv4 и IPv6 работают одновременно.
Если хотите подробнее разобраться в различиях между протоколами, прочитайте материал "IPv4 и IPv6: в чём разница и нужен ли новый протокол обычному пользователю".
Алгоритм Happy Eyeballs использует несколько попыток подключения, чтобы сократить время ожидания ответа сервера. Его современная версия описана в стандарте RFC 8305 и позволяет учитывать доступность IPv4 и IPv6 без длительного ожидания неработающего соединения.
Когда пользователь открывает сайт, браузеру необходимо узнать его IP-адрес. Для этого выполняются DNS-запросы, которые могут вернуть два типа записей:
Если сайт поддерживает оба протокола, браузер получает адреса, которые можно использовать для подключения. При этом один домен может иметь несколько IPv4- и IPv6-адресов.
Подробнее о процессе поиска адресов рассказывается в статье "Как работает DNS: простое объяснение для всех".
Получив доступные адреса, браузер формирует список кандидатов для подключения. Обычно IPv6 получает приоритет, но это не означает, что браузер будет ждать его ответа бесконечно.
Если первая попытка не завершается достаточно быстро, алгоритм запускает следующую, не отменяя предыдущую. В Happy Eyeballs v2 рекомендуемая задержка между попытками составляет 250 миллисекунд, хотя конкретная реализация может использовать другие значения.
Например, браузер начинает устанавливать соединение через IPv6. Если за короткое время оно не установилось, запускается попытка через IPv4. Обе попытки могут некоторое время выполняться параллельно.
Как только одна из попыток успешно устанавливает соединение, браузер использует его для дальнейшего обмена данными. Остальные незавершённые попытки отменяются.
Если IPv6 отвечает быстро, подключение обычно происходит через него. Если соединение по IPv6 задерживается, IPv4 может завершить подключение раньше и стать выбранным вариантом.
При этом Happy Eyeballs не измеряет максимальную скорость передачи данных по каждому протоколу. Его задача - сократить задержку установления соединения, а не определить, через какой протокол файлы будут скачиваться быстрее.
Хотя IPv6 считается более современным протоколом, его использование не всегда обеспечивает более быстрое подключение. Happy Eyeballs оценивает успешность установления соединения, поэтому браузер может выбрать IPv4 даже при наличии полностью рабочего IPv6.
На выбор влияют несколько факторов:
Например, если соединение через IPv6 устанавливается за 400 мс, а попытка через IPv4 начинается спустя 250 мс и завершается за 50 мс, браузер может выбрать IPv4. При этом IPv6 остаётся доступным, просто альтернативное соединение было установлено раньше.
Важно понимать, что выбор IPv4 не означает неисправность IPv6. Алгоритм ориентируется на скорость установления конкретного соединения, а не на общую производительность протокола.
Механизм Happy Eyeballs используется в современных браузерах, включая Google Chrome, Mozilla Firefox и Safari. Конкретная реализация зависит от браузера, операционной системы и используемого сетевого стека.
Первая версия алгоритма была описана в RFC 6555. Она предложила механизм быстрого переключения между IPv6 и IPv4, чтобы проблемы с одним протоколом не приводили к длительному ожиданию.
В 2017 году появился стандарт Happy Eyeballs v2 (RFC 8305), который усовершенствовал первоначальный подход:
Пользователю обычно не требуется самостоятельно включать Happy Eyeballs. Механизм работает автоматически и особенно полезен при нестабильном IPv6.
Однако алгоритм не устраняет проблемы с интернет-соединением и не ускоряет передачу данных после подключения. Его основное преимущество заключается в сокращении времени, которое браузер тратит на поиск рабочего сетевого пути.
Узнать, через какой протокол браузер подключается к сайту, можно без установки дополнительных программ. Для этого подойдут инструменты разработчика или специальные онлайн-сервисы.
В Google Chrome и других браузерах на основе Chromium:
Если адрес выглядит как 142.250.185.78, используется IPv4. Если он содержит двоеточия, например 2607:f8b0:4005::200e, соединение установлено через IPv6.
Для проверки поддержки IPv6 можно воспользоваться сайтом test-ipv6.com. Он определяет доступность IPv4 и IPv6 и помогает обнаружить проблемы с подключением.
При этом результат проверки не означает, что браузер всегда будет использовать один и тот же протокол. Happy Eyeballs может выбирать разные соединения в зависимости от конкретного сайта, состояния сети и времени ответа сервера.
Happy Eyeballs помогает браузерам быстро устанавливать соединение с сайтами, поддерживающими IPv4 и IPv6. Алгоритм запускает альтернативные попытки подключения с небольшой задержкой и использует соединение, которое удалось установить первым.
Благодаря этому проблемы с одним из протоколов не обязательно приводят к долгому ожиданию загрузки страницы. Пользователю не нужно вручную выбирать IPv4 или IPv6 - современные браузеры выполняют эту задачу автоматически.