目录

tcp拥塞控制算法协议编译安装记录

本文记录了从零开始在 Debian 12 编译tcp拥塞控制算法协议,并且确保最终可在 Debian 12 上部署。 我会按步骤分为 编译 → 加载 → 确认 → 生效


1️⃣ 编译模块

环境准备

sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)
----------------------------------------------------------
sudo yum install gcc make kernel-devel kernel-headers (centos7对应)

下载源码

[root@haoyuli ~]# wget [tcp_ucp-1.0.zip](https://github.com/liulilittle/tcp_ucp/archive/refs/heads/main.zip)
[root@haoyuli ~]# mv tcp_ucp-1.0.zip /opt/
[root@haoyuli ~]# cd /opt/
[root@haoyuli opt]# unzip tcp_ucp-1.0.zip
[root@haoyuli opt]# cd tcp_ucp-main/
[root@haoyuli tcp_ucp]# ls
docs  LICENSE  Makefile  README.md  tcp_ucp.c

生成模块

root@localhost:/opt/tcp_ucp-main# make
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-42-cloud-amd64'
  CC [M]  /opt/tcp_ucp-main/tcp_ucp.o
  MODPOST /opt/tcp_ucp-main/Module.symvers
  CC [M]  /opt/tcp_ucp-main/tcp_ucp.mod.o
  LD [M]  /opt/tcp_ucp-main/tcp_ucp.ko
  BTF [M] /opt/tcp_ucp-main/tcp_ucp.ko
Skipping BTF generation for /opt/tcp_ucp-main/tcp_ucp.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-42-cloud-amd64'

2️⃣ 加载内核模块

insmod tcp_ucp.ko

root@localhost:/opt/tcp_ucp-main# insmod tcp_ucp.ko

3️⃣ 查看模块信息

modinfo tcp_ucp.ko

root@localhost:/opt/tcp_ucp-main# modinfo tcp_ucp.ko
filename:       /opt/tcp_ucp-main/tcp_ucp.ko
version:        1.0
description:    TCP UCP v1.0 - BBRv1 state machine with Kalman-filter propagation-delay estimation
license:        Dual BSD/GPL
author:         Original BBR: Van Jacobson, Neal Cardwell, Yuchung Cheng, Soheil Hassas Yeganeh (Google)
author:         PPP PRIVATE NETWORK(TM) X
srcversion:     7AC5CAF56AFD118EED2A6ED
depends:
retpoline:      Y
name:           tcp_ucp
vermagic:       6.1.0-42-cloud-amd64 SMP preempt mod_unload modversions

4️⃣ 查看是否注册成功

sysctl -a | grep congestion_control

输出:

net.ipv4.tcp_allowed_congestion_control = reno cubic ucp net.ipv4.tcp_available_congestion_control = reno cubic ucp net.ipv4.tcp_congestion_control = cubic

root@localhost:/opt/tcp_ucp-main# sysctl -a | grep congestion_control
net.ipv4.tcp_allowed_congestion_control = reno cubic bbr ucp
net.ipv4.tcp_available_congestion_control = reno cubic bbr ucp
net.ipv4.tcp_congestion_control = bbr

5️⃣ 切换为 ucp(临时)

立即切换:

sysctl -w net.ipv4.tcp_congestion_control=ucp

验证:

sysctl net.ipv4.tcp_congestion_control

输出:

net.ipv4.tcp_congestion_control = ucp

root@localhost:/opt/tcp_ucp-main# sysctl -w net.ipv4.tcp_congestion_control=ucp
net.ipv4.tcp_congestion_control = ucp
root@localhost:/opt/tcp_ucp-main# sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = ucp

6️⃣ 永久生效

✅ 第一:让 sysctl 永久生效

编辑配置:

nano /etc/sysctl.conf

追加:

net.ipv4.tcp_congestion_control=ucp

保存后执行:

sysctl -p

验证:

sysctl net.ipv4.tcp_congestion_control

vi /etc/sysctl.d/99-tcp.conf net.ipv4.tcp_congestion_control=ucp

root@localhost:/opt/tcp_ucp-main# vi  /etc/sysctl.conf
root@localhost:/opt/tcp_ucp-main# sysctl -p
net.ipv6.conf.all.forwarding = 1
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
net.ipv4.tcp_congestion_control = ucp

✅ 第二:让模块开机自动加载

vi /etc/modules-load.d/tcp_ucp.conf tcp_ucp

cp tcp_ucp.ko /lib/modules/$(uname -r)/kernel/ depmod -a modprobe tcp_ucp

root@localhost:/opt/tcp_ucp-main# vi /etc/sysctl.d/99-tcp.conf
root@localhost:/opt/tcp_ucp-main# cat /etc/sysctl.d/99-tcp.conf
net.ipv4.tcp_congestion_control=ucp

root@localhost:/opt/tcp_ucp-main# vi /etc/modules-load.d/tcp_ucp.conf
root@localhost:/opt/tcp_ucp-main# cat /etc/modules-load.d/tcp_ucp.conf
tcp_ucp

root@localhost:/opt/tcp_ucp-main# cp tcp_ucp.ko /lib/modules/$(uname -r)/kernel/
root@localhost:/opt/tcp_ucp-main# depmod -a
root@localhost:/opt/tcp_ucp-main# modprobe tcp_ucp

如何验证是否真的“恢复机制正确”

重启后执行:

lsmod | grep tcp_ucp

再执行:

sysctl net.ipv4.tcp_available_congestion_control

如果看到:

ucp

root@localhost:/opt/tcp_ucp-main# reboot
root@localhost:~# lsmod | grep tcp_ucp
tcp_ucp                90112  7
root@localhost:~# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic ucp
root@localhost:~# sysctl -a |grep control
net.ipv4.tcp_allowed_congestion_control = reno cubic ucp
net.ipv4.tcp_available_congestion_control = reno cubic ucp
net.ipv4.tcp_congestion_control = ucp