待っていましたんですよ。
このボードには、既にデモとしてTCP/IPプロトコルスタックと、その上で動作するアプリケーションがインストールされています。このTCP/IPプロトコルスタックは、フリスクのUSのサイトからロハで落す事ができます。但し実際にそれを動かしてみるにはMCF5223xシリーズのマイコンを搭載したネットワークボードを必要としますので、まああの付録基板も有りますが、まだBDMコネクタを作成していませんし、ここはリファレンスボードとしてこのM52233DEMOを購入してみました。
早速実験してみましょう。
|
まずは定番のPINGを打ってみましょう。いきなり1パケット最大の1472bytesです。
おお!、3ms弱で返信して来ます。パケットモニタでもっと詳しく見ても、やはり3msを切っています。ロハなのに優秀だなぁ。
|
|
1500bytesのサイズとし、IPフラグメントに対応しているかどうかやってみました。
対応している様です。ロハなのに優秀だなぁ。
|
|
1949bytesまでIPフラグメントは動いています。ですが、ちょっと安定性に掛けています。1950bytesからは成功しません。この辺が限界でしょうか。
|
|
勿論WEBページも持っています。
ドキュメントページには「HTTP Server with Simple Flash File System」とか書かれていますので、ファイルシステムも搭載していると言う事でしょうか。
それ以外は、ボード上のLEDの制御とか、加速度センサーを含むアナログ値のサンプリングを、色々手段を変えて見せてくれます。
|
|
Java Scriptが埋め込まれているので、動的なページの表示ができます。※勿論従来とおりのREFRESHによる更新も行っています。
AJAXのページでは、加速度センサーに連動した、文字が上下、左右に動くデモが有ります。これは新しい見せ方だなぁ。
|
<< パケット 2 >>
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413586381 (0xCB7731CD)
【応答番号】0 (0x00000000)
【データオフセット】28 (0x1C)
【フラグ】【URG】0【ACK】0【PSH】0【RST】0【SYN】1【FIN】0
【ウィンドウ】16384 (0x4000) バイト
【チェックサム】0xBCEB (OK)
【緊急ポインタ】0
【オプション】
【オプション番号】2 (最大受信セグメント長 = 1460 (0x05B4) バイト)
【オプション番号】1 (オペレーションなし)
【オプション番号】1 (オペレーションなし)
【オプション番号】4 (SACK許可)
<< パケット 3 >>
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10452701 (0x009F7EDD)
【応答番号】3413586382 (0xCB7731CE)
【データオフセット】24 (0x18)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】1【FIN】0
【ウィンドウ】7760 (0x1E50) バイト
【チェックサム】0x7419 (OK)
【緊急ポインタ】0
【オプション】
【オプション番号】2 (最大受信セグメント長 = 1456 (0x05B0) バイト)
<< パケット 4 >>
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413586382 (0xCB7731CE)
【応答番号】10452702 (0x009F7EDE)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】17472 (0x4440) バイト
【チェックサム】0x65E2 (OK)
【緊急ポインタ】0
【オプション】なし
|
それでは恒例のパケットモニタの解析情報を見てみます。
まずはコネクションから。ポート番号80がM52233DEMOです。
オプションの交換を行っている事が判ります。M52233DEMO側のMSSは1456bytesです。またWindowサイズが7760bytesも有ります。一つのセッションにそれだけ割り当てが可能とは、ロハなのに優秀だなぁ。
|
<< パケット 5 >>
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413586382 (0xCB7731CE)
【応答番号】10452702 (0x009F7EDE)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】17472 (0x4440) バイト
【チェックサム】0x9FC9 (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】388 (0x0184) バイト --------------------------------- SJIS -------
0000 47 45 54 20 2F 20 48 54 - 54 50 2F 31 2E 31 0D 0A GET / HTTP/1.1..
<< パケット 6 >>
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10452702 (0x009F7EDE)
【応答番号】3413586770 (0xCB773352)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】6208 (0x1840) バイト
【チェックサム】0x905E (OK)
【緊急ポインタ】0
【オプション】なし
<< パケット 7 >>
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10452702 (0x009F7EDE)
【応答番号】3413586770 (0xCB773352)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】6208 (0x1840) バイト
【チェックサム】0xF726 (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】633 (0x0279) バイト --------------------------------- SJIS -------
0000 48 54 54 50 2F 31 2E 31 - 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
|
ブラウザからのリクエストに対して、「HTTP 1.1」バージョンでhtmlを返信しています。
ですが、Windowサイズが7760bytesから6208bytesに激減しています。ブラウザが実際に送ったサイズは388bytesです。その差1552bytes。これは388bytesの4倍に当たります。バグじゃねえのか?。
|
<< パケット 8 >>
--- TCPヘッダ [1232] → [80] ------------------------------------------------
【発信元ポート番号】1232
【発信先ポート番号】80 (WWW)
【シーケンス番号】1869299742 (0x6F6B401E)
【応答番号】0 (0x00000000)
【データオフセット】28 (0x1C)
【フラグ】【URG】0【ACK】0【PSH】0【RST】0【SYN】1【FIN】0
【ウィンドウ】16384 (0x4000) バイト
【チェックサム】0x0AA4 (OK)
【緊急ポインタ】0
【オプション】
【オプション番号】2 (最大受信セグメント長 = 1460 (0x05B4) バイト)
【オプション番号】1 (オペレーションなし)
【オプション番号】1 (オペレーションなし)
【オプション番号】4 (SACK許可)
<< パケット 9 >>
--- TCPヘッダ [80] → [1232] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1232
【シーケンス番号】10580955 (0x00A173DB)
【応答番号】1869299743 (0x6F6B401F)
【データオフセット】24 (0x18)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】1【FIN】0
【ウィンドウ】6208 (0x1840) バイト
【チェックサム】0xD2E1 (OK)
【緊急ポインタ】0
【オプション】
【オプション番号】2 (最大受信セグメント長 = 1456 (0x05B0) バイト)
<< パケット 10 >>
--- TCPヘッダ [1232] → [80] ------------------------------------------------
【発信元ポート番号】1232
【発信先ポート番号】80 (WWW)
【シーケンス番号】1869299743 (0x6F6B401F)
【応答番号】10580956 (0x00A173DC)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】17472 (0x4440) バイト
【チェックサム】0xBE9A (OK)
【緊急ポインタ】0
【オプション】なし
|
続いて2つ目のセッションが開始されています。あれ!今度はWindowサイズが6208bytesからだ。
どうなっているのかなぁ。
|
<< パケット 11 >>
--- TCPヘッダ [1232] → [80] ------------------------------------------------
【発信元ポート番号】1232
【発信先ポート番号】80 (WWW)
【シーケンス番号】1869299743 (0x6F6B401F)
【応答番号】10580956 (0x00A173DC)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】17472 (0x4440) バイト
【チェックサム】0x6629 (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】483 (0x01E3) バイト --------------------------------- SJIS -------
0000 47 45 54 20 2F 74 6F 70 - 6C 65 76 65 6C 2E 63 73 GET /toplevel.cs
<< パケット 15 >>
--- TCPヘッダ [80] → [1232] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1232
【シーケンス番号】10580956 (0x00A173DC)
【応答番号】1869300226 (0x6F6B4202)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】4656 (0x1230) バイト
【チェックサム】0x864F (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】1386 (0x056A) バイト -------------------------------- SJIS -------
0000 48 54 54 50 2F 31 2E 31 - 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
|
新しいセッションの方のリクエストと応答です。
受信データ483bytesに対して、Windowサイズがまた4656bytesに激減しています。今度の差分は483bytesの4倍ではありません。もう何がなんだか判らなくなってきました。私の今まで理解してきた事が間違っているのかなぁ。
|
<< パケット 33 >>
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413586770 (0xCB773352)
【応答番号】10455610 (0x009F8A3A)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】16597 (0x40D5) バイト
【チェックサム】0x8F88 (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】481 (0x01E1) バイト --------------------------------- SJIS -------
0000 47 45 54 20 2F 68 65 61 - 64 65 72 2E 67 69 66 20 GET /header.gif
<< パケット 34 >>
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10455610 (0x009F8A3A)
【応答番号】3413587251 (0xCB773533)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】6208 (0x1840) バイト
【チェックサム】0x8321 (OK)
【緊急ポインタ】0
【オプション】なし
<< パケット 35 >>
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10455610 (0x009F8A3A)
【応答番号】3413587251 (0xCB773533)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】1【RST】0【SYN】0【FIN】0
【ウィンドウ】6208 (0x1840) バイト
【チェックサム】0xDA2F (OK)
【緊急ポインタ】0
【オプション】なし
---【データ】1400 (0x0578) バイト -------------------------------- SJIS -------
0000 48 54 54 50 2F 31 2E 31 - 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK.
<< パケット 36 >>
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413587251 (0xCB773533)
【応答番号】10457010 (0x009F8FB2)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】17472 (0x4440) バイト
【チェックサム】0x51A9 (OK)
【緊急ポインタ】0
【オプション】なし
|
コネクションを切断せずに、次のリクエストが処理されているのが判ります。HTTP 1.1バージョンの本領発揮ですね。
またWindowサイズはここには掲載されていませんが、この直前のパケットで4656bytesまで落ち込みましたが、今回は6208bytesまで回復しています。
|
<< パケット 46 >>
--- MAC層 [00BADBAD0102] → [00D059CB1F0D] --------------------------------
【キャプチャ時間】2008/10/02 21:02:30.276878
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10460931 (0x009F9F03)
【応答番号】3413587251 (0xCB773533)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】1
【ウィンドウ】7760 (0x1E50) バイト
【チェックサム】0x6847 (OK)
【緊急ポインタ】0
【オプション】なし
<< パケット 47 >>
--- MAC層 [00D059CB1F0D] → [00BADBAD0102] --------------------------------
【キャプチャ時間】2008/10/02 21:02:30.276923
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413587251 (0xCB773533)
【応答番号】10460932 (0x009F9F04)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】16351 (0x3FDF) バイト
【チェックサム】0x46B8 (OK)
【緊急ポインタ】0
【オプション】なし
<< パケット 48 >>
--- MAC層 [00D059CB1F0D] → [00BADBAD0102] --------------------------------
【キャプチャ時間】2008/10/02 21:02:30.388625
--- TCPヘッダ [1229] → [80] ------------------------------------------------
【発信元ポート番号】1229
【発信先ポート番号】80 (WWW)
【シーケンス番号】3413587251 (0xCB773533)
【応答番号】10460932 (0x009F9F04)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】1
【ウィンドウ】16351 (0x3FDF) バイト
【チェックサム】0x46B7 (OK)
【緊急ポインタ】0
【オプション】なし
<< パケット 49 >>
--- MAC層 [00BADBAD0102] → [00D059CB1F0D] --------------------------------
【キャプチャ時間】2008/10/02 21:02:30.388972
--- TCPヘッダ [80] → [1229] ------------------------------------------------
【発信元ポート番号】80 (WWW)
【発信先ポート番号】1229
【シーケンス番号】10460932 (0x009F9F04)
【応答番号】3413587252 (0xCB773534)
【データオフセット】20 (0x14)
【フラグ】【URG】0【ACK】1【PSH】0【RST】0【SYN】0【FIN】0
【ウィンドウ】7760 (0x1E50) バイト
【チェックサム】0x6846 (OK)
【緊急ポインタ】0
【オプション】なし
|
ここまで何度かこのセッションを使い回していましたが、とうとうブラウザ側からのリクエストが無くなり、Keep Alive Timerがタイムアウトしたのか、コネクションの切断に入ります。
M52233DEMOがFINを送信してから110ms程度で切断処理が完了しています。※ブラウザはOpera9.5ね。
|
まあしかし、全般的にとても期待できそうです。これでロハなんだから。
えーッと、使うにあたってどんな制限が有るのでしたっけ?。
ウィンドウ・サイズは、オペレーティングシステムが管理しているメモリ全体の空き容量に見えますね。1552バイトも激減したのは、タスクが起動されたから?
やはり、Firefoxが切断受諾に5秒も8秒もかかっているのは、おかしいということでしょうか。ブラウザの問題?
by noritan (2008-10-03 08:21)
noritanさんは、やはりM52233DEMOをお持ちでなかったでしたっけ。
このデモプログラムもやはりシリアルコンソールが有るのですが、その起動画面ではHEAP領域として25Kbytesも有るみたいです。
切断処理に時間が掛かるのは、それが正しいかどうかはなんとも言えないのです。と言うか、別に問題は無いと思います。
前にも書いた様に、FINは切断を要求しているのではなく、こちらから送る物が無いと言う意思の表れなので、特にどの時点で送らねばならぬと言う事はないからです。
即刻切断したい時はRSTを送信します。
じゃあ早めにタイムアウトしたと見られるSilentCに問題が有るかと言えば、こちらは実際的な面であまり長い事セッションを放置したくなかったからではないでしょうか。
リソースの小さな組み込みでは、その気持ち十分に理解できます。
by hamayan (2008-10-03 09:18)
10/22/2008にスタックがV3になっていました。
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=COLDFIRE_TCPIP&fpsp=1&tab=Design_Tools_Tab
by たけまろ (2008-10-27 01:14)
ダウンロードして、FLASHで遊んでしまいました(笑)。
by hamayan (2008-10-27 08:56)