QoS 策略无法增加物理带宽,主要用于在带宽受限时的流量优先级调度。适用于多业务共用 VPS 场景,无法解决运营商骨干网拥堵。
先说结论:QoS 只能优化流量分配,不能突破物理带宽上限。
- 先定位:确认拥堵发生在 VPS 内部还是 upstream 链路。
- 先做:开启 BBR 拥塞控制算法,配置 tc 进行流量整形。
- 再验证:通过 tc -s 和 speedtest 对比延迟与吞吐量变化。
命令速用版
以下命令用于开启 TCP BBR 拥塞控制并查看当前队列纪律状态,适用于大多数 Linux 发行版。
sysctl -w net.ipv4.tcp_congestion_control=bbr
sysctl -w net.core.default_qdisc=fq
tc -s qdisc show dev eth0如果需要限制特定端口带宽,可使用 tc HTB 策略,但需谨慎操作以免中断连接。
为什么会这样
晚高峰拥堵通常是上游链路饱和,操作系统层面的 QoS 仅能管理本机发出的数据包顺序。VPS 提供商的物理出口带宽在高峰期被大量用户共享,导致丢包和延迟增加。QoS 无法创造额外带宽,但可以通过优先发送关键数据包(如 SSH、DNS)来降低感知延迟。BBR 算法通过优化发送速率来适应高延迟网络,比传统 Reno 算法更适合跨洋链路。
分步处理
按顺序执行以下操作,每步完成后检查系统状态。
1. 确认网卡名称
使用 ip 命令查看主网卡名称,避免对错误接口配置导致断网。
ip -o link show | awk -F': ' '{print $2}'2. 开启 BBR 拥塞控制
修改 sysctl 配置并立即生效,无需重启。
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p3. 配置 TC 流量整形(可选)
仅当需要保障关键业务带宽时配置,例如限制备份流量带宽。
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 1gbit prio 1
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10操作前请确保有控制台访问权限,配置错误可能导致无法 SSH 连接。
怎么验证是否生效
通过系统命令和网络测试工具确认配置状态及实际效果。
1. 检查 BBR 状态
sysctl net.ipv4.tcp_congestion_control返回值应为 bbr。
2. 查看 TC 统计
tc -s qdisc show dev eth0观察 drops 和 backlog 计数,若持续增加说明队列已满。
3. 测试延迟与吞吐
使用 ping 测试延迟稳定性,使用 speedtest-cli 测试吞吐量。公开资料中没有看到可靠的量化数据表明 QoS 能提升物理带宽,重点观察延迟抖动是否降低。
常见坑
- 入站流量难控制:tc 主要控制出站流量,入站拥堵需依赖拥塞控制算法。
- 配置错误导致断网:错误的 tc 规则可能丢弃所有数据包,务必保留控制台访问。
- 虚拟化层限制:部分 VPS 提供商在宿主机层做了限制,Guest OS 内的 QoS 可能无效。
- 内核版本要求:BBR 需要 Linux 4.9 及以上内核,旧版本系统不支持。
常见问题
QoS 能增加物理带宽吗?
不能,QoS 只能调整现有带宽的分配优先级。
晚高峰开启 BBR 有用吗?
有用,BBR 能更好地利用高延迟丢包链路的可用带宽。
配置 TC 后 SSH 连不上怎么办?
通过 VPS 提供商的控制台登录,删除 tc 规则或重启网络服务。
为什么入站速度没有变化?
入站速度受限于上游运营商链路,本机 QoS 无法控制上游发送速率。