在 OpenWrt 软路由中使用 SQM(Smart Queue Management,智能队列管理)时,选择合适的规则(即队列调度算法和脚本)取决于你的网络需求和使用场景。SQM 的主要目标是减少缓冲区膨胀(bufferbloat),优化延迟和带宽分配。以下是常见的规则推荐及适用场景分析:
常用队列调度算法(Queue Discipline)
-
fq_codel(Fair Queuing Controlled Delay)
fq_codel(公平排队受控延迟)-
特点:这是 SQM 的默认算法,结合了公平队列(FQ)和控制延迟(CoDel)技术,能够有效减少延迟并公平分配带宽。
-
优点:配置简单,对大多数家庭网络足够,适用于带宽较低或中等(比如 100Mbps 以下)的场景。
-
缺点:在高带宽或复杂流量(如多用户、多任务)场景下,可能不够精细。
-
-
cake(Common Applications Kept Enhanced)
cake(常见应用不断增强)-
特点:cake 是 fq_codel 的升级版,集成了更多功能,比如更好的带宽整形、差分服务(DiffServ)支持和更强的抗缓冲区膨胀能力。
-
优点:适合现代高速网络(比如 100Mbps 以上甚至千兆网络),能更智能地处理复杂流量,提供更低的延迟和更高的公平性。
-
缺点:对硬件性能要求稍高,可能需要更仔细的参数调整。
-
常用脚本(Queue Setup Script)
-
piece_of_cake.qos
-
特点:最简单的 SQM 脚本,通常搭配 cake 或 fq_codel 使用,专注于基本的带宽整形和延迟控制。
-
推荐场景:适合单用户或简单家庭网络,配置几乎无需调整,填入上下行带宽即可。
-
建议:如果你是初学者或网络需求不复杂,这是最佳起点。
-
-
layer_cake.qos
-
特点:更高级的脚本,支持基于 DSCP(差分服务代码点)的流量优先级分类,能区分不同类型的流量(如游戏、视频、下载等)。
-
推荐场景:适合多用户或混合流量场景,比如家里有人玩游戏、看视频,同时还有大流量下载(BT/PT)。
-
建议:如果你需要更细致的控制(比如优先保障游戏延迟),可以选择这个脚本,但需要了解 DSCP 配置。
-
如何选择“最好”的规则?
以下是根据常见场景的推荐:
-
简单家庭网络(带宽 < 100Mbps,无复杂需求):
-
队列算法:fq_codel
-
脚本:piece_of_cake.qos
-
理由:配置简单,性能要求低,能有效控制延迟,适合大多数普通用户。
-
-
高速网络(带宽 ≥ 100Mbps,或千兆网络):
-
队列算法:cake
-
脚本:piece_of_cake.qos
-
理由:cake 在高带宽下表现更优,能充分利用带宽,同时保持低延迟。
-
-
多用户或复杂流量(游戏 + 下载 + 流媒体):
-
队列算法:cake
-
脚本:layer_cake.qos
-
理由:支持流量分类,能优先保障对延迟敏感的应用(如游戏、语音),同时限制大流量任务(如 BT 下载)的干扰。
-
配置建议
-
带宽设置:
-
在 SQM 的“Basic Settings”中,下载和上传速度建议设置为实际带宽的 80%-95%。比如,100Mbps 下行就填 80,000-95,000 kbps,30Mbps 上行填 24,000-28,500 kbps。
-
为什么要打折?避免超出实际带宽导致 SQM 失效。
-
-
接口选择:
- 通常选择 WAN 接口(比如 eth0 或 pppoe-wan,视你的网络类型而定)。
-
链路层适配(Link Layer Adaptation):
-
如果是 PPPoE 接入,选择“Ethernet with overhead”并设置适当的开销值(通常 8-44 字节,具体取决于 ISP)。
-
如果是光纤直连,可以保持默认。
-
我的推荐
综合来看,cake + piece_of_cake.qos 是目前最通用的选择。它简单易用,同时在大多数场景下表现优异。如果你的软路由硬件性能较好(比如 x86 架构或高性能 ARM 设备),直接用这个组合几乎不会出错。若有特殊需求(如游戏优先),再考虑切换到 layer_cake.qos 并调整 DSCP 规则。
你可以用这个配置试试,然后根据实际体验(比如用 ping 测试延迟或跑速测试)微调。
PPPoE 接入,链路层适配值是多少?
在 PPPoE 接入的情况下,设置 SQM(Smart Queue Management)的链路层适配(Link Layer Adaptation)时,需要考虑 PPPoE 协议和底层以太网的额外开销(overhead)。这个开销值取决于具体的协议封装和网络环境,但通常有一个推荐范围。
PPPoE 的开销计算
PPPoE(Point-to-Point Protocol over Ethernet)会引入以下开销:
-
PPPoE 头部:8 字节
-
以太网帧头部:14 字节(包括目标 MAC、源 MAC 和类型字段)
-
以太网 FCS(帧校验序列):4 字节
-
可能的额外封装:如 VLAN 标记(4 字节),视 ISP 是否使用而定
基本总开销 = 8(PPPoE) + 14(以太网头部) + 4(FCS) = 26 字节。
如果你的 ISP 使用了 VLAN(常见于某些光纤到户或企业网络),则需要再加上 4 字节,总计 30 字节。
OpenWrt 中的设置
在 OpenWrt 的 SQM 配置界面(LuCI -> Network -> SQM QoS),链路层适配选项通常是:
-
选择“Ethernet with overhead”(以太网带开销)。
-
开销值(Overhead):填入具体的字节数。
推荐值
-
标准 PPPoE(无 VLAN):26 字节
-
带 VLAN 的 PPPoE:30 字节
-
保守估计(兼容大多数情况):34-44 字节(一些 ISP 可能有额外的封装或对齐要求)
如何确定准确值?
-
联系 ISP:询问是否有 VLAN 或其他封装,最准确。
-
抓包验证:
-
使用工具(如 Wireshark)在路由器上抓包,查看实际数据包的头部大小。
-
检查是否有 VLAN Tag(以太网类型字段为 0x8100)。
-
-
试错法:
-
从 26 字节开始测试,观察 SQM 是否有效(用 ping 测试延迟或跑速测试)。
-
如果延迟或丢包异常,逐步增加到 30 或 34,直到效果最佳。
-
我的建议
如果你不确定 ISP 是否使用了 VLAN,从 30 字节开始是一个合理的选择。这是 PPPoE 接入中最常见的值,能覆盖大多数标准场景。如果你的网络稳定且延迟表现良好,可以保持这个值;如果仍有问题,可以尝试调整到 34 或 38。
配置示例:
-
链路层适配:Ethernet with overhead
链路层适配:以太网带开销 -
开销值:30
-
然后根据你的上下行带宽设置队列算法(比如 cake)和带宽值。