Model the AIMD sawtooth: how far cwnd drops on loss and how many round trips recovery takes.
Loss-based congestion control cuts the window by a fixed fraction, then rebuilds it linearly at one segment per round trip. The mean of that sawtooth is what the application actually experiences as throughput. Recovery time scales with RTT × window, so on a long path a single loss can cost seconds of reduced throughput — which is why CUBIC uses β = 0.7 instead of Reno's 0.5.
Congestion Window
On loss cwnd → cwnd × β; recovery takes (cwnd − cwnd × β) ÷ additive increase round trips.
Throughput from mean window
average throughput = mean cwnd × MSS × 8 ÷ RTT
On loss cwnd → cwnd × β; recovery takes (cwnd − cwnd × β) ÷ additive increase round trips. Loss-based congestion control cuts the window by a fixed fraction, then rebuilds it linearly at one segment per round trip. The mean of that sawtooth is what the application actually experiences as throughput.
Recovery time scales with RTT × window, so on a long path a single loss can cost seconds of reduced throughput — which is why CUBIC uses β = 0.7 instead of Reno's 0.5.
This calculator takes 5 inputs: Congestion window before loss, Maximum segment size, Round-trip time, Multiplicative decrease factor, Additive increase per RTT. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.