适用场景

适用于:

  • Shadowsocks / Trojan 等 TCP 代理
  • 跨境网络
  • 高 RTT 链路
  • 长距离 TCP
  • 高带宽、大文件传输
  • 多 TCP Flow 代理服务器

推荐组合:

net.ipv4.tcp_fastopen = 3
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

三者作用不同:

TCP Fast Open
→ 减少 TCP 建连和首包延迟

BBR
→ 优化 TCP 拥塞控制,提高高 RTT 链路利用率

fq
→ Flow Queueing + Packet Pacing

TCP Fast Open

原理

普通 TCP:

SYN
↓
SYN/ACK
↓
ACK
↓
DATA

TFO 在满足条件时允许:

SYN + DATA
↓
SYN/ACK
↓
ACK

主要优化:

  • 建连延迟
  • 首包延迟
  • 大量短连接

对长时间稳定传输的最终吞吐影响通常较小。

适用场景

收益较明显:

高 RTT
大量短连接
频繁建立 TCP
HTTP / API
代理请求

收益较低:

低 RTT
长连接
大文件已经进入稳态传输

含义

net.ipv4.tcp_fastopen = 3

含义:

1 = Client
2 = Server
3 = Client + Server

代理服务器通常同时存在入站和出站 TCP,所以使用 3

BBR

原理

BBR 是 Linux TCP 拥塞控制算法,主要根据:

Bottleneck Bandwidth
+
RTT
+
Delivery Rate

估计链路容量,并控制:

cwnd
pacing_rate
发送节奏

相比主要依赖丢包反馈的传统算法,BBR 更适合:

  • 高 RTT
  • 高带宽
  • 长距离 TCP
  • 存在轻微随机丢包的网络

为什么高 RTT 更有价值

例如:

带宽 = 1 Gbps
RTT = 50 ms

BDP:

1 Gbps × 0.05s
≈ 6.25 MB

意味着链路上必须维持足够多的 In-flight Data 才能跑满。

高 RTT 环境下,如果拥塞窗口增长不足或丢包后下降过多,就容易出现:

线路 1 Gbps
实际单 TCP 只有 200 ~ 500 Mbps

BBR 的价值主要就在这里。


BBR 对代理服务器的作用

Shadowsocks / Trojan TCP 可以简化为:

Client
  ↓
TCP Connection 1
  ↓
Proxy Server
  ↓
TCP Connection 2
  ↓
Target

这其实是两段独立 TCP。

服务器上的 BBR:

只控制服务器自己发送出去的 TCP

因此通常对:

Server → Client

也就是下载方向,更容易观察到改善。

BBR 不优化 UDP

Linux:

net.ipv4.tcp_congestion_control = bbr

只作用于:

TCP

不会直接优化:

UDP
QUIC
HTTP/3
Shadowsocks UDP Relay

如果 UDP / QUIC 性能差,应重点检查:

丢包
RTT
抖动
MTU
Socket Buffer
线路 QoS
应用层拥塞控制

fq

推荐:

net.core.default_qdisc = fq

主要提供:

Flow Queueing
Packet Pacing
多 Flow 调度

对代理服务器大量 TCP Flow 比较适合。

常用组合:

fq + BBR

TCP 优化配置

检查系统是否支持 BBR

查看当前可用的 TCP 拥塞控制算法:

sysctl net.ipv4.tcp_available_congestion_control

正常情况下应包含:

bbr

例如:

net.ipv4.tcp_available_congestion_control = reno cubic bbr

如果没有 bbr,尝试加载模块:

sudo modprobe tcp_bbr

再次检查:

sysctl net.ipv4.tcp_available_congestion_control

如果仍然没有 bbr,说明当前内核没有提供可用的 BBR,不建议继续配置:

net.ipv4.tcp_congestion_control = bbr

配置 TCP Fast Open + fq + BBR

创建配置文件:

sudo nano /etc/sysctl.d/99-network-tuning.conf

写入:

# TCP Fast Open
net.ipv4.tcp_fastopen = 3

# Queue Discipline
net.core.default_qdisc = fq

# TCP Congestion Control
net.ipv4.tcp_congestion_control = bbr

应用配置:

sudo sysctl --system

验证配置

检查:

sysctl net.ipv4.tcp_fastopen
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
sysctl net.ipv4.tcp_available_congestion_control

期望:

net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

并且:

net.ipv4.tcp_available_congestion_control

中包含:

bbr

进一步检查真实 TCP Connection:

ss -tin

重点关注:

bbr
rtt
cwnd
retrans
delivery_rate
pacing_rate

其中:

rtt
→ 当前往返延迟

cwnd
→ 拥塞窗口

retrans
→ TCP 重传

delivery_rate
→ 实际交付速率

pacing_rate
→ 当前发送节奏

场景建议

国内低 RTT

例如:

RTT < 10 ms
低丢包
低抖动

建议:

TFO:可以开
BBR:可以开,但收益通常有限

更应该关注:

CPU
NIC
MTU
代理程序
线路带宽

跨境 / 高 RTT

例如:

RTT 30 ~ 150 ms
200 Mbps ~ 1 Gbps+
存在随机丢包或抖动

推荐:

net.ipv4.tcp_fastopen = 3
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

这类场景最值得测试 BBR。

常见问题

Q1:开启 BBR 后一定会更快吗?

不一定。

BBR 无法解决:

运营商限速
线路物理瓶颈
CPU 满载
NIC 上限
目标服务器限速
严重物理丢包

如果 CUBIC 已经接近跑满线路,切换 BBR 可能几乎没有变化。

Q2:TFO 能提高大文件下载速度吗?

通常不会明显提高稳态吞吐。

TFO主要优化:

建连
首包
短连接

大文件稳定传输阶段主要取决于:

BBR / CUBIC
RTT
丢包
TCP Window
线路带宽

Q3:为什么开启 BBR 后 iperf3 没变化?

常见原因:

RTT 很低
线路本来已经跑满
原来的 CUBIC 已经足够
CPU 或带宽已经成为瓶颈

结合:

iperf3
ss -tin

一起判断。

Q4:BBR 对 QUIC 有作用吗?

没有直接作用。

因为:

QUIC
↓
UDP

QUIC 的拥塞控制通常由应用自己实现。

Q5:设置 tcp_fastopen=3 就一定使用 TFO 吗?

不一定。

它只代表:

Linux 内核允许使用 TFO

实际是否生效还取决于:

客户端
服务端应用
TFO Cookie
NAT
防火墙
中间网络

Q6:需要升级到 BBRv3 吗?

一般不需要。

生产环境优先使用:

发行版稳定内核自带 BBR

如果评估 BBRv3,应做完整 A/B 测试,至少比较:

吞吐
平均 RTT
P95 / P99 RTT
重传率
丢包
CPU
SoftIRQ

确认稳定收益后再考虑使用。

最终建议

普通跨境代理服务器可以直接使用:

net.ipv4.tcp_fastopen = 3
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

记住:

TFO
→ 优化建连和首包

BBR
→ 优化 TCP 拥塞控制

fq
→ Flow Queueing + Packet Pacing

iperf3 + ss -tin
→ 验证是否真的有收益

标签: none

仅有一条评论

  1. 欢迎加入 Typecho 大家族

添加新评论