Quick UDP Internet Connections(QUIC)は汎用トランスポート レイヤ プロトコルであり、その高い柔軟性、組み込みのセキュリティ、パフォーマンス問題の低減、普及の促進によって、Transmission Control Protocol(TCP)に代わるものとして設計されました。QUICは、もともとはGoogleによって開発され、クライアントとサーバ間のパケット移動に下位トランスポート メカニズムとしてUser Datagram Protocol(UDP)を使用します。特に、Transport Layer Security(TLS)は、HTTP/1.1やHTTP/2のような追加のレイヤとしてではなく、必須コンポーネントとして組み込まれています。
QUICをベースにしたHTTP/3は、Hypertext Transfer Protocol(HTTP)の3番目のメジャー バージョンであり、2022年にIETF標準として採用されました。QUIC+HTTP/3は、パフォーマンスとユーザー エクスペリエンスを制約するTCP固有の制限を解決するために作成されました。
APIはアプリケーションの「公開部分」であり、アプリケーションが実行する機能と提供可能な情報を明らかにし、要求の適切な形式を定義します。開発者がアプリケーションのAPIを作成して公開すると、他のアプリケーションがそのAPIと通信できるようになります。
多くの場合、APIは広く使用されている機能をすぐに利用できるようにするため、開発者の貴重な時間を節約します。開発者は、既存のアプリケーションの機能を複製するのではなく、既存のアプリケーションのAPIを呼び出すことで、その機能をアプリケーションに統合できます。
HTTPトランスポート スタックの概要
QUICが目指すところは、パフォーマンス、信頼性、およびセキュリティに優れたトランスポート プロトコルをHTTP/3に提供することです(QUICは非HTTPトラフィックにも適しています)。
QUICをご存じない場合は、以下の入門ビデオをご覧ください。
UDPは、最初の接続を確立するためにTCPのように複雑な3ウェイ ハンドシェイクを必要としない、シンプルで軽量のプロトコルです。このシンプルさのおかげでUDPは高速でコネクションレスとなっていますが、TCPと比較すると、信頼できる安全な通信に不可欠な機能がないことも意味します。
QUICの特長は、UDPプロトコルとTCPプロトコルの両方のメリットを兼ね備えていることです。コネクションレスであり、下位トランスポート プロトコルにUDPを活用して接続およびトランスポートの遅延を低減する一方で、パケット配信を保証するTCPの接続確立および損失検出機能を再実装することによって、上位レイヤではコネクション型になっています。欠落したデータの特定と再送の実行のタスクを処理して、シームレスなユーザー エクスペリエンスを確保します。
また、QUICには、TLSがHTTP/1.1やHTTP/2のような追加のレイヤとしてではなく、必須コンポーネントとして組み込まれています。この組み込みにより、メッセージがデフォルトで暗号化されます。
下の図は、QUICネットワークの基本的な構造を示しています。図のように、HTTP/3のリクエスト、レスポンス、またはアプリケーション データが含まれている論理オブジェクトが、QUICのストリームです。ネットワーク エンドポイント間の送信の場合、QUICのストリームは複数の論理レイヤ内にラップされます。
QUICのストリームの構造
論理レイヤとオブジェクトは、外側から内側に向かって次のようになっています。
TLSハンドシェイクは、クライアントとサーバ間の安全な接続を提供します。QUICで提供される暗号化にはTLS v1.3が必要です。下の図のように、QUICでは暗号化キーを提供するTLSの「コンテンツ レイヤ」は維持されますが、「レコード レイヤ」が独自のトランスポート メカニズムに置き換えられます。
QUICでは、認証と、セキュリティやパフォーマンスに不可欠なパラメータのネゴシエーションにもTLSを利用します。厳密な階層化ではなく、2つのプロトコルが連携します。つまり、QUICはTLSハンドシェイクを使用して安全な接続を確立し、TLSはQUICによって提供される信頼性、順序付けられた配信、レコード レイヤを利用します。
大まかに言うと、TLSコンポーネントとQUICコンポーネントの間には主に2つのやり取りがあります。
QUIC TLSは、QUICプロトコル専用に設計されたTLSの一種です。現時点では、QUIC TLSでHTTP/3のサポートを必要としているユーザーには2つの選択肢があります。
QUIC+HTTP/3の目標は、レイテンシを低減し、信頼性の低いネットワークを経由したデータ配信を改善することで、Webアプリケーションのパフォーマンスを向上させることにあります。以下のメリットがあります。
NGINXのQUIC+HTTP/3実装、および迅速かつ効率的に通信するためのその他のQUIC+HTTP/3の使用方法については、以下のリソースを参照してください。