このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
持続性接続がどれくらい影響を与えているか
実際の通信でためしてみよう。
以下のページには画像を掲載しているが、
画像を 8 x 6 に分割して表に配置している。
このページを読み込むためには、
HTML と 画像 48 個の 49 回の通信が必要である。
■細切れ画像のテストページ
http://loafer.jp/mixi/image-grid/
最近の Web ブラウザは、HTTP 1.1 に対応している。
通常、HTTP 1.0 を使うメリットはないため、
純粋な HTTP 1.0 を使って通信されるのは難しい。
今日は、Internet Explorer を使おう。
インターネットオプションの詳細設定には、
「HTTP 1.1 設定」という項目があり、
1.0 と 1.1 を切り替えて試すことができる。
しかしながら、Internet Explorer は、
たとえ HTTP 1.0 で通信する設定にしても、
拡張機能として持続性接続を行う能力をもつ。
これをオフにするのは困難だ。
幸い、Fiddler をプロキシとして介在させることにより、
Fiddler と Web ブラウザの間で、
HTTP 1.1 と、1.0 に近い動作を切り替えることができる。
Fiddler は既定で Web サーバと間に持続性接続を使うので、
Web サーバに過度の負担を掛けずにテストが可能だ。
最初は、インターネットオプションの詳細設定で、
HTTP 1.1 関係のチェックを両方オンにする。
そして、キャッシュを全てクリアしておく。
Fiddler を起動し、Internet Explorer で、
上記の URL にアクセスしてみる。
回線速度やサーバの負荷にもよるので一概には言えないが、
画像は左上から順番にさささっと表示されるはずだ。
持続性接続が有効かどうか netstat で調べてみよう。
C:\>netstat
Active Connections
Proto Local Address Foreign Address State
TCP ironeagle:8888 localhost:3654 ESTABLISHED
TCP ironeagle:3654 localhost:8888 ESTABLISHED
TCP ironeagle:3658 loafer.jp:http ESTABLISHED
上記は、関係する項目だけ抜き出している。
ポート 8888 は Fiddler の待機ポートだ。
上の 2 行は Web ブラウザと Fiddler の接続である。
両方このコンピュータの接続なので、2 つの接続が表示されている。
そして、下の 1 行が Fiddler と Web サーバとの接続である。
このケースでは、Web ブラウザと、Fiddler、
そして Fiddler と Web サーバとの間には、
1 つの TCP 接続しか行われていないことになる。
では、次に、HTTP 1.0 で試してみよう。
インターネットオプションの詳細設定で、
HTTP 1.1 関係のチェックを両方オフにする。
そして、忘れずにキャッシュをクリアしておく。
念のため、Fiddler を再起動し、
上記の URL にアクセスしてみる。
今度は、先ほどよりも少しだけもたつくはずだ。
同様に、 netstat で調べてみよう。
C:\>netstat
Active Connections
Proto Local Address Foreign Address State
TCP ironeagle:4946 localhost:8888 ESTABLISHED
TCP ironeagle:8888 localhost:4880 TIME_WAIT
TCP ironeagle:8888 localhost:4882 TIME_WAIT
TCP ironeagle:8888 localhost:4883 TIME_WAIT
TCP ironeagle:8888 localhost:4886 TIME_WAIT
TCP ironeagle:8888 localhost:4888 TIME_WAIT
TCP ironeagle:8888 localhost:4890 TIME_WAIT
TCP ironeagle:8888 localhost:4892 TIME_WAIT
TCP ironeagle:8888 localhost:4894 TIME_WAIT
TCP ironeagle:8888 localhost:4896 TIME_WAIT
TCP ironeagle:8888 localhost:4898 TIME_WAIT
TCP ironeagle:8888 localhost:4899 TIME_WAIT
TCP ironeagle:8888 localhost:4902 TIME_WAIT
TCP ironeagle:8888 localhost:4903 TIME_WAIT
TCP ironeagle:8888 localhost:4906 TIME_WAIT
TCP ironeagle:8888 localhost:4907 TIME_WAIT
TCP ironeagle:8888 localhost:4910 TIME_WAIT
TCP ironeagle:8888 localhost:4912 TIME_WAIT
TCP ironeagle:8888 localhost:4914 TIME_WAIT
TCP ironeagle:8888 localhost:4915 TIME_WAIT
TCP ironeagle:8888 localhost:4918 TIME_WAIT
TCP ironeagle:8888 localhost:4919 TIME_WAIT
TCP ironeagle:8888 localhost:4922 TIME_WAIT
TCP ironeagle:8888 localhost:4923 TIME_WAIT
TCP ironeagle:8888 localhost:4926 TIME_WAIT
TCP ironeagle:8888 localhost:4927 TIME_WAIT
TCP ironeagle:8888 localhost:4930 TIME_WAIT
TCP ironeagle:8888 localhost:4932 TIME_WAIT
TCP ironeagle:8888 localhost:4934 TIME_WAIT
TCP ironeagle:8888 localhost:4935 TIME_WAIT
TCP ironeagle:8888 localhost:4938 TIME_WAIT
TCP ironeagle:8888 localhost:4939 TIME_WAIT
TCP ironeagle:8888 localhost:4942 TIME_WAIT
TCP ironeagle:8888 localhost:4943 TIME_WAIT
TCP ironeagle:8888 localhost:4946 ESTABLISHED
TCP ironeagle:8888 localhost:4948 TIME_WAIT
TCP ironeagle:8888 localhost:4950 TIME_WAIT
TCP ironeagle:8888 localhost:4952 TIME_WAIT
TCP ironeagle:8888 localhost:4954 TIME_WAIT
TCP ironeagle:8888 localhost:4956 TIME_WAIT
TCP ironeagle:8888 localhost:4958 TIME_WAIT
TCP ironeagle:8888 localhost:4960 TIME_WAIT
TCP ironeagle:8888 localhost:4962 TIME_WAIT
TCP ironeagle:8888 localhost:4964 TIME_WAIT
TCP ironeagle:8888 localhost:4966 TIME_WAIT
TCP ironeagle:8888 localhost:4968 TIME_WAIT
TCP ironeagle:8888 localhost:4970 TIME_WAIT
TCP ironeagle:8888 localhost:4972 TIME_WAIT
TCP ironeagle:8888 localhost:4974 TIME_WAIT
TCP ironeagle:8888 localhost:4976 TIME_WAIT
TCP ironeagle:4947 loafer.jp:http ESTABLISHED
一目瞭然である。
最後の行が、Fiddler と Web サーバとの接続である。
上でも説明したが、Fiddler は持続性接続を利用しているため、
Web サーバに対しては、1 接続しか行われていない。
さて、最後以外の ESTABLISHED 行は、
Web ブラウザと Fiddler で進行中の接続である。
この例では、最後の画像をダウンロードした瞬間である。
残りの TIME_WAIT(切断待機状態)の表示は
既にデータの転送が終了し、双方とも接続を閉じた後のものである。
これは接続が終わったことを示している。
つまり、現在通信中のものと合わせて、
49 回 TCP 接続が行われていることがわかる。
最近のパソコンは、TCP の実装性能が向上しているので、
持続性接続の有無の差が感じられない場合もあるが、
TCP による接続・切断の差があるのは明らかである。
TCP には、その接続の通信を切断する場合、
最初にデータ転送を終了した方が、
切断待機状態となり、しばらくはそのポートを使えなくなる。
HTTP の場合、通常サーバ側から切断することが多いため、
持続性接続を使わない場合、パフォーマンスだけでなく、
再利用できない TCP ポートが増える原因にもなる。
どんな性能の良いサーバでも、ポートの数は限られているため、
Web サーバの最大限の性能を引き出すためにも、
HTTP 1.1 の役割は重要なのである。