HTTP/3.0がやってくる?というわけで

ここ数ヶ月、いや、ここ数年はうちのブログの中でのTOP10にずっと入ってる「HTTP2.0がやってくる?HTTP1.1、HTTP1.0の勉強をしておこうか。」という話があるのでございますが、それだけ気になっている人が多いということなんでしょうなあ。
あと、これに追従して書いたものが、「SPDY3.1が有効だとどんな違いがあるのか検証してみました。」というのもあり。だけれどもこちらはそれほどアクセスがないんだな。これが。
読み返して見ると今よりも随分やる気に満ちておる。
そしてこの話を書いたのももう5年も前のことになる。

でに。
それでなにやら2をさらに超えた3がやってくるらしいので、ちょっと調べてみることにしたのす。

HTTP2をさらに超えたHTTP3では眉毛ではなくTCPがなくなるらしい。

という今の世代に通じるのかわからんような例えでござりますが、いつものようにシンプルで分かりやすく(というのを心がけてはいる)書いていきたいと思います。

HTTP2.0以前ではだんごむしのような処理になっていたものが、並列にバビローンと処理をすることで、遅いTCPでも早く処理できちゃうというところがポイントでした。
驚きポイントは今度の主役はUDPということではないだろうか。

UDPというとブロードキャストな通信などなどで有名?なコネクションレス型の通信で、信頼性はさておきでバンバン投げつけるイメージのプロトコル。やはり2を更に超えた3はちょっと乱暴なのでしょうか。

何故にそんな仕組みが次世代のプロトコルなのかというと、SPDYを生み出したGoogleさんがQUICという新たな仕組みを新たに発明し、それがすべてを担っているようなのでした。
そしてGoogleさんがIETFに提出し、改良&標準化されHTTP3となった。

らしい。というのがざっくりとした外側のようです。

いきなりだけどQUIC使ってみる

参考サイトさま
The Cloudflare Blog, http://HTTP/3: the past, the present, and the future

まずはオプションでHTTP3かを確認できるらしいCurlをGETします。

$ /usr/local/opt/curl/bin/curl -I https://blog.cloudflare.com/ --http3
HTTP/3 200

使っているかどうかしか分からんけども、こんなふうに確認ができるようです。ためしにこのブログも見てみますよと。

$ /usr/local/opt/curl/bin/curl -I https://www.vincentina.net/ --http3
curl: (7) quiche: recv() unexpectedly returned -1 (errno: 61, socket 5)

エラーです。
Nginxに設定を追加してみます。

@@ -4,6 +4,9 @@
     listen       443 ssl http2;
     listen 	[::]:443 ssl http2;
+    # Enable QUIC and HTTP/3.
+    listen       443 quic reuseport;
+    listen       [::]:443 quic reuseport;
+    # Add Alt-Svc header to negotiate HTTP/3.
+    add_header alt-svc 'h3-23=":443"; ma=86400';

できました!

では、Nginxリロードどん。
 4月 01 19:23:53 deb nginx[11274]: nginx: [emerg] invalid parameter "quic" in /etc/nginx/conf.d...nf:8

はい、だめでした。

当然です。

世の中そんな甘くない!

ぎゃー。

今、このサーバーで使っているOSがDebianの8です。
Debian8のOS標準のNginxはというと

$ /usr/sbin/nginx -v
nginx version: nginx/1.14.2

というわけでして、確認してみるとHttps3.0への対応はNginx 1.17から(Cent7とかならいけるっぽい)ということらしいので実際に試せるのはまだまだ未来のようでした。

はい。

よく分からんやりとりをしてしまいました。

お試しの前にはOSのアップグレードが立ちはだかるのだろうか?
そのまま使えるといいな。
ソースコンパイルなどなど導入できるやり方はあろうけども、HHVMで痛い目にあったのであんまりチャレンジしたくないのだ。

残念ながら体感することは出来ませんでしたが、次いってみよう。

気を取り直して QUIC QUIC

QUICがどんな感じか簡略図で見てみると
1.クライアント → QUIC → サーバー
2.クライアント ← QUIC ← サーバー
3.クライアント → QUIC + Request → サーバー
4.クライアント ← Response ← サーバー

みたいな感じらしく、これを見たときに

江頭さんの「取って入れて出す」というネタ?を思い出しました。静止画だと分かりづらいんだけど、似てるのは言葉じゃなくて動作で、手を振りながら「取って入れて!出す!」とやるんだけど、その手の動きがまさに上の画像のようなので、気になった人は「取って入れて出す」で検索してみてください。

さすがにこれでは雑すぎるので

もう少し調べようと思います。

モデルです。

珍しく自分で書いてみました。検索でヒットして出てきた画像を真似してExcelでポチポチと書いてみてます。
はいさて、Wikipediaを使って解読していこうと思います。まずはQUICというのは、Quick UDP Internet Connections
の略称ということらしく、頭文字をもじってQUICということで、かなりのネーミングセンスの持ち主が居るようです。

UDPで素早くインターネットコネクションしちゃうぞということですね。UDPというのはまた略称で、これはUser Datagram Protocolといいます。

User Datagram Protocol
経路確保などの事前のやり取り(コネクションの確立)無しに、データ送信を開始するパケット通信の方式で、コネクションレス型通信といいます。
By Wikipedia。

さて、コネクションレス型通信で、素早くコネクションするぞとは一体どういうことなんだぜと。それにTCPといえば、「繋いだ手を離さないで〜」という通信でその代わりになる必要があるのだよね。その役割がQUICということか。
説明しているような気がして名前を読んだだけだったりしたけども、名前ってほんとうに大切なものだね。

上に書いたモデルにもあるように、QUICの説明にはTLS1.3というものが絡んできますが細かいことは抜きにして(爆〜)、TLSというのはTransport Layer Securityの略で、トランスポートという層のセキュリティを司っていると。トランスポート層というのは、アプリケーションという層とインターネットという層の間に位置しています。
すなわちTLSというのは、アプリケーションとインターネット間をセキュアにする奴っていうことだね。というわけでUDPで素早くセキュアな通信にしちゃうと

いうことかな?

また名前を読んだだけやけども、要点はこんな感じかしら。

いうわけで、思っていたざっくり感をさらに超えたざっくり感になってしまった気がしないでもないけれど、なんとなく分かった気になってもらえると嬉しい。のかもしれない。

ってことで

Nginx1.7が使えるようになった頃にまた試してみようと思うんだ。

Similar Posts:


Author: Takeken

インターネット利用者のITリテラシーを向上しようという目的で生まれた、2次元キャラのたけけんです。サーバー弄りからプログラミングまで幅広く書いています。自称エッセイスト。

Leave a Reply

Your email address will not be published. Required fields are marked *