quic のはじめ方

ご指摘をいただいたので追記 2016-12-23 20:55

手元で試してみましたが、たしかにつながりました 🙌

ただ以下にも書きましたが Chromium は fetch してくるのに時間がかかる上、compile もそれなりに時間がかかります

goquic の verifier はこの辺かな?

goquic/proof_verifier.go at master · devsisters/goquic · GitHub

prot-quic は Linux じゃないと動かないようです

少なくとも手元の Macbook Pro では compile に至りませんでした

Installing build deps and syncing with Chromium repository...
ERROR: lsb_release not found in $PATH
done.

github.com

追記 2016-12-25 22:50

prot-quic が Linux のみサポートである事は README に書いてありました

iOS がサポートされたら Mac でも compile できるようになるかな?

Currently, the only supported platform is Linux (and the only tested version is Google's Ubuntu clone) but Windows and iOS should be coming soon

proto-quic/README.md at master · google/proto-quic · GitHub

はじめに

この記事は http2 Advent Calendar 2016 - Qiita の 22 日目です。

quic のはじめ方

現時点では以下の 2 つがあるようです

  • chromium の standalone test server and client
  • goquic の example

お手軽なのは goquic の方なのでそちらを紹介します

chromium だとソースコードを取ってくる時点でだいぶ時間がかってしまいます

chromium にチャレンジしてみたい方はこの辺を見ると良いと思います

www.chromium.org

www.chromium.org

goquic

github.com

README.md の通りなんですが、以下の手順で build します

go get ではなく、git clone した場合は git submodule init && git submodule update が必要なのでご注意を

この辺 で教えてくれるので実は忘れていても大丈夫

$ go get -u -d github.com/devsisters/goquic
$ cd $GOPATH/src/github.com/devsisters/goquic

$ ./build_libs.sh # (for debug build)
$ ## GOQUIC_BUILD=Release ./build_libs.sh # (for release build)

$ go build $GOPATH/src/github.com/devsisters/goquic/example/server.go
$ go build $GOPATH/src/github.com/devsisters/goquic/example/client.go

go build を実行したディレクトリ直下に serverclient という実行ファイルができています

server

server をそのまま実行すると以下のようなエラーになります

./server
2016/12/22 02:03:37 QUIC doesn't support non-encrypted mode anymore. Please provide -cert and -key option!

help があるので確認してみましょう

./server --help
Usage of ./server:
  -addr string
        TCP/UDP listen address (default "0.0.0.0")
  -cert string
        Certificate file (PEM), will use encrypted QUIC and SSL when provided
  -key string
        Private key file (PEM), will use encrypted QUIC and SSL when provided
  -loglevel int
        Log level (default -1)
  -n int
        Number of concurrent quic dispatchers (default 1)
  -port int
        TCP/UDP port number to listen (default 8080)
  -quic_only
        Use QUIC Only
  -root string
        Root of path to serve under https://127.0.0.1/files/ (default "/tmp")
  -scfg string
        Server config JSON file. If not provided, new one will be generated
  -use_sslv3
        Use SSLv3 on HTTP 1.1. HTTP2 and QUIC are not affected.

cert と key はきちんと認証局から証明を得たものでないと client 側がエラーになってしまうようです (client default の http ではなく https にして確認)

[1222/020754:VERBOSE1:quic_crypto_client_stream.cc(407)] Reasons for rejection: 2048
2016/12/22 02:07:55 Verify failedx509: certificate signed by unknown authority

いろいろとやり方はあるようなんですが確認していません

必要がある方はこの辺を見るとよいと思います

github.com

www.chromium.org

client

client も help を見てみましょう

./client --help
Usage of ./client:
  -loglevel int
        Log level (default -1)
  -url string
        host to connect (default "http://127.0.0.1:8080/")

という訳で -url をつけると任意のサーバーに接続してくれるようです

Google はすでに QUIC を利用しているので以下のようにすれば QUIC での接続を確認できます

./client -url https://www.google.co.jp/

おわりに

頑張って Ruby の Binding 書いてみようと思っていたんですが、進捗ダメでした…