用語辞典・IPv6・接続方式

デュアルスタック

デュアルスタックとは

デュアルスタックは、一つの端末やネットワークでIPv4とIPv6を同時に有効にし、接続先に応じて使い分ける構成です。英語ではdual stack(デュアル・スタック)と呼びます。

端末はIPv4アドレスとIPv6アドレス、IPv4経路表とIPv6経路表をそれぞれ持ちます。アプリケーションが接続先を名前で指定すると、DNSのAレコードAAAAレコードから候補を得ます。

一つのTCPやQUIC接続がIPv4とIPv6を同時に混ぜて進むわけではありません。接続候補ごとにどちらか一方のIPバージョンを選びます。

IPv4とIPv6を独立した二つの経路として用意する名前解決で候補を得て、到達できる接続を一つ選ぶ
端末とサーバーがIPv4とIPv6の独立した経路を持ち、DNSで両方の候補を得て時間差で接続を試し、一方を選択して個別に品質監視する図解
図1IPv6を先に試す設定でも、到達しない場合に長く待ち続けないようIPv4候補を適切な間隔で開始します。図ではIPv6が選ばれていますが、実際の勝者は経路状態で変わります。

接続先を選ぶまでに、三つの選択がある

宛先候補、送信元アドレス、経路を組み合わせるDNSにAAAAがあるだけでは、IPv6で接続できるとは限らない
1宛先候補

AからIPv4、AAAAからIPv6の候補アドレスを得る

2送信元選択

候補とスコープに合う、自分の送信元アドレスを選ぶ

3経路選択

各IPバージョンの経路表で、次ホップとインターフェースを決める

4接続試行

優先順位と過去の結果を考慮し、時間差で候補へ接続する

図2OSのアドレス選択規則、アプリケーション実装、DNS応答順、到達履歴により試行順は変わります。単純に「AAAAが先ならIPv6」とは限りません。

Happy Eyeballsは、片方の故障を待ち時間にしない

Happy Eyeballs(ハッピー・アイボールズ)は、IPv6とIPv4の候補を順序立てて時間差で試し、利用者が接続失敗を長く待たないようにする手法です。候補アドレスを交互に並べ、先行接続がすぐ完了しないと次を開始します。

最初に確立した利用可能な接続を採用し、不要な試行は取り消します。これはIPv6の問題を修復する仕組みではなく、アプリ上で問題を目立ちにくくするため、運用監視は別に必要です。

IPv4とIPv6を別々に測る

「Webサイトは開く」という確認だけでは、一方が壊れて他方へフォールバックした状態を見逃します。名前解決、デフォルト経路、MTU、ファイアウォール、外部到達性をIPv4とIPv6で分けて確認します。

サーバー側も、AとAAAAの両方が正しい宛先を指すか、両方で同じ証明書とサービス設定が動くかを検査します。古いAAAAだけが残ると、IPv6を優先する利用者にだけ障害が現れます。

IPv4 over IPv6とは構造が違う

デュアルスタックでは、IPv4パケットはIPv4経路、IPv6パケットはIPv6経路をネイティブに進みます。対してIPv4 over IPv6は、事業者のIPv6網を使ってIPv4接続性を提供するため、カプセル化または変換を行います。

端末から見るとIPv4とIPv6の両方が使えるため似て見える場合がありますが、途中の構造、共有IPv4アドレス、受信ポート、MTU、障害点が異なります。

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

関連用語