リモート PC に複数の UDP パケットを連続して送信しています。問題は、データ量が多すぎる場合、チャネル間のどこかのデバイスでバッファ オーバーフローが発生することです。UDP パケットの送信レートを制限/調整/制御するつもりです。誰かが最適なレート送信間隔を見つける方法についてのガイドを教えてもらえますか?
ところで、udp よりも tcp を推奨するのはやめてください。目的はデータを確実に送信することではなく、最大スループットを測定することです。
リモート PC に複数の UDP パケットを連続して送信しています。問題は、データ量が多すぎる場合、チャネル間のどこかのデバイスでバッファ オーバーフローが発生することです。UDP パケットの送信レートを制限/調整/制御するつもりです。誰かが最適なレート送信間隔を見つける方法についてのガイドを教えてもらえますか?
ところで、udp よりも tcp を推奨するのはやめてください。目的はデータを確実に送信することではなく、最大スループットを測定することです。
次にこれを試してください:
Sleep()
し、新しいタイムスロットを待ちます。RATE = RATE * .9
-送信レートを以前の90%に減らしますいくつかの考慮事項: - バック接続が TCP の場合、そこにいくらかのオーバーヘッドが発生します - バック接続が UDP の場合、ここでパケットをドロップすることもでき (チャネルをフラッディングしているため)、送信者はパケットがドロップされたことを知ることができません - アルゴリズム上記の方法では、データの欠落やデータの順序が正しくない問題は解決されません。スループットを測定するだけです。
試行錯誤。点。
絶対に (!) すべてのパケットが到着すると仮定しないでください。意味: 欠落しているパケットを再要求する (!) 方法が必要です。完璧な環境下でもパケットが失われることがあります。
損失が問題なく、最小限に抑える必要がある場合、統計的アプローチがこれを処理する唯一の方法だと思います。
TCP over UDP を提案しないというあなたの提案にもかかわらず、私はしなければなりません。同じ段落で、テストの主な目的はスループット (帯域幅) を測定することであり、TCP スタック全体を再発明せずに適切に行う唯一の方法は、実際に TCP スタックを使用することであると述べています。
TCP の大部分は、フロー制御の問題に対処するように設計されており、TCP ストリームを使用すると、必要なものを正確に取得できます。特定の接続の最大帯域幅を簡単に「温水発明」なしで取得できます。
この答えがあなたに合わない場合、それはおそらく、問題に関する要件を再度述べなければならないことを意味します。彼らは対立しています。