HTTP/3

読み:えいちてぃーてぃーぴーすりー / 英語表記:HTTP/3

HTTPのバージョン3。トランスポートにTCPではなく、UDPの上で動くQUICを使う。ストリームごとに独立して通信を管理するため、TCPのHoLブロッキングが起きない。

イマシルちゃんの解説

HTTP/2で、1本の電話の中でいくつもの話を同時にできるようになったけど、
電話の回線(TCP)そのものが一瞬途切れると、全部の話が止まっちゃう問題が残っていたんだ。

HTTP/3は、その回線の仕組みごと新しくしたんだよ。
新しい通信の仕組みを使って、1つの話が止まっても、ほかの話は進み続けられるようにしたんだ!
しかも、つながるまでの準備も速いんだよ。

より深い解説

定義

HTTP/3は、RFC 9114(2022年)で定められたHTTPのバージョンである。トランスポートプロトコルとして、RFC 9000で定められたQUICを使う。QUICはUDP(通常はポート443)の上で動作し、TCPが担っていた信頼性の確保(再送、順序制御、輻輳制御)と、TLS 1.3による暗号化を、まとめて実現する。

QUICの主な特徴

特徴内容
ストリームの独立ストリームごとに順序を管理するため、1つのストリームでパケットが失われても、ほかのストリームは止まらない(TCPのHoLブロッキングを回避)
接続の速さ接続の確立と暗号化の鍵交換を同時に行い、最短1往復(再接続では0往復)で通信を始められる
暗号化が必須TLS 1.3を組み込み、ヘッダーの多くも暗号化される
コネクションの移行IPアドレスやポート番号ではなく、コネクションIDで接続を識別するため、Wi-Fiから携帯電話の網に切り替わっても、接続を続けられる
ユーザ空間での実装OSのカーネルではなく、アプリケーション側で実装できるため、改良を素早く取り入れられる

HTTPのバージョンの比較

HTTP/1.1HTTP/2HTTP/3
トランスポートTCPTCPQUIC(UDP)
多重化なし(複数の接続で並列化)ストリームストリーム
TCPのHoLブロッキング起きる起きる起きない
暗号化任意(TLS)実質的に必須(TLS)必須(QUICに組み込み)

どのバージョンが使われるか

ブラウザは、サーバがHTTP/3に対応していることを、HTTP/2などの応答のヘッダー(Alt-Svc)やDNSのHTTPSレコードで知り、対応していればHTTP/3で接続する。最近の主要なブラウザは HTTP/3 に対応しているため、どのバージョンが使われるかは、主にサーバ側の対応で決まる。

ネットワーク機器への影響

影響内容
NAPTQUICはUDPなので、ルータは接続の終わり(TCPのFINやRSTに当たるもの)を見分けられない。変換エントリーは、UDPの保持時間が過ぎるまで残る。UDPの保持時間を短くすると、使われなくなったエントリーを早く削除できる
ファイアウォールUDP/443を許可する必要がある。中身が暗号化されているため、検査しにくい
経路の途中での最適化TCPのヘッダーを見て行っていた制御(MSSの調整など)が効かない

UDP/443が遮断されている環境では、ブラウザは自動的にHTTP/2(TCP)に切り替えて通信する。

実際の試験ではここに出る!

この用語が出てくる記事

↑