diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3465.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3465.txt')
-rw-r--r-- | doc/rfc/rfc3465.txt | 563 |
1 files changed, 563 insertions, 0 deletions
diff --git a/doc/rfc/rfc3465.txt b/doc/rfc/rfc3465.txt new file mode 100644 index 0000000..32b38c3 --- /dev/null +++ b/doc/rfc/rfc3465.txt @@ -0,0 +1,563 @@ + + + + + + +Network Working Group M. Allman +Request for Comments: 3465 BBN/NASA GRC +Category: Experimental February 2003 + + + TCP Congestion Control with Appropriate Byte Counting (ABC) + +Status of this Memo + + This memo defines an Experimental Protocol for the Internet + community. It does not specify an Internet standard of any kind. + Discussion and suggestions for improvement are requested. + Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2003). All Rights Reserved. + +Abstract + + This document proposes a small modification to the way TCP increases + its congestion window. Rather than the traditional method of + increasing the congestion window by a constant amount for each + arriving acknowledgment, the document suggests basing the increase on + the number of previously unacknowledged bytes each ACK covers. This + change improves the performance of TCP, as well as closes a security + hole TCP receivers can use to induce the sender into increasing the + sending rate too rapidly. + +Terminology + + Much of the language in this document is taken from [RFC2581]. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC2119]. + +1 Introduction + + This document proposes a modification to the algorithm for increasing + TCP's congestion window (cwnd) that improves both performance and + security. Rather than increasing a TCP's congestion window based on + the number of acknowledgments (ACKs) that arrive at the data sender + (per the current specification [RFC2581]), the congestion window is + increased based on the number of bytes acknowledged by the arriving + ACKs. The algorithm improves performance by mitigating the impact of + delayed ACKs on the growth of cwnd. At the same time, the algorithm + provides cwnd growth in direct relation to the probed capacity of a + + + +Allman Experimental [Page 1] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + + network path, therefore providing a more measured response to ACKs + that cover only small amounts of data (less than a full segment size) + than ACK counting. This more appropriate cwnd growth can improve + both performance and can prevent inappropriate cwnd growth in + response to a misbehaving receiver. On the other hand, in some cases + the modified cwnd growth algorithm causes larger bursts of segments + to be sent into the network. In some cases this can lead to a non- + negligible increase in the drop rate and reduced performance (see + section 4 for a larger discussion of the issues). + + This document is organized as follows. Section 2 outlines the + modified algorithm for increasing TCP's congestion window. Section 3 + discusses the advantages of using the modified algorithm. Section 4 + discusses the disadvantages of the approach outlined in this + document. Section 5 outlines some of the fairness issues that must + be considered for the modified algorithm. Section 6 discusses + security considerations. + + Statement of Intent + + This specification contains an algorithm improving the performance + of TCP which is understood to be effective and safe, but which has + not been widely deployed. One goal of publication as an + Experimental RFC is to be prudent, and encourage use and + deployment prior to publication in the standards track. It is the + intent of the Transport Area to re-submit this specification as an + IETF Proposed Standard in the future, after more experience has + been gained. + +2 A Modified Algorithm for Increasing the Congestion Window + + As originally outlined in [Jac88] and specified in [RFC2581], TCP + uses two algorithms for increasing the congestion window. During + steady-state, TCP uses the Congestion Avoidance algorithm to linearly + increase the value of cwnd. At the beginning of a transfer, after a + retransmission timeout or after a long idle period (in some + implementations), TCP uses the Slow Start algorithm to increase cwnd + exponentially. According to RFC 2581, slow start bases the cwnd + increase on the number of incoming acknowledgments. During + congestion avoidance RFC 2581 allows more latitude in increasing + cwnd, but traditionally implementations have based the increase on + the number of arriving ACKs. In the following two subsections, we + detail modifications to these algorithms to increase cwnd based on + the number of bytes being acknowledged by each arriving ACK, rather + than by the number of ACKs that arrive. We call these changes + "Appropriate Byte Counting" (ABC) [All99]. + + + + + +Allman Experimental [Page 2] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + +2.1 Congestion Avoidance + + RFC 2581 specifies that cwnd should be increased by 1 segment per + round-trip time (RTT) during the congestion avoidance phase of a + transfer. Traditionally, TCPs have approximated this increase by + increasing cwnd by 1/cwnd for each arriving ACK. This algorithm + opens cwnd by roughly 1 segment per RTT if the receiver ACKs each + incoming segment and no ACK loss occurs. However, if the receiver + implements delayed ACKs [Bra89], the receiver returns roughly half as + many ACKs, which causes the sender to open cwnd more conservatively + (by approximately 1 segment every second RTT). The approach that + this document suggests is to store the number of bytes that have been + ACKed in a "bytes_acked" variable in the TCP control block. When + bytes_acked becomes greater than or equal to the value of the + congestion window, bytes_acked is reduced by the value of cwnd. + Next, cwnd is incremented by a full-sized segment (SMSS). The + algorithm suggested above is specifically allowed by RFC 2581 during + congestion avoidance because it opens the window by at most 1 segment + per RTT. + +2.2 Slow Start + + RFC 2581 states that the sender increments the congestion window by + at most, 1*SMSS bytes for each arriving acknowledgment during slow + start. This document proposes that a TCP sender SHOULD increase cwnd + by the number of previously unacknowledged bytes ACKed by each + incoming acknowledgment, provided the increase is not more than L + bytes. Choosing the limit on the increase, L, is discussed in the + next subsection. When the number of previously unacknowledged bytes + ACKed is less than or equal to 1*SMSS bytes, or L is less than or + equal to 1*SMSS bytes, this proposal is no more aggressive (and + possibly less aggressive) than allowed by RFC 2581. However, + increasing cwnd by more than 1*SMSS bytes in response to a single ACK + is more aggressive than allowed by RFC 2581. The more aggressive + version of the slow start algorithm still falls within the spirit of + the principles outlined in [Jac88] (i.e., of no more than doubling + the cwnd per RTT), and this document proposes ABC for experimentation + in shared networks, provided an appropriate limit is applied (see + next section). + +2.3 Choosing the Limit + + The limit, L, chosen for the cwnd increase during slow start, + controls the aggressiveness of the algorithm. Choosing L=1*SMSS + bytes provides behavior that is no more aggressive than allowed by + RFC 2581. However, ABC with L=1*SMSS bytes is more conservative in a + + + + + +Allman Experimental [Page 3] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + + number of key ways (as discussed in the next section) and therefore, + this document suggests that even though with L=1*SMSS bytes TCP + stacks will see little performance change, ABC SHOULD be used. + + A very large L could potentially lead to large line-rate bursts of + traffic in the face of a large amount of ACK loss or in the case when + the receiver sends "stretch ACKs" (ACKs for more than the two full- + sized segments allowed by the delayed ACK algorithm) [Pax97]. + + This document specifies that TCP implementations MAY use L=2*SMSS + bytes and MUST NOT use L > 2*SMSS bytes. This choice balances + between being conservative (L=1*SMSS bytes) and being potentially + very aggressive. In addition, L=2*SMSS bytes exactly balances the + negative impact of the delayed ACK algorithm (as discussed in more + detail in section 3.2). Note that when L=2*SMSS bytes cwnd growth is + roughly the same as the case when the standard algorithms are used in + conjunction with a receiver that transmits an ACK for each incoming + segment [All98] (assuming no or small amounts of ACK loss in both + cases). + + The exception to the above suggestion is during a slow start phase + that follows a retransmission timeout (RTO). In this situation, a + TCP MUST use L=1*SMSS as specified in RFC 2581 since ACKs for large + amounts of previously unacknowledged data are common during this + phase of a transfer. These ACKs do not necessarily indicate how much + data has left the network in the last RTT, and therefore ABC cannot + accurately determine how much to increase cwnd. As an example, say + segment N is dropped by the network, and segments N+1 and N+2 arrive + successfully at the receiver. The sender will receive only two + duplicate ACKs and therefore must rely on the retransmission timer + (RTO) to detect the loss. When the RTO expires, segment N is + retransmitted. The ACK sent in response to the retransmission will + be for segment N+2. However, this ACK does not indicate that three + segments have left the network in the last RTT, but rather only a + single segment left the network. Therefore, the appropriate cwnd + increment is at most 1*SMSS bytes. + +2.4 RTO Implications + + [Jac88] shows that increases in cwnd of more than a factor of two in + succeeding RTTs can cause spurious retransmissions on slow links + where the bandwidth dominates the RTT, assuming the RTO estimator + given in [Jac88] and [RFC2988]. ABC stays within this limit of no + more than doubling cwnd in successive RTTs by capping the increase + (no matter what L is employed) by the number of previously + unacknowledged bytes covered by each incoming ACK. + + + + + +Allman Experimental [Page 4] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + +3 Advantages + + This section outlines several advantages of using the ABC algorithm + to increase cwnd, rather than the standard ACK counting algorithm + given in [RFC2581]. + +3.1 More Appropriate Congestion Window Increase + + The ABC algorithm outlined in section 2 increases TCP's cwnd in + proportion to the amount of data actually sent into the network. ACK + counting, on the other hand, increments cwnd by a constant upon the + arrival of each ACK. For instance, consider an interactive telnet + connection (e.g., ssh or telnet) in which ACKs generally cover only a + few bytes of data, but cwnd is increased by 1*SMSS bytes for each ACK + received. When a large amount of data needs to be transmitted (e.g., + displaying a large file) the data is sent in one large burst because + the cwnd grows by 1*SMSS bytes per ACK rather than based on the + actual amount of capacity used. Such a line-rate burst of data can + potentially cause a large amount of segment loss. + + Congestion Window Validation (CWV) [RFC2861] addresses the above + problem as well. CWV limits the amount of unused cwnd a TCP + connection can accumulate. ABC can be used in conjunction with CWV + to obtain an accurate measure of the network path. + +3.2 Mitigate the Impact of Delayed ACKs and Lost ACKs + + Delayed ACKs [RFC1122,RFC2581] allow a TCP receiver to refrain from + sending an ACK for each incoming segment. However, a receiver SHOULD + send an ACK for every second full-sized segment that arrives. + Furthermore, a receiver MUST NOT withhold an ACK for more than 500 + ms. By reducing the number of ACKs sent to the data originator the + receiver is slowing the growth of the congestion window under an ACK + counting system. Using ABC with L=2*SMSS bytes can roughly negate + the negative impact imposed by delayed ACKs by allowing cwnd to be + increased for ACKs that are withheld by the receiver. This allows + the congestion window to grow in a manner similar to the case when + the receiver ACKs each incoming segment, but without adding extra + traffic to the network. Simulation studies have shown increased + throughput when a TCP sender uses ABC when compared to the standard + ACK counting algorithm [All99], especially for short transfers that + never leave the initial slow start period. + + Note that delayed ACKs should not be an issue during slow start-based + loss recovery, as RFC 2581 recommends that receivers should not delay + ACKs that cover out-of-order segments. Therefore, as discussed + above, ABC with L > 1*SMSS bytes is inappropriate for such slow start + based loss recovery and MUST NOT be used. + + + +Allman Experimental [Page 5] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + + Note: In the case when an entire window of data is lost, a TCP + receiver will likely generate delayed ACKs and an L > 1*SMSS bytes + would be safe. However, detecting this scenario is difficult. + Therefore to keep ABC conservative, this document mandates that L + MUST NOT be > 1*SMSS bytes in any slow start-based loss recovery. + + ACK loss can also retard the growth of a congestion window that + increases based on the number of ACKs that arrive. When counting + ACKs, dropped ACKs represent forever-missed opportunities to increase + cwnd. Using ABC with L > 1*SMSS bytes allows the sender to mitigate + the effect of lost ACKs. + +3.3 Prevents Attacks from Misbehaving Receivers + + [SCWA99] outlines several methods for a receiver to induce a TCP + sender into violating congestion control and transmitting data at a + potentially inappropriate rate. One of the outlined attacks is "ACK + Division". This scheme involves the receiver sending multiple ACKs + for each incoming data segment, each ACKing only a small portion of + the original TCP data segment. Since TCP senders have traditionally + used ACK counting to increase cwnd, ACK division causes + inappropriately rapid cwnd growth and, in turn, a potentially + inappropriate sending rate. A TCP sender that uses ABC can prevent + this attack from being used to undermine standard congestion control + because the cwnd increase is based on the number of bytes ACKed, + rather than the number of ACKs received. + + To prevent misbehaving receivers from inducing inappropriate sender + behavior, this document suggests TCP implementations use ABC, even if + L=1*SMSS bytes (i.e., not allowing ABC to provide more aggressive + cwnd growth than allowed by RFC 2581). + +4 Disadvantages + + The main disadvantages of using ABC with L=2*SMSS bytes are an + increase in the burstiness of TCP and a small increase in the overall + loss rate. [All98] discusses the two ways that ABC increases the + burstiness of the TCP sender. First, the "micro burstiness" of the + connection is increased. In other words, the number of segments sent + in response to each incoming ACK is increased by at most 1 segment + when using ABC with L=2*SMSS bytes in conjunction with a receiver + that is sending delayed ACKs. During slow start this translates into + an increase from sending 2 back-to-back segments to sending 3 back- + to-back packets in response to an ACK for a single packet. Or, an + increase from 3 packets to 4 packets when receiving a delayed ACK for + two outstanding packets. Note that ACK loss can cause larger bursts. + However, ABC only increases the burst size by at most 1*SMSS bytes + per ACK received when compared to the standard behavior. This slight + + + +Allman Experimental [Page 6] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + + increase in the burstiness should only cause problems for devices + that have very small buffers. In addition, ABC increases the "macro + burstiness" of the TCP sender in response to delayed ACKs in slow + start. Rather than increasing cwnd by roughly 1.5 times per RTT, ABC + roughly doubles the congestion window every RTT. However, doubling + cwnd every RTT fits within the spirit of slow start, as originally + outlined [Jac88]. + + With the increased burstiness comes a modest increase in the loss + rate for a TCP connection employing ABC (see the next section for a + short discussion on the fairness of ABC to non-ABC flows). The + additional loss can be directly attributable to the increased + aggressiveness of ABC. During slow start cwnd is increased more + rapidly. Therefore when loss occurs cwnd is larger and more drops + are likely. Similarly, a congestion avoidance cycle takes roughly + half, as long when using ABC and delayed ACKs when compared to an ACK + counting implementation. In other words, a TCP sender reaches the + capacity of the network path, drops a packet and reduces the + congestion window by half roughly twice as often when using ABC. + However, as discussed above, in spite of the additional loss an ABC + TCP sender generally obtains better overall performance than a non- + ABC TCP [All99]. + + Due to the increase in the packet drop rate we suggest ABC be + implemented in conjunction with selective acknowledgments [RFC2018]. + +5 Fairness Considerations + + [All99] presents several simple simulations conducted to measure the + impact of ABC on competing traffic (both ABC and non-ABC). The + experiments show that while ABC increases the drop rate for the + connection using ABC, competing traffic is not greatly effected. The + experiments show that standard TCP and ABC both obtain roughly the + same throughput, regardless of the variant of the competing traffic. + The simulations also reaffirm that ABC outperforms non-ABC TCP in an + environment with varying types of TCP connections. On the other + hand, the simulations presented in [All99] are not necessarily + realistic. Therefore we are encouraging more experimentation in the + Internet. + +6 Security Considerations + + As discussed in section 3.3, ABC protects a TCP sender from a + misbehaving receiver that induces the sender into transmitting at an + inappropriate rate with an "ACK division" attack. This, in turn, + protects the network from an overly aggressive sender. + + + + + +Allman Experimental [Page 7] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + +7 Conclusions + + This document RECOMMENDS that all TCP stacks be modified to use ABC + with L=1*SMSS bytes. This change does not increase the + aggressiveness of TCP. Furthermore, simulations of ABC with L=2*SMSS + bytes show a promising performance improvement that we encourage + researchers to experiment with in the Internet. + +Acknowledgments + + This document has benefited from discussions with and encouragement + from Sally Floyd. Van Jacobson and Reiner Ludwig provided valuable + input on the implications of byte counting on the RTO. Reiner Ludwig + and Kostas Pentikousis provided valuable feedback on a draft of this + document. + +Normative References + + [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts -- + Communication Layers", STD 3, RFC 1122, October 1989. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2581] Allman, M., Paxson, V. and W. Stevens, "TCP Congestion + Control", RFC 2581, April 1999. + +Informative References + + [All98] Mark Allman. On the Generation and Use of TCP + Acknowledgments. ACM Computer Communication Review, 29(3), + July 1998. + + [All99] Mark Allman. TCP Byte Counting Refinements. ACM Computer + Communication Review, 29(3), July 1999. + + [Jac88] Van Jacobson. Congestion Avoidance and Control. ACM + SIGCOMM 1988. + + [Pax97] Vern Paxson. Automated Packet Trace Analysis of TCP + Implementations. ACM SIGCOMM, September 1997. + + [RFC2018] Mathis, M., Mahdavi, J., Floyd, S. and A. Romanow, "TCP + Selective Acknowledgment Options", RFC 2018, October 1996. + + [RFC2861] Handley, M., Padhye, J. and S. Floyd, "TCP Congestion + Window Validation", RFC 2861, June 2000. + + + + +Allman Experimental [Page 8] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + + [SCWA99] Stefan Savage, Neal Cardwell, David Wetherall, Tom + Anderson. TCP Congestion Control with a Misbehaving + Receiver. ACM Computer Communication Review, 29(5), + October 1999. + +Author's Address + + Mark Allman + BBN Technologies/NASA Glenn Research Center + Lewis Field + 21000 Brookpark Rd. MS 54-5 + Cleveland, OH 44135 + + Fax: 216-433-8705 + Phone: 216-433-6586 + EMail: mallman@bbn.com + http://roland.grc.nasa.gov/~mallman + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Allman Experimental [Page 9] + +RFC 3465 TCP Congestion Control with ABC February 2003 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2003). 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 + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Allman Experimental [Page 10] + |