前回はHTTP/2.0がやってくるぞーという話をしました。内容は主にHTTP/1.1とHTTP/1.0の話で、HTTP/2.0に関してはSPDY3.1から派生して通信が多重化されるということだけで終わっていたのでもう少しやっとこうと思います。理論の話になると大したことは書けないので、実際に試してみることにしました。
Macからだとアドオンが上手く動かないのか、ちゃんとしたデータが取れなかったのでWindowsのFirefoxからリクエストを送って、Javascriptで書かれた処理を実行するテストをしました。
テスト内容は
・乱数を10000回派生する。
・8種類の画像データをランダムに読み込む動作を1000回繰り返す。
この2つです。
データ化すると一目瞭然でした。
SPDYがない時…(´ω`)
SPDYがある時ーヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
ブラウザの同時接続数だとか、アドオンやらの変更はしておらず、SPDYの有り無しを変更したのみです。関西ローカルネタで申し訳ないですがw
たったこれだけでもこんな差があるので、ガッツリ読みこませるコンテンツほどSPDYが有効に効きそうですね。同時にこれはリソースを上手く使えるという結果でもあるので、サーバー側にもメリットが高いということになるらしい。
比較的新しいブラウザはすでに対応しているので、サーバー側さえ対応させればすぐに利用することができます。しかし、こうしてグラフやベンチマークの結果を見ると最近の動的なコンテンツだと導入した方が良いというのは確かなように見えます。そういえば既に導入していましたね。
あとHTTP/2.0およびSPDYはSSL専用です。GoogleのHTTPS優先化の動きもありますし、SEOには全く詳しくないのでヘタなことは言えないですが、導入する価値は高そうです。ぼくはわりとミーハーなのでサクッとSSL導入しているかもです。
HTTP/2.0で追加される機能をもう少し紹介しておきます。
ヘッダ圧縮
ヘッダ情報が圧縮されてバイナリ化されます。フラグだったり、Cookieだったり、ブラウザ情報だったり、その他もろもろのデータが圧縮されて小さくなります。小さくなるということは通信量も減るということです。
バイナリになるということはtelnetで覗くとバヨエ〜ンとなってしまうことになりますが、さよならtelnetという日がやってくるのでしょうか。接続の確認だけなら関係ないか。
TCPの問題を改善
問題点について詳しくは
3 Minutes Networking 第41回レイヤ4 TCP ウィンドウ
を読むとよくわかると思います。TCPは信頼性重視故に再送することが多いです。単一のTCPコネクション上に論理セクションを複数構築することで、その問題は解決されるようです。
問題という言い方をしていますが、単一のTCPコネクション故に成り立っていることもたくさんあるようです。
Webはインターネットになった – naoyaのはてなダイアリー:
もっと知りたい人はこちらもどうぞ。
SPDYで複数のTCPコネクションをひとつにまとめるとはどういうことか – ゆううきブログ:
適当に読んでいると、「あれ、さっきは1つを複数にって言ってなかった?」なんてことになってしまうのでしっかり把握しておくのがいいと思います。
HTTP/2.0はコネクションが少なくて済むとなると、同一セグメント内にHTTP/2.0に対応したサーバーが多いほど、帯域が節約出来るということでしょうか?
ヘッダが圧縮されるので、それだけでも節約になってますから効果は高そうです。
nf-conntrackを利用してSYNを調べてみました。
クライアント :192.168.0.100
サーバー :192.168.0.200
とします。
SPDYがない時…(´ω`)
[NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51239 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51239 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51240 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51240 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51241 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51241 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51242 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51242 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51244 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51244 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51246 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51246 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51245 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51245 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51248 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51248 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51247 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51247 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51249 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51249 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51250 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51250 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51251 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51251 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51252 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51252 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51253 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51253 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51254 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51254 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51255 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51255 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51256 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51256 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51257 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51257 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51258 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51258 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51259 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51259 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51260 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51260 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51261 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51261 ^Cconntrack v0.9.15 (conntrack-tools): 22 flow events have been shown.
SPDYがある時ーヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
[NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51274 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51274 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51275 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51275 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51277 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51277 ^Cconntrack v0.9.15 (conntrack-tools): 3 flow events have been shown. [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51299 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51299 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51300 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51300 [NEW] tcp 6 120 SYN_SENT src=192.168.0.100 dst=192.168.0.200 sport=51302 dport=443 [UNREPLIED] src=192.168.0.200 dst=192.168.0.100 sport=443 dport=51302 ^Cconntrack v0.9.15 (conntrack-tools): 3 flow events have been shown.
少なすぎるので2回分取りました。
これはこれは、なかなかの差がありますね。
うーむ。難しい話題ですが、なかなか面白いですね。