3

TCP を使用してネットワーク経由でギガバイトのデータを転送するプロトコルを作成し、プロトコルのプログラミングについて少し勉強しようとしています。最速かつ最も効率的な方法でデータを転送するために、この転送プロトコルを設計する方法がわかりません。

WindowsでQtを使用しています。

現時点で、私のアプリケーション プロトコル (データを転送する部分) の設計は次のとおりです。

  1. 最初にログインの詳細を撮影します。
  2. 4 キロバイトの最初のデータ パケットを (ソケットに) 書き込み、サーバーがパケットを取得したことを確認するまで待ちます。
  3. サーバーがデータ パケットの受信を確認したら (int "1" を書き込む)、次の 4 キロバイトを書き込みます。
  4. すべてのデータが転送されたら、転送されたデータの md5sum をサーバーに送信します。
  5. サーバーが int 8 で再度確認すると、データ転送は完了します。

現時点では、127.0.0.1 経由で転送する場合、同じコンピューターで 166KB/秒を超える速度を得ることができません。私は他のプロトコル設計を読もうとしてきましたが、アプリケーション用に記述できるデータ転送プロトコルに関するドキュメントはほとんどありません。

私が投稿したプロトコルの設計は間違っているのでしょうか、それとも深刻な問題を抱えているのでしょうか? プロトコルは、各パケットがサーバーによって確認されるのを待つ必要がありますか、それとも継続的に書き込む必要がありますか?

4

1 に答える 1

0

まず、 TCPSliding Window Protocolについて読むことに時間を費やすことをお勧めします。

実装が非常に遅い理由は 2 つあります。まず、各パケットの確認応答を待ちます。非常に遅いため、スライディング ウィンドウを使用する必要があります。次に、MD5 チェックサムを使用します。それには何の問題もありませんが、TCP はすでにいくつかの基本的なチェックサムを実装しており、使用する MD5 実装は非常に遅くなる可能性があります。

最後に、動作が非常に遅い理由を調べる一般的な方法は、プロファイリングを使用することです。

于 2012-12-28T08:33:34.900 に答える