SSブログ

HTML文書にGIFをたくさん埋め込んでみた - Firefox の奥の手 [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

付録基板の http サーバに Firefox で接続した時の問題は、同時に張るコネクション数が多すぎる為であるらしい事が分かってきました。 だったら、 Firefox に同時コネクション数を減らすように指示してやろう。

about:config というページの存在

Firefoxには、設定を変えるための"about:config"というページがあります。 アドレス欄に"about:config"と打ち込むと、この設定ページが開きます。 最近は、「動作保証外になります!」という警告が出てくるのね。 Firefoxに「動作保証」なんてあったんだっけ。

設定項目が山のように並んでいるので、必要な項目だけフィルタリングすることが出来ます。 ここでは、フィルタ欄に".http."と入力して必要な項目を出します。 それぞれの項目をダブル・クリックするか、右クリックでプルダウン・メニューを出して値を変更します。 付録基板のhttpサーバのご機嫌をとるために設定した項目は、以下の三つです。

設定名備考
network.http.max-connections-per-server3 サーバあたりの最大コネクション数。 ColdFireは、最大三つしかコネクションを受け付けないらしい事が実験的にわかってきました。 Firefox 3.0.3のデフォルトは、なんと"15"になっていたので、付録基板がアップアップしていたのもうなずけます。
network.http.max-persistent-connections-per-server3 サーバあたりの最大永続コネクション数。 どういうコネクションを意味するのか分かりませんが、デフォルトの"6"が大きすぎるのは明らかだと思います。
network.http.version1.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秒と順調に進んでいます。

通信のまとめ

packets3.png

以上のように二箇所の再送処理はありましたが、全てのコネクションが2秒あまりで順調に終了しています。 しかも、取り損なった"ACK"も残っていません。 Firefoxで付録基板のhttpサーバと接続するときには、これぐらいの設定を行えば、実用的な速度でWEBページを表示することが出来そうです。

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

nice!(0)  コメント(4)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 4

hamayan

[TCP segment of a reassembled PDU]
が発生する時、ACK応答を取り損ねるのですかね。
by hamayan (2008-10-06 10:57) 

noritan

"ACK"を失った#19,#20の付近は、ポート1221でGIFファイルを送り終えたあたりです。送信終了処理で忙しかったのかも。

こういう場合、一つ目の「TCP セグメント」(#6)をColdFireが送り出した後、"ACK"を待たずに次の「TCP セグメント」(#83)を送っちゃえばいいんですよね。きっと、"ACK"を確実に拾っておかないと、何か起こった場合に後戻りできるほどのメモリが残っていないんだろうな。

PDU は、「Protocol Data Unit」ですか?

by noritan (2008-10-06 15:29) 

hamayan

> PDU は、「Protocol Data Unit」ですか?
その様ですね。あまり気にした事無かった。

これ、イマイチ判らないのは、「HTTP/1.1 200 OK」が#83で初めて送られて来ていると言う事なんでしょうか?。
そうだとすれば、#6とか#81では何を送っているのだろうか。

by hamayan (2008-10-06 16:36) 

noritan

#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) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。