为什么下载时 Ping 会升高,以及如何检查
下载游戏或更新时,对局中的 Ping 会跳高几十甚至几百毫秒。原因通常是路由器或运营商处的排队。本文介绍如何比较空闲、下载和上传时的延迟,以及根据结果该怎么做。
简短回答
当线路被下载占满时,数据包会在路由器或运营商处排队。游戏的小数据包要等下载的大数据块先通过,于是 Ping 升高,尽管服务器并没有变远。这种现象叫作缓冲区膨胀(bufferbloat)。IETF 的建议明确指出,过多的排队会带来额外延迟,队列管理的目标是让队列保持很短(RFC 7567)。检查方法很简单:分别测量空闲、下载和上传时的延迟,然后对比。
没有队列:Ping 数据包直接通过。
入方向排队:服务器的回复排在下载数据后面。
出方向排队:Ping 排在云端上传或直播推流后面。
在 NyxBoost 中检查
在已发布的 0.30.3 版本中,这项功能叫“负载下的延迟”:“网络”→“连接检查”选项卡→“检查延迟”按钮。它是免费的,不会更改电脑上的任何设置。
- 暂停正在下载的程序:Steam、种子下载、云同步。否则“空闲”阶段其实并不空闲。
- 点击“检查延迟”。NyxBoost 会先提示:约 21 秒,最多 250 MB 流量;使用按流量计费的连接时请留意。
- 等待三个阶段完成:空闲 5 秒,三路并发下载 8 秒,三路并发上传 8 秒。整个过程中,NyxBoost 会向 Cloudflare 测试节点发送简短的 HTTPS 请求,并测量回复所需的时间。
Cloudflare 自己的测速也是同样的原理:在传输过程中发送空请求(原理介绍,英文)。
结果的含义
三个方块:空闲时、下载时、上传时。每个方块显示以毫秒计的中位数、高百分位(回复足够多时为第 95 百分位),以及“比空闲时 +N 毫秒”。当中位数至少增加 30 毫秒、或高百分位至少增加 60 毫秒时,NyxBoost 判定为跳动。
- “负载下延迟几乎不增加”。线路足以应付。如果仍然卡顿,请检查游戏服务器或 Wi-Fi 干扰,这正是“持续 ping”的用途。
- “下载时跳动”。入方向排队。常见原因是 Steam 下载、种子、Windows 更新以及其他设备上的高清视频。
- “上传时跳动”。出方向排队:OneDrive、Google Drive、Dropbox、直播推流、发送大文件。上行比下行慢得多的套餐更容易被占满。
- “下载和上传时都有跳动”。两个方向都在排队,需要在路由器上解决(见下文)。
- “即使空闲时延迟也会跳动”。与下载无关:线路本身或 Wi-Fi 不稳定。
延迟测量的是到 Cloudflare 测试节点的时间,而不是到游戏服务器,因此具体数字会不同。但队列位于你自己的连接上,负载下增加的延迟会影响到任何服务器。
Wi-Fi 还是网线
在同一时段分别用 Wi-Fi 和以太网线各检查一次。哪个适配器在工作、链路速度是多少,可以在“网络”→“连接”的“网络适配器”部分看到。
- 用网线很平稳,用 Wi-Fi 即使空闲也跳动:问题在无线信号。Microsoft 建议让设备靠近路由器并更换无线信道;改用 5 GHz 频段通常也有帮助。
- 用网线时负载下同样跳动:队列在路由器或运营商处,与 Wi-Fi 无关。
同一选项卡上的“检查连接”会显示到路由器本身的延迟。如果仅到路由器就已经有几十毫秒,NyxBoost 会提示这通常是 Wi-Fi 的问题。
Windows 的后台下载
Windows 通过传递优化下载更新、Microsoft Store 应用和 Defender 定义。后台下载可以限速:“设置”→“Windows 更新”→“高级选项”→“传递优化”,可按每秒兆位或按测得带宽的百分比设置。该限制只作用于自动下载,不影响你手动启动的下载(Microsoft 说明)。
也可以把连接设为按流量计费:这样 Windows 更新只下载优先更新,Microsoft Store 的下载也可能暂停。但这也会改变其他程序的行为,因此限制带宽是更精确的方法。
路由器:SQM 与 QoS
如果队列在路由器上,最可靠的办法是队列管理:SQM(通常基于 FQ-CoDel),或把 QoS 限速设置为略低于套餐速率。FQ-CoDel 会把不同的数据流放进各自的队列,小数据包就不必排在大下载后面(RFC 8290)。菜单名称取决于固件;如果路由器归运营商所有,需要由所有者修改设置。
不要指望的做法:关闭 Nagle 算法和多媒体网络限流都无法消除路由器中的队列。
Premium 测速有何不同
“速度”选项卡中有“网速测试”(Premium)。它测量下载和上传速度,用一个数字显示“负载下的 PING”(两个方向中较差的那个),并给出延迟增加的评级,结果保存在“测量历史”中。免费的“负载下的延迟”不测速度,但会把延迟增加分别拆分到下载和上传,并给出下一步建议。要找出 Ping 升高的原因,免费检查就足够了。
下一步
先按现状检查一次,再在暂停下载和云同步后检查一次,最后用网线再检查一次。对比三次的“比空闲时 +N 毫秒”:哪一次增加的延迟消失了,原因就在哪里。如果网络平稳而游戏仍然卡顿,更可能是帧的问题,请看高 FPS 下卡顿的文章。