Cloudflareのhttp/3実装 quiche サンプルサーバを試す


Cloudflareのhttp/3実装が目についたので、とりあえずサンプルサーバを動かしてみました

HTTP/3について

IETFでHTTP/3の標準化が進められています。

現在はdraft-19が出ているところです。
https://tools.ietf.org/html/draft-ietf-quic-http-19

QUIC及びHTTP/3について別途まとめましたので、参考にして頂ければ
- QUICの話 (QUICプロトコルの簡単なまとめ)
- HTTP over QUICと、その名称について (HTTP3について)

各社QUIC, HTTP/3実装状況

簡単に他の実装状況にも触れます。
IETF QUIC, HTTP/3 は標準化を進めるとともに各社が実装を持ち寄って相互接続性テストを行っています。

今は「11th Implementation Draft」での接続テストを行っています。下の図は実装同士で接続テストをし、動作確認がとれたものが書かれている表になります。3と書かれているのがHTTP/3の実装が行われているものになります。

Cloudflare quiche

quicheはCloudflareのQUIC, HTTP/3のRUST実装です。ちなみに現在は、draft 18の実装になっています。
(Googleも同名の実装を持っていて紛らわしい)

先日、HTTP/3実装がmasterにマージされたのでexampleのサーバ・クライアントを試しに動かしてみました

Build

READMEに書いてあるとおり

# 準備
$ apt-get install cmake
$ curl https://sh.rustup.rs -sSf | sh # 適宜PATH通してcargo使えるように

$ git clone https://github.com/cloudflare/quiche.git
$ cd ./quiche
quiche$ git submodule update --init
quiche$ cargo build --examples

動作確認

server

デフォルトでポート4433でリッスンします。証明書や鍵はexamplesに含まれているため指定は不要です

quiche$ quiche$ mkdir ./examples/root
quiche$ echo 'It works!!' > ./examples/root/index.html

quiche$ target/debug/examples/http3-server

client

quiche$ target/debug/examples/http3-client https://localhost:4433/index.html
It works!!

wireahark

Clientがデフォルトの version=babababa で接続しにいったあとVersion Negotiationパケットが返ってきて改めてdraft-18で接続しに行ってる様子や、Handshakeパケットのあとにショートヘッダパケットが送受信されている様子が見えます。