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.