0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QUICとHTTP/3をやさしく解説:なぜUDPベースなのに信頼できるのか?

Posted at

はじめに

QUIC(Quick UDP Internet Connections)は、HTTP/3の通信基盤となっている新しい通信プロトコルです。UDP をベースにしつつ、TCP に劣らない信頼性とTLS 1.3 のセキュアさを兼ね備え、さらに高速という特長があります。

本記事では以下のような疑問をやさしく解説していきます:

  • なぜHTTP/3は TCP ではなく UDP を選んだのか?
  • UDP って送信したら終わりじゃなかった?
  • QUIC はなにをどうやって信頼性を保っているの?
  • 移動環境で強いってほんと?
  • インフラ側ではどんな制約がある?

✅ 本記事のスタンス:

本記事は、Webエンジニア・インフラ初学者・ブラウザ開発者ではない方を主な対象に、QUICとHTTP/3の概念・狙い・技術的特徴をわかりやすく紹介することを目的としています。

触れる内容

  • TCP/UDP の違いと、QUIC が UDP を採用した理由
  • QUIC がどのようにして信頼性や多重化・TLS統合を実現しているか
  • 移動環境(携帯通信やStarlink)における利点
  • QUIC の実用例や導入の進展
  • インフラ環境での課題(NAT テーブル、プロキシ、WAF など)

本記事では触れない内容(別記事での掘り下げ予定)

  • QUIC のパケット構造の詳細
  • TLS 1.3 のハンドシェイクや鍵交換の細部(Diffie-Hellman の内部動作など)
  • QUIC のフレーム形式、再送アルゴリズムのコードレベル
  • IPv6 特有の挙動や、QUIC におけるNAT非依存の動作の技術仕様

目的は 「これから QUIC という言葉を聞いたときに、自信をもって話せるようになる」 ことです!

TCP と UDP の簡単なおさらい

TCP とは?

TCP はコネクション型のプロトコルで、再送制御・順序制御・輻輳制御を内蔵しています。通信の信頼性をカーネル空間 で管理し、確実に届く設計がされています。

UDPとは?

一方、UDP は「送ったら終わり」のプロトコルで、信頼性制御は一切しません。
その代わり、オーバーヘッドが小さくて高速です。リアルタイム性が重要な DNS や動画通話、ゲームなどで活用されています。

なぜ HTTP/3 は UDP ベースの QUIC を使うの?

HTTP/2 までは TCP 上に構築されていましたが、以下の課題がありました:

  • TCP のコネクション確立に複数ラウンドトリップが必要(遅延)
  • HOL(Head of Line)ブロッキング問題(一つのストリームが詰まると他も止まること)
  • 接続先が変わると TLS の再ネゴシエーションが必要

QUIC はこれらの課題を解決するために、UDP上に「信頼性をアプリケーション層で実装する」 という逆転ともいえる発想で登場しました。

QUIC は UDP でどうやって信頼性を保っている?

QUIC は以下をすべて自前で実装しています:

  • ストリームの多重化
  • パケットの再送・順序管理
  • 輻輳制御(Bbrなど)
  • 暗号化と鍵交換(TLS 1.3)

つまり、QUIC はユーザー空間で動作するアプリケーション層で実装された “TCP の進化版” のような振る舞いをします。

項目 TCP QUIC
ステート管理 カーネル空間 ユーザー空間
再送制御 内蔵 自前実装
暗号化 TLS(別レイヤ) TLS 1.3と統合
多重化 HTTP/2以降のみ 標準で実装

実際の通信の流れ

QUIC では TLS 1.3 を統合しており、接続の確立が最短1往復で完了します。0-RTT 再接続も可能です。
0-RTT 再接続 とは、以前のセッション情報を使ってTLSの再交渉なしに即座にデータを送れる仕組みです。

Webアプリ(たとえば Next.js)開発者は何か変えないといけない?

いいえ、大丈夫です。

  • Next.js は、HTTPレベルのリクエストだけを意識しており、QUIC かどうかには無関心です。
  • OSI参照モデルの原則に則り、通信層は抽象化されています。
  • Caddy などのリバースプロキシを挟むことで、Next.js 側のコード修正なしに QUIC に対応可能です。

QUIC を支える ブラウザ と 中継サーバー のがんばり

Caddy を挟んだ構成図(例)

サーバー側(例:Caddy)

  • UDP443 ポートでリッスン
  • HTTP/3 と TLS1.3 のサポート
  • ストリーム ID や再送制御、暗号化処理なども担う

クライアント側(例:Chrome などのモダンブラウザ)

昔のブラウザ

  • TCP 接続:OS 任せ(カーネルが管理)
  • HTTP リクエスト:アプリケーション(ブラウザ)側で構築
  • HTML/CSS/JS:実装は分離され、比較的単純だった

QUIC 対応の現代ブラウザ

  • QUIC(UDP上)接続とTLS1.3ハンドシェイク
  • 再送・順序制御・輻輳制御なども自前で実装
  • ストリーム優先度制御、ネットワーク状況に応じた最適化
  • タブごとのサンドボックス化とキャッシュ管理

💡 現代のブラウザは、超知的な全自動マネージャーです。

QUIC は移動通信時に真価を発揮!

QUIC の大きな利点の一つは、モバイル通信などで IP アドレスや接続先が変わっても通信が切れにくいという点です。

これは次のような場面で活きます:

  • スマホで基地局をまたいで移動(新幹線など)
  • Starlink などの衛星通信
  • 無線 LAN から LTE に切り替わったとき

TCP では再接続が必要になる場面でも、QUIC はコネクション ID により接続継続が可能です。

実は、我々の多くは QUIC をすでに使っている。

Google や Facebook、Cloudflare などの大手はすでに QUIC(HTTP/3)を導入済みです。

curl -I --http3 https://cloudflare-quic.com

HTTP/3 200
...略...
alt-svc: h3=":443"; ma=86400  # これでブラウザは「HTTP/3いけるな」と判断 → 次回はUDPで接続を試すようになる

このようにして、自分の環境でも HTTP/3 が有効かどうかを確かめることができます。

また、DNSには HTTPS レコードも登場し始めており、QUIC に対応したサーバーを名前解決の段階で判断できるようになっています。

一方で、QUIC が使えないインフラ事情も...

QUIC は万能ではありません。たとえば:

  • UDP を通さない WAF・ファイアウォール
  • 企業ネットワークで HTTP プロキシを必須とする環境(HTTP/2 すら通らない場合も)
  • TCP 前提の通信ログ・監視・NAT装置
  • UDP セッション数が多いと、NATテーブルが枯渇して通信障害を起こす

そのため、QUIC の導入にはインフラレイヤーの事前検証と対策が必須です。

IPv6 ではどうなの?

本記事は IPv4 前提で構成していますが、IPv6 環境では一部の動作や構成が異なる可能性があります
特に NAT やルーティング、セッション確立周りは IPv6 では異なる挙動となるため、別途の検証が必要です。

なお、IPv6 における QUIC や NAT テーブルの考え方は IPv4 とは大きく異なるため、別記事で掘り下げる予定です。

おわりに

QUIC は、TCP の限界を超えるために「UDP上にTCP+TLS+多重化」をアプリ層で実現した、非常にユニークなプロトコルです。

セキュリティ的にも通信設計的にも、今後のインターネット通信を支える鍵になる技術のひとつです。

まだまだ発展途上ですが、あなたのスマホやブラウザでも、すでにQUICは使われているかもしれません。

「TCPの限界」を知ることが、QUICの価値を理解する第一歩!


ここまで読んでいただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?