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

时间:2012-07-13 04:57:24

标签: performance networking tcp download

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

我的问题很简单:数据包大小是否会影响数据传输速率?数据包和缓冲区的大小会改变内存使用情况,我明白了,但它通过网络传输的实际速率呢?我的意思是,更大的数据包意味着更少的数据包,这样可以加快速度,但我认为较大的数据包传输速度也会更慢......它们是否取消并且无关紧要,或者是一个变化大于另一个它确实有所作为?在哪个方向?

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

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  

我正在手动管理数据包(和二进制数据)

你不是。你可能认为你是,但你不是。 TCP专门设计用于将传出数据合并到最小数量的数据包中,并且您无能为力。

  

数据包大小是否会影响数据传输速率?

当然。数据包越少越好,以分摊开销。 TCP数据包的最小开销为40字节,因此越大越好。

  

较大的数据包传输速度也较慢

无意义。你必须传输X字节,它需要花费多长时间。您需要最小化的是开销,在空间方面是数据包标头。

在TCP吞吐量方面,你最好的朋友是接收器上的大型套接字接收缓冲区,而你的第二好朋友是发送方的大型套接字发送缓冲区。不要试图超越TCP,30多年来专家一直在努力。