2011-07-11 102 views
2

如果我以4KB的增量进行大量传输和Flush(),应用程序是否会发送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),因为它是第一个段,因为= MSS和1176(3)将被延迟,直到TCP收到前一个段的确认,所以将立即发送1460(2)。