net.core.default_qdisc=fq 是什么?BBR 为什么常和 fq 一起配置

July 7, 2026
解释 Linux 队列算法 fq、fq_codel、mq 与 TCP BBR 的关系,为什么很多 BBR 教程会设置 net.core.default_qdisc=fq。

net.core.default_qdisc=fq 是什么?BBR 为什么常和 fq 一起配置

更新日期:2026-07-07

很多 BBR 教程都会写两行:

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

第二行很容易理解:把 TCP 拥塞控制算法切换到 BBR。第一行的 fq 是什么,为什么常和 BBR 一起出现?

qdisc 是什么

qdisc 是 queueing discipline,简单说就是 Linux 网络接口发包前的排队规则。它决定数据包如何排队、调度和发送。

常见 qdisc:

  • `fq`:Fair Queue,支持按流公平排队和 pacing。
  • `fq_codel`:结合公平排队和 CoDel,常用于降低 bufferbloat。
  • `mq`:multi-queue,多队列网卡常见。
  • `pfifo_fast`:更传统的队列方式。

fq 对 BBR 的意义

BBR 会估算瓶颈带宽和 RTT,然后按节奏发送数据。fq 能更好地支持 pacing,让数据包不要过于突发地挤出去。

所以很多服务器场景会把 BBR 和 fq 一起配置:

sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sudo sysctl --system

为什么 tc qdisc show 不是总能看到 fq

执行:

tc qdisc show

你可能看到 `mq`。这不一定是错,因为多队列网卡会在 root 显示 mq。此时先看:

sysctl net.core.default_qdisc

如果是 fq,通常已经达到教程配置目标。

fq 和 fq_codel 怎么选

如果你明确是为了 BBR,通常选 fq。
如果你是在家庭路由器、网关、OpenWrt 上处理 bufferbloat,fq_codel 或 cake 可能更常见。

服务器侧不要盲目混用太多网络调优参数。先保持简单:

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

继续阅读