有人可以给我指点在linux内核中启用newReno。开源源代码在任何地方都可用吗?我可以在线获得一些 cpp 代码,但我必须重写整个东西才能在 linux 内核中使用它。
2 回答
从 2.6.13 开始,Linux 内核支持 TCP 堆栈插件,并根据系统连接的内容启用算法之间的切换。你的一个是3.8,所以显然它支持广泛的算法,其中一些如下
高速 TCP
该算法在 RFC 3649 中有描述。主要用于大带宽和大 RTT(如 Gbit/s 和 100 ms RTT)的连接。
H-TCP
H-TCP 是由 Hamilton Institute 提出的,用于在发生拥塞事件后更快地恢复传输。它还设计用于具有高带宽和 RTT 的链路。
TCP Tahoe/里诺
这些是用于拥塞控制的经典模型。它们表现出典型的慢速传输启动。吞吐量逐渐增加,直到保持稳定。一旦传输遇到拥塞,它就会降低,然后速率再次缓慢上升。通过添加固定值来增加窗口。TCP Reno 使用乘法减小算法来减小窗口大小。TCP Reno 是部署最广泛的算法。
TCP 韦斯特伍德+
Westwood+ 解决了大带宽/RTT 值和随机数据包丢失以及动态变化的网络负载问题。它通过查看确认数据包来分析传输状态。Westwood+ 是 TCP Reno 算法的修改版。这只是模块的粗略轮廓。
/proc/
通过将文本写入条目,可以轻松地在不同算法之间进行切换。
$:~# echo "westwood" > /proc/sys/net/ipv4/tcp_congestion_control
$:~# cat /proc/sys/net/ipv4/tcp_congestion_control
westwood
$:~#
可以在此处找到可用模块的列表:
$:~# ls /lib/modules/`uname -r`/kernel/net/ipv4/
ip_gre.ko netfilter tcp_cubic.ko tcp_htcp.ko tcp_lp.ko tcp_vegas.ko
ipip.ko tcp_bic.ko tcp_highspeed.ko tcp_hybla.ko tcp_scalable.ko tcp_veno.ko
$:~#
写入时/proc/
,您可以跳过tcp_ prefix
. 如果您编译自己的内核,您会在Networking -> Networking options -> TCP: advanced congestion control section
.
由于某些算法仅影响发送方,因此启用它们时您可能不会注意到差异。为了查看变化的行为,您必须创建一个受控设置,并测量 TCP 传输的参数。
从这个link ns2 use linux stack上的表来看,其实就是命名的问题。如果用“sudo sysctl -w net.ipv4.tcp_congestion_control=reno”设置拥塞控制,linux中的“reno”实现newreno拥塞控制.
虽然他们的内核是Linux-2.6.22.6,但我认为较新的内核应该继承相同的命名。进一步的证据可以从linux reno实现的源代码中获得。