TCPの再送信検知

解決


けん  2007-01-11 23:27:24  No: 64196

お世話になります。

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

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


通りすがり  2007-01-12 11:18:58  No: 64197

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


オショウ  2007-01-13 02:22:11  No: 64198

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

以上。


けん  2007-01-14 22:44:26  No: 64199

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

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

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


オショウ  2007-01-15 03:22:05  No: 64200

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

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

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

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

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

以上。


けん  2007-01-18 08:25:37  No: 64201

オショウ様

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加