TCPの再送信検知

解決


けん  2007-01-11 14:27:24  No: 64196  IP: 192.*.*.*

お世話になります。

WinXP VC++6で、TCPを用いファイル転送し、送信速度、
再送信回数などの通信の評価をするをするプログラムを作成
していますが、winsock2を用いて、再送信の回数を検知
することは可能でしょうか?
また、不可能であったとしたときに、どのような代替手段が
考えられますでしょうか?

ご存知のかたがいらっしゃいましたら、ご教示いただきたく。
よろしくお願いいたします。

編集 削除
通りすがり  2007-01-12 02:18:58  No: 64197  IP: 192.*.*.*

個別のソケットごとでの取得方法があるのかは知りませんが
TCP全体での再送回数はnetstat -sで見られるので
何らかの取得方法はあるのでしょうね

編集 削除
オショウ  2007-01-12 17:22:11  No: 64198  IP: 192.*.*.*

iphlpapi。dllの、GetIfTableで、LANカード等のインターフェース情報
から、erroneous packets sent/erroneous packets received から換算
して流用できませんか?

以上。

編集 削除
けん  2007-01-14 13:44:26  No: 64199  IP: 192.*.*.*

通りすがり様、オショウ様
情報提供ありがとうございます。

IP HELPER APIを調べてみたところ、GetTcpStatistics()と
いう関数があり、そこからdwRetransSegs(再送信回数)が
得られるようでした。とりあえず、これでやってみようと思います。
とりあえず、解決とします。

オショウ様
おんぶに抱っこで申し訳ないのですが、GetIfTableで換算する
方法というのは、どのように行うのでしょうか?
お迷惑でなかったら、今後のために教えてください。
よろしくお願いいたします。

編集 削除
オショウ  2007-01-14 18:22:05  No: 64200  IP: 192.*.*.*

一般的にLANのインターフェースは、OS上で実行される全ての通信
を一手に引き受けます。

どこの誰べ〜と通信したら、再送が発生したかまで細かく把握すること
は仕様的にできないようです。

ドライバーレベルでもできるのか言われれば、LANドライバーの仕様
性能に依存します。よって、換算と言う意味は、通信にかかる平均的な
時間とLANインターフェース上で発生する再送数を総合的に判断しな
いと、捉えられない(セッションごとに)のではないか・・・と思いま
す。

再送が発生しても、リトライ回数上限に達しないとアプリレベルでは、
最終的なエラーが解りません。どこまでの範囲で再送を良しとするか、
エラーとするか・・・

そういった部分の判断基準をアプリ側で持つのは、かなり難易度の高い
もしくは、難しい問題だと思います。

以上。

編集 削除
けん  2007-01-17 23:25:37  No: 64201  IP: 192.*.*.*

オショウ様

お返事ありがとうございます。

ネットワーク系初心者の自分にはちょっと難しい話のようです。
しかし、これから今回と同じような、通信の評価をするような
アプリも開発していくことになりますので、頑張って勉強して
行きたいと思います。

今回はありがとうございました。

編集 削除