2011-07-11 5 views
2

私が大量の転送を行い、Flush()を4KB刻みで実行している場合、アプリケーションは完全な2パケットと3番目の部分パケットを送信するか、3番目のパケットが一杯になるまで?最適なバッファサイズ - TCP

私の質問は、パケットのペイロードサイズの倍数でフラッシュする必要がありますか?

+1

nagleが有効かどうかを確認します。 –

+1

一度フラッシュしないことをお勧めします。現代のTCP/IPスタックは自己チューニングです。 –

+2

特に、NetworkStreamはバッファリングされておらず、Flush()は何もしません* ...とにかく* ...あなたが使っているFlush()を明確にすることはできますか? –

答えて

0

:-)

おかげでアプリケーションが(私はあなたがTCPソケットを使用してファイルを送信していると仮定しています)パケットが転送される方法に制御することはできません。したがって、パケットはTCPのウィンドウサイズに基づいて送信されます。ウィンドウサイズは、MSS(最大セグメントサイズ)、ネットワーク状態(輻輳があるかどうか)、受信者がパケットを処理する速度など、さまざまな要因によって決まります。

ただし、4096バイトが1460(1)、1460(2)、および1176(3)(MSS = 1460、ウィンドウサイズ= MSS(固定)と仮定)にセグメント化されるとします。 Nagleアルゴリズムが有効になっている場合、1460(1)は最初のセグメントであるため直ちに送信され、1460(2)はTCPが以前のセグメントの確認応答を受信するまで= MSSと1176(3)が遅延するため、直ちに送信されます。

関連する問題