Shadowrocket 速度慢分层排查:节点、线路、协议、本地网络逐层定位

速度慢不一定是客户端问题。本文按本地网络、当前节点、线路时段、协议与传输参数四层依次排查,说明 Ping 测试与 Log 日志怎么看,帮助把问题定位到具体一层。

本文速览

本文适合已经在 Shadowrocket(小火箭)中添加自有节点、连接能够建立但网页加载或文件传输明显变慢的用户。排查时先建立本地网络基线,再依次检查节点延迟、线路时段、Global Routing、协议参数和 Log;每次只改变一个条件,最终可以判断瓶颈位于设备网络、远端线路、规则配置还是传输参数。

先固定测试条件,避免测速结果互相干扰

速度排查最容易出现的问题,是同时更换 Wi‑Fi、节点、协议和测速目标。即使结果变快,也无法知道究竟是哪一项起作用。正确方法是固定设备、网络、测试目标和测试时段,每一轮只改变一个变量,并至少重复三次。

先记录未启用 Shadowrocket 连接时的本地网络表现,包括网页首开时间、下载速率和基础延迟。随后打开 Shadowrocket,保持同一个 Wi‑Fi、同一个测试目标,再记录一组结果。若本地基线本身已经明显波动,应先处理路由器、信号或接入网络,而不是立即修改客户端配置。

  1. 记录本地基线

    关闭 Shadowrocket 的连接开关,在同一 Wi‑Fi 下连续测试三次。记录延迟、下载速率和网页首次打开时间,不要只保留最高值。

  2. 固定一个节点

    回到 Home,选中用户已有服务中的一个节点。测试期间不要刷新订阅或自动切换节点,以免测试对象发生变化。

  3. 使用 Config

    在 Home → Global Routing 选择 Config,让请求按照当前配置文件中的规则处理。排查过程中同时记录配置名称,防止把规则变化误判为线路变化。

  4. 重复三轮测试

    打开连接后,对同一目标连续测试三轮,每轮间隔约 30 秒。若结果分别为 18 Mbps、76 Mbps、24 Mbps,应优先判断为波动,而不是稳定限速。

  5. 一次改一项

    更换节点后重新测试;确认节点差异后,再比较协议或传输参数。不要在同一轮中同时修改 DNS、MTU、Global Routing 和节点。

第一层:检查本地网络与设备接入

请求从应用发出后,需要先经过设备当前网络,再进入系统建立的 VPN 隧道。Wi‑Fi 信号弱、路由器繁忙、接入网络切换或局域网丢包,都会在流量抵达远端节点之前造成延迟。此时更换协议通常不能解决根因。

应用发起请求设备当前网络系统 VPN 隧道规则匹配远端节点目标站点

在 iPhone 或 iPad 上,可以先靠近无线路由器测试,再切换到另一个已知稳定的 Wi‑Fi 复测。也可以在条件允许时比较蜂窝网络,但两组测试必须使用相同节点和相同目标。若某个 Wi‑Fi 下所有节点都慢,而另一网络恢复正常,问题更可能位于本地接入层。

还要留意“刚连接很快,数分钟后逐渐变慢”的现象。它可能来自无线信号干扰、路由器负载变化或设备在不同接入点之间切换。可先保持屏幕开启完成一轮短测试,再进行五至十分钟持续传输,比较短连接与长连接的差异。

第二层:用 Ping 与分时测试定位节点和线路

在 Home 的节点列表中执行可用的延迟或 Ping 测试时,不要只看一次结果。单次 60 ms 并不能证明线路稳定;连续结果为 58 ms、62 ms、61 ms,通常比 35 ms、240 ms、90 ms 更可预测。后者虽然最低值更好,但抖动明显,网页和视频仍可能出现停顿。

Ping 还可能受到远端响应策略影响,因此它只能作为入口指标。若延迟测试正常而实际访问慢,应继续做真实传输测试,并查看 Log 中连接建立、超时和重试的时间分布。远端没有响应 Ping,也不等于对应服务一定不可用。

线路时段同样重要。可以在早间、晚间和出现问题的固定时段,对同一节点执行相同测试。如果只有晚间吞吐下降,而本地基线和其他节点正常,现象更符合特定线路或远端资源在该时段拥塞。

报错: timeout

原因与解法:连接在限定时间内没有完成,可能是本地丢包、远端节点繁忙或中间线路不稳定。先在同一网络测试另一个自有节点,再换一个网络复测,以两次对照确定范围。

报错: connection refused

原因与解法:目标地址可以到达,但指定端口拒绝连接。核对节点地址、端口和协议是否与用户自己的服务商资料一致;端口 443 只是常见示例,并不表示所有配置都应改成 443。

报错: Network is unreachable

原因与解法:当前网络没有可用路径,或网络在 Wi‑Fi 与蜂窝连接切换时短暂中断。等待系统网络稳定后重新连接,再检查该错误是否持续出现。

第三层:核对 Global Routing、规则与 DNS

节点本身正常,但部分网站慢或只有某些应用慢时,应检查 Global Routing。Proxy 表示请求统一使用当前代理策略,Direct 表示直接连接,Config 按配置文件规则处理,Scene 则按已设置的场景选择行为。排查日常配置时,通常先确认当前是否处于预期的 Config,而不是误停留在 Direct 或 Proxy。

Config 模式下,一条请求会从上到下匹配规则。DOMAIN-SUFFIX 按域名后缀匹配,GEOIP 按目标 IP 的地理数据库结果匹配,IP-CIDR 按地址段匹配,FINAL 处理前面规则均未命中的请求。顺序错误可能让本应 Direct 的请求进入代理,也可能让需要代理的请求提前命中 Direct。

DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

以上语法仅用于解释匹配顺序,不代表适合所有配置。第一条把指定示例域名交给 PROXY,第二条让局域网地址 Direct,第三条根据 GEOIP 结果 Direct,最后由 FINAL 接住其余请求。实际策略名必须与当前 Config 中存在的策略一致。

如果现象是“Ping 正常但网页长时间空白”,还应检查 DNS。域名解析发生在建立目标连接之前;解析超时、返回不可达地址或不同网络下缓存结果不一致,都可能表现为首屏慢。不要同时替换多项 DNS 设置,先恢复到已知可用的配置,再逐项比较。

第四层:比较协议与传输参数

Shadowrocket 支持 Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 等协议。协议名称本身不能直接决定速度;真实表现还取决于服务端配置、加密方式、传输层、线路丢包、CPU 负载和参数是否匹配。只有在同一网络、同一路径条件接近时,协议对照才有意义。

修改前应保存用户自己的服务商给出的原始参数。地址、端口、密码、UUID、公钥、SNI、Transport、TLS 与路径需要成组匹配。只复制地址和端口、遗漏其余字段,可能出现可以建立连接但不断重试、握手失败或传输效率异常的情况。

MTU 不是越小越好。过大时,部分路径可能发生分片或丢弃;过小时,每个数据包承载的有效数据减少,额外开销上升。测试 MTU 时应使用同一节点和同一传输任务,并在每轮修改后重新连接。若服务商明确指定数值,应优先保持指定值。

On Demand 主要用于按网络条件自动建立连接,不是测速加速开关。若排查期间出现连接自动断开或切换,可进入 Settings → On Demand 暂时检查现有规则是否按 SSID、域名或网络状态触发。记录原设置后再调整,测试结束后按实际使用需求恢复。

核对原始参数固定节点线路修改单项参数重新建立连接记录三次结果

第五层:从 Log 判断慢在连接的哪个阶段

Log 的价值不是显示一个笼统的“快”或“慢”,而是把请求经过的阶段展开。进入 Settings → Log 后,在清空已有记录的条件下复现一次问题,再按时间查看 DNS、连接、TLS、规则命中和重试信息。只保留一次复现过程,通常比在大量历史记录中搜索更容易定位。

如果同一个域名在短时间内反复解析,随后才建立连接,应检查 DNS。若 TCP 建立后长时间停在 TLS handshake,重点核对系统时间、SNI、TLS 参数和远端响应。若连接迅速建立但传输过程中连续出现 timeout 或 retry,则更接近丢包、拥塞或远端负载问题。

报错: TLS handshake failed

原因与解法:TLS 协商未完成。核对节点中的 SNI、Host、TLS 开关与用户自己的服务资料,确认设备时间自动同步,再重新连接测试。

报错: DNS lookup failed

原因与解法:域名解析没有得到可用结果。先比较其他域名是否正常,再检查 Settings 中的 DNS 配置及当前网络能否访问所设解析服务。

报错: connection reset by peer

原因与解法:远端主动重置了已建立的连接,可能与参数不匹配、远端策略或线路中断有关。保持本地网络不变,使用另一个自有节点对照,再向自己的服务商核对原节点状态。

阅读 Log 时应关注时间关系,而不是只截取最后一行。例如 DNS 用时 20 ms、连接建立用时 70 ms,但 TLS 阶段等待数秒,瓶颈就不在域名解析。相反,如果连接之前已反复出现 DNS timeout,更换节点未必能解决问题。

  1. 清理旧记录

    打开 Settings → Log,先清理与本轮测试无关的历史内容。

  2. 复现一次问题

    返回目标应用或网页,只执行一次能够稳定触发变慢的操作。

  3. 找到首条请求

    按域名、目标地址或时间定位请求起点,确认它命中了哪条规则与哪个策略。

  4. 查看等待阶段

    比较 DNS、连接建立、TLS 与数据传输之间的时间间隔,找出最长停顿。

  5. 做单变量复测

    只更换网络、节点或一个参数,再复现一次。若对应错误消失,即可缩小故障范围。

常见速度问题的直接判断

完成以上分层后,可以用现象组合快速归类。归类的目的不是立即给出统一参数,而是决定下一步应该修改哪里。用户已有服务的具体节点状态、端口和传输配置,应以自己的服务商资料为准。

为什么 Ping 很低,下载还是慢?

Ping 测量的是响应延迟,不是持续吞吐。固定同一节点执行至少三次真实下载测试,同时观察 Log 是否出现 timeout、retry 或连接重置。若延迟稳定但吞吐持续低,应检查线路容量、远端负载和传输参数。

为什么只有晚上明显变慢?

先在早晚分别记录本地基线和同一节点结果。若本地网络正常,而该节点只在固定时段下降,再对照另一个自有节点;只有特定节点下降时,更接近线路时段性拥塞。

为什么网页慢,但应用里的小请求正常?

网页通常包含多个域名、TLS 连接和较大的静态资源。检查 Config 中各域名的规则命中情况,再从 Settings → Log 查看 DNS 与 TLS 阶段是否反复等待。

切换 Proxy 后变快,Config 就一定有问题吗?

这说明两种姿态产生了不同路径,但还不能直接确定具体规则错误。回到 Config,查看目标域名首先命中的 DOMAIN-SUFFIX、GEOIP、IP-CIDR 或 FINAL,并核对其策略是否符合预期。

需要把所有协议参数都调一遍吗?

不需要。先保留服务资料中的原始值,只在已经确认本地网络、节点状态和规则都正常后,针对 Log 中的现象修改一项参数。每次修改后重新连接并记录结果。

App Store 下载