Measure effective network throughput after accounting for overhead and loss.
TCP throughput is fundamentally limited by the sender's window size (how much unacknowledged data can be in flight) divided by the round-trip time, since the sender must wait for acknowledgments before the window slides forward. This relationship — throughput = window size / RTT — is known as the bandwidth-delay product relationship, and it explains why high-latency links need larger TCP windows (window scaling) to fully utilize available bandwidth.
Maximum throughput
throughput = window_size / RTT
TCP can only have one window's worth of data 'in flight' unacknowledged at a time. If the RTT is high, the sender spends more time waiting for acknowledgments, so even a fast link is bottlenecked unless the window is large enough to keep the pipe full.
Increase the TCP window size (via window scaling, RFC 1323) so more data can be in flight before an acknowledgment is required, or use multiple parallel TCP connections to work around a single connection's window limit.
It's the same formula rearranged: bandwidth × delay = the amount of data that can be 'in the pipe' at any moment. To saturate a given bandwidth over a given RTT, your window size needs to be at least that bandwidth-delay product.
No — this calculates the theoretical maximum assuming no loss. Actual throughput on a lossy link is typically much lower because TCP congestion control shrinks the window in response to lost packets.