このページの目次

プロトコルの進化と互換性

プロトコルはデプロイされると変更が難しい——TCPの固定ヘッダーにより拡張に10年を要し、TLSミドルボックスの不明な拡張に対するバギーな動作がオシフィケーション(硬化)を引き起こした。QUICは設計当初からバージョンネゴシエーションとGREASE(意味のない拡張のランダム挿入)を内蔵し、ミドルボックスの硬化に対抗している——これは新プロトコルにとって必須の教訓である。

概要

プロトコルは不変ではない——デプロイされると変更が難しい。HTTP/1.1 ヘッダーのテキスト的な柔軟性は、新機能(Cache-Control, CORS)を問題なく追加することを可能にしたが、TCPの固定ヘッダーは拡張を困難にした(TCP Fast Open の普及には10年かかった)。QUICは設計当初からバージョンネゴシエーションとGREASE(意味のない拡張のランダム挿入)を内蔵しており、ミドルボックスが不明なフィールドに対して取るべきバギーな動作によるプロトコルのオシフィケーション(硬化)に対抗している。すべての新設計プロトコルは、GREASEと明確な拡張ポイントを実装すべきである。

フォワード互換性とバックワード互換性

フォワード互換性 (新しいクライアント、古いサーバー):
  不明なフィールド: スキップ (protobuf, TLV)
  不明なフレームタイプ: 無視 (HTTP/2)
  → 実装: 「受け入れる側は寛容に」

バックワード互換性 (古いクライアント、新しいサーバー):
  デフォルト値での埋め合わせ
  バージョンネゴシエーション
  機能ビットマップ (TLSの暗号スイート)

ネゴシエーションとフォールバック

ネゴシエーションとフォールバック: 3つのメカニズム、現在の接続を変更できるのは誰か、次回のみ変更できるのは誰か

HTTP Upgrade GET / HTTP/1.1 + Upgrade: h2c 101 Switching または 無視

TLS ALPN ClientHello ALPN=[h2, http/1.1] ServerHello ALPN="h2"

HTTP Alt-Svc Alt-Svc: h3=":443" 次回接続で HTTP/3 を使用 (現在の接続はアップグレードしない)

HTTP Upgrade と TLS ALPN はどちらも同一接続内でのリアルタイムネゴシエーションですが、Alt-Svc は「次回プロトコルを変更する」ためのヒントに過ぎません—— 現在の接続はアップグレードされず、これこそが「ネゴシエーション」と「フォールバック」の違いです。

GREASE

問題: ミドルボックス (ファイアウォール、NAT) は自分が知っているバイトパターンしか認識しない
  → 新しいプロトコル拡張 → 認識できないため破棄される → プロトコルが進化できない

GREASE: クライアントが意味のない拡張/値をランダムに挿入する:
  TLS: ClientHello 内のランダムな暗号スイート
  HTTP/2: ランダムな SETTINGS パラメータ
  QUIC: ランダムなトランスポートパラメータ

目的: ミドルボックスが不明な値を正しく処理する必要がある (無視すること。拒否してはならない)
  → 将来の本当の拡張がミドルボックスによってブロックされない

QUIC の教訓

QUIC の教訓: TCPの4つの古い問題を一つずつ逆手に取った設計 ① ヘッダーの平文 → ミドルボックスによる改ざん → オシフィケーション QUIC: フラグはすべて暗号化 ミドルボックスは Connection ID しか見えない ② バージョンネゴシエーションの欠如 → 進化が鈍い QUIC: バージョンは最初のパケットに含まれる サーバーは拒否して他のバージョンを提案できる ③ 5-tuple へのバインディング → NAT リバインディング → 接続切断 QUIC: Connection ID IP / ポートに依存しない ④ 拡張の検出 QUIC: GREASE を内蔵 すべての QUIC 実装に組み込まれている 4つの教訓に共通する論理は、TCPを硬化させた「平文」「ネゴシエーションの欠如」「アドレスへのバインディング」「拡張の検出」といった設計を、 QUIC では一つずつ逆手に取っている——これが「プロトコルの進化」という科目の必修内容である。

参考

  • GREASE: RFC 8701
  • QUIC Appendix A: RFC 9000 (design rationale)

Keywords: forward compatibility, backward compatibility, GREASE, ossification, QUIC, Alt-Svc