Classic Tor sends every byte of a stream down one circuit: three relays, fixed for the life of the connection. If any one of those relays is slow or congested, the whole transfer crawls. Conflux, specified in Tor Proposal 329 ("Overcoming Tor's Bottlenecks with Traffic Splitting"), attacks that bottleneck by building a second circuit to the same endpoint and dynamically splitting cells across both legs.
The two legs are joined with a small handshake (the RELAY_CONFLUX_LINK / RELAY_CONFLUX_LINKED cells), and a sequence-number scheme plus RELAY_CONFLUX_SWITCH cells let the receiver reassemble the interleaved data in order. Crucially, Conflux is built on top of Tor's congestion-control work: each leg measures its own round-trip time and congestion window, and the scheduler uses that live information to decide which leg to feed next.
- MinRTT scheduler (latency-optimised): always sends on the leg with the lowest current RTT, only switching when that leg's latency rises above the other. Best for interactive use, such as SSH or a chat backend.
- LowRTT scheduler (throughput-optimised): keeps both legs busy, sending on whichever has the lowest RTT and an unblocked local connection, so a large download or stream can use the combined capacity of two paths.
Endpoints can even signal a desired user experience (the DESIRED_UX field exposes options like MIN_LATENCY and HIGH_THROUGHPUT), so a service can hint whether it cares more about snappiness or raw bandwidth.