RFC 3155

End-to-end Performance Implications of Links with Errors

๐Ÿ“… published August 2001, from ietf

Okay bestie, here's the title block tea โ˜•. This is RFC 3155 from the Network Working Group, published August 2001. The authors are S. Dawkins, G. Montenegro, M. Kojo, V. Magret, and N. Vaidya ๐Ÿซถ. It's a Best Current Practice (BCP 50) ๐ŸŽ€, and it doesn't list anything it obsoletes or updates, so nothing gets replaced or patched here โœจ.

Status of this Memo

This is an Internet Best Current Practice for the Internet Community, and it's literally asking for discussion and suggestions to make it better ๐ŸŒธ. Distribution is unlimited, so share away ๐Ÿ’….

Copyright (C) The Internet Society (2001). All Rights Reserved. ๐Ÿฆ‹

Abstract

This doc is all about the specific TCP mechanisms that go off the rails in environments with high uncorrected error rates ๐Ÿ˜ญ. It also covers what we can do to fix the problems without dropping intermediate devices into the connection ๐Ÿงš.

Table of Contents

   1.0 Introduction .............................................    2
      1.1 Should you be reading this recommendation?  ...........    3
      1.2 Relationship of this recommendation to PEPs ...........    4
      1.3 Relationship of this recommendation to Link Layer
          Mechanisms.............................................    4
   2.0 Errors and Interactions with TCP Mechanisms ..............    5
      2.1 Slow Start and Congestion Avoidance [RFC2581] .........    5
      2.2 Fast Retransmit and Fast Recovery [RFC2581] ...........    6
      2.3 Selective Acknowledgements [RFC2018, RFC2883] .........    7
   3.0 Summary of Recommendations ...............................    8
   4.0 Topics For Further Work ..................................    9
      4.1 Achieving, and maintaining, large windows .............   10
   5.0 Security Considerations ..................................   11
   6.0 IANA Considerations ......................................   11
   7.0 Acknowledgements .........................................   11
   References ...................................................   11
   Authors' Addresses ...........................................   14
   Full Copyright Statement .....................................   16

1.0 Introduction โœจ

The Internet is growing like crazy ๐Ÿ“ˆ, and more and more kinds of devices are connecting over more and more kinds of links. Some of those links aren't as reliable as hosts expect, and that's a problem because some Internet protocols, especially TCP [RFC793], end up performing poorly on them ๐Ÿ˜ญ.

So here's the thing about TCP congestion control [RFC2581]. It's great for connections that mostly lose traffic because of congestion and full buffers ๐Ÿ’…. But it clashes with uncorrected errors when TCP connections go over links with high uncorrected error rates ๐Ÿ’€. The sender can end up waiting a super long time for acknowledgements that never show up. Then, even though those losses weren't caused by congestion, the sender drops its traffic way down while it probes the network to find "safe" levels ๐Ÿ™ˆ.

This document doesn't cover other transport protocols, like UDP ๐ŸŽ€.

Congestion avoidance on the Internet is built on the idea that most packet losses come from congestion ๐ŸŒˆ. TCP's congestion avoidance treats a missing acknowledgement as a congestion signal. That's worked well since it was introduced in 1988 [VJ-DCAC], because most links and subnets have pretty low error rates in normal operation, so congestion really is the main cause of loss. But links and subnets without low uncorrected error rates are showing up more and more across the Internet ๐Ÿ‘€. Terrestrial and satellite wireless links are two big examples. If your traffic goes over these links, your performance can tank, since your TCP connections keep spending ages in congestion avoidance and/or slow start because of losses caused by transmission errors ๐Ÿ˜ฉ.

The recommendations here are meant to help use available path capacity better over these high error-rate links, and they're designed so they don't threaten the stability of the Internet โœจ.

Apps use TCP in really different ways, and those ways interact with TCP's behaviour [RFC2861] ๐Ÿงฉ. Even so, we can make some basic assumptions about TCP flows. So the mechanisms in this document apply to all uses of TCP, just to different degrees depending on the scenario (noted where it matters) ๐Ÿ“.

This recommendation assumes that making major changes to the entire installed base of routers and hosts isn't a practical possibility ๐Ÿ™…โ€โ™€๏ธ. So any changes are limited to the hosts that are directly affected by errored links ๐Ÿซถ.

1.1 Should you be reading this recommendation?

Every known subnetwork technology gives you an "imperfect" subnetwork service, since the bit error rate is never zero ๐Ÿ™ˆ. The problem is that end stations have no obvious way to tell whether a packet was dropped because of congestion or because of a transmission error ๐Ÿ˜ญ.

If a directly-attached subnetwork is reporting transmission errors to a host, those reports matter ๐Ÿ“ฃ. But we can't count on explicit transmission error reports reaching both hosts ๐Ÿ’€.

Another way to decide whether a subnetwork should count as having a "high error rate" is to do some math ๐Ÿงฎ.

An approximate formula for the TCP Reno response function is given in [PFTK98]:

                             s
T = --------------------------------------------------
    RTT*sqrt(2p/3) + tRTO*(3*sqrt(3p/8))*p*(1 + 32p**2)

where

    T = the sending rate in bytes per second
    s = the packet size in bytes
    RTT = round-trip time in seconds
    tRTO = TCP retransmit timeout value in seconds
    p = steady-state packet loss rate

So if you plug in an observed packet loss rate and do the math, and the predicted bandwidth utilization comes out greater than the link speed, then this recommendation won't help that connection ๐Ÿ™ƒ. The level of packet losses you're seeing won't affect TCP's ability to use the link. But if the predicted bandwidth is less than the link speed, then packet losses are hurting TCP's ability to use the link ๐Ÿ˜ค.

If further digging finds a subnetwork with significant transmission error rates, then the recommendations here will improve TCP's ability to use the link ๐ŸŽ‰.

A few caveats to keep in mind when you do this calculation:

  • (1) the RTT is the end-to-end RTT, not the link RTT.
  • (2) Max(1.0, 4*RTT) can be substituted as a simplification for tRTO.
  • (3) losses may be bursty - a loss rate measured over an interval that includes multiple bursty loss events may understate the impact of these loss events on the sending rate.

1.2 Relationship of this recommendation to PEPs

This document talks about end-to-end mechanisms that don't need intermediate nodes to be TCP-aware ๐Ÿงš. That's a big limitation, because the end nodes can't really know much about the nature of the losses happening between them ๐Ÿฅฒ. People have tried heuristics to tell congestion apart from transmission errors, and they haven't worked out [BV97, BV98, BV98a]. This restriction gets relaxed in an informational document on Performance Enhancing Proxies (PEPs) [RFC3135]. PEPs can sit at boundaries where network characteristics change a lot, so they get an extra shot at improving performance over links with uncorrected errors ๐ŸŒธ.

BUT ๐Ÿšจ, using PEPs everywhere goes against the end-to-end principle, and it's really undesirable because of the downsides. They include: lack of fate sharing (a PEP adds a third point of failure besides the endpoints themselves), end-to-end reliability and diagnostics, preventing end-to-end security (particularly network layer security such as IPsec), mobility (handoffs are much more complex because state must be transferred), asymmetric routing (PEPs typically require being on both the forward and reverse paths of a connection), scalability (PEPs add more state to maintain), QoS transparency and guarantees ๐Ÿ˜ฉ.

Not every type of PEP has all of those drawbacks. Still, PEPs can have really serious consequences, and those need to be weighed carefully โš–๏ธ.

This recommendation is for use with TCP over subnetwork technologies (link layers) that are already deployed ๐Ÿ—๏ธ. Subnetworks that are meant to carry Internet protocols but aren't fully specified yet are the subject of a best common practices (BCP) document that has been developed or is under development by the Performance Implications of Link Characteristics WG (PILC) [PILC-WEB]. That last document is aimed at designers who still get to reduce the number of uncorrected errors TCP will run into ๐Ÿง‘โ€๐Ÿ’ป.

2.0 Errors and Interactions with TCP Mechanisms ๐Ÿ’…

A TCP sender adjusts how much network path capacity it uses based on feedback from the TCP receiver ๐Ÿ”. TCP can't tell losses caused by congestion apart from losses caused by uncorrected errors. So when there are significant uncorrected errors, it can't accurately figure out how much path capacity is actually available ๐Ÿ˜ญ๐Ÿซถ.

2.1 Slow Start and Congestion Avoidance [RFC2581] ๐ŸŒธ

Okay bestie, so Slow Start and Congestion Avoidance [RFC2581] are literally why the Internet is still stable ๐Ÿ’– ngl that's iconic. They were designed for networks that don't provide explicit congestion notification. Experimental stuff like [RFC2481] is moving toward ECN, and the effect of ECN on ECN-aware TCPs is basically the same as the effect of implicit congestion notification through congestion-related loss. The only difference is that ECN gives you the heads-up before packets get lost, and they still have to be retransmitted ๐Ÿฆ‹

TCP connections with high error rates on their paths clash with Slow Start and Congestion Avoidance ๐Ÿ˜ญ Here's the tea: high error rates make losses ambiguous, because the sender can't know whether a detected loss came from congestion or from data corruption. So TCP makes the "safe" choice and assumes the losses are due to congestion ๐Ÿซถ

  • Whenever sending TCPs receive three out-of-order acknowledgement, they assume the network is mildly congested and invoke fast retransmit/fast recovery (described below).
  • Whenever TCP's retransmission timer expires, the sender assumes that the network is congested and invokes slow start.
  • Less-reliable link layers often use small link MTUs. This slows the rate of increase in the sender's window size during slow start, because the sender's window is increased in units of segments. Small link MTUs alone don't improve reliability. Path MTU discovery [RFC1191] must also be used to prevent fragmentation. Path MTU discovery allows the most rapid opening of the sender's window size during slow start, but a number of round trips may still be required to open the window completely. ๐Ÿงš
Recommendation: Any standards-conformant TCP will implement Slow Start and Congestion Avoidance, which are MUSTs in STD 3 [RFC1122]. Recommendations in this document will not interfere with these mechanisms. ๐Ÿ’…

2.2 Fast Retransmit and Fast Recovery [RFC2581] ๐Ÿฆ‹

So TCP gives apps reliable delivery of data as a byte-stream ๐ŸŽ€ That means when a segment gets lost (whether from congestion or transmission loss), the receiver TCP implementation has to hold off on delivering data to the receiving application until the missing data shows up. The receiver figures out something's missing when segments arrive with out-of-order sequence numbers ๐Ÿ‘€

TCPs should immediately send an acknowledgement when data is received out-of-order [RFC2581], providing the next expected sequence number with no delay. This lets the sender retransmit the required data as fast as possible, and lets the receiver resume delivering data to the app ๐Ÿƒโ€โ™€๏ธ When an acknowledgement carries the same expected sequence number as one already sent for the last in-order segment received, these acknowledgement are called "duplicate ACKs" โœจ

Because IP networks are allowed to reorder packets, the receiver may send duplicate acknowledgments for segments that arrive out of order due to routing changes, link-level retransmission, etc. When a TCP sender receives three duplicate ACKs, fast retransmit [RFC2581] lets it infer that a segment was lost. The sender retransmits what it considers to be that lost segment without waiting for the full retransmission timeout, which saves time โฉ

After a fast retransmit, a sender halves its congestion window and invokes the fast recovery [RFC2581] algorithm. That means it goes into congestion avoidance from the halved congestion window, but it does not drop back to slow start from a one-segment congestion window like it would after a retransmission timeout. Since the sender is still getting dupacks, it knows the receiver is getting the packets it sends, so the full reduction after a timeout (when no communication has been received) isn't called for. This relatively safe optimization also saves time ๐Ÿ™Œ

It's important to be realistic about the maximum throughput TCP can have over a connection that crosses a high error-rate link ๐Ÿฅบ In general, TCP will increase its congestion window beyond the delay-bandwidth product. TCP's congestion avoidance strategy is additive-increase, multiplicative-decrease. That means if more errors show up before the congestion window fully recovers from a 50-percent reduction, the result can be a "downward spiral" of the congestion window from additional 50-percent reductions ๐Ÿ“‰ Even with Fast Retransmit/Fast Recovery, the sender halves the congestion window each time a window contains one or more lost segments, and it re-opens the window by one additional segment for each congestion window's worth of acknowledgements received.

If a connection's path crosses a link that loses one or more segments during this recovery period, the one-half reduction happens again, this time on an already reduced congestion window. This downward spiral keeps the congestion window below path capacity until the connection can recover completely through additive increase without experiencing loss ๐ŸŒ€

Of course, no downward spiral happens if the error rate is constantly high and the congestion window always stays small. The multiplicative-increase "slow start" gets exited early, and the congestion window stays low for the whole duration of the TCP connection. On links with high error rates, the TCP window may stay rather small for long periods of time ๐Ÿฅ€

Not every cause of a small window has to do with errors, though ๐Ÿ™ˆ For example, HTTP/1.0 commonly closes TCP connections to mark boundaries between requested resources. That means these apps are constantly closing "trained" TCP connections and opening "untrained" ones, which run slow start beginning with one or two segments. This can even happen with HTTP/1.1, if webmasters configure their HTTP/1.1 servers to close connections instead of waiting to see if the connection will be useful again ๐Ÿ’€

A small window, especially one of less than four segments, effectively prevents the sender from taking advantage of Fast Retransmits. And efficient recovery from multiple losses within a single window requires adopting new proposals (NewReno [RFC2582]) ๐Ÿ”ฅ

Recommendation: Implement Fast Retransmit and Fast Recovery at this time. This is a widely-implemented optimization and is currently at Proposed Standard level. [RFC2488] recommends implementation of Fast Retransmit/Fast Recovery in satellite environments. ๐Ÿ›ฐ๏ธโœจ

2.3 Selective Acknowledgements [RFC2018, RFC2883] ๐Ÿ’œ

Selective Acknowledgements [RFC2018] let you repair multiple segment losses per window without needing one (or more) round-trips per loss. Iconic efficiency ๐Ÿง 

[RFC2883] proposes a minor extension to SACK that lets receiving TCPs provide more information about the order of delivery of segments. That allows "more robust operation in an environment of reordered packets, ACK loss, packet replication, and/or early retransmit timeouts" ๐Ÿซง Unless explicitly stated otherwise in this document, "Selective Acknowledgements" (or "SACK") refers to the combination of [RFC2018] and [RFC2883].

Selective acknowledgments are most useful in LFNs ("Long Fat Networks") because of the long round trip times that may be encountered in these environments, according to Section 1.1 of [RFC1323]. They're especially useful if large windows are required, because there's a higher probability of multiple segment losses per window ๐ŸŒˆ

On the other hand, if error rates are generally low but occasionally higher due to channel conditions, TCP gets the chance to increase its window to larger values during periods of improved channel conditions between bursts of errors. When bursts of errors happen, multiple losses within a window are likely to occur. In that case, SACK helps speed up recovery and prevents unnecessary reduction of the window size ๐Ÿ™Œ

Recommendation: Implement SACK as specified in [RFC2018] and updated by [RFC2883], both Proposed Standards. In cases where SACK cannot be enabled for both sides of a connection, TCP senders may use NewReno [RFC2582] to better handle partial ACKs and multiple losses within a single window. ๐Ÿ’…

3.0 Summary of Recommendations โœจ

The Internet doesn't provide a widely-available loss feedback mechanism that lets TCP tell congestion loss apart from transmission error ๐Ÿซ  Congestion affects all traffic on a path, while transmission loss only affects the specific traffic hitting uncorrected errors. So avoiding congestion has to take precedence over quickly repairing transmission errors. That means the best you can do without new feedback mechanisms is minimizing the amount of time spent unnecessarily in congestion avoidance ๐Ÿ‘‘

The Fast Retransmit/Fast Recovery mechanism allows quick repair of loss without giving up the safety of congestion avoidance ๐ŸŽ€ For Fast Retransmit/Fast Recovery to work, the window size has to be large enough to force the receiver to send three duplicate acknowledgments before the retransmission timeout interval expires. Otherwise you get full TCP slow-start ๐Ÿข

Selective Acknowledgements (SACK) extend the benefit of Fast Retransmit/Fast Recovery to situations where multiple segment losses in the window need repairing more quickly than Fast Retransmit can manage for each loss, only to discover the next segment loss ๐Ÿฆ‹

And these mechanisms aren't limited to wireless environments! They're usable in all environments ๐ŸŒ๐Ÿ’–

4.0 Topics For Further Work โœจ

okay bestie, this is the to-do list section ๐Ÿ“ these are the ideas people are still cooking up and aren't fully baked yet ๐Ÿณ

"Limited Transmit" [RFC3042] is an optimization that extends Fast Retransmit/Fast Recovery for TCP connections with small congestion windows that won't trigger three duplicate acknowledgments. This specification is deemed safe, and it also helps TCP connections that experience a large amount of packet (data or ACK) loss ๐Ÿซถ Implementors should evaluate this standards track specification for TCP in loss environments, so go check it out ๐Ÿ‘€

Delayed Duplicate Acknowledgements [MV97, VMPM99] tries to stop TCP-level retransmission while link-level retransmission is still in progress, which would otherwise add extra traffic to the network ๐Ÿ™ˆ This proposal is worthy of additional study, but it's not recommended at this time, because we don't know how to calculate appropriate amounts of delay for an arbitrary network topology ๐Ÿคทโ€โ™€๏ธ

It is not possible to use explicit congestion notification [RFC2481] as a surrogate for explicit transmission error notification (no matter how much we wish it was!) ๐Ÿ˜ญ Some mechanism to provide explicit notification of transmission error would be very helpful. This might be more easily provided in a PEP environment, especially when the PEP is the "first hop" in a connection path, because current checksum mechanisms do not distinguish between transmission error to a payload and transmission error to the header. Furthermore, if the header is damaged, sending explicit transmission error notification to the right endpoint is problematic ๐Ÿ’€

Losses that take place on the ACK stream, especially while a TCP is learning network characteristics, can make the data stream quite bursty (resulting in losses on the data stream, as well) ๐ŸŒช๏ธ Several ways of limiting this burstiness have been proposed, including TCP transmit pacing at the sender and ACK rate control within the network ๐Ÿฆ‹

"Appropriate Byte Counting" (ABC) [ALL99], has been proposed as a way of opening the congestion window based on the number of bytes that have been successfully transfered to the receiver, giving more appropriate behavior for application protocols that initiate connections with relatively short packets ๐Ÿ’… For SMTP [RFC2821], for instance, the client might send a short HELO packet, a short MAIL packet, one or more short RCPT packets, and a short DATA packet, followed by the entire mail body sent as maximum-length packets ๐Ÿ“ฌ An ABC TCP sender would not use ACKs for each of these short packets to increase the congestion window to allow additional full-length packets. ABC is worthy of additional study, but is not recommended at this time, because ABC can lead to increased burstiness when acknowledgments are lost ๐Ÿซ 

4.1 Achieving, and maintaining, large windows ๐ŸชŸ

The recommendations described in this document will aid TCPs in injecting packets into ERRORed connections as fast as possible without destabilizing the Internet, and so optimizing the use of available bandwidth ๐Ÿš€

In addition to these TCP-level recommendations, there is still additional work to do at the application level, especially with the dominant application protocol on the World Wide Web, HTTP ๐ŸŒ

HTTP/1.0 (and earlier versions) closes TCP connections to signal a receiver that all of a requested resource had been transmitted. Because WWW objects tend to be small in size [MOGUL], TCPs carrying HTTP/1.0 traffic have a hard time "training" on available path capacity (a substantial portion of the transfer has already happened by the time TCP exits slow start) ๐Ÿ˜ฉ

Several HTTP modifications have been introduced to improve this interaction with TCP ("persistent connections" in HTTP/1.0, with improvements in HTTP/1.1 [RFC2616]). For a variety of reasons, many HTTP interactions are still HTTP/1.0-style, which means relatively short-lived ๐Ÿงš

Proposals which reuse TCP congestion information across connections, like TCP Control Block Interdependence [RFC2140], or the more recent Congestion Manager [BS00] proposal, will have the effect of making multiple parallel connections impact the network as if they were a single connection, "trained" after a single startup transient ๐Ÿ‘‘ These proposals are critical to the long-term stability of the Internet, because today's users always have the choice of clicking on the "reload" button in their browsers and cutting off TCP's exponential backoff, replacing connections which are building knowledge of the available bandwidth with connections with no knowledge at all ๐Ÿ™ƒ


5.0 Security Considerations ๐Ÿ”

Okay, this part is serious, so read it carefully ๐Ÿšจ

A potential vulnerability introduced by Fast Retransmit/Fast Recovery is (as pointed out in [RFC2581]) that an attacker may force TCP connections to grind to a halt, or, more dangerously, behave more aggressively. The latter possibility may lead to congestion collapse, at least in some regions of the network ๐Ÿ’€

Selective acknowledgments are believed to neither strengthen nor weaken TCP's current security properties [RFC2018] ๐Ÿ›ก๏ธ

Given that the recommendations in this document are performed on an end-to-end basis, they continue working even in the presence of end-to-end IPsec. This is in direct contrast with mechanisms such as PEP's, which are implemented in intermediate nodes (section 1.2) ๐ŸŽ€

6.0 IANA Considerations ๐Ÿ“‹

This document is a pointer to other, existing IETF standards. There are no new IANA considerations ๐ŸŒธ

7.0 Acknowledgements ๐Ÿซถ

This recommendation has grown out of RFC 2757, "Long Thin Networks", which was in turn based on work done in the IETF TCPSAT working group. The authors are indebted to the active members of the PILC working group. In particular, Mark Allman and Lloyd Wood gave us copious and insightful feedback, and Dan Grossman and Jamshid Mahdavi provided text replacements ๐Ÿ’œ

References ๐Ÿ“š

  • [ALL99] M. Allman, "TCP Byte Counting Refinements," ACM Computer Communication Review, Volume 29, Number 3, July 1999. http://www.acm.org/sigcomm/ccr/archive/ccr-toc/ccr-toc-99.html
  • [BS00] Balakrishnan, H. and S. Seshan, "The Congestion Manager", RFC 3124, June 2001.
  • [BV97] S. Biaz and N. Vaidya, "Using End-to-end Statistics to Distinguish Congestion and Corruption Losses: A Negative Result," Texas A&M University, Technical Report 97-009, August 18, 1997.
  • [BV98] S. Biaz and N. Vaidya, "Sender-Based heuristics for Distinguishing Congestion Losses from Wireless Transmission Losses," Texas A&M University, Technical Report 98-013, June 1998.
  • [BV98a] S. Biaz and N. Vaidya, "Discriminating Congestion Losses from Wireless Losses using Inter-Arrival Times at the Receiver," Texas A&M University, Technical Report 98-014, June 1998.
  • [MOGUL] "The Case for Persistent-Connection HTTP", J. C. Mogul, Research Report 95/4, May 1995. Available as http://www.research.digital.com/wrl/techreports/abstracts/95.4.html
  • [MV97] M. Mehta and N. Vaidya, "Delayed Duplicate-Acknowledgements: A Proposal to Improve Performance of TCP on Wireless Links," Texas A&M University, December 24, 1997. Available at http://www.cs.tamu.edu/faculty/vaidya/mobile.html
  • [PILC-WEB] http://pilc.grc.nasa.gov/
  • [PFTK98] Padhye, J., Firoiu, V., Towsley, D. and J.Kurose, "TCP Throughput: A simple model and its empirical validation", SIGCOMM Symposium on Communications Architectures and Protocols, August 1998.
  • [RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, September 1981.
  • [RFC2821] Klensin, J., Editor, "Simple Mail Transfer Protocol", RFC 2821, April 2001.
  • [RFC1122] Braden, R., "Requirements for Internet Hosts -- Communication Layers", STD 3, RFC 1122, October 1989.
  • [RFC1191] Mogul J., and S. Deering, "Path MTU Discovery", RFC 1191, November 1990.
  • [RFC1323] Jacobson, V., Braden, R. and D. Borman. "TCP Extensions for High Performance", RFC 1323, May 1992.
  • [RFC2018] Mathis, M., Mahdavi, J., Floyd, S. and A. Romanow "TCP Selective Acknowledgment Options", RFC 2018, October 1996.
  • [RFC2140] Touch, J., "TCP Control Block Interdependence", RFC 2140, April 1997.
  • [RFC2309] Braden, B., Clark, D., Crowcrfot, J., Davie, B., Deering, S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G., Partridge, C., Peterson, L., Ramakrishnan, K., Shecker, S., Wroclawski, J. and L, Zhang, "Recommendations on Queue Management and Congestion Avoidance in the Internet", RFC 2309, April 1998.
  • [RFC2481] Ramakrishnan K. and S. Floyd, "A Proposal to add Explicit Congestion Notification (ECN) to IP", RFC 2481, January 1999.
  • [RFC2488] Allman, M., Glover, D. and L. Sanchez. "Enhancing TCP Over Satellite Channels using Standard Mechanisms", BCP 28, RFC 2488, January 1999.
  • [RFC2581] Allman, M., Paxson, V. and W. Stevens, "TCP Congestion Control", RFC 2581, April 1999.
  • [RFC2582] Floyd, S. and T. Henderson, "The NewReno Modification to TCP's Fast Recovery Algorithm", RFC 2582, April 1999.
  • [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
  • [RFC2861] Handley, H., Padhye, J. and S., Floyd, "TCP Congestion Window Validation", RFC 2861, June 2000.
  • [RFC2883] Floyd, S., Mahdavi, M., Mathis, M. and M. Podlosky, "An Extension to the Selective Acknowledgement (SACK) Option for TCP", RFC 2883, August 1999.
  • [RFC2923] Lahey, K., "TCP Problems with Path MTU Discovery", RFC 2923, September 2000.
  • [RFC3042] Allman, M., Balakrishnan, H. and S. Floyd, "Enhancing TCP's Loss Recovery Using Limited Transmit", RFC 3042, January, 2001.
  • [RFC3135] Border, J., Kojo, M., Griner, J., Montenegro, G. and Z. Shelby, "Performance Enhancing Proxies Intended to Mitigate Link-Related Degradations", RFC 3135, June 2001.
  • [VJ-DCAC] Jacobson, V., "Dynamic Congestion Avoidance / Control" e-mail dated February 11, 1988, available from http://www.kohala.com/~rstevens/vanj.88feb11.txt
  • [VMPM99] N. Vaidya, M. Mehta, C. Perkins, and G. Montenegro, "Delayed Duplicate Acknowledgements: A TCP-Unaware Approach to Improve Performance of TCP over Wireless," Technical Report 99-003, Computer Science Dept., Texas A&M University, February 1999. Also, to appear in Journal of Wireless Communications and Wireless Computing (Special Issue on Reliable Transport Protocols for Mobile Computing).

Authors' Addresses ๐Ÿ’Œ

Okay so, if you have questions about this doc, these are the people to ask ๐Ÿซถ Spencer Dawkins is first, then Gabriel E. Montenegro, Markku Kojo, Vincent Magret, and Nitin H. Vaidya. Their contact details are below, exactly as they were written:

Questions about this document may be directed to:

Spencer Dawkins
Fujitsu Network Communications
2801 Telecom Parkway
Richardson, Texas 75082

Phone: +1-972-479-3782
EMail: spencer.dawkins@fnc.fujitsu.com


Gabriel E. Montenegro
Sun Microsystems
Laboratories, Europe
29, chemin du Vieux Chene
38240 Meylan
FRANCE

Phone: +33 476 18 80 45
EMail: gab@sun.com


Markku Kojo
Department of Computer Science
University of Helsinki
P.O. Box 26 (Teollisuuskatu 23)
FIN-00014 HELSINKI
Finland

Phone: +358-9-1914-4179
EMail: kojo@cs.helsinki.fi

Vincent Magret
Alcatel Internetworking, Inc.
26801 W. Agoura road
Calabasas, CA, 91301

Phone: +1 818 878 4485
EMail: vincent.magret@alcatel.com


Nitin H. Vaidya
458 Coodinated Science Laboratory, MC-228
1308 West Main Street
Urbana, IL 61801

Phone: 217-265-5414
E-mail: nhv@crhc.uiuc.edu

Okay, this part is legal stuff, so I'm keeping it word-for-word so nothing gets lost in translation ๐Ÿ™ˆ The Internet Society owns the copyright (2001), and the terms are below, complete and exact:

Copyright (C) The Internet Society (2001).  All Rights Reserved.

This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works.  However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.

The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐Ÿซถ

Last one, bestie โœจ The RFC Editor function is currently funded by the Internet Society, so a big thank you to them for keeping the lights on ๐Ÿ’–

๐Ÿ“ฆ where this page comes from