TCP ACK发送的位置以及如何更快地发送它们

时间:2017-10-05 09:01:31

标签: .net sockets tcp garbage-collection

other questions的答案我了解到OS / TCP堆栈负责发送ACK。这会发生在哪个过程中?

用于TCP的System.Net.Sockets.Socket对象是否可以以尽快发送ACK的方式进行配置,最好是独立于垃圾收集?

背景和详细信息:

我有一个.NET应用程序,它使用TCP从设备接收数据,并从计算机到设备直接进行网络连接。

设备以大约30 MB / s的速度不断创建数据,并通过网络发送。它使用缓冲区来存储TCP数据包,直到收到ACK。当缓冲区溢出时,设备会因错误而停止。不幸的是,缓冲区的大小只有几KB,这意味着必须在几毫秒内发送ACK。

设备按原样运行,我无法改变它,我必须处理它。

使用相对简单的本机程序已经好几年了,但是面向对象和更复杂的.NET应用程序,它运行不稳定,我有些怀疑有时当垃圾收集器运行时,ACK可能不会很快发送。

现在我可以更改一些内容(例如,更改套接字设置,更改GC设置,减少分配,或者在设备和计算机之间进行切换等更激烈的操作)。到目前为止我的尝试都没有成功(除了开关),这就是为什么我想了解发生了什么。

我设置Socket.NoDelay = true

问题:

是在应用程序的过程中还是在不同的进程中发送ACK?如果在这个过程中,这是否受.NET垃圾收集器的影响?可以做些什么来更快地发送ACK?

0 个答案:

没有答案