【问题标题】:Disabling Nagle's Algorithm in solaris在 solaris 中禁用 Nagle 算法
【发布时间】:2012-10-06 03:36:30
【问题描述】:

假设我想在 Solaris 中禁用 Nagle 算法(用于实时传输数据),其中进程之间的连接是使用本地环回建立的,这会不会有问题。至于我的理解,Solaris 中的本地循环确实启用了 TCP 融合(有点类似于 Unix 域套接字)以减少堆栈使用的开销。 它们是相关的还是相互排斥的?我的疑问基本上是它会产生任何影响吗?

另外我想澄清一下是否可以禁用 Nagle 的算法以进行本地环回通信?

我知道我可以使用 TCP_NODELAY。可能我需要澄清更多:1)在禁用Nagle算法的本地循环中会发生什么(默认情况下始终启用)。 TCP 堆栈会等待 MSS 还是会立即将数据推出堆栈。 2) 默认情况下,在 solaris 中启用 TCP 融合以加快读写速度。如果禁用 Nagle 是否会产生任何问题。最后我想要的是数据应该实时发送,没有任何延迟。所以我必须禁用Nagle还是TCP融合就足够了。

【问题讨论】:

    标签: network-programming solaris


    【解决方案1】:

    我承认我不知道是否只能为 1 个接口禁用 naggle。在全球范围内,这将通过以下命令完成(但我猜你已经知道了):

    /usr/sbin/ndd -set /dev/tcp tcp_naglim_def 1
    

    我的 Solaris 虚拟机现在坏了,所以我无法测试,但如果我们想象“lo0”是你的环回,“/usr/sbin/ndd -set /dev/lo0 tcp_naglim_def 1 “工作?

    建议的默认设置是保持 Nagle 处于启用状态,您可以在应用程序中禁用它吗?它应该像使用 TCP_NODELAY 选项调用 setsockopt() 一样简单。

    【讨论】:

    • 不,我认为这很清楚,您更多的是在寻找类似 ndd 的东西,但只是在环回接口上禁用 nagle,而不是在真实接口上禁用,对吗?
    • 环回是否需要禁用nagle? TCP fusion不会实时传输数据吗?
    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2013-07-24
    • 2016-02-08
    • 2020-07-10
    • 2019-10-07
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多