Skip to content

Add TCP Cubic tcp friendliness heuristic

This fixes #1001 (closed), which is a missing heuristic in TCP Cubic model that affects its aggressiveness. Thanks to Koen De Schepper for spotting the discrepancy between ns-3 Cubic results and Linux Cubic testbed results. The heuristic is called TCP-friendliness in RFC 8312 and now Reno-friendliness in RFC 9438.

Basically, the change in behavior is that Cubic should grow its window according to the maximum of the Cubic response and the Reno response, to allow it to more quickly adapt to available bandwidth.

An example of the legacy behavior is shown below; this can be reproduced by the third test case in this MR. In this 30 second simulation, with a base RTT of 20ms and using a FqCoDel queue disc at the bottleneck, at time 15 seconds, the bottleneck link throughput is suddenly doubled. In practice, this can happen when a competing flow terminates. Without the Reno-friendly heuristic, it takes the Cubic some time to adjust its window and improve its throughput. The next two figures show the congestion window and throughput responses for this scenario. MR-figure-1 MR-figure-3

An example of the new behavior is shown below; this can be reproduced by the fourth test case in this MR. Note the more rapid response to available capacity.

MR-4.png

MR-5.png

Edited by Tom Henderson

Merge request reports