tcpfit — 按每台机器实测推导的 TCP 调优脚本

一键脚本,通过免费 iperf3 服务器实测,全球 15 个城市 18 个节点,也可以用自己的机器

我已经在自己的所有优化机器,包括生产力机器上运行.由我自己(和claude)开发

0.4.2版本已经上线,修复了大量已知BUG!

机器跑不满?G口只能跑200m?断流严重?看youtube卡顿?或许这个脚本可以帮到你!!


调优脚本非常多,但是我自己测试后可以放心在自己所有主力机器上使用.一个脚本即可做到调优所有优化机器

实测效果

测试机:VMISS 9929,500Mbps

TcpQuality 综合测速

image

image

九节点均值 回程 去程
原厂 144.0 Mbps 53.0 Mbps
tcpfit 471.1 Mbps 76.1 Mbps
3.27 倍 1.44 倍

单节点最高:上海电信 131.7 → 545.4 Mbps

回程重传次数从 149 涨到 323,但吞吐涨了 3.27 倍 —— 换算成每 Mbps 的重传降了 34%
去程只涨 1.44 倍是正常的:去程 = 国内往服务器发,发多快由国内那台说了算,服务器只能控制接收窗口。

单线程测速

image

image

平均 峰值
原厂 186.44 Mbps 217.83 Mbps
tcpfit 401.69 Mbps 485.72 Mbps

2.2 倍,原厂内核,不换内核不重启。

顺便看一眼 TQ 自己给的注释

图里那句「以美西为例:160ms延迟+4M发送缓存=理论单线程200Mbps」。

这台原厂发送缓冲就是 4M,RTT 164ms

4 MB × 8 ÷ 0.164s = 205 Mbps

而原厂实测峰值 217.83 —— 死死卡在天花板上

tcpfit 把它按 带宽 × RTT 抬到 18.1M,天花板变成 949 Mbps,实测峰值 485.72。


使用

bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)

跑完出菜单,选 1 全自动。只问三个问题:

  1. 带宽多少 —— 不想扫拐点就填 0,已知限速值输入 m 直接指定
  2. 测速对端 —— 回车用免费公共节点,或填自己另一台机器的 IP
  3. 机器用途 —— 代理 / 大文件传输

装好之后敲 tcpfit 进菜单。

image


免费 iperf3 节点

脚本自带 18 个节点,会并发 ping 一圈自动选最近可用的,不用你操心:

地区 城市 提供方
亚太 香港 Leaseweb
新加坡 Leaseweb / OVH
东京 Leaseweb
悉尼 Leaseweb
欧洲 法兰克福 Leaseweb
阿姆斯特丹 Leaseweb / Clouvider
伦敦 Leaseweb / Clouvider
北美 洛杉矶 Leaseweb
旧金山 Leaseweb
西雅图 Leaseweb
达拉斯 Leaseweb
芝加哥 Leaseweb
纽约 Leaseweb
迈阿密 Leaseweb
蒙特利尔 Leaseweb

测的是你的端口能发多快,所以对端越近越准。 有自己的另一台机器就更好,那边跑 iperf3 -s,把 IP 填进去就行。


原理

一、基础调优

带宽 × RTT 算 BDP,缓冲区给 2 倍 BDP,上限跟内存挂钩(不超过 TCP 全局预算的 1/8)。

再加 BBR + fq、起步优化(slow_start_after_idle=0initcwnd 32)、队列和连接参数,共 32 项。

二、限速器拐点(iperf3)

先不限速跑一次:

  • 丢包低 → 你的口上没有限速器,不整形
  • 丢包高 → 有限速器,从实测吞吐往上扫找拐点

找到拐点后退一点安全余量,用 HTB 聚合限速 + fq 叶子 pacing 应用。

为什么限速反而更快(另一台 500M 机器实测):

不限速   吞吐 481 Mbps   10 秒重传 61,266 次
限到 530 吞吐 499 Mbps   10 秒重传      5 次

限速器看的是瞬时速率。不加 pacing 的 TCP 是突发式发送,平均没超也会被打穿。加上 fq 的逐包 pacing,就能贴着真实上限跑而几乎不丢包。

三、回滚

tcpfit rollback        # 完整回滚
tcpfit shape --off     # 只去掉整形,保留基础调优

首次改动前自动存快照,记录全部 33 项参数原始值。

所有改动位置:

/etc/sysctl.d/99-tcpfit.conf
/etc/systemd/system/tcpfit-qdisc.service
/usr/local/sbin/tcpfit-qdisc.sh
/etc/networkd-dispatcher/routable.d/50-tcpfit-initcwnd
/etc/modules-load.d/tcpfit-bbr.conf
/var/lib/tcpfit/

流量和时间

拐点扫描要真跑流量:

带宽 有限速器 没有限速器
300M 3.5 GB / 3 分钟 0.4 GB / 1 分钟
500M 8.8 GB / 4 分钟 0.7 GB / 1 分钟
1000M 22 GB / 4.5 分钟 1.5 GB / 1 分钟

先只测一档判断有没有限速器,没有就到此为止。超过 2500 Mbit 速率会提醒.

只要基础调优:菜单选 2,1 分钟,几乎不耗流量。


调不了什么

瓶颈在国际链路而不是你的端口时,调服务器没用。典型表现是不限速跑也不丢包,但到国内就是上不去 —— 这种情况脚本会报「未检测到限速器」,基础调优仍然生效,但整形那部分没有收益。


源码 https://github.com/Kylin010/tcpfit (MIT)

目前测试了自己所有优化机器,均有不同程度提升。包括那些只有个位数mbps的机器也拉到正常水平了。
如果你们有更好的意见,或者自己机器比较特殊,或者有什么需求,还是说想在群里交流学习都可以进来看看!
频道会发布更新,交流群是采纳意见和交流。

TG频道 更新频道
TG讨论群 讨论群