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