[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANdGJ5Qp1MoGfeSyAnEqYeSeEyoiH8e1j_Ut3F4PnLRBnqNNZg@mail.gmail.com>
Date: Tue, 18 Jul 2017 16:36:08 -0500
From: Wei Sun <unlcsewsun@...il.com>
To: netdev@...r.kernel.org
Subject: A buggy behavior for Linux TCP Reno and HTCP
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
Download attachment "undo-2-1-4.pkt" of type "application/octet-stream" (2102 bytes)
Powered by blists - more mailing lists