Linux上的TCP缓冲

时间:2014-05-27 08:27:59

标签: tcp linux-kernel

我有USB外设,以183 MBit / s的速率发送数据样本。我想通过以太网发送这些数据,这仅限于< 100 Mbit / s。是否可以通过增加TCP套接字缓冲区来发送此数据而不会溢出(即丢失数据)?

2 个答案:

答案 0 :(得分:1)

它还取决于接收器窗口大小。即使有100个标题,发送方也会根据接收方可用的窗口大小来推送数据。没有启用扩展的TCP窗口大小最多只能达到64kb。在您的情况下,这个大小是不够的,因为它至少需要(100-183Mbits)10MB缓冲区。在Windows 7&更新的Linux操作系统,TCP默认启用窗口缩放,可以将大小扩展到1GB。启用TCP窗口缩放选项后,您可以将套接字缓冲区增加到更大的大小,例如50MB,这应该提供所需的缓冲。

答案 1 :(得分:0)

简短的回答是,这取决于。

如果数据是突发性的,增加缓冲区(在发送器处)可以提供帮助。如果平均速率<100MBit(实际上更少,您需要允许网络争用和开销),那么缓冲可以提供帮助。您可以通过在TCP堆栈内部增加缓冲区的大小,或通过内部缓冲到您的应用程序来实现此目的。

如果数据不是突发性的,或者平均值仍然太高,则可能需要在传输之前压缩数据。根据数据的性质,您可能能够实现显着的压缩。