Hi there, We find a buggy behavior when using Linux TCP Reno and HTCP in low bandwidth or highly congested network environments.
In a simple word, their undo functions may mistakenly double the cwnd, leading to a more aggressive behavior in a highly congested scenario. The detailed reason: The current reno undo function assumes cwnd halving (and thus doubles the cwnd), but it doesn't consider a corner case condition that ssthresh is at least 2. e.g., cwnd ssth An initial state: 2 5 A spurious loss: 1 2 Undo: 4 5 Here the cwnd after undo is two times as that before undo. Attached is a simple script to reproduce it. A similar reason for HTCP, so we recommend to store the cwnd on loss in .ssthresh implementation and restore it again in .undo_cwnd for TCP Reno and HTCP implementations. Thanks
undo-2-1-4.pkt
Description: Binary data