什么是缓冲膨胀(Bufferbloat)?为什么只有游戏和视频通话会卡

测速显示一切正常,游戏和视频通话却依然卡顿——这里介绍真正的原因和解决办法。

缓冲膨胀的典型症状

测速结果显示的速度和你订购的套餐完全一致,但只要同一条线路上的其他设备在进行大文件上传或下载,你的游戏延迟就会飙升,视频通话的语音和画面也会开始卡顿。

根源在于过大的缓冲区

调制解调器、路由器和运营商设备内部都有一个"缓冲区",用来临时存放瞬间涌入、来不及立刻发送的数据。如果这个缓冲区被设置得比实际需要的大很多,一旦线路被占满,数据就会在缓冲区里排队等候,延迟(latency)可能从正常的几毫秒飙升到几百甚至几千毫秒。

速度(吞吐量)和延迟是两个不同的指标

测速测量的是最大吞吐量(Mbps),而决定游戏和通话实际体验的则是延迟(ms),这是另一个独立的指标。缓冲膨胀的特点在于,它几乎不影响最大吞吐量,却会在线路负载较高时让延迟大幅恶化。

如何检测缓冲膨胀

普通的测速工具无法发现这个问题,需要使用专门测量"负载延迟(loaded latency)"的工具,对比平时的延迟和上传下载同时进行时的延迟差异。有些专门的缓冲膨胀测试工具还会用A到F这样的等级来展示两者的差距。

解决办法:SQM(智能队列管理)

开启现代路由器或OpenWrt等开源固件自带的SQM(Smart Queue Management,智能队列管理)功能,或者CAKE、fq_codel等队列管理算法,并把带宽上限设置得比线路实际速度略低一些,路由器就能自行调整流量的发送顺序,防止缓冲区被过度填满。

如何在自己的路由器上开启SQM

在路由器管理后台的"网络"或"高级设置"标签页下,寻找名为QoS、SQM或"智能队列管理"的菜单。找到后,把上传和下载的带宽上限设置为实测速度的85%到95%左右,而不是套餐宣传的理论速度——留出这一小段余量,正是让路由器真正能够管理队列的关键。如果当前路由器的固件根本没有这个菜单,换成OpenWrt等开源固件,或者直接更换一台内置现代队列算法的新路由器,会是更直接的解决办法。

延迟测试和游戏主机匹配问题也可能相关

如果想单独确认原始延迟、把它和缓冲膨胀区分开,可以对附近一台知名度较高的服务器做一次基础的ping测试,得到一个平时的延迟基准值,再和负载状态下的延迟结果做对比。就游戏主机而言,过于严格的NAT类型也可能导致类似的症状——比如很难加入对局或连接其他玩家,即便这和缓冲膨胀完全无关。如果改善了队列管理之后匹配问题依然存在,下一步合理的做法就是检查主机的NAT类型设置。

常见问题

换成更快的网络套餐能解决这个问题吗?

提高吞吐量可以降低线路被占满的频率,能在一定程度上缓解症状,但无法消除根本原因——也就是过大的缓冲区。像SQM这样的队列管理设置才是更直接的解决办法。

不换路由器也能解决吗?

部分较新的路由器出厂时已默认启用了现代队列管理算法,但许多老旧路由器或运营商提供的调制解调器根本不支持SQM功能。这种情况下,换一台支持SQM的路由器,或刷入支持该功能的开源固件,是比较现实的解决方案。