划重点
Hysteria2 是一种跑在 UDP 上的代理协议,基于 QUIC,也就是 HTTP/3 用的那套传输方式。它快的原因主要在拥塞控制:普通 TCP 遇到丢包会主动降速,Hysteria2 的 Brutal 算法按你设定的带宽持续发送,并补发丢掉的部分,所以在拥挤、丢包多的跨境线路上更能保住速度。它的弱点也在 UDP:一旦运营商对 UDP 限速或干脆不放行,hy2 节点会明显变慢甚至连不上。
这一讲换一条路走,专讲不走 TCP、改走 UDP 的 Hysteria2 协议。它是一种跑在 UDP 上的代理协议,底层用 QUIC,也就是 HTTP/3 网页用的那套传输方式。和 Trojan、VLESS 这些走 TCP 的协议相比,它的根本不同在于丢包时的态度:常见的 TCP 算法一见丢包就主动降速,Hysteria2 按设定的速率接着发,丢了就补。在晚高峰拥挤、丢包多的跨境线路上,这让它常常跑得比 TCP 类节点快。代价同样来自 UDP:网络对 UDP 不友好时,它会比 TCP 节点先出状况。
订阅里常把它简写成 hy2。下面讲它从哪来、和 TCP 类协议差在哪几处、晚高峰为什么快、遇到运营商限 UDP 会怎样、节点链接长什么样,最后说普通用户该怎么用它。
hysteria2 是什么:从 Hysteria 到第二版
Hysteria 是一个开源项目,第一代在 2020 年前后出现,2023 年推出了重新设计的第二代,也就是 Hysteria2。两代协议互不兼容,今天订阅里见到的绝大多数是第二代。
它借的壳是 QUIC。QUIC 在 2021 年成为正式标准,把 TLS 1.3 的加密直接做进传输层,跑在 UDP 上;大网站的 HTTP/3 用的就是它。所以从路上看,一条 Hysteria2 连接和一次 HTTP/3 网页访问很接近,都是加了密的 UDP 包来来回回。
第二代做了几件事:
- 改用标准的 QUIC 和 HTTP/3 外观。 节点对外看起来是一台普通的 HTTP/3 网站服务器。没通过认证的访问者,节点可以把它当成普通访客,回一个正常的网页。
- 把认证藏进 HTTP/3 请求里。 客户端连上后先发一个带密码的请求,对上了才转入代理。
- 保留 Brutal 拥塞控制。 这是 Hysteria 一系的招牌,后面单独讲。
- 原生转发 UDP。 游戏、语音这类本身走 UDP 的流量,可以原样经节点转发,不必先塞进 TCP 再拆出来。
- 可选的混淆。 开启名为 Salamander 的混淆后,数据包不再长得像 QUIC,而是一串无规律的字节,用于 QUIC 本身被针对的网络。
搜 hysteria 时会混进英文单词、着色器之类的结果,和这个协议无关。
跑在 UDP 上和跑在 TCP 上,差在这几处
| 比较的地方 | Trojan、VLESS 这类 TCP 协议 | Hysteria2 |
|---|---|---|
| 传输层 | TCP | UDP,上面跑 QUIC |
| 遇到丢包 | 主动降速,等线路缓过来 | 按设定速率继续发,丢多少补多少 |
| 外观 | 像在访问 HTTPS 网站 | 像在访问 HTTP/3 网站,开混淆后像随机数据 |
| 网络对 UDP 管控时 | 不受影响 | 变慢、断流,或者根本连不上 |
| 手机上的耗电 | 相对省 | QUIC 在程序内部处理,同样速度下往往更费电 |
丢包那一行是它快的来源,最后两行是它的短处。它更像一条快车道,平时跑得快,但对路况更挑剔。
划重点:Hysteria2 的长处和麻烦出自同一处。丢包时不让速,所以晚高峰快;网络一限 UDP,它也最先出状况。
晚高峰为什么快:Brutal 不肯让速
晚上八九点,跨境线路挤满了人,路由器的缓冲区来不及处理就丢包。常见的 TCP 拥塞控制把丢包当成「路太堵」的信号,立刻把发送速度砍下一截,过一会儿再慢慢试探着加回来。所有用户都这样礼让,线路才不至于瘫掉,可落到每个人头上就是网页转圈、视频降清晰度。
Brutal 的思路很直接:你告诉它带宽是多少,它就按这个速率发,丢包了不降速,而是按丢包比例多发一些把缺口补上。按这个算法,线路丢一成的包,它就多发一成出头去补;丢两成,就多发四分之一。在丢包率很高的线路上,它能维持的速度往往比 TCP 高出一大截。
这也是它被叫作「激进」的原因:它占用的线路资源比礼让的 TCP 多。对机场来说,几个人同时开足速度就可能挤占一台服务器的带宽,要额外做限速和分组;这也是并非每家机场都提供 hy2 节点的原因之一。另外两个常见原因是:专线、中转线路要同时转发 UDP,配置和成本都要另算;用户的网络千差万别,在限 UDP 的网络里体验反而不如 TCP 节点。
没有设定带宽时,Hysteria2 会改用另一种叫 BBR 的拥塞控制,表现更温和,介于两者之间。
运营商限 UDP 时,hy2 会是什么表现
UDP 是 hy2 的根基,也是它的软肋。国内网络里,跨境、持续大流量的 UDP 有时会被限速,个别网络环境干脆只放行 DNS 这类少量 UDP。常见的表现有三种:
- 一开始很快,过一阵掉速。 流量持续一段时间后被识别、限速,速度一下子掉下去一大截。
- 隔一会儿断一次。 连接被切断,客户端重连后恢复,周而复始,看视频时尤其明显。
- 完全连不上。 测延迟显示超时,而同地区的 TCP 节点一切正常。
针对前两种,Hysteria2 支持端口跳跃:服务端同时开着一段端口,客户端每隔一段时间换一个端口发数据,单个端口上的流量就没那么扎眼。节点支持的话,订阅里的端口一项会写成一个范围。端口跳跃也有限度:要是管控针对的是整个 UDP 流量,而不是某一个端口,换多少端口都一样。第三种情况,协议层面没什么办法,换回 TCP 类节点就是。
判断是不是 UDP 的问题,省事的办法是对比:同一时间、同一地区,hy2 节点慢而 TCP 节点正常,问题多半在你所在网络对 UDP 的处理,而不在机场。
hy2 节点在订阅里长什么样
通用格式的订阅里,Hysteria2 节点以 hysteria2:// 开头,也有写成简写 hy2:// 的,两者等价。示意如下,值都是占位:
hysteria2://你的密码@hk01.example.com:443?sni=hk01.example.com&obfs=salamander&obfs-password=混淆密码#香港01
带 obfs 那两项,说明开了 Salamander 混淆;没有就是标准外观。端口写成 20000-50000 这样的范围,说明支持端口跳跃。有的节点还带 insecure=1,意思是不校验证书,和 Trojan 那一讲讲的跳过证书检查是一回事。第一代 Hysteria 的节点以 hysteria:// 开头,和第二代不通用。
Clash 系的配置里,它的类型一行写 type: hysteria2,端口跳跃写在 ports 一项里,有的还会给出 up、down 两项带宽。客户端的节点列表里,节点名旁一般标着 Hysteria2 或 Hy2。mihomo、sing-box 内核都支持它,内核太旧的客户端读不出来。同样基于 QUIC 的还有 TUIC,思路相近,客户端支持面窄一些。
普通人怎么用 hy2:当快车道,也留好退路
协议是机场定的,你能做的是在订阅给了 hy2 节点时用好它:
- 晚上 TCP 节点慢,先试 hy2。 丢包是晚高峰慢的主因之一,hy2 往往能把速度拉回来一些。
- hy2 不稳,就回到 TCP 节点。 尤其是在公司、学校、酒店的网络里,或者手机切到移动数据后,UDP 的待遇差别很大。
- 延迟数字看不出 UDP 的待遇。 客户端测的延迟只说明一次请求快不快,说明不了持续下载一阵后会不会被限速,hy2 节点要实际用上十几分钟才看得出来。
- 电脑上的 UDP 流量要靠 TUN 才进得来。 游戏、语音这类程序发出的 UDP,系统代理接不住,想让它们也走 hy2 节点,客户端得开 TUN 模式。
- 手机上留意耗电和发热。 长时间看视频时,hy2 节点通常比 TCP 节点更费电,不赶速度的时候换回 TCP 节点就好。
- 别只押在它身上。 一份订阅里 TCP 节点和 hy2 节点都有,才进退自如。
划重点:hy2 当快车道用,TCP 节点留作退路;拿同一地区的两种节点比一比,就看得出慢在你那边的 UDP,还是慢在机场。
34 家里官网写明提供 Hysteria2 的是哪几家,到各家协议目录里一查便知,那里把 34 家按协议分了组。名词表里的 Hysteria2 词条也有一句话的概括。
晚高峰稳不稳,线路比协议更要紧。一翻云官网写的协议是 VLESS,走 TCP;跨境那一段用 IEPL 专线,不和公网挤出口,受晚高峰拥堵的影响小一些。轻享版季付 ¥55、半年 ¥98,都是每月 150GB;订阅要在付款后向客服领取。微风同样是 VLESS,订阅登录后自己在面板复制,破风 Breaking ¥57/月给 500GB。走 TCP 的协议之间有什么差别,可以接着读 VLESS 是什么。
文中提到的机场
课后自查
示范课的一翻云没写 hy2,晚高峰靠什么撑住?
靠线路。一翻云官网写的协议是 VLESS,出境段走 IEPL 专线,走的是运营商租给机场的私有电路,不和普通公网流量挤国际出口,晚上用的人多时速度起伏一般更小。
hy2 节点白天很快,晚上却时断时续,是节点坏了吗?
不一定。晚高峰时运营商对跨境 UDP 的管控往往更紧,表现就是速度忽高忽低或者隔一会儿断一次。先换同地区走 TCP 的节点对比一下:TCP 节点稳、hy2 不稳,多半是你这边网络对 UDP 不友好,晚上改用 TCP 节点更省心。
Hysteria 和 Hysteria2 的节点能混用吗?
不能。两代协议互不兼容,订阅里以 hysteria 开头的是第一代,以 hysteria2 或 hy2 开头的是第二代。客户端一般两种都认,但一个节点是哪一代,由服务端决定,改链接开头并不能让它变成另一代。