我在网上找不到任何东西来从Linux的命令行中禁用Nagle的algorithm。 Solaris确实有一个机制来从命令行启用/禁用它。
请让我知道是否有任何方式在Linux上做到这一点。
它是按套接字完成的,而不是从命令行使用setsockopt()
来设置TCP_NODELAY标志。 我知道全球没有这样做的方法,但如果在/ proc / sys / net下有一个文件来执行此操作,则不会感到意外。
对于redhat Linux,你可以看看/ proc / sys / net / ipv4 / tcp_delack_min选项。 对于其他发行版,您可能需要重新编译内核。
您还可以将环境变量SETTCPNODELAY设置为任何值来禁用Nagle的算法。
或者设置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