如何禁用Linux中的Naglealgorithm?

有没有办法通过命令行来做到这一点? man tcp告诉我需要设置tcp_nodelay = 1,但是我无法在/ proc / sys / net / ipv4下创buildtcp_nodelay文件。 请让我知道是否有任何方法在Linux中禁用Nagle。

此标志( TCP_NODELAY )是一个可以在每个套接字基础上启用的选项,并在创建TCP套接字时应用。 这是为了一个目的:Nagle的算法通常是有用的,并有助于处理网络拥塞。 我怀疑你想在系统范围内禁用它,因为你的系统可能会遭受这种停用。

要为一个给定的套接字禁用它,你可以应用选项TCP_NODELAY , 这里和这里在C:

 int flag = 1; int result = setsockopt(sock, /* socket affected */ IPPROTO_TCP, /* set option at TCP level */ TCP_NODELAY, /* name of option */ (char *) &flag, /* the cast is historical cruft */ sizeof(int)); /* length of option value */ if (result < 0) ... handle the error ... 

你可能不得不适应你的编程语言,但基本上它将TCP_NODELAY标志选项设置为套接字套接字,从而有效地禁用了Nagle的算法。 这在任何支持TCP标准的套接字的操作系统上都是有效的。

如果您仍想要在系统范围内禁用Nagle算法,则有两个选项可用。 首先,您可以使用“相关”标志重新编译内核(请参阅您的分发手册)。 第二个选项是创建一个软件,在每个现有的连接上设置TCP_NODELAY标志,类似于这个代码 。 每次在系统上创建一个新的TCP连接时,应该执行后一个选项。

更清洁一点就是激活TCP的低延迟模式:

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

这将给TCP堆栈提供一个暗示,以便降低延迟(我想你是通过禁用Nagle的算法来实现的)。 默认情况下,它被设置为优化带宽(将从/proc/sys/net/ipv4/tcp_low_latency读取“0”)。