TCP performs poorly on paths that reorder packets significantly, where it misinterprets out-of-order delivery as packet loss. The sender responds with a fast retransmit though no actual loss has occurred. These repeated false fast retransmits keep the sender's window small, and severely degrade the throughput it attains. Persistent reordering occasionally occurs on present-day networks. Moreover, TCP's requirement of nearly in-order delivery complicates the design of such beneficial systems as DiffServ, multi-path routing, and parallel packet switches. Toward relaxing this constraint on Internet architecture, we present enhancements to TCP that improve the protocol's robustness to reordered and delayed packets. We extend the sender to detect and recover from false fast retransmits using DSACK information, and to avoid false fast retransmits proactively, by adaptively varying dupthresh. Our algorithm adaptively balances increasing dupthresh, to avoid false fast retransmits, and limiting the growth of dupthresh, to avoid unnecessary timeouts. Finally, we demonstrate that delayed packets negatively impact the accuracy of TCP's RTO estimator, and present enhancements to the estimator that ensure it is sufficiently conservative, without using timestamps or additional TCP header bits. Our simulations show that these enhancements significantly improve TCP's performance over paths that reorder or delay packets.
Zhang, M., Karp, B., Floyd, S., and Peterson, L., RR-TCP: A Reordering-Robust TCP with DSACK, in Proceedings of the Eleventh IEEE International Conference on Networking Protocols (ICNP 2003), Atlanta, GA, November, 2003. .ps.gz .pdf
An extended version of the above paper featuring a more detailed evaluation
of RR-TCP and enhancements to TCP's RTO estimator is available in the below:
Zhang, M., Karp, B., Floyd, S., and Peterson, L., RR-TCP: A
Reordering-Robust TCP with DSACK, ICSI Technical Report
TR-02-006, Berkeley, CA, July 2002.
.ps.gz .pdf
RR-TCP Simulation Code
We will be releasing the RR-TCP ns-2 simulation code on this page shortly.