The Linux TCP implementation maintains a minimum window size of two in
order to avoid delayed acknowledgements by receivers that attempt to send one acknowledgement every two packets.
In order to allow the congestion window to go to one or below one, we add a new timer that runs on a
per-socket basis when the congestion window for the particular
socket is below two. When in this phase, the flow waits for
the appropriate number of RTTs before
sending two packets into the network. Thus, a
window of 1/16 means that the flow sends out two packets after waiting
for 32 smoothed round-trip times. We limit the minimum window size to in our prototype.
Our congestion detector signals congestion when more than
packets during an RTT encounter delays exceeding
.
We discuss the sensitivity to
in more detail in
Section 3. The
does not enter directly
into our analysis; our experimental studies in Section 4
indicate that the interference is relatively insensitive to the
parameter chosen. Since packets are sent in bursts, most
packets in a round observe similar round-trip times. In the future we
plan to study pacing packets across a round in order to obtain
better samples of prevailing round-trip delays.
Our prototype provides a simple API to designate a flow as a background flow through an option in the setsockopt system call. By default, flows are foreground flows.