ZH

缓冲膨胀详解:为什么网速快却依然卡顿

最后更新:2026年8月12日

千兆连接一旦有人开始下载就变成幻灯片式卡顿,这并不矛盾。这是家庭网络中最常见的问题,它有个名字——缓冲膨胀(bufferbloat)——而且和你付费的带宽多少完全无关。

缓冲膨胀到底是什么

每一台路由器、调制解调器,以及运营商网络中的每一跳,都会保留一个小小的数据包等待队列。这个队列的存在是有道理的:网络链路并非完美平滑,队列能吸收这些波动。问题出在这个队列比实际需要的大得多——它是为跑分测试中的最大吞吐量设计的,不是为一次家庭视频通话设计的。

TCP,几乎所有你在网上做的事情背后的协议,只能通过观察网络饱和的迹象来判断该发送多快。传统上这个迹象就是丢包:队列满了,某个包被丢弃,发送方随即减速。队列过大会延迟这个信号,而不是发出它。数据包不断堆积而不是被丢弃,TCP因为没人叫它停下而继续加速,于是每一个数据包——包括你通话的、你游戏的、你DNS查询的——现在都要排在一个可能长达数秒的队列后面。连接并不慢,它只是在排一条很长很长的队。

为什么只在有负载时才出现

空闲连接的队列是空的,所以延迟看起来很棒——15、20、30毫秒,正是到服务器的距离应该花费的时间。在后台开始一次大下载,同样的连接可能跳到500毫秒、1000毫秒,有时更多,因为现在你的包前面排着满满一队别人的包。这就是为什么在普通的测速中缓冲膨胀特别容易被忽略:一个简单的下载/上传数字从来不会让链路承受真实使用所产生的那种持续双向负载,所以队列根本不会真正被填满。

真正重要的数字既不是空闲延迟,也不是负载延迟本身——而是两者之间的差值。一个空闲40毫秒、负载60毫秒(差值20毫秒)的连接基本没问题。一个空闲15毫秒、负载900毫秒(差值885毫秒)的连接则严重拥堵,哪怕它一分钟前的空闲数字看起来完美无缺。

30秒内看出问题

运行一个能同时测量空闲和负载延迟的测速工具——本站的Speed Test正是为此设计的。在下载和上传阶段运行时观察负载延迟数字。如果它保持在空闲数字的20-30毫秒以内,说明很干净。如果它飙升到几百毫秒,那就是缓冲膨胀,现在你有了一个数字,可以在采取任何解决方案前后进行比较。

真正的解决办法

真正的解决办法是在控制瓶颈链路的设备上使用更智能的队列——几乎总是你的路由器,偶尔是运营商的调制解调器或光猫(如果它自己做队列管理的话)。现代队列管理算法,fq_codel及其继任者cake,会主动管理队列深度,而不是任其无限增长:它们只保留刚好足够吸收突发流量的缓冲,仅此而已,并且给相互竞争的数据流(你的通话、你的下载、你的游戏)公平的轮次,而不是先到先得。大多数运行OpenWrt的路由器,以及越来越多的原厂固件,都把这个功能标为“智能队列管理”或“SQM”——打开它通常是整台路由器上性价比最高的一个设置。

还有第二个不太明显但同样重要的因素:SQM只有在知道你链路的真实上限时才能起作用。把带宽限制设得略低于你的实际线路速率——支持SQM的路由器通常会直接要求这个值,比如每个方向实测速度的90-95%——能把队列从运营商无法控制的设备转移到你自己的路由器上,让智能队列管理真正发挥作用。没有这个限制,路径中最大的队列可能就在一个你既无法控制也无法配置的设备里,路由器端的任何调整都够不着它。

什么解决不了问题

更快的套餐解决不了问题。这正是本文要打破的迷思:从300 Mbps升级到千兆并不会缩小一个过大的队列,只会让这个队列更快地被填满。很多千兆连接比很多100 Mbps连接更拥堵,因为缓冲膨胀是队列管理问题,不是带宽问题——你可以自己验证:在一条快速连接上关闭SQM,运行负载延迟测试,差值照样存在。花钱买更快的速度来解决缓冲膨胀,就像拓宽马路来修一个配时错误的红绿灯:根本没有触及真正的原因,而且在某些路由器上,更快的套餐反而会让队列的数学问题变得更糟而不是更好,因为路由器现在每秒需要缓冲更多的数据,而SQM(如果开启的话)根本还没机会去管理它。

还有一个藏身之处:你自己路由器的队列,而不只是运营商的

值得说清楚这个过大的队列通常藏在哪里,因为“网络中的某个地方”是无法采取行动的。大多数时候是路由器本身,或者紧随其后的调制解调器——最靠近真正瓶颈的设备,而对大多数家庭连接来说,瓶颈是WAN链路,不是WiFi。一台完全没有队列管理的路由器会心安理得地缓冲几兆字节它根本没希望在合理时间内发送出去的数据,因为没有任何东西告诉它别这样做。这也是为什么Mesh系统或中继器往往无法单独解决缓冲膨胀:这些设备位于网络的WiFi一侧,处在真正瓶颈的下游,一个干净的WiFi跳段架在拥堵的WAN队列前面,整体连接依然是拥堵的。

为什么这是Sygnal Score中影响最大的因素

Sygnal Score对六项测量进行加权,而缓冲膨胀——正是按上面描述的方式测量,即负载延迟与空闲延迟之差——占总分1000分中的250分,比任何其他单项都多。差值在20毫秒以内满分,达到400毫秒及以上零分,中间线性递减。这个权重是刻意设计的:一条下载和上传数字都很惊人、但一旦真正被使用——通话、游戏、任何实时的东西——就立刻崩溃的连接,并不是一条好连接,而一个只看吞吐量的分数还是会把它评为好连接。缓冲膨胀正是快而不实的线路被拆穿的地方。

本页面为机器翻译,可能包含错误。 阅读英文原文