1

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

不过,我的问题很简单:数据包大小会影响数据传输率吗?数据包和缓冲区的大小会改变内存使用情况,我理解,但是它通过网络传输的实际速率呢?我的意思是,更大的数据包意味着更少的数据包,这样会加快速度,但我想更大的数据包也会传输得更慢......它们是否会抵消并且没关系,或者一个变化大于另一个它确实有所作为吗?以及朝哪个方向?

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

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

4

2 回答 2

2

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

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

于 2012-07-13T05:03:21.370 回答
1

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

你不是。你可能认为你是,但你不是。TCP 专门设计用于将传出数据合并成最少数量的数据包,对此您无能为力。

数据包大小会影响数据传输率吗?

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

更大的数据包也传输更慢

无意义的。您必须传输 X 个字节,它需要尽可能长的时间。您需要最小化的是开销,在空间方面是数据包头。

就 TCP 吞吐量而言,您最好的朋友是接收方的大型套接字接收缓冲区,而第二好的朋友是发送方的大型套接字发送缓冲区。不要试图超越 TCP,专家们已经研究了 30 多年。

于 2012-07-13T10:08:14.527 回答