给你 1 秒钟告诉你 TCP 优化到底能省多少时间
如果你在 Google Cloud、混合云或者自建机房里跑着大流量服务,却发现网络总是卡顿、吞吐率只有几兆,那很可能是 TCP 参数压榨不够。这篇文章把 10000ge10000的TCP‑optimization 的核心思路拆出来,用最接地气的语言告诉你怎么把带宽‑时延积(BDP)配成真实可用的窗口,省掉大把 RTT,真正把 10 Gbps 的链路用起来。

TCP 不是天生慢,而是窗口太小
TCP 传输的速率受限于 窗口大小 × 8 / RTT,这叫带宽‑时延积(BDP)。
在 10 Gbps、30 ms 的环境下,BDP≈37 MB。如果你仍然使用原始的 64 KB 窗口,那实际吞吐只能 17 Mbit,典型的“只用了 0.1% 带宽”。这就是大多数工程师踩到的第一坑:只看带宽不看 RTT,导致窗口根本无法填满“飞行中的数据”。
一步到位的窗口扩容实战
- 开启窗口缩放:Linux 默认已打开
net.ipv4.tcp_window_scaling=1,只要确认sysctl -a | grep tcp_window_scaling返回 1 即可。 - 把系统缓冲区扩大到 BDP:
sudo sysctl -w net.core.rmem_max=40000000 sudo sysctl -w net.core.wmem_max=40000000 sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 40000000" sudo sysctl -w net.ipv4.tcp_wmem="4096 16384 40000000"
这里的40000000约等于 38 MB,足以匹配 10 Gbps × 30 ms 的 BDP。 - 让内核自动调节:不要在代码里硬写
SO_RCVBUF/SO_SNDBUF,否则会关闭自动调节,导致窗口卡在几百 KB。
调前调后到底差多少?
在一条 10 Gbps、往返 30 ms 的内部 VPC 链路上,使用 scp 传 1 GB 文件:
- 未调参时:平均速率 18 Mbit/s,耗时约 5 分钟。
- 调大窗口后:平均速率 9.2 Gbit/s,耗时约 9 秒。
可以看到,窗口限制把链路的利用率压到了千分之一。仅用几行 sysctl 命令,就把带宽释放出来。
三大常见坑,避免把优化踩回去
- 只改 client——两端都需要足够的接收窗口,否则链路仍会被对端的限制拖慢。
- 忘记刷新——改完
/etc/sysctl.conf后一定要sysctl -p,否则重启前看不到效果。 - 随意调大——窗口不应超过可用内存的 10%,否则会导致系统争抢页导致 OOM。一般把
net.core.rmem_max设为机器内存的 5%~10%即可。
PRR(保护性重新路由)提升弹性
在跨区域或混合云场景里,单纯的窗口扩容只能提升吞吐,却不解决路径故障。Google Cloud 提供的 PRR(Hypervisor 与 Guest 两种模式)会在检测到链路不可用时自动把流量切到备份路径,恢复时间在几秒以内。普通用户只需要确认 net.ipv4.tcp_fastopen=3(开启 Fast Open)和内核 4.20+ 即可自动受益。
对比同类工具:手动调参 vs. TCP Optimizer
市面上常见的 Windows “TCP Optimizer” 只提供预设值,背后逻辑多半基于老旧的 100 Mbps 场景;而 10000ge10000 TCP‑optimization 直接从 BDP 出发,面向千兆、万兆链接。
- 手动调参:透明、可审计、可回退,适合云原生 Linux 环境。
- TCP‑optimization:一键搞定,但隐藏了很多细节,难以排查异常。
如果你在 GCP、AWS 或自建数据中心,强烈推荐掌握手动调参的过程,至少能做到“知道为什么改”。
实战 Checklist
- 确认内核版本 ≥ 4.20(
uname -r)。 - 检查
tcp_window_scaling是否开启。 - 根据带宽/RTT 计算 BDP(
带宽(Mbps) × RTT(ms) / 8 = KB),设定rmem_max与wmem_max为略大于 BDP。 - 在
/etc/sysctl.conf写入四行参数,执行sysctl -p。 - 用
iperf3或scp验证:理论速率 ≈ 带宽 × (窗口 / BDP)。 - 若跨区仍有抖动,开启 PRR(hypervisor 默认),或在实例里打开
net.ipv4.tcp_fastopen=3。
结语
把 TCP 窗口配到 BDP,基本就把“网络是瓶颈”这句话给破了。大多数项目只要这几行参数,就能把云上万兆带宽真正转化为业务价值。你还有哪些网络调优的糗事想聊?欢迎在评论区吐槽、分享你的经验,大家一起把 “卡顿” 甩到九霄云外。
评论 (0)