HTML文書にGIFをたくさん埋め込んでみた - Firefox の奥の手 [ColdFire V2]
付録基板の http サーバに Firefox で接続した時の問題は、同時に張るコネクション数が多すぎる為であるらしい事が分かってきました。 だったら、 Firefox に同時コネクション数を減らすように指示してやろう。
about:config というページの存在
Firefoxには、設定を変えるための"about:config"というページがあります。 アドレス欄に"about:config"と打ち込むと、この設定ページが開きます。 最近は、「動作保証外になります!」という警告が出てくるのね。 Firefoxに「動作保証」なんてあったんだっけ。
設定項目が山のように並んでいるので、必要な項目だけフィルタリングすることが出来ます。 ここでは、フィルタ欄に".http."と入力して必要な項目を出します。 それぞれの項目をダブル・クリックするか、右クリックでプルダウン・メニューを出して値を変更します。 付録基板のhttpサーバのご機嫌をとるために設定した項目は、以下の三つです。
設定名 | 値 | 備考 |
---|---|---|
network.http.max-connections-per-server | 3 | サーバあたりの最大コネクション数。 ColdFireは、最大三つしかコネクションを受け付けないらしい事が実験的にわかってきました。 Firefox 3.0.3のデフォルトは、なんと"15"になっていたので、付録基板がアップアップしていたのもうなずけます。 |
network.http.max-persistent-connections-per-server | 3 | サーバあたりの最大永続コネクション数。 どういうコネクションを意味するのか分かりませんが、デフォルトの"6"が大きすぎるのは明らかだと思います。 |
network.http.version | 1.0 | HTTPのバージョン。 デフォルトは、"1.1"でした。 これを"1.0"にすると、「HTTP/1.0にふさわしい振る舞い」をしてくれるようです。 |
パケット・モニタで解析
以上の設定を行ってから、パケット・モニタで解析しました。
#1 0.000000 192.168.1.2 192.168.1.10 TCP 1217 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #2 0.000364 192.168.1.10 192.168.1.2 TCP 80 > 1217 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #3 0.000438 192.168.1.2 192.168.1.10 TCP 1217 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #4 0.008139 192.168.1.2 192.168.1.10 HTTP GET /ShowGeaTemplate.htm HTTP/1.0 TCP 1217 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=420 #5 0.009089 192.168.1.10 192.168.1.2 TCP 80 > 1217 [ACK] Seq=1 Ack=421 Win=1454 Len=0 #6 0.012982 192.168.1.10 192.168.1.2 TCP [TCP segment of a reassembled PDU] TCP 80 > 1217 [PSH, ACK] Seq=1 Ack=421 Win=1454 Len=1408 #19 0.201169 192.168.1.2 192.168.1.10 TCP 1217 > 80 [ACK] Seq=421 Ack=1409 Win=16616 Len=0 #81 1.997214 192.168.1.10 192.168.1.2 TCP [TCP Retransmission] [TCP segment of a reassembled PDU] TCP [TCP Retransmission] 80 > 1217 [PSH, ACK] Seq=1 Ack=421 Win=1454 Len=1408 #82 1.997296 192.168.1.2 192.168.1.10 TCP [TCP Dup ACK 19#1] 1217 > 80 [ACK] Seq=421 Ack=1409 Win=16616 Len=0 #83 1.998617 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (text/html) TCP 80 > 1217 [PSH, ACK] Seq=1409 Ack=421 Win=1454 Len=388 #96 2.113152 192.168.1.2 192.168.1.10 TCP 1217 > 80 [ACK] Seq=421 Ack=1797 Win=16228 Len=0 #97 2.113542 192.168.1.10 192.168.1.2 TCP 80 > 1217 [FIN, ACK] Seq=1797 Ack=421 Win=1454 Len=0 #98 2.113645 192.168.1.2 192.168.1.10 TCP 1217 > 80 [ACK] Seq=421 Ack=1798 Win=16228 Len=0 #99 2.114382 192.168.1.2 192.168.1.10 TCP 1217 > 80 [FIN, ACK] Seq=421 Ack=1798 Win=16228 Len=0 #100 2.114713 192.168.1.10 192.168.1.2 TCP 80 > 1217 [ACK] Seq=1798 Ack=422 Win=1454 Len=0
第1コネクションは、ポート1217でHTML文書を要求します。 途中でブラウザの送った"ACK"(#19)を付録基板が取り損ねたため、#81で再送が発生していますが、2秒ちょっとでコネクションは完了します。
#7 0.054576 192.168.1.2 192.168.1.10 TCP 1220 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #8 0.054906 192.168.1.10 192.168.1.2 TCP 80 > 1220 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #9 0.054970 192.168.1.2 192.168.1.10 TCP 1220 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #10 0.055850 192.168.1.2 192.168.1.10 HTTP GET /Ke1.gif HTTP/1.0 TCP 1220 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #11 0.056772 192.168.1.10 192.168.1.2 TCP 80 > 1220 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #12 0.058537 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1220 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=645 #20 0.201248 192.168.1.2 192.168.1.10 TCP 1220 > 80 [ACK] Seq=429 Ack=646 Win=16616 Len=0 #90 2.046141 192.168.1.10 192.168.1.2 HTTP [TCP Retransmission] HTTP/1.1 200 OK (GIF89a) TCP [TCP Retransmission] 80 > 1220 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=645 #91 2.046218 192.168.1.2 192.168.1.10 TCP [TCP Dup ACK 20#1] 1220 > 80 [ACK] Seq=429 Ack=646 Win=16616 Len=0 #92 2.046701 192.168.1.10 192.168.1.2 TCP 80 > 1220 [FIN, ACK] Seq=646 Ack=429 Win=1454 Len=0 #93 2.046806 192.168.1.2 192.168.1.10 TCP 1220 > 80 [ACK] Seq=429 Ack=647 Win=16616 Len=0 #94 2.047666 192.168.1.2 192.168.1.10 TCP 1220 > 80 [FIN, ACK] Seq=429 Ack=647 Win=16616 Len=0 #95 2.047997 192.168.1.10 192.168.1.2 TCP 80 > 1220 [ACK] Seq=647 Ack=430 Win=1454 Len=0
第2コネクションは、ポート1220でGIFファイル Ke1.gif を要求します。 このコネクションも途中でブラウザからの"ACK"を付録基板が取り損ねる場面がありますが、それでも2秒ちょっとでコネクションは終了します。
#13 0.062049 192.168.1.2 192.168.1.10 TCP 1221 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #14 0.062428 192.168.1.10 192.168.1.2 TCP 80 > 1221 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #15 0.062493 192.168.1.2 192.168.1.10 TCP 1221 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #16 0.069947 192.168.1.2 192.168.1.10 HTTP GET /Ry0.gif HTTP/1.0 TCP 1221 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #17 0.070920 192.168.1.10 192.168.1.2 TCP 80 > 1221 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #18 0.072850 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1221 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=692 #21 0.201278 192.168.1.2 192.168.1.10 TCP 1221 > 80 [ACK] Seq=429 Ack=693 Win=16616 Len=0 #22 0.201702 192.168.1.10 192.168.1.2 TCP 80 > 1221 [FIN, ACK] Seq=693 Ack=429 Win=1454 Len=0 #23 0.201799 192.168.1.2 192.168.1.10 TCP 1221 > 80 [ACK] Seq=429 Ack=694 Win=16616 Len=0 #24 0.202858 192.168.1.2 192.168.1.10 TCP 1221 > 80 [FIN, ACK] Seq=429 Ack=694 Win=16616 Len=0 #25 0.203185 192.168.1.10 192.168.1.2 TCP 80 > 1221 [ACK] Seq=694 Ack=430 Win=1454 Len=0
第3コネクションは、ポート1221でGIFファイル Ry0.gif を要求します。 ブラウザは、GIFファイルを受け取ったら、次のファイルを要求せずにコネクションを終了させます。
#26 0.212440 192.168.1.2 192.168.1.10 TCP 1223 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #27 0.212818 192.168.1.10 192.168.1.2 TCP 80 > 1223 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #28 0.212904 192.168.1.2 192.168.1.10 TCP 1223 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #29 0.220324 192.168.1.2 192.168.1.10 HTTP GET /Kn1.gif HTTP/1.0 TCP 1223 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #30 0.221324 192.168.1.10 192.168.1.2 TCP 80 > 1223 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #31 0.223138 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1223 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=648 #32 0.402372 192.168.1.2 192.168.1.10 TCP 1223 > 80 [ACK] Seq=429 Ack=649 Win=16616 Len=0 #33 0.402791 192.168.1.10 192.168.1.2 TCP 80 > 1223 [FIN, ACK] Seq=649 Ack=429 Win=1454 Len=0 #34 0.402881 192.168.1.2 192.168.1.10 TCP 1223 > 80 [ACK] Seq=429 Ack=650 Win=16616 Len=0 #35 0.404767 192.168.1.2 192.168.1.10 TCP 1223 > 80 [FIN, ACK] Seq=429 Ack=650 Win=16616 Len=0 #36 0.405098 192.168.1.10 192.168.1.2 TCP 80 > 1223 [ACK] Seq=650 Ack=430 Win=1454 Len=0
第4コネクションは、ポート1223でGIFファイル Kn1.gif を要求します。 このコネクションの処理中は、他のコネクションを受けつけず、終了まで一気に進みます。
#37 0.412711 192.168.1.2 192.168.1.10 TCP 1225 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #38 0.413096 192.168.1.10 192.168.1.2 TCP 80 > 1225 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #39 0.413160 192.168.1.2 192.168.1.10 TCP 1225 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #40 0.420408 192.168.1.2 192.168.1.10 HTTP GET /Gn1.gif HTTP/1.0 TCP 1225 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #41 0.421475 192.168.1.10 192.168.1.2 TCP 80 > 1225 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #42 0.423206 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1225 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=662 #43 0.603541 192.168.1.2 192.168.1.10 TCP 1225 > 80 [ACK] Seq=429 Ack=663 Win=16616 Len=0 #44 0.604028 192.168.1.10 192.168.1.2 TCP 80 > 1225 [FIN, ACK] Seq=663 Ack=429 Win=1454 Len=0 #45 0.604128 192.168.1.2 192.168.1.10 TCP 1225 > 80 [ACK] Seq=429 Ack=664 Win=16616 Len=0 #46 0.605874 192.168.1.2 192.168.1.10 TCP 1225 > 80 [FIN, ACK] Seq=429 Ack=664 Win=16616 Len=0 #47 0.606196 192.168.1.10 192.168.1.2 TCP 80 > 1225 [ACK] Seq=664 Ack=430 Win=1454 Len=0
第5コネクションは、ポート1225でGIFファイル Gn1.gif を要求します。 このコネクションも、終了まで一気に進みます。
#48 0.613631 192.168.1.2 192.168.1.10 TCP 1227 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #49 0.614064 192.168.1.10 192.168.1.2 TCP 80 > 1227 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #50 0.614135 192.168.1.2 192.168.1.10 TCP 1227 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #51 0.621146 192.168.1.2 192.168.1.10 HTTP GET /Gk1.gif HTTP/1.0 TCP 1227 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #52 0.622119 192.168.1.10 192.168.1.2 TCP 80 > 1227 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #53 0.623955 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1227 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=669 #54 0.804724 192.168.1.2 192.168.1.10 TCP 1227 > 80 [ACK] Seq=429 Ack=670 Win=16616 Len=0 #55 0.805140 192.168.1.10 192.168.1.2 TCP 80 > 1227 [FIN, ACK] Seq=670 Ack=429 Win=1454 Len=0 #56 0.805229 192.168.1.2 192.168.1.10 TCP 1227 > 80 [ACK] Seq=429 Ack=671 Win=16616 Len=0 #57 0.806464 192.168.1.2 192.168.1.10 TCP 1227 > 80 [FIN, ACK] Seq=429 Ack=671 Win=16616 Len=0 #58 0.806805 192.168.1.10 192.168.1.2 TCP 80 > 1227 [ACK] Seq=671 Ack=430 Win=1454 Len=0
第6コネクションは、ポート1227でGIFファイル Gk1.gif を要求します。 このコネクションも、終了まで一気に進みます。
#59 0.814831 192.168.1.2 192.168.1.10 TCP 1229 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #60 0.815293 192.168.1.10 192.168.1.2 TCP 80 > 1229 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #61 0.815372 192.168.1.2 192.168.1.10 TCP 1229 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #62 0.822975 192.168.1.2 192.168.1.10 HTTP GET /Fu1.gif HTTP/1.0 TCP 1229 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #63 0.824038 192.168.1.10 192.168.1.2 TCP 80 > 1229 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #64 0.825702 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1229 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=607 #65 1.005801 192.168.1.2 192.168.1.10 TCP 1229 > 80 [ACK] Seq=429 Ack=608 Win=16616 Len=0 #66 1.006182 192.168.1.10 192.168.1.2 TCP 80 > 1229 [FIN, ACK] Seq=608 Ack=429 Win=1454 Len=0 #67 1.006258 192.168.1.2 192.168.1.10 TCP 1229 > 80 [ACK] Seq=429 Ack=609 Win=16616 Len=0 #68 1.008603 192.168.1.2 192.168.1.10 TCP 1229 > 80 [FIN, ACK] Seq=429 Ack=609 Win=16616 Len=0 #69 1.008937 192.168.1.10 192.168.1.2 TCP 80 > 1229 [ACK] Seq=609 Ack=430 Win=1454 Len=0
第7コネクションは、ポート1229でGIFファイル Fu1.gif を要求します。 このコネクションも、終了まで一気に進みます。
#70 1.017496 192.168.1.2 192.168.1.10 TCP 1231 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #71 1.017957 192.168.1.10 192.168.1.2 TCP 80 > 1231 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #72 1.018031 192.168.1.2 192.168.1.10 TCP 1231 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #73 1.025341 192.168.1.2 192.168.1.10 TCP 1231 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 HTTP GET /Fu0.gif HTTP/1.0 #74 1.026367 192.168.1.10 192.168.1.2 TCP 80 > 1231 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #75 1.027997 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1231 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=608 #76 1.208014 192.168.1.2 192.168.1.10 TCP 1231 > 80 [ACK] Seq=429 Ack=609 Win=16616 Len=0 #77 1.208507 192.168.1.10 192.168.1.2 TCP 80 > 1231 [FIN, ACK] Seq=609 Ack=429 Win=1454 Len=0 #78 1.208618 192.168.1.2 192.168.1.10 TCP 1231 > 80 [ACK] Seq=429 Ack=610 Win=16616 Len=0 #79 1.209386 192.168.1.2 192.168.1.10 TCP 1231 > 80 [FIN, ACK] Seq=429 Ack=610 Win=16616 Len=0 #80 1.209733 192.168.1.10 192.168.1.2 TCP 80 > 1231 [ACK] Seq=610 Ack=430 Win=1454 Len=0
第8コネクションは、ポート1231でGIFファイル Fu0.gif を要求します。 このコネクションも、終了まで一気に進みます。
#84 2.013543 192.168.1.2 192.168.1.10 TCP 1233 > 80 [SYN] Seq=0 Win=16384 Len=0 MSS=1460 #85 2.013956 192.168.1.10 192.168.1.2 TCP 80 > 1233 [SYN, ACK] Seq=0 Ack=1 Win=1454 Len=0 #86 2.014029 192.168.1.2 192.168.1.10 TCP 1233 > 80 [ACK] Seq=1 Ack=1 Win=16616 Len=0 #87 2.021767 192.168.1.2 192.168.1.10 HTTP GET /Gn0.gif HTTP/1.0 TCP 1233 > 80 [PSH, ACK] Seq=1 Ack=1 Win=16616 Len=428 #88 2.022813 192.168.1.10 192.168.1.2 TCP 80 > 1233 [ACK] Seq=1 Ack=429 Win=1454 Len=0 #89 2.024573 192.168.1.10 192.168.1.2 HTTP HTTP/1.1 200 OK (GIF89a) TCP 80 > 1233 [PSH, ACK] Seq=1 Ack=429 Win=1454 Len=673 #101 2.213885 192.168.1.2 192.168.1.10 TCP 1233 > 80 [ACK] Seq=429 Ack=674 Win=16616 Len=0 #102 2.214359 192.168.1.10 192.168.1.2 TCP 80 > 1233 [FIN, ACK] Seq=674 Ack=429 Win=1454 Len=0 #103 2.214474 192.168.1.2 192.168.1.10 TCP 1233 > 80 [ACK] Seq=429 Ack=675 Win=16616 Len=0 #104 2.215284 192.168.1.2 192.168.1.10 TCP 1233 > 80 [FIN, ACK] Seq=429 Ack=675 Win=16616 Len=0 #105 2.215613 192.168.1.10 192.168.1.2 TCP 80 > 1233 [ACK] Seq=675 Ack=430 Win=1454 Len=0
最後の第9コネクションは、ポート1233でGIFファイル Gn0.gif を要求します。 このコネクションと前後して、第1、第2コネクションの再送処理が割り込んでくるため、一気に進むわけではありませんでした。 それでも、コネクション終了まで0.2秒と順調に進んでいます。
通信のまとめ
以上のように二箇所の再送処理はありましたが、全てのコネクションが2秒あまりで順調に終了しています。 しかも、取り損なった"ACK"も残っていません。 Firefoxで付録基板のhttpサーバと接続するときには、これぐらいの設定を行えば、実用的な速度でWEBページを表示することが出来そうです。
参考文献
Interface (インターフェース) 2008年 09月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
[TCP segment of a reassembled PDU]
が発生する時、ACK応答を取り損ねるのですかね。
by hamayan (2008-10-06 10:57)
"ACK"を失った#19,#20の付近は、ポート1221でGIFファイルを送り終えたあたりです。送信終了処理で忙しかったのかも。
こういう場合、一つ目の「TCP セグメント」(#6)をColdFireが送り出した後、"ACK"を待たずに次の「TCP セグメント」(#83)を送っちゃえばいいんですよね。きっと、"ACK"を確実に拾っておかないと、何か起こった場合に後戻りできるほどのメモリが残っていないんだろうな。
PDU は、「Protocol Data Unit」ですか?
by noritan (2008-10-06 15:29)
> PDU は、「Protocol Data Unit」ですか?
その様ですね。あまり気にした事無かった。
これ、イマイチ判らないのは、「HTTP/1.1 200 OK」が#83で初めて送られて来ていると言う事なんでしょうか?。
そうだとすれば、#6とか#81では何を送っているのだろうか。
by hamayan (2008-10-06 16:36)
#83には、
Reassembled TCP Segments (1796 bytes): #81(1408), #83(388)
Frame: 81, payload: 0-1407 (1408 bytes)
Frame: 83, payload: 1408-1795 (388 bytes)
と書いてあって、#6と#81の双方に"HTTP/1.1 200 OK"が入っています。
どうやら、 Wireshark がセグメントの再構成をやって、こういう表示をしているみたいです。
by noritan (2008-10-06 21:38)