此條目已被提出存廢討論。請前往此處就该条目是否应该被删除进行讨论。? |
原作者 | tobyxdd 光圈互联网实验室(Aperture Internet Laboratory) |
---|---|
首次发布 | 0.0.1 (2020年4月23日[1] | )
当前版本 | 2.4.3 (2024年4月29日 | )
源代码库 | https://github.com/apernet/hysteria |
编程语言 | Go |
操作系统 | 类Unix系统 Microsoft Windows |
平台 | ARM、X86、X86-64、MIPS、MIPSLE、RISC-V64等 |
类型 | 代理服务器 突破网络审查 自由软件 应用软件 |
许可协议 | MIT |
网站 | https://hysteria.network/ |
Hysteria是由非营利组织光圈互联网实验室(Aperture Internet Laboratory)及其社区团队开发的反审查工具。Hysteria主要使用Go语言开发,采用MIT许可证且开放源代码。Hysteria能将代理流量伪装成HTTP/3, 并使用专门的拥塞控制算法确保传输速度。
与其它代理工具相似,Hysteria使用特定的中转服务器完成数据传输。Hysteria由服务端和客户端两部分组成。运行在中转服务器上的Hysteria服务端首先监听一个HTTP/3服务,等待客户端连接以及发送认证凭据。服务端仅会在凭据验证通过后启用代理功能。如果没有收到认证凭据或者收到了错误的凭据,服务端会将自己伪装成一个正常的HTTP/3服务器[2]。
在成功建立与中转服务器的连接之后,Hysteria客户端会在本机构建一个本地SOCKS5代理(或HTTP、透明代理等)。客户端通过该本地代理收集其它应用程序(如网页浏览器)的网络流量,并转发给服务端。
Hysteria服务端与客户端之间的所有通信皆通过HTTP/3内置的TLS进行加密,并利用HTTP/3内置的多路复用功能将多个连接的流量通过单个HTTP/3连接发送。
此章節尚無參考來源,內容或許無法查證。 |
由于将代理流量封装在标准HTTP/3协议的隧道中传输,所以Hysteria的流量较难以被中间人主动探测和封锁。此外,Hysteria服务端还可将自己伪装成一个同时提供明文HTTP、HTTPS以及HTTP/3服务的正常网站,具有一定的隐蔽性。
此章節尚無參考來源,內容或許無法查證。 |
Hysteria内置了一个名为brutal(直译为「野蛮」)的拥塞控制算法。与传统的拥塞控制算法不同,该算法不会从延迟和丢包估算可用带宽,而采用由用户手动设置的带宽来发包。因此在较差的网络环境中仍然能保持较高的传输速度。
Hysteria在特殊情况下可能会持续占用较多的CPU资源[3],这可能违反某些VPS提供商用户协议中的「合理使用」政策,从而造成用于运行Hysteria服务端的VPS被服务商停用或者删除。
Hysteria传输所使用的HTTP/3基于UDP协议。在中国大陆,基于UDP的协议可能会被互联网服务提供商基于QoS的原因降低传输速度。
在一部分国家(如伊朗), UDP流量受到严格的限制[4],导致Hysteria在这些国家中难以正常使用。
2023年1月,一部分HostLoc论坛用户曾报告Hysteria协议被GFW针对性封锁[5]。
TCP Brutal是Hysteria的「brutal」拥塞控制算法的TCP移植版本[6]。它被实现成一个Linux内核模块,并在GPLv2协议下开放源代码。在载入该内核模块之后,应用程序(例如修改过的翻墙软件)可以设置指定TCP连接的带宽参数并启用加速。TCP Brutal亦提供DKMS支持,以实现在内核更新时自动重新编译。
尽管Hysteria并不是通过发送多倍的数据包来提高速度[7],但仍然有一些人了解到Hysteria 2 的拥塞控制算法会根据丢包率补偿发包,因此而产生对于可能产生的额外的网络流量开销对用户造成的潜在损失的担心。
2023年11月,在TCP Brutal发布之时,早期TCP规范起草人之一,David P. Reed曾对其发表过严厉的批评。
“ |
互联网之所以能够正常运作,其核心在于通过合作共赢的容量共享,来实现最小化的延迟。Dave Taht 以及其他一些人已尽力去实现这一目标。 然而,有一些混蛋宣传类似于这样[注 1]的修改方案(大多数是针对 Linux 的),故意通过这种垃圾手段来降低他人的体验。这甚至对他们自己也没有多大帮助——除非他们的目的是让他们自己的其他流量也都经历极差的延迟。在我看来,这十分愚蠢。 |
” |
——David P. Reed |
Hysteria的作者 tobyxdd 曾写过一篇文章,对这些批评作出回应[8]。
If authentication fails, the server MUST either act like a standard web server that does not understand the request
Hysteria 不会在任何情况下主动对一份数据进行多次发送,只有在检测到丢包时才会对丢失的部分进行重传
|