Quick UDP Internet Connection (QUIC) は、クライアントからのアクセスを高速化できるネットワークプロトコルです。特に、ネットワーク接続が弱い場合や、Wi-Fi とセルラーネットワーク間で接続が頻繁に切り替わる場合に有効です。 QUIC は、再接続なしで接続多重化を実現し、アクセスを高速化し、データ転送を安全に行うことができます。
QUIC の概要
QUIC は SSL と同レベルのセキュリティを提供し、接続多重化をサポートしています。接続が弱い場合、ネットワーク遅延が大きい場合、およびパケット損失率が高い場合、QUIC はサービスの可用性を確保します。 QUIC は、オペレーティングシステムやカーネルに関係なく、アプリケーション層でさまざまな輻輳制御アルゴリズムを実装できます。 TCP と比較して、QUIC はサービス要件に基づいて柔軟な調整をサポートしています。 QUIC は、TCP の最適化がボトルネックに遭遇した場合の適切な代替手段です。
ショートビデオやライブストリーミングサービスの人気が高まるにつれて、ストリーミングプラットフォームはビジネス要件を満たすために高帯域幅と低ネットワーク遅延を必要としています。 QUIC は、ネットワーク遅延を最小限に抑え、ビデオバッファリングを削減し、オーディオおよびビデオコンテンツの配信を高速化し、データ転送を安全に行うことができます。
サポートされている QUIC プロトコルタイプ
Application Load Balancer (ALB) は、gQUIC と iQUIC をサポートしています。 HTTP/3 は、iQUIC に基づくアプリケーション層プロトコルです。 HTTP/3 は、iQUIC を使用して多重化、輻輳制御、損失検出、および再送を実装します。 HTTP/3 は、より高速な接続確立をサポートし、head-of-line ブロッキングの問題を解消します。
ALB は、gQUIC バージョン Q46、Q43、Q39、および HTTP/3 (h3) をサポートしています。
HTTP バージョンネゴシエーションの仕組み
HTTPS リスナーで [QUIC アップグレード] が有効になっている場合、ALB はクライアントに HTTP/3 および gQUIC をアドバタイズします。 HTTP/3 は gQUIC よりも優先順位が高くなっています。したがって、HTTP/3 を使用するクライアントは、ALB との接続を確立する際に優先順位が高くなります。
クライアントが HTTP/3 経由で ALB との接続を確立できなかった場合は、HTTPS または HTTP/2 を使用して接続が確立されます。
クライアントが HTTP/3 経由で ALB との接続を確立した場合、クライアントは HTTP/3 に関連する Cookie を使用します。
ALB は、QUIC アップグレードが有効になっているかどうかに関係なく、クライアントへの接続を開始できます。
ALB は、Alt-Svc HTTP 応答ヘッダーを使用して、サポートされているプロトコルをクライアントにアドバタイズします。次のサンプルコードは例を示しています。
Alt-Svc : h3=":$quic_port"; ma=3600,quic=":$quic_port"; v="46,43,39"; ma=3600
リスナーの QUIC アップグレードを有効にした後、クライアントは次のシナリオで HTTP/3 ではなく HTTPS または HTTP/2 を使用する場合があります。
クライアントでサポートされている HTTP/3 バージョンが、ALB でサポートされている HTTP/3 バージョンと互換性がありません。
ALB が、HTTP/3 の有効化を妨げる UDP トラフィックの輻輳またはレート制限を検出しました。
クライアントは HTTP/3 をサポートしていません。したがって、HTTP/3 ネゴシエーションを開始しません。
クライアント要件
Google Chrome を使用している場合は、ALB に対して QUIC リクエストを直接開始できます。
Google Chrome を使用して QUIC リスナーにアクセスする前に、ブラウザが ALB で使用されている QUIC バージョンをサポートしていることを確認してください。
ALB でサポートされている最新の gQUIC バージョンは Q46 で、Google Chrome 74 ~ 81 と互換性があります。
ALB でサポートされている最新の HTTP/3 バージョンは h3 で、Google Chrome 87 以降と互換性があります。
独自開発のアプリケーションなど、他のクライアントを使用する場合は、クライアントを LSQUIC Client、Cronet、ngtcp2、quiche ライブラリなどの QUIC をサポートするネットワークライブラリと統合する必要があります。
サンプルシナリオ
Google Chrome を使用して ALB にアクセスすると、ALB はリスナーに関連付けられているドメイン名 example.com
に基づいてリクエストをバックエンドサーバーに転送します。リクエストの配信に使用されるリスナーは、次のシナリオによって異なります。
HTTPS リスナーと QUIC リスナーが構成されている場合、QUIC リスナーが使用されます。ブラウザから
example.com
にアクセスすると、ALB の QUIC リスナーはリクエストをデフォルトのバックエンドサーバーグループ RS1 に配信します。QUIC リスナーが使用できない場合、HTTPS リスナーが自動的に引き継ぎます。ブラウザから
example.com
にアクセスすると、ALB の HTTPS リスナーはリクエストをデフォルトのバックエンドサーバーグループ RS1 に配信します。
前提条件
ALB インスタンスが作成されていること。詳細については、「ALB インスタンスを作成する」をご参照ください。
RS1 という名前のサーバーグループが作成されていること。詳細については、「サーバーグループを作成および管理する」をご参照ください。
ECS01 という名前の Elastic Compute Service (ECS) インスタンスがサーバーグループ RS1 に追加されていること。NGINX ビデオサービスは ECS01 でホストされています。
SSL 証明書が ALB インスタンスにデプロイされていること。証明書はドメイン名
example.com
に関連付けられています。
手順 1: QUIC リスナーを作成する
- ALB コンソール にログオンします。
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、管理する ALB インスタンスの ID をクリックします。 [リスナー] タブで、[リスナーの作成] をクリックします。
[リスナーの構成] ウィザードページで、パラメーターを設定し、[次へ] をクリックします。
次の表を参照して、このトピックに関連する主要なパラメーターを設定し、デフォルト値を使用するか、他のパラメーターについては 必要に応じて値を変更します。
パラメーター
説明
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、QUIC が選択されています。
リスナーポート
ALB インスタンスが listen するポートを選択します。 ALB インスタンスはポートで listen し、リクエストをバックエンドサーバーに転送します。
有効な値: 1 ~ 65535。
説明同じ ALB インスタンスでは、同じプロトコルを使用するリスナーのポートは一意である必要があります。 HTTP リスナーと HTTPS リスナーは異なるポートを使用する必要があります。
[SSL 証明書の構成] ステップで、サーバー証明書を選択し、[次へ] をクリックします。
[サーバーグループの選択] ステップで、[サーバータイプ] を選択し、サーバーグループを選択し、バックエンドサーバーを表示して、[次へ] をクリックします。
[構成の確認] ステップで、構成を確認し、[送信] をクリックします。
手順 2: HTTPS リスナーを作成する
HTTPS リスナーを作成するときは、QUIC アップグレードを有効にし、作成した QUIC リスナーを HTTPS リスナーに関連付けます。
インスタンス ページで、手順 1 で QUIC リスナーを作成した ALB インスタンスを見つけ、その ID をクリックします。
インスタンスの詳細 タブで、リスナー タブをクリックし、リスナーの作成 をクリックします。
リスナーの設定 ステップで、次のパラメーターを設定し、[次へ] をクリックします。
次の表を参照して、このトピックに関連する主要なパラメーターを設定し、デフォルト値を使用するか、他のパラメーターについては 必要に応じて値を変更します。
パラメーター
説明
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、HTTPS が選択されています。
リスナーポート
ALB インスタンスが listen するポートを入力します。 ALB インスタンスはポートで listen し、リクエストをバックエンドサーバーに転送します。この例では、ポート 443 が使用されています。ほとんどの場合、ポート 80 は HTTP に使用され、ポート 443 は HTTPS に使用されます。
有効な値: 1 ~ 65535。
説明ALB インスタンスが listen するポートは一意である必要があります。
詳細設定
詳細設定の横にある [変更] をクリックして、詳細設定を構成できます。
QUIC アップデート
QUIC アップグレードを有効にするかどうかを指定します。この機能を使用するには、[関連付けられている QUIC リスナー] ドロップダウンリストから QUIC リスナーを選択する必要があります。
QUIC リスナーが作成されていない場合は、[リスナーの作成] をクリックして作成します。詳細については、「QUIC リスナーを追加する」をご参照ください。
ALB は iQUIC と gQUIC をサポートしています。詳細については、「HTTP バージョンネゴシエーションの仕組み」をご参照ください。
[SSL 証明書の構成] ステップで、サーバー証明書を選択し、[次へ] をクリックします。
説明TLS セキュリティポリシーを構成するには、[詳細設定] の横にある [変更] をクリックします。
[サーバーグループの選択] ステップで、[サーバータイプ] を選択し、サーバーグループを選択し、バックエンドサーバーを表示して、[次へ] をクリックします。
[構成の確認] ステップで、構成を確認し、[送信] をクリックします。
手順 3: CNAME レコードを作成する
CNAME レコードを使用して、ドメイン名 example.com
を ALB のパブリックドメイン名にマップします。
ALB コンソール にログオンします。
上部のナビゲーションバーで、リージョンを選択します。
管理する ALB インスタンスを見つけ、そのドメイン名をコピーします。
次のように CNAME レコードを作成します。
説明ドメイン名が Alibaba Cloud Domains を使用して登録されていない場合は、DNS レコードを構成する前に、ドメイン名を Alibaba Cloud DNS に追加する必要があります。詳細については、「ドメイン管理」をご参照ください。
Alibaba Cloud DNS コンソール にログオンします。
[権限のある DNS 解決] ページで、ドメイン名を見つけ、[アクション] 列の [DNS 設定] をクリックします。
ドメイン名詳細ページの [DNS 設定] タブで、[DNS レコードの追加] をクリックします。
[DNS レコードの追加] パネルで、パラメーターを構成し、[OK] をクリックします。次の表でパラメーターについて説明します。
パラメーター
説明
レコードタイプ
ドロップダウンリストから CNAME を選択します。
ホスト名
ドメイン名のプレフィックスを入力します。
DNS リクエストソース
デフォルトを選択します。
レコード値
CNAME、つまり ALB インスタンスのドメイン名を入力します。
TTL 期間
CNAME レコードが DNS サーバーにキャッシュされる生存時間 (TTL) 値を選択します。この例では、デフォルト値が使用されます。
説明CNAME レコードを作成すると、すぐに有効になります。レコードを変更すると、レコードの TTL に基づいてレコードが有効になります。デフォルトでは、TTL は 10 分です。
作成する CNAME レコードが既存のレコードと競合する場合は、別のドメイン名を指定することをお勧めします。詳細については、「競合する DNS レコードのルール」をご参照ください。
手順 4: 結果を確認する
この例では、Windows クライアントが使用されています。ブラウザに example.com
と入力して、ALB インスタンスにアクセスします。この例では、NGINX ビデオサービスはサーバーグループ RS1 の ECS01 にデプロイされています。
HTTPS リスナーと QUIC リスナーが構成されていて、ブラウザに
example.com
と入力してF12
キーを押すと、現在の Web ページの プロトコルプロトコル が 93 ミリ秒 として表示されます。応答時間は です。QUIC リスナーが使用できず、ブラウザに
example.com
と入力してF12
キーを押すと、現在の Web ページの プロトコル が HTTP/2 として表示されます。応答時間は 148 ミリ秒です。
結果は、HTTP/3 によってビデオサービスへのクライアントアクセスが高速化されることを示しています。