「HTTP/2ってどうやって始まるの?」TLSハンドシェイクとALPNの舞台裏を紐解く
こんにちは!ネットワークの世界へようこそ。今日は、私たちが普段何気なく使っているWebブラウジングの「裏側」で起きている、ちょっとスマートな交渉術についてお話しします。
皆さんは、Webサイトにアクセスする際、なぜブラウザとサーバーが「HTTP/2で通信しよう!」と瞬時に合意できるのか、不思議に思ったことはありませんか?
実はこれ、「TLSハンドシェイク」という、いわば「握手の儀式」の中で行われる秘密の交渉が鍵を握っているんです。今回は、この交渉役である「ALPN(Application-Layer Protocol Negotiation)」について、郵便配達の例えを交えながら、一歩ずつ紐解いていきましょう!
—
1. 郵便配達で例える「プロトコルの選択」
想像してみてください。あなたは海外の友人に手紙を送る際、相手が「速達」に対応しているか、「普通の郵便」しか受け付けていないか、事前に知っておく必要がありますよね。
もし、いきなり「速達」で送って、相手がそれに対応していなかったら……手紙は届かないかもしれません。
ネットワークの世界でも同じです。
- HTTP/1.1:古くからある、確実な「普通の郵便」。
- HTTP/2:たくさんの荷物を一度に送れる、最新の「速達便」。
クライアント(ブラウザ)とサーバーは、通信の最初に「お互い、最新の速達便(HTTP/2)でやり取りできる?」という確認作業を行います。これがALPN(アプリケーション層プロトコルネゴシエーション)です。
—
2. なぜ「TLSハンドシェイク」の中でやるの?
ここで一つの疑問が浮かびます。「なぜ通信が始まってから交渉するのではなく、暗号化通信(TLS)の握手の中でやるのか?」と。
理由はシンプルです。「効率」です。
もしTLSの接続が完全に終わった後に「実はHTTP/2でやりたいんだけど……」「あ、うちはHTTP/1.1しかできないんだ」なんて会話をしていたら、往復回数が増えてしまい、Webサイトの表示が遅くなってしまいますよね。
だからこそ、「暗号化のための鍵を交換するついでに、使う言語(プロトコル)も決めちゃおう!」というのがALPNの賢い戦略なのです。
—
3. ALPNの舞台裏:パケットの中身を覗いてみよう
ALPNの仕組みは、TLSの「ClientHello(クライアントからの挨拶)」というパケットの中に、「私が話せる言語リスト」を忍ばせることで実現します。
イメージとしてはこんな感じです。
- クライアントの心の中:「これから暗号化通信を始めます。ついでに言うと、私は『h2(HTTP/2のこと)』と『http/1.1』の両方が話せますよ!」
サーバー側はこれを受け取ると、自分の対応状況と照らし合わせます。
- サーバーの返答:「暗号化の準備OK!リストを見ました。君もHTTP/2が話せるなら、効率が良いから『h2』で行こう!」
このように、暗号化の握手とプロトコルの決定を「ワンセット」で行うことで、無駄な通信を一切省いているんですね。
—
4. 実務で確認!ALPNの設定例(Nginxの場合)
インフラエンジニアとして現場に立つと、この設定を意識する場面が必ず来ます。例えば、Webサーバーの定番であるNginxでは、ALPNは基本的にTLS設定の一部として自動的に扱われます。
server {
listen 443 ssl http2; # “http2” を指定することでALPNが有効になります
server_name example.com;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/key.key;
# ここでTLS 1.2以上を強制するのが現代のスタンダードです
ssl_protocols TLSv1.2 TLSv1.3;
location / {
root /var/www/html;
}
}
- ポイント: `listen 443 ssl http2;` と書くだけで、Nginxは「このポートに来るTLS接続では、HTTP/2も話せるよ!」とクライアントに伝えてくれるようになります。簡単ですよね!
—
5. まとめ:パケットの「おもてなし」
ALPNは、私たちが意識しないところで、通信の無駄を徹底的に排除してくれる「縁の下の力持ち」です。
1. TLSハンドシェイクという「握手」に乗せて。
2. 自分の対応プロトコルを伝える。
3. サーバーが最適なものを選ぶ。
この一連の流れがあるからこそ、私たちは世界中のWebサイトをサクサクと閲覧できているのです。
ネットワークの世界は、一見すると無機質なビットの羅列ですが、その中には「どうすれば速く、安全に情報を届けられるか」という人間たちの知恵と工夫が詰まっています。
もし今度、Webサイトの挙動が気になったときは、ブラウザの「開発者ツール」を開いて「Network」タブを見てみてください。「Protocol」という列に「h2」と表示されていれば、それがALPNが導き出した「速達便」の証ですよ!
それでは、また次回の記事でお会いしましょう。ハッピー・ネットワーキング!
コメント