项目地址: https://github.com/HyNetworks/tcp-brutal
拥塞控制细节
https://hysteria.network/zh/docs/advanced/Full-Server-Config/#_8
(本节中的信息是 Hysteria 的内部实现细节,可能会在不同版本之间发生变化)
目前,Hysteria 有三种拥塞控制模式:
BBR: 由 Google 为 TCP 开发,我们对其进行了修改以移植到 QUIC。BBR 是标准的拥塞控制算法,包括慢启动和基于 RTT 变化的带宽估算。BBR 能独立运行,不需要用户手动设置带宽。
Reno: 这是 quic-go 提供的默认拥塞控制器。比 BBR 更简单,也通常更保守。可以通过 congestion.type: reno 启用。
Brutal: 这是 Hysteria 自有的拥塞控制算法。与 BBR 不同,Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度。相反,如果无法达到预定的目标速率,反而会根据计算的丢包率提高发送速率来进行补偿。Brutal 只在你知道(并正确设置了)当前网络的最大速度时才能正常运行。其擅长在拥塞的网络中抢占带宽,因此得名。
Brutal 如果带宽设置低于实际最大值也能正常运行;相当于限速。重要的是不要将其设置得高于实际最大值,否则会因为补偿机制导致连接速度慢、不稳定,且浪费流量。
拥塞控制算法控制的是数据的发送。从客户端的视角,如果没有设置 down 带宽值(但提供了 up),Hysteria 服务器会使用其本地配置的非 Brutal 控制器向客户端发送数据,而客户端会使用 Brutal 向服务器上传数据,反之亦然。客户端可以提供两者,这样两个方向都会使用 Brutal,或者都不提供,这样两个方向都会使用已配置的非 Brutal 控制器(默认是 BBR)。
如上所述,一个特殊情况是当服务器启用了 ignoreClientBandwidth 选项,此时双方都会忽略带宽提示,改用各自本地配置的非 Brutal 控制器。
目前,服务端的带宽限制限制的只是 Brutal 最大速率。因此在使用 BBR 或 Reno 的情况下并不会生效。