2
如果我以4KB的增量進行大量傳輸和Flush(),應用程序是否會發送2個完整數據包和第3個部分數據包,還是等待填充,直到第3個數據包已滿?最佳緩衝區大小 - TCP
所以我的問題是,我應該刷新數據包有效載荷大小的倍數?
感謝:-)
如果我以4KB的增量進行大量傳輸和Flush(),應用程序是否會發送2個完整數據包和第3個部分數據包,還是等待填充,直到第3個數據包已滿?最佳緩衝區大小 - TCP
所以我的問題是,我應該刷新數據包有效載荷大小的倍數?
感謝:-)
應用程序對數據包的方式轉移(我假設你使用的是TCP套接字發送的文件)的控制。因此,數據包基於TCP的窗口大小發送。窗口大小由不同因素決定:MSS(最大段大小),網絡狀態(是否存在擁塞)以及收件人處理數據包的速度。然而,讓我們假設將4096個字節分割成1460(1),1460(2)和1176(3)(假設MSS = 1460並且窗口大小= MSS(固定))。如果啓用了Nagle算法,則會立即發送1460(1),因爲它是第一個段,因爲= MSS和1176(3)將被延遲,直到TCP收到前一個段的確認,所以將立即發送1460(2)。
nagle是啓用還是禁用? –
最好不要衝洗。現代TCP/IP堆棧是自我調整的。 –
特別是,請注意NetworkStream不被緩衝,而Flush()不會執行任何操作* ...您能澄清您正在使用的Flush()嗎? –