私が大量の転送を行い、Flush()を4KB刻みで実行している場合、アプリケーションは完全な2パケットと3番目の部分パケットを送信するか、3番目のパケットが一杯になるまで?最適なバッファサイズ - TCP
私の質問は、パケットのペイロードサイズの倍数でフラッシュする必要がありますか?
私が大量の転送を行い、Flush()を4KB刻みで実行している場合、アプリケーションは完全な2パケットと3番目の部分パケットを送信するか、3番目のパケットが一杯になるまで?最適なバッファサイズ - TCP
私の質問は、パケットのペイロードサイズの倍数でフラッシュする必要がありますか?
:-)
おかげでアプリケーションが(私はあなたがTCPソケットを使用してファイルを送信していると仮定しています)パケットが転送される方法に制御することはできません。したがって、パケットはTCPのウィンドウサイズに基づいて送信されます。ウィンドウサイズは、MSS(最大セグメントサイズ)、ネットワーク状態(輻輳があるかどうか)、受信者がパケットを処理する速度など、さまざまな要因によって決まります。
ただし、4096バイトが1460(1)、1460(2)、および1176(3)(MSS = 1460、ウィンドウサイズ= MSS(固定)と仮定)にセグメント化されるとします。 Nagleアルゴリズムが有効になっている場合、1460(1)は最初のセグメントであるため直ちに送信され、1460(2)はTCPが以前のセグメントの確認応答を受信するまで= MSSと1176(3)が遅延するため、直ちに送信されます。
nagleが有効かどうかを確認します。 –
一度フラッシュしないことをお勧めします。現代のTCP/IPスタックは自己チューニングです。 –
特に、NetworkStreamはバッファリングされておらず、Flush()は何もしません* ...とにかく* ...あなたが使っているFlush()を明確にすることはできますか? –