V2ray-core: QUIC with BBR congestion control

Created on 14 May 2019  ·  20Comments  ·  Source: v2ray/v2ray-core

There is a (what seems to be) very experimental PR that implements BBR congestion control for quic-go: https://github.com/lucas-clemente/quic-go/pull/1888

It might be worth looking into it and see how it improves v2ray's performance.

Stale

All 20 comments

Worth trying

我有点看不懂了,拥塞控制是 TCP 协议才会实现的事情吧,为什么可以把拥塞控制的算法用在基于 UDP 的 QUIC 协议上?😂

我有点看不懂了,拥塞控制是 TCP 协议才会实现的事情吧,为什么可以把拥塞控制的算法用在基于 UDP 的 QUIC 协议上?😂

因为QUIC跟BBR都是谷歌家的,所以...

我有点看不懂了,拥塞控制是 TCP 协议才会实现的事情吧,为什么可以把拥塞控制的算法用在基于 UDP 的 QUIC 协议上?😂

并不是,本身QUIC支持调用TCP的拥塞算法(或者说QUIC本身就是想在UDP实现一个用户态的类TCP),更何况BBR和QUIC都是同一家的产品。

确实QUIC没有mKCP快(看YouTube),也许加入BBR可以有性能提升

试了一下,效果显著,性能可以超越同配置的tcp bbr。

quic就是超慢的 很怕丢包.
所以这个看起来是非常必要的.

刚试了latest https://github.com/fbzhong/quic-go
编译不通过
会报错:

_build/src/v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/handshake/crypto_setup.go:120:5: cannot use &cryptoSetup literal (type *cryptoSetup) as type qtls.RecordLayer in assignment:
        *cryptoSetup does not implement qtls.RecordLayer (wrong type for SetReadKey method)
                have SetReadKey(*qtls.CipherSuite, []byte)
                want SetReadKey(qtls.EncryptionLevel, *qtls.CipherSuite, []byte)
_build/src/v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/handshake/crypto_setup.go:220:35: cannot use cs (type *cryptoSetup) as type qtls.RecordLayer in argument to tlsConfigToQtlsConfig:
        *cryptoSetup does not implement qtls.RecordLayer (wrong type for SetReadKey method)
                have SetReadKey(*qtls.CipherSuite, []byte)
                want SetReadKey(qtls.EncryptionLevel, *qtls.CipherSuite, []byte)

然后去latest github.com/lucas-clemente/quic-go/internal/handshake/crypto_setup.go 检查了一下,发现,latest的代码中,SetReadKey的参数都是错的。
qtls里面RecordLayer Interface里的SetReadKey多了一个参数qtls.EncryptionLevel,然而,在crypto_setup.go里面的实现,并没有这个参数。

所以,完全不知道上游开发者,提交上去的代码是什么样的东西。

用的0.11.2版本编译,bbr补丁+internal/handshake/qtls.go补丁
在v2ray v4.19.1上稳定使用中。

希望v2ray能支持一下

用的0.11.2版本编译,bbr补丁+internal/handshake/qtls.go补丁
在v2ray v4.19.1上稳定使用中。

求个教程

用的0.11.2版本编译,bbr补丁+internal/handshake/qtls.go补丁
在v2ray v4.19.1上稳定使用中。

或者希望能够提供下最新版编译好的v2ray-linux-64,拜托了大神。

代码在这:https://github.com/Windendless/v2ray-core

启动v2ray之前,记得添加环境变量以启用quic的bbr:
GODEBUG="bbr=1,tls13=1"

GODEBUG="bbr=1,tls13=1"

多谢!

@Windendless 这个如果只有服务器改了效果怎么样?方便的话可以Merge到这边吗?

效果肯定非凡啊 bbr不是单边的么!!!!

v2ray 下quic开bbr到底怎么玩?能科普一下小白么?

我有点看不懂了,拥塞控制是 TCP 协议才会实现的事情吧,为什么可以把拥塞控制的算法用在基于 UDP 的 QUIC 协议上?😂

Google 的 bbr repository 里面就有官方的 quic 版本 bbr 实现。
这篇文章也说明了 quic 版本的 bbr 实现与 tcp bbr 之间的关系及其先导性。

代码在这:https://github.com/Windendless/v2ray-core

@Windendless 请问为什么我没法成功编译您现在的QUICwithBBR分支呢,用的官方的脚本编译的。

https://github.com/v2ray/v2ray-core/blob/master/release/user-package.sh

感觉这个对quic的提升应该比较大,可惜quic-go现在似乎短时间内都不会搞这个方向。

This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days

Was this page helpful?
0 / 5 - 0 ratings

Related issues

sunsan05 picture sunsan05  ·  3Comments

shuangyuxiaoyi picture shuangyuxiaoyi  ·  4Comments

ahdung picture ahdung  ·  3Comments

ghost picture ghost  ·  4Comments

supersonic600 picture supersonic600  ·  3Comments