Three different limits
A transfer can be constrained by the congestion window, the receiver's advertised window or the application's willingness to produce bytes. These are different mechanisms. A low delivery rate from a connection that is application-limited does not establish a network capacity limit. First confirm that the application is actively requesting and sending data throughout the observation window.
Read a sequence, not a screenshot
Collect socket statistics repeatedly while the same transfer runs. Record RTT, retransmission counters, byte counters and send-queue size together. A rising queue can indicate that the application is producing data faster than the transport drains it, but it still needs context from the remote receiver and the duration of the observation. Compare counter changes rather than totals accumulated before the test.
A useful calculation
If a connection receives 24,000,000 additional bytes over 10 seconds, its observed average is 19.2 decimal Mbps. That value describes this interval. It is different from a momentary transport estimate, and it may include application pauses. Report both the interval and the connection you measured so that another person can reproduce the result.
At the terminal
ss -tin state established
# Average Mbps = byte_delta * 8 / seconds / 1000000