[H8-ML(2463)] TCP実装の問題点
From: maum <maum@xxxxxxxxx>
Date: 2002年11月26日(火)13時59分03秒
maumです。

> "n.kobayashi"> IPまでは動くのですが,TCPの状態遷移でFreezeしてしまいます
> "n.kobayashi"> μITRONにまだBUGがあるような気がしています
> 
> なかなかITRON関係の、優れたドキュメント、印刷物って無いですが、
> 私が思うに、実装で困ったら、最高のドキュメントが有ると思います。
> TOPPERSのソースコードです。
> 先日、ET2002のテクニカルセッションで、ITRONの入門用セッション、
> 正に入門レベルの私向け!に行ってきましたが、高田先生も、なるべくカーネル
> ソースを読んでくれ!と言っていました。是非有効活用しちゃいましょう。
TRONは関数の仕様しか記述していないのですよね。
ですから、実装は各設計者にお任せという状態になっています。
ということくらいしか知りません。すいません

> 
> TCP/IPのプロトコルの実装で、情報交換等できましたら、と思っています。
> 宜しくお願いします。
> 
> maumさんも読んでますかー!
読んでます、読んでます。ちょっと今考えていることをざっくり書いて見ますね
長文ですいません。


TCP/IPの実装で問題なのは今のところ2点あります。
1つは以前にhamayanさんがおっしゃっていたウィンドウ制御、
それとパケットの並べ替えです。
どちらもサーバー、クライアントが通信状態になってからの
制御になると思います。
以下、私の頭の中にある考え方を記述しますので間違えていたら指摘してください。
RFCを読破しているわけじゃないです。

んじゃ、まずウィンドウ制御から話題にして・・・
TCPはスライディングウィンドウですから、送り先は勝手にパケットを
いくつか送れますよね。(TCPはコネクションを張る前にセグメントの
ネゴシエーションをして1パケットがセグメントを越えて転送されることはない。
普通は0x5b4(1460)に設定されることが多いようです。)
で、たとえば受信バッファに4KB割り当てたとするとウィンドウサイズは
0x1000になりますよね。そこまではいいのですけど
相手からのパケットが来て、自分がackパケットを送信しようとしている最中に
さらに相手からパケットが来てしまったということが発生しうるわけで
そうした場合、相手に対して自分のウィンドウサイズを通達するタイミングを
逃してしまうじゃないですか?
それとも、送信側は相手(受信側)のウィンドウサイズを知っているわけで
すから、その範囲内でパケットを連続して送ってくるのですかね?


次にパケットの並び替えです。
これは落ち着いて考えれば何とかなりそうなんですけど、
要するにルーターを通ったときにその時々でルーティングが変わった場合
分割されたパケットが順番どおりに届かない可能性があるわけで
それをTCPヘッダー内のシーケンス番号順に並べ替えてやる
ことですよね。この場合の並べ替え用のバッファサイズって
やっぱりウィンドウサイズと同じでいいのでしょうか?

運良くパケットが全部そろえばいいですけど、ロストする可能性だって
あるわけで、一体何秒待つのが妥当な数字なの?
とか、実装するには課題が一杯あるんで乗り上げてます。


==============================================================
             植木  誠 <maum@xxxxxxxxx>
==============================================================

スレッド概略
[2434(R)](起点)
 └[2460(U)]
   └[表示中]
     └[2465(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]