【问题标题】:Disabling Nagle's Algorithm in linux在 Linux 中禁用 Nagle 算法
【发布时间】:2013-02-07 05:08:56
【问题描述】:

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

如果在 Linux 上有任何方法可以做到这一点,请告诉我。

【问题讨论】:

标签: linux linux-kernel


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        或将 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
        

        【讨论】:

          猜你喜欢
          • 2013-07-24
          • 1970-01-01
          • 2014-07-11
          • 1970-01-01
          • 2016-02-08
          • 2020-07-10
          • 2019-10-07
          • 2012-03-29
          • 1970-01-01
          相关资源
          最近更新 更多