3

我在网上找不到任何东西可以从 Linux 的命令行禁用 Nagle 算法。Solaris 确实具有从命令行启用/禁用它的机制。

请让我知道是否有任何方法可以在 Linux 上执行此操作。

4

4 回答 4

2

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

于 2013-02-07T05:13:48.237 回答
0

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

于 2014-02-10T15:19:49.963 回答
0

或者将 ACK 超时设置得更低并停止 TCP_RTS。超时时间为 2 毫秒。这是到下一个 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
于 2014-04-10T18:54:20.267 回答
0

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

于 2013-10-31T02:43:55.997 回答