The authors of A Comparison of Mechanisms for Improving TCP Performance over Wireless Links first build a nice taxonomy to classify 12 schemes used to handle non-congestion related losses in TCP (see table 1). They then analyze each of the mechanism in turn.
This paper served as a nice forcing function to solidify some new and formerly vague networking concepts in my head such as SACK, Reno vs. NewReno, and split-connection protocols.
This paper was also an exercise in exploring the sort of trade-offs that were discussed in the classic end-to-end paper we read earlier this semester. In particular, their findings show one of the largest performance wins came from pushing knowledge from the ends (TCP) down two layers in the network stack into the link layer. I find this paper to represent an wonderful exposition into the final sentence of the end-to-end paper's abtract: "Low level mechanisms to support these functions are justified only as performance enhancements."