用語辞典・IPv6・接続方式

Happy Eyeballs

Happy Eyeballsとは

Happy Eyeballsは、IPv6とIPv4の接続候補を適切な間隔で並行して試し、その時点で先に利用可能になった経路を選ぶクライアント側の接続手順です。読み方はHappy Eyeballs(ハッピー・アイボールズ)です。現在の基本仕様はRFC 8305のHappy Eyeballs Version 2です。

IPv6を優先順の先頭に置くだけでは、IPv6経路が壊れていると接続完了まで長く待つことがあります。反対に最初からIPv4だけを使えば、正常なIPv6を活用できません。そこで、第一候補を尊重しつつ、待ち時間が長引く前に別のアドレスファミリーも試すという考え方を採ります。

名称に「目」が入っていますが、人を識別する機能ではありません。ネット利用者が接続方式を意識せず、素早く接続できる状態を表した名前です。

IPv6とIPv4を無秩序に同時発射せず、候補を交互に並べて時間差で試す最初に利用可能になった接続を残し、残りを止める
端末から二つの色分けされたIPv6経路とIPv4経路へ接続候補が時間差で進み、先にサーバーへ到達した経路が選択されるHappy Eyeballsの図解
図1ここで競うのは単なる応答時間だけではなく、名前解決、経路、TCPやQUIC、TLSなどを含めてアプリケーションが利用できる接続になるまでの結果です。

名前解決から接続確定までを一つの流れで扱う

候補が一つ失敗し終わるまで、次を待つ方式ではない短い時間差で接続を重ね、利用者の待ち時間を抑える
  1. 1
    AとAAAAを調べる

    IPv4のAレコードとIPv6のAAAAレコードを並行して問い合わせる

  2. 2
    候補を並べ替える

    端末のアドレス選択規則を適用し、IPv6とIPv4の候補を交互に試せる順へ整える

  3. 3
    時間差で接続を開始

    先行候補を試し、未完了なら短い遅延後に次候補も開始する

  4. 4
    最初の成功を採用

    利用できる接続を残し、不要になった他の試行を取り消す

図2RFC 8305は名前解決の待ち合わせに50ミリ秒、接続試行間隔に250ミリ秒を推奨値として示します。固定の保証値ではなく、実装は過去の結果やネットワーク条件も利用できます。

IPv6とIPv4の候補を交互に並べる

名前解決で複数のアドレスが返ると、端末はRFC 6724などの規則で候補を選びます。Happy Eyeballs v2は、一方のファミリーだけをすべて試してから他方へ進むのではなく、IPv6とIPv4が交互に現れる候補列を作ります。これにより、先頭のIPv6アドレスだけが不調でも次のIPv4候補へ早く進めます。

次の試行を開始しても、先の試行を直ちに中止するわけではありません。複数の試行を短時間だけ重ね、接続が先に完成したものを勝者にします。DNS応答が片方だけ先に届いた場合も、もう片方を無期限には待ちません。

過去の速さは参考にするが、ネットワーク変更後は引き継がない

実装は、宛先ごとの往復時間や以前に成功したファミリーを記憶し、次の候補順や遅延の調整に利用できます。ただしWi-Fiから携帯回線へ切り替われば、到達経路も品質も変わります。RFC 8305は、ネットワーク変更時にこのような履歴を消すことを求めています。

この手順は「常にIPv6が速い」「常にIPv4へ逃がす」という判定ではありません。接続ごとに利用可能性を確認し、端末の優先方針と現実の到達結果を両立させます。

便利だからこそ、壊れたIPv6を見逃すこともある

IPv6経路が壊れていてもIPv4がすぐ成功すれば、利用者は問題に気づかないことがあります。Happy Eyeballsは体感を改善しますが、ネットワーク障害そのものを修復する機能ではありません。運用者はIPv4とIPv6を個別にも監視する必要があります。

DNS64NAT64を使うIPv6ネットワークでも、合成AAAAをIPv6候補として扱えます。ただしIPv4アドレスをアプリケーションへ直接書いた場合などは、名前解決を前提とした処理が使えず、別の互換機構が必要になることがあります。

仕様の確認資料:RFC 8305「Happy Eyeballs Version 2」RFC 6724「Default Address Selection for IPv6」

関連用語