如何在linux内核中设置nagle timeout?

我们知道Nagle的algorithm 。 不知道如何改变默认的200ms超时。 有没有在Linux的方式来设置此设置?

Nagle的algorithm可防止在传输中还没有被确认的数据时发送小的非全尺寸数据包。 一旦接收到所有未完成数据的确认或缓冲区中有足够的新数据来生成一个完整的数据包,新的数据包将被发送。 Nagle的algorithm没有超时。

您所描述的行为可能是延迟确认 ,它允许每收到一个第二个数据包就发送ACKS。 如果在超时时间内未收到第二个数据包,则发送ACK。 或者它可能是TCP Corking,它与Nagle类似,但是在发送新的小数据包之前,不是无限期地等待未完成数据的ACK,TCP Corking将阻止发送新数据包,直到缓冲区已满或超时(200ms)结束。

根据您正在运行的Linux的分布情况,您可以使用sysctl修改Delayed Acknowledgement超时值。 例如,要减lessRHEL中的超时时间:

echo 1 > /proc/sys/net/ipv4/tcp_delack_min

但是这个选项可能不适用于其他types的Linux。

或者,如果您有程序访问权限,则可以修改您的应用程序以使用TCP_QUICKACK tcp man ,这将有效closures延迟的ACKfunction,并强制应用程序为收到的每个数据包发送ACK。

要closuresTCP Corking,您需要修改您的套接字调用来设置TCP_CORK参数 – 我不知道有什么方法可以在全局中启用它。