パケットアナライザ
LPC1769のEthernetコントローラ。
TCP/IPの実装をやっていて、どうにも行き詰ってきた。
簡易的にブラウザと通信するようなプログラムならば、その昔はうまく行ったのだけれど。
標準出力&デバッグコンソールに、telnetが使えるとちょっと便利かもと思って、ぼちぼちやっているのだけれど。
時々予期し無いタイミングでこけてしまう。
ころあいなので、パケットモニタを導入して、telnetクライアント(といっても、ハイパーターミナルだけれど)がどういう動きをしているのか観察する。
WIRESHARKをインストールする。
昔使っていたのとは、大分変わっているような?
------
どうやら、通常のキーボード入力なんかは、1文字ごとに1個のパケットを送るようだ。(リターンキー入力でも、\rと\n別々に2個パケットが出る。)
テキストファイル送信でまとめて送信してやると、最初の1文字だけ1つのパケットで送出されたあと、あとは不規則な区切りで、ぱらぱら出て行くようだ。
で、最初のうちはパケットの送信間隔が広くて、lpcからackが戻るのが先なのだが、だんだん進んでいくと、一気に10個くらいのパケットをほぼ同時に出してくる。
ここのところで、受け側のリングバッファがオーバーフローして、処理が回らなくなっているようだ。
バッファフルでそれ以上のパケットを受信しないように出来ているはずだけれど、どこかにまずいところがあって、処理済みのシーケンス番号を見失ってしまっているようだ。
何百キロバイトも受信バッファが用意できれば、こんな問題は起きないけれど、そんなメモリは用意できないので、他の方法を考える。
まあ、TCPのフロー制御を使えってことかも知れないけど、シーケンス番号が飛ばないようにして、知らん振りして応答すりゃいいだけのような気もする。
------
よく考えると、telnetにこだわることは無いような気がするけれど、なんだか一度手をつけてしまった以上、形にならないとすっきりしないような...
| 固定リンク | 0
« 帰還 | トップページ | 或る日のtelnet »
コメント