首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux中禁用Nagle算法?

如何在Linux中禁用Nagle算法?
EN

Stack Overflow用户
提问于 2013-07-25 02:48:27
回答 1查看 54.9K关注 0票数 15

有没有办法通过命令行来做到这一点呢?man tcp告诉我需要设置tcp_nodelay=1,但是我无法在/proc/sys/net/ipv4下创建tcp_nodelay文件。如果有什么方法可以在Linux中禁用Nagle,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2013-07-25 03:34:31

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

要对给定的套接字禁用它,可以应用选项TCP_NODELAY,如C:中解释的herehere所示:

代码语言:javascript
复制
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标志选项设置为套接字sock,从而有效地禁用了Nagle的算法。这在具有支持TCP标准的套接字的任何操作系统上都有效。

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

一些更简洁的方法是激活TCP的低延迟模式:

代码语言:javascript
复制
echo 1 > /proc/sys/net/ipv4/tcp_low_latency

更新:tcp_low_latency在内核v4.14及更高版本中被删除。

这将提示TCP堆栈做出哪些决策以降低延迟(我猜这就是您试图通过禁用Nagle算法来实现的)。默认情况下,它被设置为优化带宽(将从/proc/sys/net/ipv4/tcp_low_latency读取"0“)。

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17842406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档