quic uses the bbr congestion control algorithm (#1010)

This commit is contained in:
chenxudong2020
2025-06-18 23:17:52 +08:00
committed by GitHub
parent 72673a9d52
commit 72d5ed908e
3 changed files with 18 additions and 8 deletions

View File

@@ -65,6 +65,8 @@ pin-project-lite = "0.2.13"
tachyonix = "0.3.0"
quinn = { version = "0.11.8", optional = true, features = ["ring"] }
quinn-proto = { version = "0.11.5", optional = true }
rustls = { version = "0.23.0", features = [
"ring",
], default-features = false, optional = true }
@@ -291,7 +293,7 @@ full = [
"socks5",
]
wireguard = ["dep:boringtun", "dep:ring"]
quic = ["dep:quinn", "dep:rustls", "dep:rcgen"]
quic = ["dep:quinn", "dep:rustls", "dep:rcgen", "dep:quinn-proto"]
mimalloc = ["dep:mimalloc"]
aes-gcm = ["dep:aes-gcm"]
tun = ["dep:tun"]

View File

@@ -9,6 +9,7 @@ use crate::tunnel::{
TunnelInfo,
};
use anyhow::Context;
use quinn::{
crypto::rustls::QuicClientConfig, ClientConfig, Connection, Endpoint, ServerConfig,
TransportConfig,
@@ -19,17 +20,21 @@ use super::{
insecure_tls::{get_insecure_tls_cert, get_insecure_tls_client_config},
IpVersion, Tunnel, TunnelConnector, TunnelError, TunnelListener,
};
use quinn_proto::congestion::BbrConfig;
pub fn configure_client() -> ClientConfig {
let mut tspt_cfg = TransportConfig::default();
tspt_cfg.keep_alive_interval(Some(Duration::from_secs(5)));
let client_crypto = QuicClientConfig::try_from(get_insecure_tls_client_config()).unwrap();
let mut client_config = ClientConfig::new(Arc::new(client_crypto));
let mut cfg = ClientConfig::new(Arc::new(
QuicClientConfig::try_from(get_insecure_tls_client_config()).unwrap(),
));
cfg.transport_config(Arc::new(tspt_cfg));
// // Create a new TransportConfig and set BBR
let mut transport_config = TransportConfig::default();
transport_config.congestion_controller_factory(Arc::new(BbrConfig::default()));
transport_config.keep_alive_interval(Some(Duration::from_secs(5)));
// Replace the default TransportConfig with the transport_config() method
client_config.transport_config(Arc::new(transport_config));
cfg
client_config
}
/// Constructs a QUIC endpoint configured to listen for incoming connections on a certain address
@@ -54,6 +59,8 @@ pub fn configure_server() -> Result<(ServerConfig, Vec<u8>), Box<dyn Error>> {
let transport_config = Arc::get_mut(&mut server_config.transport).unwrap();
transport_config.max_concurrent_uni_streams(10_u8.into());
transport_config.max_concurrent_bidi_streams(10_u8.into());
// Setting BBR congestion control
transport_config.congestion_controller_factory(Arc::new(BbrConfig::default()));
Ok((server_config, certs[0].to_vec()))
}