[Webシステム] ブログ村キーワード
前回の、Firefox高速化~早くなったFirefoxをさらに高速化してみるの続きです。
httpやTCP/IPについて、一通り理解しているつもりでいましたが、
実はよく分かってないことが分かりました。
というわけで、ネットワークについて1からお勉強。
あれ?これって、さらにfirefox速くできる?
と密かな期待を抱きつつ。
中途半端な知識はよくないです。
今回は、かなり技術的なお話です。
普段は噛み砕きますが、ボクも本格的にお勉強始めたばかりですので、
気が向いたら清書します。
とりあえずTCP/IPについて分かったこと。
他にはIPアドレスあたりのお話は割愛して、
話題をプロトコルに絞ります。
TCP/IPとは下位のIPの上位で使われるプロトコル【protocol】(通信規約)である。
RFC 1700で定義されており、
Windows XPの場合、プロトコル番号が記載されたファイルは
C:\WINDOWS\system32\drivers\etc\protocol
である。
protocolファイルの内容
# [aliases...] [#]
ip 0 IP # Internet protocol
icmp 1 ICMP # Internet control message protocol
ggp 3 GGP # Gateway-gateway protocol
tcp 6 TCP # Transmission control protocol
egp 8 EGP # Exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # User datagram protocol
hmp 20 HMP # Host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
rvd 66 RVD # MIT remote virtual disk
IPが、OSI参照モデルの第3層(ネットワーク層)にあたるプロトコルであり、
TCP/IPは第4層(トランスポート層)にあたるプロトコルである。
TCP/IPにおいて、データはIPパケットとよばれる単位で送信される。
1つのIPパケットで送信可能な最大データサイズは64KB。
ヘッダ最小サイズが5B。
実際には1度に64Kを送信できる物理的なネットワーク媒体が存在しない。
イーサネットだと、最大1500B≒1.5KB
光ファイバでも、4352B=4.25KB
そのため、IPパケットは分割して送る(IPフラグメンテーションする)必要があり、
分割されたものをIPプロトコルで再構成する。
1度に送信できるデータサイズをMTU(Maximum Transmission Unit)という。
1度に送信できるサイズに分割したデータをIPフラグメントという。
MTUの最小サイズはデータ512B+ヘッダ用領域64B=576B
IPパケットは独立して転送されるため、途中で順序が入れ替わったり、
データが欠落する可能性がある。
そのため、信頼性がない。
信頼性を確保したプロトコルがTCP(Transmission Control Protocol)であり、
信頼性を確保せず、スピードを優先させたプロトコルがUDP(User Datagram Protocol)である。
TCPは、HTTPやFTPに代表されるようなファイルの転送等、
信頼性が必要な通信に利用され、
UDPは、音声や動画のリアルタイム転送等、
信頼性よりもスピードが求められる通信に利用される。
TCP/IPのコネクションの状態は
netstat
というコマンドで確認できる。
TCP/IPの通信内容は、
netcap.exe
というコマンドで確認できる。
Windows XPのインストールCDにある、Support Toolsの中の、
setup.exeを実行することでインストールできる。
(らしいが、今CDドライブが使えないため、確認していない。)
TCP/IPでは、通信の始めにARP【Address Resolve Protocol】(アドレス解決プロトコル、アープ)という、
プロトコルが利用されている。
IPネットワークのコンポーネントの
各ネットワークカード【Network Interface Card、NIC】(ニック)には、
固有のアドレスである、MACアドレス【Media Access Control Address】(マック・アドレス)が割り当てられている。
IPアドレスからMACアドレスを調べるために使われるのが、
ARPであり、ARPはTCPやUDPと同様、
OSI参照モデルの第4層(トランスポート層)にあたるプロトコルである。
ちなみに、MACアドレスからIPアドレスを求めるプロトコルが、
RARP【Reverse Address Resolve Protocol】である。
現在はほとんど利用されていない。
一度、ARPでMACアドレスがわかると、
通信するお互いのコンポーネント(ノード)の中で、
自身が持つARPテーブルへ、IPアドレスに対応するMACアドレスをキャッシュする。
Windows XPの場合、デフォルトのキャッシュ時間は600秒(10分)である。
arp -a
というコマンドを実行すると、ARPテーブルの内容が参照できる。
ここまで分かったところで、httpに戻ります。
httpでは、効率を上げるため、同時接続をして、
TCP/IPコネクションを複数張っています。
HTTP/1.0では、同時接続数は4でしたが、
HTTP/1.1においては、RFC2616で、同時接続数を2以下にすることが
推奨されています。
これは、一見、デチューンな気がしますが、
HTTP1.1で持続的接続【Keep Alive】(キープアライブ)や
パイプライン処理【Pipelining】がサポートされたため、
そもそも同時接続数がそんなに必要なくなったためです。
Keep Aliveとは、コネクション確立のための負荷を軽減するため、
TCP/IPの接続を維持したまま、いろんなファイルを取ってくるというもの。
Pipeliningとは、Keep Aliveした上で、まとめてリクエストすることで、
1つの処理の応答を待つことなく、全部まとめてもらう通信方法です。
ここまで分かると、要は同時接続数を増やせば、
Firefox君はもっと早くなるんですね。
例によってabout:configで設定内容をチェック
Firefox 3.5.7の初期値はこんな値です。
network.http.keep-alive true
network.http.keep-alive.timeout 300
network.http.max-connections 30
network.http.max-connections-per-server 15
network.http.max-persistent-connections-per-proxy 8
network.http.max-persistent-connections-per-server 6
network.http.pipelining false
network.http.pipelining.maxrequests 4
network.http.pipelining.ssl false
え?推奨同時接続数は2なのに初期値は6なのですね。
ちなみにWindows XPでの制限数は10
ということは、10までは上げてもOK!
しかもパイプライン処理はデフォルトでは行われないのですね。
ということでこれも有効にしてみる。
network.http.max-persistent-connections-per-proxy 10
network.http.max-persistent-connections-per-server 10
network.http.pipelining true
network.http.pipelining.maxrequests 8
network.http.pipelining.ssl true
こんな風にしてみました。
ちなみにこれはWebサーバが2本までの同時接続を推奨してるのに、
Firefox君は6本を同時につかい、
この設定で10本を同時に使っています。
apacheだと同時接続数はデフォルトで256。
2/256だから、同時に128人まで受け入れできるところを
Firefox君は、
6/256を使って、同時に42人までしか受け入れできなくしています。
さらにこれを
10/256人にしているので、同時に25人しか受け入れできなくなります。
サーバ側からするといい迷惑です。
接続拒否されても文句は言えない設定なのでご注意を。
ついでに見つけたのが、Firefox君、
どうやらデフォルトでページの先読みをしているようです。
これは、待っている間に、リンクが押されたときのために、
リンク先のページをあらかじめ持ってこよう!というお話。
いやいや、たくさんあるリンクを持ってくる必要なんてないです。
と思ったら、Fasterfoxというアドオンを使った場合のお話で、
普通のFirefoxは、meta linkタグで指定されたページだけを先読みするようです。
しらなかった。
ちなみにサーバ運営者としては、
robots.txtファイルに
User-agent: Fasterfox
Disallow: /
と記載するとFasterfoxによる先読みを防止できるそうです。
内部リンクいっぱいのSEOかかってるサイトで、
先読みなんてされようものなら…。
怖いですね。
意見は分かれそうですが、
要は速い人が遅い人に合わせるか、
遅い人が速い人を待つかというお話です。
渋滞のお話と一緒。
ボクからすれば、サイトに来てくれる人はお客様なわけで、
お客様が満足いくようにおもてなしするのが、
サイト運営者のあるべき姿だと思います。
これって、行列ができてお客さんが並んでいるときに、
いっぱい買うと他のお客さんが買えなくなるから買わないでね。
って言ってるのと変わらないと思います。
ボクの設定はお一人様2個までねって言われているところに、
お友達を4人つれていって、10個買っちゃいました!
ってお話。
とはいえ、運営側にも限界はある。
だったら、限界を示してくれればいいのです。
一番いいのは、サーバ側でお友達も含めて1組だねって
1組にすることです。
できるのかな?
嫌ならサーバ側で拒否すればいい。
いっぱい買われると他のお客様に迷惑だから、
そもそもお店にこないでねってお話。
そもそもタブブラウザ使ってたり、複数のウインドウを使ってたりして、
同じサイトを複数個開くと同じことだと思います。
もっと言うと、いまどき、ISDNやらADSLやらで接続するなよ!
早く買ってくれないと、次のお客さんが迷惑だから。
って言っているのと同じこと。
ん?ケータイのアクセスはPCに比べてそもそも取得に時間がかかる???
AjaxやらFlashやらで、最近は非同期通信がはやっているので、
パイプラインはFirefoxのデフォルトどおり使わない。
network.http.pipelining false
の方が速いみたい。
どうもパイプラインは有効にすると、もうリクエストない?
って待っているみたいです。
設定かえると速い速い!
もうデフォルトFirefoxは使えなさそうです。
参考:
daily dayflower
@IT 基礎から学ぶWindowsネットワーク
http://www.atmarkit.co.jp/fwin2k/serial/index/index.html
dayflower
HTTP/1.1 の同時接続数について
http://d.hatena.ne.jp/dayflower/20081024/1224830945
今日は午前中にたまっていた洗濯物を片して、
午後からずっとこんなことを調べておりました。
なんだか情報セキュリティスペシャリストを受けるよりも
ここまで調べたなら、ネットワークスペシャリストを受けた方が早そうです。
おやすみなさい。
もと東大生もと社長の自由奔放日記 Just do it now!
前回の、Firefox高速化~早くなったFirefoxをさらに高速化してみるの続きです。
TCP/IPについて
httpやTCP/IPについて、一通り理解しているつもりでいましたが、
実はよく分かってないことが分かりました。
というわけで、ネットワークについて1からお勉強。
あれ?これって、さらにfirefox速くできる?
と密かな期待を抱きつつ。
中途半端な知識はよくないです。
今回は、かなり技術的なお話です。
普段は噛み砕きますが、ボクも本格的にお勉強始めたばかりですので、
気が向いたら清書します。
とりあえずTCP/IPについて分かったこと。
他にはIPアドレスあたりのお話は割愛して、
話題をプロトコルに絞ります。
TCP/IPとは下位のIPの上位で使われるプロトコル【protocol】(通信規約)である。
Windowsでのプロトコル番号
RFC 1700で定義されており、
Windows XPの場合、プロトコル番号が記載されたファイルは
C:\WINDOWS\system32\drivers\etc\protocol
である。
protocolファイルの内容
#
ip 0 IP # Internet protocol
icmp 1 ICMP # Internet control message protocol
ggp 3 GGP # Gateway-gateway protocol
tcp 6 TCP # Transmission control protocol
egp 8 EGP # Exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # User datagram protocol
hmp 20 HMP # Host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
rvd 66 RVD # MIT remote virtual disk
IPが、OSI参照モデルの第3層(ネットワーク層)にあたるプロトコルであり、
TCP/IPは第4層(トランスポート層)にあたるプロトコルである。
TCP/IPではIPパケット単位でデータを送信
TCP/IPにおいて、データはIPパケットとよばれる単位で送信される。
1つのIPパケットで送信可能な最大データサイズは64KB。
ヘッダ最小サイズが5B。
実際には1度に64Kを送信できる物理的なネットワーク媒体が存在しない。
イーサネットだと、最大1500B≒1.5KB
光ファイバでも、4352B=4.25KB
そのため、IPパケットは分割して送る(IPフラグメンテーションする)必要があり、
分割されたものをIPプロトコルで再構成する。
1度に送信できるデータサイズをMTU(Maximum Transmission Unit)という。
1度に送信できるサイズに分割したデータをIPフラグメントという。
MTUの最小サイズはデータ512B+ヘッダ用領域64B=576B
TCP/IPとUDP
IPパケットは独立して転送されるため、途中で順序が入れ替わったり、
データが欠落する可能性がある。
そのため、信頼性がない。
信頼性を確保したプロトコルがTCP(Transmission Control Protocol)であり、
信頼性を確保せず、スピードを優先させたプロトコルがUDP(User Datagram Protocol)である。
TCPは、HTTPやFTPに代表されるようなファイルの転送等、
信頼性が必要な通信に利用され、
UDPは、音声や動画のリアルタイム転送等、
信頼性よりもスピードが求められる通信に利用される。
TCP/IPのコネクションの状態は
netstat
というコマンドで確認できる。
TCP/IPの通信内容の確認方法
TCP/IPの通信内容は、
netcap.exe
というコマンドで確認できる。
Windows XPのインストールCDにある、Support Toolsの中の、
setup.exeを実行することでインストールできる。
(らしいが、今CDドライブが使えないため、確認していない。)
ARPとは?
TCP/IPでは、通信の始めにARP【Address Resolve Protocol】(アドレス解決プロトコル、アープ)という、
プロトコルが利用されている。
IPネットワークのコンポーネントの
各ネットワークカード【Network Interface Card、NIC】(ニック)には、
固有のアドレスである、MACアドレス【Media Access Control Address】(マック・アドレス)が割り当てられている。
IPアドレスからMACアドレスを調べるために使われるのが、
ARPであり、ARPはTCPやUDPと同様、
OSI参照モデルの第4層(トランスポート層)にあたるプロトコルである。
ちなみに、MACアドレスからIPアドレスを求めるプロトコルが、
RARP【Reverse Address Resolve Protocol】である。
現在はほとんど利用されていない。
一度、ARPでMACアドレスがわかると、
通信するお互いのコンポーネント(ノード)の中で、
自身が持つARPテーブルへ、IPアドレスに対応するMACアドレスをキャッシュする。
Windows XPの場合、デフォルトのキャッシュ時間は600秒(10分)である。
arp -a
というコマンドを実行すると、ARPテーブルの内容が参照できる。
httpに見るTCP/IP
ここまで分かったところで、httpに戻ります。
httpでは、効率を上げるため、同時接続をして、
TCP/IPコネクションを複数張っています。
HTTP/1.0では、同時接続数は4でしたが、
HTTP/1.1においては、RFC2616で、同時接続数を2以下にすることが
推奨されています。
これは、一見、デチューンな気がしますが、
HTTP1.1で持続的接続【Keep Alive】(キープアライブ)や
パイプライン処理【Pipelining】がサポートされたため、
そもそも同時接続数がそんなに必要なくなったためです。
Keep Aliveとは、コネクション確立のための負荷を軽減するため、
TCP/IPの接続を維持したまま、いろんなファイルを取ってくるというもの。
Pipeliningとは、Keep Aliveした上で、まとめてリクエストすることで、
1つの処理の応答を待つことなく、全部まとめてもらう通信方法です。
Firefoxの同時接続数を増やす
ここまで分かると、要は同時接続数を増やせば、
Firefox君はもっと早くなるんですね。
例によってabout:configで設定内容をチェック
Firefox 3.5.7の初期値はこんな値です。
network.http.keep-alive true
network.http.keep-alive.timeout 300
network.http.max-connections 30
network.http.max-connections-per-server 15
network.http.max-persistent-connections-per-proxy 8
network.http.max-persistent-connections-per-server 6
network.http.pipelining false
network.http.pipelining.maxrequests 4
network.http.pipelining.ssl false
え?推奨同時接続数は2なのに初期値は6なのですね。
ちなみにWindows XPでの制限数は10
ということは、10までは上げてもOK!
しかもパイプライン処理はデフォルトでは行われないのですね。
ということでこれも有効にしてみる。
network.http.max-persistent-connections-per-proxy 10
network.http.max-persistent-connections-per-server 10
network.http.pipelining true
network.http.pipelining.maxrequests 8
network.http.pipelining.ssl true
こんな風にしてみました。
同時接続数を増やすとサーバ側にはいい迷惑
ちなみにこれはWebサーバが2本までの同時接続を推奨してるのに、
Firefox君は6本を同時につかい、
この設定で10本を同時に使っています。
apacheだと同時接続数はデフォルトで256。
2/256だから、同時に128人まで受け入れできるところを
Firefox君は、
6/256を使って、同時に42人までしか受け入れできなくしています。
さらにこれを
10/256人にしているので、同時に25人しか受け入れできなくなります。
サーバ側からするといい迷惑です。
接続拒否されても文句は言えない設定なのでご注意を。
Firefoxではページは先読みされる
ついでに見つけたのが、Firefox君、
どうやらデフォルトでページの先読みをしているようです。
これは、待っている間に、リンクが押されたときのために、
リンク先のページをあらかじめ持ってこよう!というお話。
いやいや、たくさんあるリンクを持ってくる必要なんてないです。
と思ったら、Fasterfoxというアドオンを使った場合のお話で、
普通のFirefoxは、meta linkタグで指定されたページだけを先読みするようです。
しらなかった。
ちなみにサーバ運営者としては、
robots.txtファイルに
User-agent: Fasterfox
Disallow: /
と記載するとFasterfoxによる先読みを防止できるそうです。
内部リンクいっぱいのSEOかかってるサイトで、
先読みなんてされようものなら…。
怖いですね。
意見は分かれそうですが、
要は速い人が遅い人に合わせるか、
遅い人が速い人を待つかというお話です。
渋滞のお話と一緒。
ボクからすれば、サイトに来てくれる人はお客様なわけで、
お客様が満足いくようにおもてなしするのが、
サイト運営者のあるべき姿だと思います。
これって、行列ができてお客さんが並んでいるときに、
いっぱい買うと他のお客さんが買えなくなるから買わないでね。
って言ってるのと変わらないと思います。
ボクの設定はお一人様2個までねって言われているところに、
お友達を4人つれていって、10個買っちゃいました!
ってお話。
とはいえ、運営側にも限界はある。
だったら、限界を示してくれればいいのです。
一番いいのは、サーバ側でお友達も含めて1組だねって
1組にすることです。
できるのかな?
嫌ならサーバ側で拒否すればいい。
いっぱい買われると他のお客様に迷惑だから、
そもそもお店にこないでねってお話。
そもそもタブブラウザ使ってたり、複数のウインドウを使ってたりして、
同じサイトを複数個開くと同じことだと思います。
もっと言うと、いまどき、ISDNやらADSLやらで接続するなよ!
早く買ってくれないと、次のお客さんが迷惑だから。
って言っているのと同じこと。
ん?ケータイのアクセスはPCに比べてそもそも取得に時間がかかる???
AjaxやらFlashやらで、最近は非同期通信がはやっているので、
パイプラインはFirefoxのデフォルトどおり使わない。
network.http.pipelining false
の方が速いみたい。
どうもパイプラインは有効にすると、もうリクエストない?
って待っているみたいです。
設定かえると速い速い!
もうデフォルトFirefoxは使えなさそうです。
参考:
daily dayflower
@IT 基礎から学ぶWindowsネットワーク
http://www.atmarkit.co.jp/fwin2k/serial/index/index.html
dayflower
HTTP/1.1 の同時接続数について
http://d.hatena.ne.jp/dayflower/20081024/1224830945
今日は午前中にたまっていた洗濯物を片して、
午後からずっとこんなことを調べておりました。
なんだか情報セキュリティスペシャリストを受けるよりも
ここまで調べたなら、ネットワークスペシャリストを受けた方が早そうです。
おやすみなさい。
もと東大生もと社長の自由奔放日記 Just do it now!