Tcp – How to a TCP Flow with smaller congestion window have higher throughput

congestionload balancingqostcp

It might be a stupid question, but as far as I understood the CNWD dictates the rate of a TCP flow.

I created a "load-balancer" that split single packets on two paths of 10Mb/s. This introduces some reordering which prevents the growth of the congestion window.
When I measure the CWND for a single path (through captcp) it is around 600KB and the final goodput (with iperf3) is ~9Mb/s, if I do it with the combined paths the CNWD is around 200KB, but the final goodput is ~17Mb/s!

So how comes that the goodput is higher even if the cwnd is limiting only 200kb outstanding in the network?

Best Answer

With TCP throughput, there are a lot of factors which come into play. For instance, when the window is larger on a single link, congestion along the link could be a bigger factor. Because of congestion on the single link, IP packets could be dropped, causing TCP to resend segments, thus slowing down the transfer. There is also, a QoS function called RED (Random Early Detection) which randomly drops IP packets in order to prevent queues from becoming full. This forces TCP to slow down and resend segments.

A window is just the amount of traffic which can be sent before needing to wait for an ACK. If it doesn't take long for the ACK to be sent back (how fast the receiver takes to send the ACK, and how long the latency is between the two hosts), your transfer may not be slowed much.

The real way to dictate the speed of traffic flows is to use QoS to establish queues and bandwidths for traffic based on criteria you determine (e.g. DSCP markings).

Related Topic