Enhancing TCP's Loss Recovery Using Limited Transmit
Extracted elements (15)
Empirical data from a busy web server showed 56% of retransmissions were RTO-based and only 4% could have been avoided with SACK alone. The technique in this document could have avoided approximately 25% of the RTO-based retransmissions in that dataset, motivating its adoption.
Limited Transmit follows the 'conservation of packets' principle: each of the first two duplicate ACKs indicates a segment has left the network, so transmitting new segments does not deviate from TCP's congestion control principles and the sender has no reason to assume the current congestion state is inaccurate.
Limited Transmit is designed to enable Fast Retransmit (which requires three duplicate ACKs) in situations where the congestion window is too small to generate three duplicate ACKs naturally. With cwnd of three segments and one drop, only two duplicate ACKs arrive, forcing an RTO without this mechanism.
Sending new data (rather than retransmitting old data) on the first two duplicate ACKs is more robust to packet reordering, since retransmitting old packets on early duplicate ACKs could cause spurious retransmissions when the original packet was merely reordered.
Without Limited Transmit, when an ACK for new data arrives following packet reordering, a burst of segments is sent. Limited Transmit clocks data out via incoming ACKs, reducing burstiness in the presence of reordering.
ECN may independently benefit connections with small congestion window sizes by signaling congestion without dropping segments, potentially reducing the need for Fast Retransmits and Retransmission Timeouts. ECN and Limited Transmit address similar failure modes.
Limited Transmit can be used both in conjunction with and in the absence of the TCP selective acknowledgment (SACK) mechanism, making it applicable to all TCP connections.
The Rate-Halving congestion control algorithm uses a related form of limited transmit, transmitting a data segment on every second duplicate ACK. Unlike Limited Transmit, Rate-Halving decouples the decision of what to send from when to send.
The congestion window (cwnd) MUST NOT be changed when new segments are transmitted under the Limited Transmit algorithm.
When a TCP sender has previously unsent data queued for transmission, it SHOULD use the Limited Transmit algorithm and transmit new data upon the arrival of the first two consecutive duplicate ACKs, provided the receiver's advertised window allows it and outstanding data would remain ≤ cwnd + 2 segments.
When using SACK, the data sender MUST NOT send new segments in response to duplicate ACKs that contain no new SACK information, to prevent a misbehaving receiver from triggering inappropriate data transmission.
The Limited Transmit algorithm: upon receiving the first two consecutive duplicate ACKs, the sender transmits one new previously unsent data segment per duplicate ACK, subject to the receiver's advertised window and the constraint that outstanding data does not exceed cwnd + 2 segments.
False duplicate ACKs — either from network duplication or misbehaving receivers — could subvert end-to-end congestion control by triggering additional transmissions under Limited Transmit. However, the sender is constrained to exceed cwnd by less than the duplicate ACK threshold (three segments), limiting the damage.
For non-SACK connections, a sender could track the number of packets transmitted and allow at most one acknowledgment per packet for triggering new transmissions, but this requires additional state and complexity and is not considered necessary given the limited damage potential.
When SACK is in use, the TCP sender has strong protection against false duplicate ACKs because SACK duplicate ACKs report sequence numbers of newly received data, allowing the sender to verify the ACK acknowledges data it actually sent before transmitting new segments.