目录
-
-
- 一、核心概念
- 二、常见拥塞控制算法
-
- [1. **BBR (Bottleneck Bandwidth and RTT)**](#1. BBR (Bottleneck Bandwidth and RTT))
- [2. **Cubic**](#2. Cubic)
- [3. **DCTCP (Data Center TCP)**](#3. DCTCP (Data Center TCP))
- [4. **其他算法**](#4. 其他算法)
- 三、如何配置
-
- [1. **查看当前算法**](#1. 查看当前算法)
- [2. **临时修改(重启失效)**](#2. 临时修改(重启失效))
- [3. **永久修改**](#3. 永久修改)
- [4. **验证 BBR 启用**](#4. 验证 BBR 启用)
- 四、算法选择指南
- [五、BBR vs Cubic 对比](#五、BBR vs Cubic 对比)
- 六、性能监控
-
- [1. **实时连接状态**](#1. 实时连接状态)
- [2. **网络统计信息**](#2. 网络统计信息)
- [3. **队列长度监控**](#3. 队列长度监控)
- 七、注意事项
- 八、总结
-
net.ipv4.tcp_congestion_control
是 Linux 内核中控制 TCP 拥塞控制算法的关键参数。拥塞控制决定了 TCP 如何动态调整发送速率,以避免网络过载并优化吞吐量。以下是关于该参数的全面总结:
一、核心概念
TCP 拥塞控制通过以下机制工作:
- 检测拥塞:通过丢包或延迟增加判断网络拥塞
- 调整窗口:动态减小或增大发送窗口(cwnd)
- 平衡效率与公平:最大化带宽利用,同时公平分配资源
二、常见拥塞控制算法
1. BBR (Bottleneck Bandwidth and RTT)
- 原理:直接测量瓶颈带宽和往返时间(RTT),主动避免拥塞
- 优势 :
- 低延迟:避免缓冲区膨胀(Bufferbloat)
- 高吞吐量:充分利用带宽(尤其适合高带宽网络)
- 公平性:与其他流共存时表现更好
- 适用场景:所有网络环境(推荐作为默认选择)
2. Cubic
- 原理:基于三次函数调整窗口大小,适合高带宽延迟积(BDP)网络
- 优势:在长距离、高带宽网络中表现稳定
- 劣势:高延迟(依赖丢包触发拥塞控制)
- 适用场景:传统网络(默认算法)
3. DCTCP (Data Center TCP)
- 原理:通过显式拥塞通知(ECN)替代丢包检测
- 优势 :
- 数据中心环境下极低延迟
- 多流公平性极佳
- 依赖:网络设备必须支持 ECN 标记
- 适用场景:数据中心内部网络
4. 其他算法
- Reno:经典丢包驱动算法,现代系统已较少使用
- Vegas:基于延迟而非丢包检测拥塞
- Hybla:专为高延迟网络(如卫星链路)优化
- Westwood:适合无线环境,通过带宽估计调整窗口
三、如何配置
1. 查看当前算法
bash
sysctl net.ipv4.tcp_congestion_control
2. 临时修改(重启失效)
bash
# 设置为 BBR
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
# 设置为 Cubic
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
3. 永久修改
编辑 /etc/sysctl.conf
或 /etc/sysctl.d/
目录下的配置文件:
net.ipv4.tcp_congestion_control = bbr
保存后执行:
bash
sudo sysctl -p
4. 验证 BBR 启用
bash
lsmod | grep bbr # 应显示 tcp_bbr 模块
四、算法选择指南
场景 | 推荐算法 |
---|---|
默认配置 | BBR |
数据中心内部网络 | DCTCP |
跨区域高带宽网络 | BBR |
卫星链路/高延迟网络 | Hybla |
无线/高丢包率网络 | Westwood |
传统网络环境 | Cubic |
五、BBR vs Cubic 对比
指标 | BBR | Cubic |
---|---|---|
拥塞信号 | 延迟+带宽估计 | 丢包检测 |
延迟控制 | 极佳(低延迟) | 一般(高延迟) |
高带宽利用率 | 极佳 | 良好 |
公平性 | 良好 | 一般 |
抗丢包能力 | 强 | 弱 |
部署难度 | 简单 | 简单 |
六、性能监控
1. 实时连接状态
bash
ss -it | grep <目标IP> # 关注 rtt、rttvar、cwnd 指标
2. 网络统计信息
bash
netstat -s | grep -i tcp # 查看 TCP 相关统计
3. 队列长度监控
bash
tc -s qdisc show dev eth0 # 理想队列长度应接近 0
七、注意事项
- 内核版本要求:BBR 需要 Linux 4.9+,DCTCP 需要 3.6+
- ECN 支持:启用 DCTCP 时,需确保网络设备和两端主机都支持 ECN
- 兼容性测试:切换算法后,需测试应用性能和兼容性(如某些应用可能对延迟敏感)
- 多路径 TCP (MPTCP) :若使用 MPTCP,需额外配置
net.mptcp.mptcp_path_manager
八、总结
- 首选 BBR:在大多数场景下,BBR 提供最佳的延迟和吞吐量平衡
- DCTCP 专用:仅在数据中心内部且网络设备支持 ECN 时使用
- 传统网络:若 BBR 不适用,默认 Cubic 是安全选择
合理配置拥塞控制算法可显著提升网络性能,建议根据实际网络环境进行测试和选择。