performance - TCP 数据包大小会影响下载速率吗?

标签 performance networking tcp download

我有一个正在处理的项目,我必须通过网络连接发送大量二进制数据,并且由于各种限制,使用 TCP 包装器是最简单的方法。简而言之,我的意思是我手动管理数据包(和二进制数据)。

不过,我的问题很简单:数据包大小会影响数据传输速率吗?数据包和缓冲区的大小会改变内存使用情况,我明白这一点,但它在网络上传输的实际速率又如何呢?我的意思是,更大的数据包意味着更少的数据包,这样会加快速度,但我想更大的数据包也会传输得更慢……它们是否相互抵消,这无关紧要,或者一个变化大于另一个变化它确实有所作为吗?朝哪个方向?

我觉得我还应该指出,我也直接从文件流中读取数据(一次一个数据包,以提高内存效率)并将二进制数据直接传递到文件流中(一个数据包在一次),所以我不知道这是否会影响设置的效率或数据包大小变化的影响。

如有任何帮助,我们将不胜感激。

最佳答案

每个数据包都有一些固定的开销(例如,源地址和目标地址)。每个数据包越大,固定开销占整体的百分比就越小。因此,较大的数据包会增加吞吐量。

也就是说,除非您真的侵入了 IP 堆栈,或者设置了类似 TCP_NODELAY 的东西,否则正常的 TCP 实现将尝试积累数据以自动发送更大的数据包。

关于performance - TCP 数据包大小会影响下载速率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464357/

相关文章:

performance - 如何以最佳效率在paperjs中重新定位路径线?

networking - 区分在同一端口上复用的 RTP 和 RTCP 数据包

windows - Websocket 服务器在约 600 个连接后停止接受

performance - Gtk/GtkD 在调整窗口大小时检测鼠标按钮的释放?

c++ - 在 C++ 中一次从 stdin 读取一个字节的快速简单方法

java - 锁定缓存键而不锁定整个缓存

http - 端口和进程

linux - 克隆到 Samba 共享时 Git 速度很慢

c# - 当我通过 tcp 发送一个数据包时,它被分成两个数据包

java - 带多线程服务器 (TCP/IP) 的客户端/服务器聊天室