QUICとHTTP/3とは?
Quick UDP Internet Connections(QUIC)は、柔軟性、組み込みのセキュリティ、パフォーマンス上の問題の少なさ、普及の速さを特長とし、Transmission Control Protocol(TCP)に代わるものとして設計された汎用トランスポート層プロトコルです。QUICはGoogleが当初開発したもので、クライアントとサーバー間でパケットを転送するための低レベルのトランスポートメカニズムとしてUser Datagram Protocol(UDP)を使用します。特に、QUICではTransport Layer Security(TLS)が、HTTP/1.1やHTTP/2のような追加レイヤーではなく、不可欠なコンポーネントとして組み込まれています。
QUICをベースとするHTTP/3は、ハイパーテキスト転送プロトコル(HTTP)の3番目のメジャーバージョンであり、2022年にIETF標準として採用されました。QUIC+HTTP/3は、パフォーマンスとユーザーエクスペリエンスを制約するTCP固有の制限を解消するために開発されました。
APIの仕組み
APIはアプリケーションの「表向きの窓口」であり、アプリケーションが実行する機能や提供できる情報を公開し、適切なリクエスト形式を定義します。開発者がアプリケーションのAPIを作成して公開すると、他のアプリケーションがそのアプリケーションと通信できるようになります。
多くの場合、APIを利用すると、一般的な機能をすぐに使用できるため、開発者の貴重な時間を節約できます。既存のアプリケーションと同じ機能を重複して開発する代わりに、そのアプリケーションのAPIを呼び出すことで、自身のアプリケーションに機能を組み込めます。

HTTPトランスポートスタックの概要
QUIC+HTTP/3の基礎
QUICの目的は、HTTP/3向けに高性能、高信頼性、高セキュリティのトランスポートプロトコルを提供することです(QUICはHTTP以外のトラフィックにも適しています)。
QUICについて初めて学ぶ方は、以下の入門動画をご覧になることをお勧めします。
UDP、TCP、TLS
UDPは、最初の接続を確立する際にTCPのような複雑な3ウェイハンドシェイクを必要としない、シンプルで軽量なプロトコルです。このシンプルさにより、UDPは高速かつコネクションレスですが、TCPと比較すると、信頼性とセキュリティを確保した通信に不可欠な機能が不足しています。
QUICは、UDPとTCPの両方の利点を兼ね備えている点で独自性があります。下位層のトランスポートプロトコルにUDPを採用することで、コネクションレスのまま接続と転送の遅延を低減します。一方、上位層では、パケット配信を保証するTCPの接続確立機能と損失検出機能を再実装しているため、コネクション型として動作します。損失したデータを特定して再送を完了することで、シームレスなユーザー体験を実現します。
QUICでは、HTTP/1.1やHTTP/2のようにTLSを追加レイヤーとして使用するのではなく、不可欠なコンポーネントとして組み込んでいます。これにより、メッセージはデフォルトで暗号化されます。
QUICネットワークの概要
以下の図は、QUICネットワークの基本構造を示しています。図に示すように、HTTP/3のリクエスト、レスポンス、または任意のアプリケーションデータを格納する論理オブジェクトがQUIC ストリームです。 ネットワークエンドポイント間で伝送するため、QUICストリームは複数の論理レイヤーでカプセル化されます。

QUICストリームの構造
外側から内側へ順に見ると、論理レイヤーとオブジェクトは次のとおりです。
- UDPデータグラム – 送信元ポートと宛先ポート(長さおよびチェックサムのデータを含む)を指定するヘッダーと、それに続く1つ以上のQUICパケットで構成されます。データグラムは、ネットワークを介してクライアントからサーバーに送信される情報の単位です。
- QUICパケット – 1つのQUICヘッダーと1つ以上のQUICフレームが含まれます。
- QUICヘッダー – パケットに関するメタデータが含まれます。ヘッダーには次の2種類があります。
- 接続の確立時に使用されるロングヘッダー。
- 接続の確立後に使用されるショートヘッダー。接続ID、パケット番号、キーフェーズなどのデータが含まれます。キーフェーズは、キーローテーションをサポートするため、パケットの暗号化に使用されたキーを追跡する目的で使用されます。パケット番号は、特定の接続とキーフェーズの組み合わせごとに一意であり、常に増加します。
- フレーム — タイプ、ストリームID、オフセット、ストリームデータが含まれます。ストリームデータは複数のフレームに分散していますが、接続ID、ストリームID、オフセットを使用して、データの各チャンクを正しい順序に並べて再構成できます。
- ストリーム – 単一のQUIC接続内における単方向または双方向のデータフローです。各QUIC接続は、それぞれ固有のストリームIDを持つ複数の独立したストリームをサポートできます。一部のストリームを含むQUICパケットが失われても、失われたパケットに含まれていないストリームの進行には影響しません(これは、HTTP/2で発生するヘッドオブラインブロッキングを回避するうえで極めて重要です)。ストリームは双方向にすることができ、どちらのエンドポイントからでも作成できます。
TLSハンドシェイクにおけるQUICの仕組み
TLSハンドシェイクにより、クライアントとサーバー間にセキュアな接続が確立されます。QUICによる暗号化にはTLS v1.3が必要です。以下の図に示すように、QUICは暗号鍵を提供するTLSの「コンテンツレイヤー」を維持しつつ、「レコードレイヤー」を独自のトランスポートメカニズムに置き換えます。
QUICは、認証と、セキュリティおよびパフォーマンスに不可欠なパラメーターのネゴシエーションにもTLSを利用します。厳密な階層構造ではなく、2つのプロトコルが連携します。QUICはTLSハンドシェイクを使用してセキュアな接続を確立し、TLSはQUICが提供する信頼性、順序どおりの配信、レコード層を使用します。
大きく分けると、TLSコンポーネントとQUICコンポーネントの間には、主に2つの連携があります。
- TLSコンポーネントはQUICコンポーネントを介してメッセージを送受信し、QUICはTLSに信頼性の高いストリーム抽象化を提供します。
- TLSコンポーネントは、QUICコンポーネントに一連の更新を提供します。これには、(a)インストールする新しいパケット保護キー、(b)ハンドシェイクの完了やサーバー証明書などの状態変更が含まれます。
QUIC TLSのHTTP/3サポートオプション
QUIC TLSは、QUICプロトコル専用に設計されたTLSの一種です。現在、QUIC TLSでHTTP/3のサポートを必要とするユーザーには、次の2つの選択肢があります。
- OpenSSL QUIC実装 – OpenSSLは現在、完全なQUICスタックの独自実装に取り組んでいます。この開発により、QUICのすべての機能が実装内にカプセル化されるため、HTTP/3ユーザーはQUIC固有の機能を意識することなく、OpenSSL TLS APIをより簡単に利用できるようになります。
- 対応ライブラリ:BoringSSL QUIC API — BoringSSL、quicTLS、LibreSSL(OpenSSLからフォークして開発が始まったライブラリ)など、さまざまなSSLライブラリがBoringSSL QUIC APIを実装し、QUIC TLS機能を提供するようになりました。OpenSSL QUIC TLSの実装はまだ利用できないため、現時点ではHTTP/3を利用するユーザーにとって、これが唯一の選択肢です。
QUIC+HTTP/3の利点
QUIC+HTTP/3は、レイテンシーを低減し、信頼性の低いネットワーク上でのデータ配信を改善することで、Webアプリケーションのパフォーマンス向上を目指します。主な利点は次のとおりです。
- レイテンシーの低減 – TCPなどの従来のプロトコルでは、接続確立プロセスに起因するレイテンシーが発生します。QUIC+HTTP/3は、多重化機能によって接続をより効率的に確立できるため、接続の確立時とデータの送信時のレイテンシーを低減できます。
- 接続確立の高速化 – QUIC+HTTP/3では、TLSハンドシェイクと暗号化の設定を1つのステップにまとめることで、セキュアな接続の確立に必要なラウンドトリップ回数を削減します。
- 多重化 – QUIC+HTTP/3は、単一の接続内で複数のデータストリームを処理することで、ネットワークリソースをより効率的に利用できるようにします。また、従来のTCP接続で1つの低速なストリームが他のストリームを遅延させる、ヘッドオブラインブロッキング問題の回避にも役立ちます。
- エラー訂正の向上 – QUICには前方誤り訂正技術が組み込まれており、再送を必要とせずに失われたパケットを復元できるため、パケット損失によるパフォーマンスへの影響を軽減できます。
- パケット損失の影響を軽減 – UDPはコネクションレス型であり、TCPのような厳密なエラーチェックを必要としないため、より高速に伝送できます。これは、ネットワークの状態が不安定な場合に特に有利です。
- 適応型輻輳制御 – QUIC+HTTP/3は、TCPの輻輳制御よりも効率性と応答性を高めるよう設計されており、変化するネットワーク環境でのパフォーマンス向上につながります。
- 移行サポート – QUIC+HTTP/3では、アプリケーションのパフォーマンスを損なうことなく、異なるネットワーク接続間(Wi-Fiからモバイル通信への切り替えなど)をシームレスに移行できます。
- セキュリティの向上 – QUIC+HTTP/3は暗号化を標準で組み込んでおり、データ伝送のセキュリティとプライバシーを強化します。この暗号化により、伝送中のデータの盗聴や改ざんを防止します。
- NATトラバーサル – QUIC+HTTP/3ではUDPを使用するため、ネットワークアドレス変換(NAT)を越えた通信が容易になり、従来のTCP接続では問題が生じる可能性がある環境でも、接続を確立しやすくなります。
- 継続的な進化 – QUIC+HTTP/3は、基盤となるネットワークインフラストラクチャを変更することなく、ソフトウェアで実装および更新できるように設計されています。そのため、変化するネットワーク状況やセキュリティ上の懸念に適応するため、より迅速に更新・改善できます。

