diff --git a/Cargo.lock b/Cargo.lock index 351a603..e8e1669 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -745,7 +745,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "ostp" -version = "0.1.52" +version = "0.1.53" dependencies = [ "anyhow", "base64", @@ -762,7 +762,7 @@ dependencies = [ [[package]] name = "ostp-client" -version = "0.1.52" +version = "0.1.53" dependencies = [ "anyhow", "bytes", @@ -779,7 +779,7 @@ dependencies = [ [[package]] name = "ostp-core" -version = "0.1.52" +version = "0.1.53" dependencies = [ "anyhow", "async-trait", @@ -812,7 +812,7 @@ dependencies = [ [[package]] name = "ostp-server" -version = "0.1.52" +version = "0.1.53" dependencies = [ "anyhow", "bytes", @@ -826,7 +826,7 @@ dependencies = [ [[package]] name = "ostp-tun-helper" -version = "0.1.52" +version = "0.1.53" dependencies = [ "anyhow", "chrono", diff --git a/ostp-client/src/bridge.rs b/ostp-client/src/bridge.rs index dfe05bb..55f6852 100644 --- a/ostp-client/src/bridge.rs +++ b/ostp-client/src/bridge.rs @@ -432,8 +432,8 @@ impl Bridge { } } proxy_ev = proxy_rx.recv(), if self.running && sessions_opt.as_ref().map(|s| { - // §3 FIX: Apply backpressure. Suspend pulling from local proxy if ARQ buffers exceed 1024 unacked frames - s.iter().all(|ses| ses.machine.in_flight_count() < 1024) + // §3 FIX: Apply backpressure. Suspend pulling from local proxy if ARQ buffers exceed 512 unacked frames + s.iter().all(|ses| ses.machine.in_flight_count() < 512) }).unwrap_or(true) => { if let Some(ev) = proxy_ev { if let Some(sessions) = sessions_opt.as_mut() { @@ -602,11 +602,11 @@ impl Bridge { padding_strategy: PaddingStrategy::Profile(self.profile), obfuscation_key: obf_key, max_reorder: 262144, - max_reorder_buffer: 8192, + max_reorder_buffer: 32768, // Expanded to prevent dropping out-of-order packets during high-speed tests ack_delay_ms: 5, // Reduced from 20ms to 5ms for rapid ACK unblocking and throughput acceleration rto_ms: 100, // Reduced from 200ms to 100ms for faster recovery on packet loss max_retries: 8, - max_sent_history: 16384, + max_sent_history: 65536, // Greatly expanded to guarantee that oldest unacked packets are not prematurely popped and lost })?; let socket = UdpSocket::bind(&self.local_bind_addr) diff --git a/ostp-client/src/runner.rs b/ostp-client/src/runner.rs index f54b62a..0c86038 100644 --- a/ostp-client/src/runner.rs +++ b/ostp-client/src/runner.rs @@ -153,7 +153,7 @@ pub async fn run_client_core( println!("[ostp-client] WARNING: process exclusions are not supported in the current TUN implementation"); } - let (proxy_events_tx, proxy_events_rx) = mpsc::channel(10000); + let (proxy_events_tx, proxy_events_rx) = mpsc::channel(256); let (client_msgs_tx, client_msgs_rx) = mpsc::unbounded_channel(); let bridge = Bridge::new(&config, metrics)?; diff --git a/ostp-server/src/lib.rs b/ostp-server/src/lib.rs index 4cbb7e7..83a3403 100644 --- a/ostp-server/src/lib.rs +++ b/ostp-server/src/lib.rs @@ -126,11 +126,11 @@ pub async fn run_server( padding_strategy: PaddingStrategy::Adaptive, obfuscation_key: [0u8; 8], max_reorder: 262144, - max_reorder_buffer: 8192, + max_reorder_buffer: 32768, ack_delay_ms: 5, // Reduced to 5ms for drastically faster ACK loopback throughput rto_ms: 100, // Reduced to 100ms for aggressive, low-latency packet recovery max_retries: 8, - max_sent_history: 16384, + max_sent_history: 65536, }; let dispatcher = Dispatcher::new(protocol_config, shared_keys.clone());