Linux中的命令'sysctl'现在改变了整个系统的拥塞控制算法。但是,TCP窗口大小和其他类似参数变化的拥塞控制通常是根据TCP连接完成的。所以我的问题是:
或者我在这里遗漏了一些小事?如果是这样,它是什么?
答案 0 :(得分:2)
这是如何实现的(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可以改变动态使用的算法,但这是一个系统范围的设置而不是每个连接。