TCP 可用的拥塞控制 - reno 还是 new reno?

TCP 可用的拥塞控制 - reno 还是 new reno?

我使用 Ubuntu 20.04。

sysctl net.ipv4.tcp_available_congestion_control

返回:

net.ipv4.tcp_available_congestion_control = reno cubic

我不确定 reno 是否实际上是 new-reno。我在 wireshark 中看到丢失数据包的快速传输,并且有过去的 tcp man 说 new-reno 是 cubic 之前的默认 cc。我试图在https://elixir.bootlin.com但未能得到答案。

ls -la /lib/modules/$(uname -r)/kernel/net/ipv4不要显示任何一个

reno 实际上是 new-reno 吗?如果不是,是否可以选择 new-reno?

我将非常感激有关在哪里可以找到这两样东西的信息!

答案1

内核源代码树中的相关文件是net/ipv4/tcp_cong.c,并且标头是:

/ SPDX-License-Identifier: GPL-2.0-only
/*
 * Pluggable TCP congestion control support and newReno
 * congestion control.
 * Based on ideas from I/O scheduler support and Web100.
 *
 * Copyright (C) 2005 Stephen Hemminger <[email protected]>
 */

该文件进一步内容如下:

/*
 * TCP Reno congestion control
 * This is special case used for fallback as well.
 */
/* This is Jacobson's slow start and congestion avoidance.
 * SIGCOMM '88, p. 328.
 */

它是唯一没有内核配置开关的拥塞控制算法,它始终是内置的。cubic 显示为可用,因为在 Ubuntu 中内核配置设置为包含它,内置。其余可能的控制算法都是模块。内核配置的相关部分:

CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_NV=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
CONFIG_TCP_CONG_CDG=m
CONFIG_TCP_CONG_BBR=m
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"

因此默认情况下会得到(就像你做的那样):

doug@s19:~/kernel/linux$ cat /proc/sys/net/ipv4/tcp_available_congestion_control
reno cubic

但是一旦模块被加载,就会得到:

doug@s19:~/kernel/linux$ cat /proc/sys/net/ipv4/tcp_available_congestion_control
reno cubic bic westwood htcp highspeed hybla vegas veno lp nv scalable yeah illinois dctcp cdg bbr

相关内容