Shadowrocket Hysteria2 科普:基于 QUIC 为什么快、哪些网络环境适合用

从 UDP 与 QUIC 的握手方式讲起,解释 Hysteria2 在高丢包、高延迟链路上的表现原理,以及在 Shadowrocket 里手填该协议时需要核对的字段。

本文速览

本文面向已经从自己的服务商取得 Hysteria2 参数、希望理解连接表现并完成手动配置的 Shadowrocket 用户。重点包括 QUIC 的握手与丢包恢复机制、适用网络判断、Add Server 字段核对、Global Routing 配合方式,以及连接失败时的排查顺序。

Hysteria2、UDP 与 QUIC 的关系

Shadowrocket(小火箭)里的 Hysteria2 是一种基于 QUIC 的代理协议。这里的 UDP 是承载 QUIC 数据报的传输基础,QUIC 则在用户空间处理连接建立、加密、拥塞控制、数据确认和丢包恢复。不能把 Hysteria2 简化成“直接发送 UDP”:应用数据会先进入 Hysteria2 会话,再由 QUIC 组织为经过加密和编号的数据包。

传统的 TCP 加密连接通常要依次完成 TCP 握手和 TLS 握手。以往返时延 RTT 为 180 ms 的链路为例,每增加一次必须等待对端回复的往返,首批有效数据就会多等待约 180 ms。QUIC 把传输层连接建立与 TLS 1.3 安全协商结合起来,新连接通常能用较少的往返进入可传输状态。实际耗时仍会受域名解析、服务端响应、无线网络调度和链路拥塞影响,并不是固定减少某个毫秒数。

QUIC 还支持多个逻辑 stream。某个数据包丢失后,需要该数据包内容的 stream 会等待重传,但其他没有依赖该丢失数据的 stream 可以继续推进。这减少了不同 stream 之间的队头阻塞。对于封装在单一 stream 中的连续数据,缺失字节仍然需要恢复,因此“使用 QUIC”并不等于完全不受丢包影响。

高延迟、高丢包时为什么可能更快

速度差异主要来自拥塞控制和丢包恢复,而不是协议名称本身。链路出现丢包时,发送端需要判断哪些数据未到达、安排重传,并调整继续发送的节奏。RTT 越高,错误判断或等待确认的代价越大;连续丢包越多,可用吞吐越容易下降。QUIC 在用户空间维护确认范围与丢包计时器,可以较快演进实现策略,但最终吞吐仍受服务器出口、设备性能和接入网络限制。

Hysteria2 配置可能包含上行与下行带宽值。这些值不是测速结果,也不是越大越好。部分实现会根据是否提供带宽参数选择相应的拥塞控制行为。若服务商给出明确数值,应按原值填写;若服务商要求留空,就不应根据宽带套餐标称值自行补写。把 50 Mbps 的实际链路填写成 500 Mbps,可能造成发送过快、队列膨胀、延迟升高或更多丢包。

可以用一个计算场景理解带宽时延积:100 Mbps 链路在 200 ms RTT 下,管道中可同时容纳的数据约为 2.5 MB,即 100,000,000 bit/s × 0.2 s ÷ 8。发送窗口明显小于这个数值时,链路可能没有被填满;发送过快而中间队列容量不足时,又会出现排队和丢包。Hysteria2 的表现取决于拥塞控制能否接近当前链路的实际容量。

按原参数填写

推荐

Address、Port、Password、SNI、带宽与验证选项全部以用户已有配置为准,不自行推测缺失值。

适合:首次添加与日常使用

保留可选项为空

服务商明确说明使用默认拥塞控制或未要求带宽值时,保留对应可选字段为空。

适合:配置说明明确标注默认值

自行提高带宽值

填写超过实际接入能力的数值可能加重排队,不能据此判断协议本身是否正常。

适合:仅限可控网络中的参数验证

结论:先确认链路瓶颈再调整参数

若 Connectivity Test 延迟稳定但大流量传输波动,先核对服务商给出的带宽字段和 UDP 可达性;不要只根据一次速度结果反复抬高 Up、Down 或相近含义的字段。

哪些网络环境适合使用 Hysteria2

Hysteria2 常用于 RTT 较高、存在随机丢包或网络切换较频繁的链路。例如移动网络信号变化、跨地区传输以及拥塞时段,都可能让传统可靠传输承受较长的恢复等待。QUIC 能针对丢失的数据包执行恢复,也能在网络条件允许时保持多个 stream 的推进,因此这类环境更容易观察到连接建立和持续传输上的差异。

低延迟、低丢包并且路径稳定时,各协议的瓶颈可能都落在服务器出口或接入带宽上,此时 Hysteria2 不一定产生明显速度差异。若当前网络限制 UDP,QUIC 握手可能直接超时,而使用其他传输方式的已有配置仍可连接。协议选择应以可达性和参数匹配为先,不能只看理论吞吐。

观察现象 可能含义 建议动作
RTT 150–250 ms,偶发 1%–3% 丢包 长距离或无线链路存在波动 按原参数测试 Hysteria2,并记录多次 Connectivity Test 结果
延迟平稳但传输时明显升高 队列拥塞或带宽值设置偏高 恢复服务商给出的 Up、Down 数值,避免按标称带宽放大
始终显示 timeout UDP 不可达、Port 错误或握手字段不匹配 更换已知允许 UDP 的网络复测,再核对 Port、SNI 与 Password
连接后只有部分域名异常 可能是规则或 DNS 路径问题 检查 Global Routing,并用 Proxy 姿态做短时对照

结论:timeout 先查 UDP 可达性

同一份参数在一个网络可连接、换到另一个网络持续 timeout,优先检查当前网络对 UDP 与目标 Port 的可达性;若所有网络都失败,再回到字段核对。

在 Shadowrocket 手动填写 Hysteria2

开始前应准备服务商提供的完整参数。最少通常包含服务器 Address、Port 和认证信息,TLS 场景还可能包含 SNI。部分配置会额外指定 ALPN、混淆密码、上行或下行带宽,以及证书验证相关选项。字段名称会随界面呈现和配置方式有所差异,但参数含义不能互换。

以 Port 443 为例,它只是常见端口示例,不代表所有 Hysteria2 服务都使用 443。Address 应填写主机名或 IP,Port 必须与服务端监听值一致;Password 是 Hysteria2 认证值,不是 Shadowrocket 的购买凭据;SNI 用于 TLS 握手中的服务器名称校验,通常应保持服务商给出的域名。

  1. 核对应用

    通过 App Store 获取 Shadowrocket,核对开发者 Shadow Launch Technology Limited 与应用 ID 932747118。该应用为一次性买断,系统要求以 App Store 页面标注为准。

  2. 进入添加页

    在 Home 点右上角「+」,打开 Add Server,并在 Type 中选择 Hysteria2。

  3. 填写连接字段

    依次填写 Address、Port、Password 与 SNI;ALPN、Obfuscation、Up、Down 等可选项只在已有配置明确提供时填写。

  4. 检查验证项

    证书验证相关开关应遵循已有配置。正常证书场景保持验证,不能为了绕过字段错误而随意改变验证姿态。

  5. 保存并选中

    保存后回到 Home,点选新建的服务器条目,确认选中标记出现在该条目前。

  6. 执行连接测试

    打开连接开关并完成系统 VPN 配置授权,再运行 Connectivity Test;若失败,记录 timeout、TLS 或 authentication 等提示类别。

若服务商交付的是单条 Hysteria2 URI,可以先核对 URI 的结构,再使用 Shadowrocket 支持的导入入口。下面只展示假值语法,不能用于实际连接。URI 中的认证值、主机名、Port、查询参数和名称片段分别承担不同作用,包含特殊字符的 Password 还需要正确进行 URL 编码。

hysteria2://[email protected]:443/?sni=edge.example.com&insecure=0#HY2-demo

用户已有订阅时,可在 Home 右上角「+」进入 Add Server,将 Type 设为 Subscribe,再填写订阅 URL。示例假值为 https://example.com/sub?token=xxxx。保存后回到 Home 下拉更新。订阅更新会覆盖或重建由该订阅管理的条目,因此需要修改参数时,应先确认服务商是否要求在订阅源中变更,而不是长期手改自动生成的服务器记录。

Global Routing 与 On Demand 怎样配合

Hysteria2 决定客户端与服务器之间怎样建立传输会话,Global Routing 决定哪些请求交给该会话。两者属于不同层级。Home 中选中 Hysteria2 条目后,如果 Global Routing 处于 Direct,流量仍按直连姿态处理;看到服务器已选中并不能单独证明请求已经通过该连接。

Config 姿态按当前配置文件中的规则匹配流量。常见规则关键字包括 DOMAIN-SUFFIX、GEOIP、IP-CIDR 和 FINAL。规则通常从上到下匹配,先命中的规则先决定动作,FINAL 用于承接此前没有匹配的请求。Proxy 可作为排查规则问题的临时对照,Direct 则可用于确认异常是否与代理路径有关,Scene 依据场景条件切换预设行为。

DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
FINAL,PROXY

On Demand 用于按条件触发连接。操作路径为 Settings → On Demand → Enable,随后按自己的网络条件设置触发规则。首次排查 Hysteria2 时应先保持流程简单:手动选中服务器、手动打开连接并完成 Connectivity Test;确认基础连接正常后,再启用 On Demand。否则,触发条件、系统 VPN 状态与协议参数会同时影响结果,难以定位故障来源。

规则语法示例中的 example.com192.0.2.0/24 都是说明用途。实际 Config 应使用用户自己维护或已有配置提供的规则。修改前保留原配置,修改后分别测试命中 Proxy、Direct 与 FINAL 的请求,避免只检查一个网页就判断整套规则有效。

连接超时、握手失败与速度波动的排查顺序

排查应从最容易确认的条件开始。先确认设备时间为自动设置,再核对 Address 和 Port,随后检查 Password、SNI、ALPN 与混淆参数,最后才调整带宽和路由。设备时间偏差可能影响 TLS 证书有效期判断;Address 或 Port 错误通常表现为持续 timeout;Password 不一致可能表现为认证失败;SNI 与证书名称不匹配则可能触发 TLS 错误。

Connectivity Test 适合确认当前条目的延迟与基本连通性,但单次结果不等同于持续吞吐。可以连续测试三到五次,记录是否全部 timeout、是否只有第一次较慢,以及延迟是否从 80 ms 跳到 600 ms。若测试可通过而实际请求异常,再检查 Global Routing、Config 规则和 DNS 处理,而不是继续修改 Hysteria2 的 Password 或 Port。

一直显示 timeout 怎么办?

先确认 Home 中选中的确是刚添加的 Hysteria2 条目,再核对 Address 与 Port。随后换一个已知允许 UDP 的网络复测;仅在某个网络失败时,优先判断该网络的 UDP 可达性。

提示 TLS 错误要改什么?

检查设备时间是否自动设置,并逐字核对 SNI。SNI 通常是域名而不是备注名称;证书验证姿态应遵循已有配置,不能用改变验证选项替代正确填写。

能连接但速度忽快忽慢?

连续执行三到五次 Connectivity Test,观察延迟波动;再核对 Up、Down 或相近带宽字段是否被自行放大。恢复服务商给出的原值后重新测试,避免同时修改多个字段。

服务器选中了却没有生效?

检查 Home 的连接开关和 Global Routing。若当前为 Direct,请短时切到 Proxy 做对照;Proxy 正常而 Config 异常时,回到 Config 检查规则顺序与 FINAL 动作。

订阅更新后手填值消失?

由 Subscribe 管理的条目可能在更新时按订阅内容重建。先在 Home 确认条目来源,并向自己的服务商核对订阅中的 Hysteria2 参数,不要依赖会被更新覆盖的临时修改。

若需要区分协议问题与规则问题,可以先把 Global Routing 临时设为 Proxy,选择目标 Hysteria2 条目并运行 Connectivity Test。基础连接正常后再恢复 Config,逐条检查 DOMAIN-SUFFIX、GEOIP、IP-CIDR 和 FINAL。排查完成后应恢复原有分流姿态,避免长期停留在用于测试的设置。

Shadowrocket 主要用于 iPhone 与 iPad,Mac、Apple TV 和 Apple Vision 的可用情况可查看 App Store 产品页兼容性栏,系统要求以 App Store 页面标注为准。不同设备的网络切换与系统 VPN 行为可能不同,但 Hysteria2 字段核对原则一致:地址与端口先确认,认证与 TLS 参数逐项匹配,最后再处理拥塞控制和规则分流。

下载 Shadowrocket