ぼちぼち日記

おそらくプロトコルネタを書いていることが多いんじゃないかと思います。

0-RTT接続、これがQUICの力。QUIC対SPDY3の再接続対決(動画有)

1. QUICサーバを試す

先日紹介したGoogleの新プロトコル QUIC ですが、Chomium ソース中にテスト用の QUICサーバが用意されています(net/tools/quic以下)。 今のところこの QUIC サーバは、Linux上でしかビルドできません。また、コンテンツの方はあらかじめ wget で取得した静的なもの(バルサフレーム形式と呼ばれている)しか使えませんが、現在これを使っていろいろQUICの特性を評価しているところです。

Googleからのアナウンスにあるよう、QUICの大きな特徴の一つとして、

  • TCP Fast Open と TLS Snapstart を組み合わせたような(だいたい 0-RTTの)素早い接続

が挙げられます。

UDP上でQUIC独自にセッション管理をしているので再接続時には全くハンドシェイク無しで接続を開始できる技です。モバイル環境の様に頻繁にネットワークの切断・再接続が行われる場合などでは、その効果が表れることが期待されています。

そこで今回、この QUICの特徴、再接続の強さを検証してみたいと思います。

2. QUIC vs SPDY3 再接続対決

モバイルルーターに接続した端末を用意して、同一VPS上に QUICサーバとSPDY3サーバ(apache+mod_spdy)を用意します。ブラウザーは、Chrome Canary 30.0.1554.0 を使いました。
1000枚の画像(画像は数字が書いてあるだけ)を用意して Ajax で順次その画像を取得するページを作ります。
コードは以下で公開しています。

https://gist.github.com/shigeki/5930941

モバイルルータのLTE接続を不定期にOFF/ONして QUIC とSPDY3 で接続耐性がどれだけ違うか比較してみます。
試験した動画を以下に公開します。まず見てください。

当初短い時間の再接続では SPDY の方が若干有利、もしくは対等ですが、ある程度長い時間に接続断になると SPDY の Ajax リクエストが切れてしまっていることがわかります。(最終的に QUIC も切れてしまいます。)
何回か繰り返し試験をしたところ、たまにQUICが最初に切れる場合もありましたが、ほとんどがこの傾向でした。
このことからネットワーク再接続の管理をTCPに任せているSPDYに比べ、UDP上で独自にセッション管理を行うQUICの方が再接続耐性が強いことがわかったかと思います。

3. ネットワーク切り替えにも対応可能か?

さらに、QUICの方はセッション管理をフレームデータ上のGUIDで行っています。これはクライアントのソースIPやソースポートが変更しても再接続が可能であることを示しています。QUICを使うと、LTEからWifiへのネットワーク切り替えやNATボックスのUDPセッション切れなどによってもセッションを維持できるのではないかと期待されます。
しかし現状では実際に端末でWifi接続を変えて試したところ、インターフェイスが変わったらQUIC接続は維持されませんでした(端末側の問題かもしれない)。今後に期待です。