【发布时间】:2013-02-07 05:08:56
【问题描述】:
我在网上找不到任何东西可以从 Linux 的命令行禁用 Nagle 算法。 Solaris 确实具有从命令行启用/禁用它的机制。
如果在 Linux 上有任何方法可以做到这一点,请告诉我。
【问题讨论】:
-
查看已关闭问题stackoverflow.com/questions/17842406/…的答案。
标签: linux linux-kernel
我在网上找不到任何东西可以从 Linux 的命令行禁用 Nagle 算法。 Solaris 确实具有从命令行启用/禁用它的机制。
如果在 Linux 上有任何方法可以做到这一点,请告诉我。
【问题讨论】:
标签: linux linux-kernel
它是在每个套接字上完成的,而不是从命令行,使用setsockopt() 来设置 TCP_NODELAY 标志。我知道没有任何方法可以在全球范围内执行此操作,但如果 /proc/sys/net 下有一个文件可以执行此操作,我不会感到惊讶...
【讨论】:
对于 redhat Linux,您可以查看 /proc/sys/net/ipv4/tcp_delack_min 选项。对于其他发行版,您可能需要重新编译内核。
【讨论】:
您还可以将环境变量 SETTCPNODELAY 设置为任意值以禁用 Nagle 算法。
【讨论】:
或将 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
【讨论】: