有没有办法通过命令行执行此操作? man tcp告诉我我需要设置tcp_nodelay = 1,但我无法在/ proc / sys / net / ipv4下创建tcp_nodelay文件.如果有任何方法可以在
Linux中禁用Nagle,请告诉我.
解决方法
此标志(TCP_NODELAY)是一个可以基于每个套接字启用的选项,并在创建TCP套接字时应用.这样做是为了一个目的:Nagle的算法通常很有用,有助于处理网络拥塞.我怀疑你想在系统范围内禁用它,因为你的系统可能会遭受这种停用.
要为给定套接字禁用它,可以应用选项TCP_NODELAY,如C中的here和here所述:
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 ...
您可能必须适应您的编程语言,但基本上它将套接字sock的TCP_NODELAY标志选项设置为有效禁用Nagle的算法.这在任何支持TCP标准的套接字的操作系统上都有效.
如果您仍想在系统范围内禁用Nagle算法,可以使用两个选项.首先,您可以使用相应的标志重新编译内核(请参阅您的分发手册).第二个选项是创建一个软件,在每个现有连接上设置TCP_NODELAY标志,类似于this code.每次在系统上创建新的TCP连接时,都应执行后一个选项.
有点清洁的是激活TCP的低延迟模式:
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
这将提示TCP堆栈关于做出哪些决定以降低延迟(我猜这是你试图通过禁用Nagle算法来实现的).默认情况下,它设置为优化带宽(“/ 0”将从/ proc / sys / net / ipv4 / tcp_low_latency读取).