更改每个连接的拥塞控制算法

时间:2011-01-14 07:41:57

标签: linux sysctl congestion-control

Linux中的命令'sysctl'现在改变了整个系统的拥塞控制算法。但是,TCP窗口大小和其他类似参数变化的拥塞控制通常是根据TCP连接完成的。所以我的问题是:

  • 是否存在可以更改每个TCP连接使用的拥塞控制算法的方法?

或者我在这里遗漏了一些小事?如果是这样,它是什么?

4 个答案:

答案 0 :(得分:2)

使用-Z选项在iperf中完成此操作 - 补丁为here

这是如何实现的(PerfSocket.cpp,第93行):

    if ( isCongestionControl( inSettings ) ) {
#ifdef TCP_CONGESTION
    Socklen_t len = strlen( inSettings->mCongestion ) + 1;
    int rc = setsockopt( inSettings->mSock, IPPROTO_TCP, TCP_CONGESTION,
                 inSettings->mCongestion, len);
    if (rc == SOCKET_ERROR ) {
        fprintf(stderr, "Attempt to set '%s' congestion control failed: %s\n",
            inSettings->mCongestion, strerror(errno));
        exit(1);
    }
#else
    fprintf( stderr, "The -Z option is not available on this operating system\n");
#endif

其中 mCongestion 是包含要使用的算法名称的字符串

答案 1 :(得分:1)

看来这可以通过get / setsockopt实现。我找到的唯一文件是: http://lkml.indiana.edu/hypermail/linux/net/0811.2/00020.html

答案 2 :(得分:0)

在较新版本的Linux中,可以使用ip route ... congctl为特定目标设置拥塞控制。

如果有人熟悉这种方法,请编辑这篇文章。

答案 3 :(得分:-1)

Linux有pluggable congestion algorithms可以改变动态使用的算法,但这是一个系统范围的设置而不是每个连接。