在Linux中禁用Nagle算法

时间:2013-02-07 05:08:57

标签: linux linux-kernel

我无法在网上找到任何可以从Linux命令行禁用Nagle算法的内容。 Solaris确实有一种从命令行启用/禁用它的机制。

如果在Linux上有任何办法,请告诉我。

4 个答案:

答案 0 :(得分:1)

每个套接字完成,而不是从命令行完成,使用setsockopt()设置TCP_NODELAY标志。我知道没有办法在全球范围内执行此操作,但如果在/ proc / sys / net下有一个文件来执行此操作,我不会感到惊讶...

答案 1 :(得分:0)

对于redhat Linux,您可以查看/ proc / sys / net / ipv4 / tcp_delack_min选项。对于其他发行版,您可能需要重新编译内核。

答案 2 :(得分:0)

您还可以将环境变量SETTCPNODELAY设置为任何值以禁用Nagle的算法。

答案 3 :(得分:0)

或者将ACK超时设置为较低并停止TCP_RTS。 超时是2ms。它是到下一个rj45接口或下一台机器的ping时间。 不要将超时设置得太低,因为您可能会丢包;-)。 TCP.fin的超时时间更长。

echo 0.2 > /proc/sys/net/ipv4/tcp_ack_timeout
echo 0.2 > /proc/sys/net/ipv4/tcp_syn_timeout
echo 0.2 > /proc/sys/net/ipv4/tcp_synack_timeout
echo 0 > /proc/sys/net/ipv4/tcp_rst_timeout
echo 0.2.5 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 0.2 > /proc/sys/net/ipv4/tcp_urg_timeout
echo 0.2 > /proc/sys/net/ipv4/tcp_psh_timeout
echo 10000 > /proc/sys/net/ipv4/tcp_syn_retries
echo 10000 > /proc/sys/net/ipv4/tcp_synack_retries
echo 0 > /proc/sys/net/ipv4/tcp_rst_retries
echo 10000 > /proc/sys/net/ipv4/tcp_psh_retries
echo 10000 > /proc/sys/net/ipv4/tcp_urg_retries
echo 10000 > /proc/sys/net/ipv4/tcp_ack_retries
echo 10000 > /proc/sys/net/ipv4/tcp_fin_retries
echo 0 > /proc/sys/net/ipv4/tcp_timestamps

也许:

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