Internet Engineering Task ForceNetwork Working Group S. FloydINTERNET-DRAFTRequest for Comments: 5690 ICIRIntended status:Category: Informational A. ArciaExpires: 4 January 2010D. Ros TELECOM Bretagne J. Iyengar Franklin & Marshall College4 JulyOctober 2009 Adding Acknowledgement Congestion Control to TCPdraft-floyd-tcpm-ackcc-06.txt Status of this MemoAbstract ThisInternet-Draft is submitted to IETFdocument describes a possible congestion control mechanism for acknowledgement (ACKs) traffic infull conformance with the provisions of BCP 78 and BCP 79. ThisTCP. The documentmay contain materialspecifies an end-to-end acknowledgement congestion control mechanism for TCP that uses participation fromIETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controllingboth TCP hosts: thecopyright in some of this material may not have grantedTCP data sender and theIETF TrustTCP data receiver. The TCP data sender detects lost or Explicit Congestion Notification (ECN)-marked ACK packets, and tells therightTCP data receiver the ACK Ratio R to use to respond toallow modifications of such material outsidetheIETF Standards Process. Without obtaining an adequate licensecongestion on the reverse path from theperson(s) controllingdata receiver to thecopyrightdata sender. The TCP data receiver sends roughly one ACK packet for every R data packets received. This mechanism is based on the acknowledgement congestion control insuch materials, this document may not be modified outsidetheIETF Standards Process, and derivative works of it may not be created outsideDatagram Congestion Control Protocol's (DCCP's) Congestion Control Identifier (CCID) 2. This acknowledgement congestion control mechanism is being specified for further evaluation by theIETF Standards Process, except to format itnetwork community. Status of This Memo This memo provides information forpublication asthe Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. IESG Note The content of this RFCor to translatewas at one time considered by the IETF, and therefore itinto languages other than English. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groupsmayalso distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid forresemble amaximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "workcurrent IETF work inprogress." The listprogress or a published IETF work. There has been no formal IETF review ofcurrent Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.this particular specification or determination about its properties. Thelist of Internet-Draft Shadow Directories can be accessedRFC Editor has chosen to publish this document athttp://www.ietf.org/shadow.html. This Internet-Draft will expire on 4 January 2010.its discretion. Please see RFC 3932 for more information. Copyright Notice Copyright (c) 2009 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents in effect on the date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, as they describe your rights and restrictions with respect to this document.AbstractThis documentdescribes a possible congestion control mechanism for acknowledgement traffic (ACKs) in TCP. The document specifies an end-to-end acknowledgement congestion control mechanism for TCP that uses participationmay contain material fromboth TCP hosts, the TCP data sender and the TCP data receiver. The TCP data sender detects lostIETF Documents orECN-marked ACK packets, and tellsIETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling theTCP data receivercopyright in some of this material may not have granted theACK Ratio R to use to respond toIETF Trust thecongestion onright to allow modifications of such material outside thereverse pathIETF Standards Process. Without obtaining an adequate license from thedata receiver to the data sender. The TCP data receiver sends roughly one ACK packet for every R data packets received. This mechanism is based onperson(s) controlling theacknowledgement congestion controlcopyright inDCCP's CCID 2. This acknowledgement congestion control mechanism is being specified for further evaluation by the network community. Table ofsuch materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English. Table of Contents 1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . 7....................................................3 2. Conventions andTerminology. . . . . . . . . . . . . . . . . . 8Terminology .....................................4 3. Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . 9........................................................4 4. Acknowledgement Congestion Control. . . . . . . . . . . . . . 10..............................6 4.1. The ACK Congestion Control Permitted Option. . . . . . . 10................6 4.2. The TCP ACK RatioOption. . . . . . . . . . . . . . . . . 11Option ...................................7 4.3. The Receiver: Implementing the ACKRatio. . . . . . . . . 11Ratio ...................7 4.4. The Sender: Determining Lost or Marked ACKPack- ets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Packets .........8 4.4.1. The Sender: Detecting Lost ACK PacketsAfterafter a CongestionEvent. . . . . . . . . . . . . . . . . . 14Event ...........................10 4.5. The Sender: Adjusting the ACK Ratio. . . . . . . . . . . 14.......................10 4.5.1. Possible Addition: Decreasing the ACK Ratio after a Congestion WindowDecrease. . . . . . . . . . 15Decrease .................12 4.6. The Receiver: Sending ACKs for Out-of-Order Data Segments. . . . . . . . . . . . . . . . . . . . . . . . . . . 16..................................................12 4.7. The Sender: Response to ACK Packets. . . . . . . . . . . 17.......................13 4.8. Possible Addition: Receiver Bounds on the ACKRatio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Ratio .......15 5. Possible Complications. . . . . . . . . . . . . . . . . . . . 19.........................................15 5.1. Possible Complication: Delayed Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 19...........15 5.2. Possible Complication: DuplicateAcknowledge- ments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Acknowledgements .........15 5.3. Possible Complication: Two-WayTraffic. . . . . . . . . . 19Traffic ....................16 5.4. Possible Complication: Reordering of ACKPack- ets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Packets ..........16 5.5. Possible Complication: Abrupt Changes in the ACKPath.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Path .....17 5.6. Possible Complication:Corruption.. . . . . . . . . . . . 20Corruption .........................17 5.7. Possible Complication: ACKs That Don'tContrib- uteContribute toCongestion. . . . . . . . . . . . . . . . . . . . . . . 21Congestion .............................................17 5.8. Possible Complication: TCP Implementations that Skip ACK Packets. . . . . . . . . . . . . . . . . . . . . . . 24..........................................20 5.9. Possible Complication: Router orMiddlebox-basedMiddlebox-Based ACK Mechanisms. . . . . . . . . . . . . . . . . . . . . . . . 24............................................21 5.10. Possible Complication: Data-LimitedSenders. . . . . . . 25Senders ..............21 5.11. Other Issues. . . . . . . . . . . . . . . . . . . . . . 25 6. Evaluating ACK Congestion Control. . . . . . . . . . . . . . . 25 6.1. Contention in Wireless Links or in non-switched Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.2. Keep-alive and Other Special ACK Packets. . . . . . . . . 26 7. Measurements of ACK Traffic and Congestion . . . . . . . . . . 26 8. Acknowledgement Congestion Control in DCCP's CCID 2. . . . . . 27 9. Security Considerations. . . . . . . . . . . . . . . . . . . . 27 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 11. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . 29 12. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 29 A. Appendix: Related Work . . . . . . . . . . . . . . . . . . . . 29 A.1. ECN-only Mechanisms . . . . . . . . . . . . . . . . . . . 30 A.2. Receiver-only Mechanisms. . . . . . . . . . . . . . . . . 30 A.3. Middlebox-based Mechanisms. . . . . . . . . . . . . . . . 31 B. Appendix: Design Considerations. . . . . . . . . . . . . . . . 31 B.1. The TCP ACK Ratio Option, or an AckNow bit in data packets?. . . . . . . . . . . . . . . . . . . . . . . . . 31 Normative References (if standardized). . . . . . . . . . . . . . 32 Informative References. . . . . . . . . . . . . . . . . . . . . . 33 Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . . . 36 TO BE DELETED BY THE RFC EDITOR UPON PUBLICATION: Changes from draft-floyd-tcpm-ackcc-05.txt: * Added a paragraph about Experimental TCP Option numbers. IESG Feedback from Lars Eggert. * Added a subsection on "Possible Complication: Data-Limited Senders". Feedback from Ilpo Jarvinen. * Added a sentence clarifying the ACK Congestion Control Permitted option. * Added a subsection on "The Sender: Detecting Lost ACK Packets After a Congestion Event" Changes from draft-floyd-tcpm-ackcc-05.txt: * Minor editing. Changes from draft-floyd-tcpm-ackcc-04.txt: * Changed desired status of document from Experimental to Informational, with associated editing changes. * Specified that ACK packets are only sent as ECN-Capable if ECN-capability has been negotiated as specified in RFC 3168. * Added a section on "Possible Addition: Decreasing the ACK Ratio after a Congestion Window Decrease". * Minor editing. Feedback from Alfred Hoenes. Changes from draft-floyd-tcpm-ackcc-03.txt: * General editing. Feedback from Alfred Hoenes. * General editing. Feedback from Gorry Fairhurst. * Added a subsection on "Contention in Wireless Links or in non-switched Ethernet". * Modified Section 4.4 to say that the sender doesn't try to detect lost ACK packets during loss events even if the ACK Ratio is two. * Added a paragraph to Section 4.4 about "Detecting lost ACK packets after changes in the ACK Ratio". Changes from draft-floyd-tcpm-ackcc-02.txt: * Cited RFC 3449 (PILC), RFC 3135 (PILC), and RFC 2760 (TCPSAT). From December 2007 Working Group meeting. * Added a note about the problem of effective ACK Congestion Control for environments with systematic reordering in the data path. * General editing. Feedback from Alfred Hoenes. * Added more about keep-alive packets and window update packets. Feedback from Anantha Ramaiah. * Clarified that SACK "SHOULD" be used. We don't know enough to say "MUST". Changes from draft-floyd-tcpm-ackcc-01.txt: * Added a section on "Keep-alive Packets". Feedback from Anantha Ramaiah. * Added a section on "Possible Complication: TCP Implementations that Skip ACK Packets". Motivated by reports at IETF that many high-bandwidth TCPs don't follow the MUST of sending an ACK for every other packet, if they don't have time. * Added that receivers might have buffer limitations that require that they ack at least every K packets, for some K. Feedback from Sara Landstrom. * Added to the discussion of "Possible Complication: Two-Way Traffic". Feedback from Sara Landstrom. * Added a section on "Possible Complication: Router or Middlebox-based ACK Mechanisms". Feedback from Sara Landstrom. * Added that SACK is required with ACK congestion control. Feedback from Sara Landstrom. * Added a discussion of "Reducing the TCP Acknowledgment Frequency" to the related work section. * Moved the Related Work section to the appendix. Feedback from Alfred Hoenes. * General editing from feedback from Alfred Hoenes. * Added an appendix on "Design Considerations", with a subsection on "The TCP ACK Ratio Option, or an AckNow bit in data packets?". Changes from draft-floyd-tcpm-ackcc-00.txt: * Added a discussion of environments where the reverse path is congested, but the TCP ACK traffic does not significantly contribute to that congestion. In this case, the goal is to minimize the negative impact of AckCC on TCP performance. Feedback from Armando Caro. * In Section 5.7, added that when ABC is used with Aggregate Congestion Control, and rate-based pacing is also used, the sender MAY increase cwnd by more than 2 MSS. Feedback from Armando Caro. * Added a section about measurements of ACK traffic and congestion. Feedback from Armando Caro. * Added a section on the possibility of a TCP receiver-imposed lower bound on the ACK Ratio. Suggested by Mark Allman. * Added to the discussion of the minimum ACK sending rate. Suggested by Mark Allman. * Added a note that if the TCP receiver doesn't sent an.............................................22 6. Evaluating ACKfor every duplicate data packet, the sender's Fast Recovery procedure will have to be modified to take this into account. Feedback from Mark Allman. * Added a discussionCongestion Control ..............................22 6.1. Contention in Wireless Links or in Non-Switched Ethernet ..22 6.2. Keep-Alive and Other Special ACK Packets ..................22 7. Measurements ofevaluatingACK Traffic and CongestionControl. From feedback from Mark Allman. * Some general editing.....................23 8. Acknowledgement Congestion Control inresponse to feedback from Mark Allman. END OF SECTION TO BE DELETED.DCCP's CCID 2 ............23 9. Security Considerations ........................................24 10. IANA Considerations ...........................................25 11. Conclusions ...................................................26 12. Acknowledgements ..............................................26 Appendix A. Related Work ..........................................27 A.1. ECN-Only Mechanisms .......................................28 A.2. Receiver-Only Mechanisms ..................................28 A.3. Middlebox-Based Mechanisms ................................29 Appendix B. Design Considerations .................................29 B.1. The TCP ACK Ratio Option, or an AckNow Bit in Data Packets? .............................................29 Normative References ..............................................30 Informative References ............................................30 1. Introduction This document describes a congestion control mechanism for acknowledgements (ACKs) to TCP. This mechanism is based on the acknowledgement congestion control in DCCP's CCID 2[RFC4340], [RFC4341],([RFC4340], [RFC4341]), which is a successor to the TCP acknowledgement congestion control mechanism proposed byBalakrishnanBalakrishnan, etat.al. in [BPK97]. In this document we use the terminology of senders and receivers, with the sender sending datatraffic,traffic and the receiver sending acknowledgement traffic in response. In CCID 2's acknowledgement congestion control, specified in Section 6.1 of [RFC4341], the receiver uses an ACK Ratio R reported to it by the sender, sending roughly one ACK packet for every R data packets received. The CCID 2 sender keeps the acknowledgement rate roughlyTCP friendlyTCP-friendly by monitoring the acknowledgement stream for lost and marked ACK packets and modifying the ACK Ratio accordingly. For everyRTTround-trip time (RTT) containing an ACK congestion event (that is, a lost or marked ACK packet), the sender halves the acknowledgement rate by doubling the ACK Ratio; for every RTT containing no ACK congestion event, the sender additively increases the acknowledgement rate through gradual decreases in the ACK Ratio. The goal of this document is to explore a similar congestion control mechanism for acknowledgement traffic for TCP. The assumption is that in some environments with congestion on the reverse path, reducing the sending rate for ACK traffic traversing the congested path can help to reduce the congestion itself. For those environments where the reverse path is congested but where TCP ACK traffic does not appreciably contribute to that aggregate congestion, the goal is for TCP's ACK congestion control to have a minimal negative effect on the performance of the TCP connection. Adding acknowledgement congestion control as an option in TCP would require the following: * An agreement from the TCP hosts on the use of ACK congestion control. For the mechanism specified in this document, the TCP hosts would use a new TCP option, the ACK Congestion Control PermittedOption.option. * A mechanism for the TCP sender to detect lost and ECN-marked pure acknowledgement packets. * A mechanism for adjusting the ACK Ratio. The TCP sender would adjust the ACK Ratio as specified in Section 6.1.2 of [RFC4341]. * A method for the TCP sender to inform the TCP receiver of a new value for the ACK Ratio. For the mechanism specified in this document, the TCP sender would use a new TCP option, the ACK RatioOption.option. 2. Conventions and Terminology MSS refers to the Maximum Segment Size. 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]. 3. Overview This section gives an overview of acknowledgement congestion control for TCP. --------------------------------------------------------------- TCPNodeHost A Router TCPNodeHost B (data sender) (data receiver) ---------- ------ ---------- <--- SYN with AckCC Permitted. SYN/ACK with AckCC Permitted ---> . . . Data packets ---> <--- one ACK packet for every two data packets . . . Sender detects a lost ACK packet. Data packet with an ACK Ratio option of 4 ---> <--- one ACK packet for atleastmost every four data packets . . . Sender detects a period with no lost ACK packets. Data packet with an ACK Ratio option of 3 ---> <--- one ACK packet for atleastmost every three data packets --------------------------------------------------------------- Figure 1: Acknowledgement Congestion Control,NodeHost B as theconnection initiator,Connection Initiator, for aconnectionConnection withoutECN.ECN Figure 1 gives an example ofAcknowledgement Congestion Controlacknowledgement congestion control (AckCC) with TCPNodeHost B as the connection initiator. During connection initiation, TCP host B sends an ACK Congestion Control Permitted option on its SYN or SYN/ACK packet. This allows TCP host A (now called the sender) to send instructions to TCP host B (now called the receiver) about the ACK Ratio to use in responding to data packets. Also during connection initiation, TCP host A sends an ACK Congestion Control Permitted option on its SYN or SYN/ACK packet. In combination with TCP host B's sending of an ACK Congestion Control Permitted option, and with the negotiation of ECN-Capability as specified inRFC 3168,[RFC3168], this would allow TCP host B to send its ACK packets as ECN-Capable. The TCP receiver starts with an ACK Ratio of two, generally sending one ACK packet for every two data packets received. The TCP sender detects a lost or ECN-marked ACK packet from the TCPreceiver,receiver and sends an ACK Ratio option of four to the receiver. The TCP receiver changes to an ACK Ratio of four, sending one ACK packet for at most four data packets. The TCP sender uses Appropriate Byte Counting and rate-based pacing in responding to these ACK packets. The TCP sender detects a period with no lost ACKpackets,packets and sends an ACK Ratio option of three to the TCP receiver. The TCP receiver changes back to an ACK Ratio of three, sending one ACK packet for at most three data packets. 4. Acknowledgement Congestion Control The goal of the mechanism proposed in this document is to control pure ACK traffic on the path from the TCP data receiver to the TCP data sender. Note that the approach outlined here is an end-to-end one (as is the approach followed by DCCP's CCID 2 [RFC4341]), but it may also take advantage of explicit congestion information from thenetworknetwork, conveyed by ECN [RFC3168], if available. The ECN specification[RFC3168, section 6.1.4]([RFC3168], see Section 6.1.4) prohibits a TCP receiver from setting the ECT(0) or ECT(1) codepoints in IP packets carrying pure ACKs, but *only* as long as the receiver does *not* implement any form of ACK congestion control. Unlike some of the related work cited in the appendix, in this document we are proposing an end-to- end ACK congestion control mechanism that controls congestion on the reverse path (the path followed by the ACK traffic) by detecting and responding to either marked or dropped ACK packets. 4.1. The ACK Congestion Control Permitted Option The TCP end-points would negotiate the use of ACKCongestion Control (ACKCC)congestion control (AckCC) with a TCPoption,option: the ACK Congestion Control PermittedOption.option. The option number would be allocated by IANA. The ACK Congestion Control Permitted option can only be sent on packets that have the SYN bit set. If TCP end-point A receives an ACK Congestion Control Permitted option from TCP end-point B, then the TCP end-points may use ACKCongestion Controlcongestion control on the pure acknowledgements sent from B to A. This means that TCP end-point A may send ACK Ratio values to TCP end-point B, for TCP end-point B to use on pure acknowledgement packets. Equivalently, if TCP end-point A *does not* receive an ACK Congestion Control Permitted option from TCP end-point B, then TCP end-point A knows not to waste its time detecting lost ACK packets and adjusting and sending the ACK Ratio values. If TCP end-point B receives an ACK Congestion Control Permitted option from TCP end-point A, then the TCP end-points may use ACKCongestion Controlcongestion control on the pure acknowledgements sent from A to B. If TCP end-point B receives an ACK Congestion Control Permitted option from TCP end-point A and also sent an ACK Congestion Control Permitted option to TCP end-point A, andECN-capabilityif ECN-Capability has been negotiated, then TCP end-point B can send its pure ACK packets as ECN-Capable. TCP ACK Congestion Control Permitted Option: Kind: TBD1 +-----------+-----------+ | Kind=TBD1 | Length=2 | +-----------+-----------+ When ACKCongestion Controlcongestion control is used, the default initial ACK Ratio is two, with the receiver acknowledging at least every other data packet. 4.2. The TCP ACK Ratio Option The sender usesaan ACK Ratio TCPOptionoption to communicate the ACK Ratio value from the sender to the receiver. TCP ACK Ratio Option: Kind: TBD2 +-----------+-----------+-----------+ | Kind=TBD2 | Length=3 | ACK Ratio | +-----------+-----------+-----------+ The ACK RatioOptionoption is only sent on data packets. Because TCP uses reliable delivery for data packets, the TCP sender can tell if the TCP receiver has received an ACK RatioOption.option. 4.3. The Receiver: Implementing the ACK Ratio With an ACK Ratio of R, the receiver should send one pure ACK for every R newly received data packets unless the delayed ACK timer expires first. A receiver could simply maintain a counter that increments by one for each new data packet received, and send an ACK packet when the counter reaches R. The receiver would reset the counter to zero whenever a pure or piggybacked ACK issent,sent. If the receiver has buffer limitations, the receiver might have to acknowledge K packets, for some K less than the current ACK Ratio R. In this case, the sender could observe from the acknowledgements that the receiver is acknowledging less than R packets. It is possible for there to be lost or marked ACK packets when there haven't yet been any lost or marked data packets. Thus, the sender could increase the ACK Ratio R even during the initial slow-start.[RFC2581][RFC5681] recommends that the receiver SHOULD acknowledge out-of- order data packets immediately, sending an immediate duplicate ACK when it receives a data segment above a gap in the sequence space, and sending an immediate ACK when it receives a data segment that fills in all or part of a gap in the sequence space. When ACKCongestion Controlcongestion control is being used and the ACK Ratio is at most two, the TCP receiver acknowledges each out-of-order data packet immediately. For an ACK Ratio greater than two, Section 4.6 specifies in detail the receiver's behavior for sending ACKs forout- of-orderout-of-order data packets. 4.4. The Sender: Determining Lost or Marked ACK Packets The TCP data sender uses its knowledge of the ACK Ratio in use by the receiver to infer when an ACK packet has been lost. Because the TCP sender knows the ACK Ratio R in use by the receiver, the TCP sender knows that in the absence of dropped or reordered acknowledgement packets, each new acknowledgement received will acknowledge at most R additional data packets. Thus, if the sender receives an acknowledgement acknowledging more than R data packets, and does not receive a subsequent acknowledgement acknowledging a strict subset (with a smaller cumulative acknowledgement, or with the same cumulative acknowledgement but a strict subset of data acknowledged inSACKselective acknowledgement (SACK) blocks), then the sender can infer that an ACK packet has been dropped. The use of SACK options in ACK packets would help the sender in detecting lost ACK packets. Similarly, the TCP sender knows that in the absence of dropped or delayed data packets from the sender, and in the absence of delayed acknowledgements due to a timer expiring at the receiver, each new pure acknowledgement received will acknowledge at least R additional data packets. In terms of ACK congestion control, the TCP sender does not have to take any actions when it receives an acknowledgement acknowledging less than R additional packets. Out-of-order data packets: If the ACK Ratio is at most two, then the TCP receiver sends aDupACKduplicate acknowledgement (DupACK) for every out-of-order data packet. In this case, the TCP sender should be able to detect lost DupACK packets by counting the number of DupACKs that arrive between the beginning of the loss event and the arrival of the first full or partial ACK, and comparing this number with the number of DupACKs that should have arrived (based on the number of packets being ACKed by the full or partial ACK). Simulations and/or experiments will be needed to determine whether, in practice, it works for the TCP sender to assess lost ACK packets during loss events, for an ACK Ratio of at most two. If the ACK Ratio is greater than two, the TCP receiver does not send a DupACK for every out-of-order data packet, as specified in Section 4.6. For simplicity, the TCP sender does not attempt to detect lost ACK packets during loss events involving forward-path data traffic. That is, as soon as the sender infers a packet loss for aforward- pathforward-path data packet, it stops detection of ACK loss on the reverse path. The sender waits until a new cumulative acknowledgement is received that covers the retransmitted data, and then restarts detection of ACK loss for reverse-path traffic. Detecting lost ACK packets after changes in the ACK Ratio: In detecting lost ACK packets, the sender relies on its knowledge of the ACK Ratio used by the receiver. But when the sender makes a change in the ACKRatio,Ratio and then receives ACK packets, how does the sender know whether the receiver was using the new or the old ACK Ratio when it sent those ACK packets? As specified in the next section, the sender can make only one of two possible changes to the ACK Ratio within one round-trip time. The sender can decrease the ACK Ratio by one, from R to R-1, or the sender can double the ACK Ratio, increasing it from R to 2R. But, in detecting lost ACK packets after an increase in the ACK Ratio, the sender needs to know whether the receiver was using the old ACK Ratio R or the new ACK Ratio 2R. The sender sends ACK RatioOptionsoptions only on data packets, and these data packets are acknowledged by the receiver. One possibility would be for the sender to save the sequence number of the last data packet that contained an ACK RatioOption,option and to remember whether that ACK RatioOptionoption was for an increase or a decrease in the ACK Ratio. Then, if the sender receives an ACK packet acknowledging the saved sequence number,thenthe sender knows that the receiver has begun using the new ACK Ratio. It *might* be sufficient for the sender just to save the information of whether the last change in the ACK Ratio was an increase or a decrease, without saving the sequence number associated with the last ACK RatioOption.option. In this way, if the sender recently increased the ACK Ratio from R to 2R, the sender could be more cautious in detecting lost ACK packets. Another possibility would bethatthat, after sending an ACK RatioOption,option, the sender waits until that data has been ACKed, with the new ACK Ratio in use by the receiver, before resuming the detection of lost ACK packets. However, we do not explore either of these approaches in more detail in this document. 4.4.1. The Sender: Detecting Lost ACK PacketsAfterafter a Congestion Event After a sender's retransmit timeout or fast retransmit, the sender might retransmit a number of data packets dropped from a single window of data. In particular, during a loss recovery period (from the sender's detection of the congestion event up until the sender receives an acknowledgement of all data packets transmitted before the loss recovery periodbegan)began), retransmitted data packets can fill holes in the receiver's sequencespace.space, resulting in irregular jumps in the cumulative acknowledgement field in ACK packets from the receiver. These jumps in the cumulativeacknowleldgementacknowledgement field make it difficult for the sender to reliably detect lost ACK packets during a loss recovery period. Because of this uneven progress of the cumulative acknowledgement field during a loss recovery period, the sender should not attempt to detect lost ACK packets during a loss recovery period. As a consequence, the sender will not increase the ACK Ratio in response to ACK packets that are lost during a loss recovery period. 4.5. The Sender: Adjusting the ACK Ratio The TCP sender will adjust the ACK Ratio as specified in Section 6.1.2 of [RFC4341], as follows. The ACK Ratio always meets the following three constraints. (1) The ACK Ratio is an integer. (2) The minimum ACK sending rate: The ACK Ratio does not exceed max(2, cwnd/(K*MSS)), rounded up, for K=2. As a result, the TCP receiver generally sends at least two ACKs in response to a window of at least four full-sized segments. (3) If the congestion window is at least as large as four full-sized segments, then the ACK Ratio is at least two. In other words, an ACK Ratio of one is only allowed when the congestion window is at most three full-sized segments. The sender changes the ACK Ratio within those constraints as follows. For each congestion window of data with lost or marked ACK packets, the ACK Ratio R is doubled;andfor each cwnd/(MSS*(R^2 - R)) consecutive congestion windows of data with no lost or marked ACK packets, the ACK Ratio is decreased by 1. (See Appendix A of RFC 4341 for the derivation. Note that Appendix A of RFC 4341 assumes a congestion window W in packets, while we use cwnd in bytes.) As stated in the previous section, when the ACK Ratio is greater thantwotwo, the sender does not attempt to detect lost ACK packets during loss events for forward-path traffic. For a constant congestion window, these modifications to the ACKratioRatio give an ACK sending rate that is roughlyTCP friendly.TCP-friendly. Of course, cwnd usually varies over time; the dynamics will be rather complex, but roughly TCP friendly. We recommend that the sender determines when to decrease the ACK Ratio by one (i.e., by calculating the number of in-order data packets to count) right after an ACK loss event. The frequency of ACK Ratio negotiations: The sender need not keep the ACK Ratio completely up to date. For instance, it may rate-limit ACK Ratio renegotiations to once every four or five round-trip times, or to once every second or two. The sender should not attempt to change the ACK Ratio more than once per round-trip time. In particular, before sending a packet with a new value for the ACK Ratio, the sender should verify that the receiver has acknowledged a data packet containing an ACK RatioOptionoption for the old value of the ACK Ratio. Additionally, the sender may enforce a minimum ACK Ratio of two, or it may set the ACK Ratio to one for half-connections with persistent congestion windows of 1 or 2 packets. The minimum ACK sending rate: From rule (2) above, the TCP receiver always sends at least K=2 ACKs for a window of data, even in the face of very heavy congestion on the reverse path. We would note, however, that if congestion is sufficiently heavy, all theackACK packets are dropped, and then the sender falls back on an exponentially backed-off timeout. Thus, if congestion is sufficiently heavy on the reverse path, then the sender reduces its sending rate on the forward path, which reduces the rate on the reverse path as well. One possibility would be to use a higher minimumACK sendingACK-sending rate, adding a constant upper bound on the ACK Ratio. That is, if the ACK Ratio also had an upper bound of J, independent of cwnd, then the receiver would always send at least one ACK for every J data packets, regardless of the level of congestion on the reverse path. 4.5.1. Possible Addition: Decreasing the ACK Ratio after a Congestion Window Decrease After a lost or ECN-marked data packet, the data sender halves the congestion window, thus halving the sending rate for data packets, while making no change to the ACK Ratio R. As a result, after a congestion event involving a data packet, the sending rate for ACK packets on the return path is also halved. If the congestion event was a lost or ECN-marked data packet, this was due to congestion on the forward path, which may have been unrelated to conditions on the reverse path. Thus, it has been suggested that the sender could decrease the ACK Ratio R when it halves the congestion window; in this case, the halving of the sending rate for data packets would not be accompanied by a halving of the sending rate for ACK packets also. However, there are a few cases where a congestion event involving data packets could in fact have been caused by congestion on the reverse path. As one example, the path could include a congested multiaccess link where forward-path and reverse-path traffic can interfere with each other. Thus, in this case it might be desirable if a congestion event resulted in a reduction in the sending rate of ACK packets as well as of data packets. As a second example of a congestion event involving congestion of the reverse path, a congestion event could be caused not by a dropped or ECN-marked data packet, but by a window of dropped ACK packets, resulting in a retransmit timeout at the data sender. After a retransmit timeout, the TCP sender will slow-start, reducing the congestion window to the initialwindow,window and setting the ACK Ratio to at most two. Until further investigation, the sender will not decrease the ACK Ratio as a result of a congestion event involving a data packet. 4.6. The Receiver: Sending ACKs for Out-of-Order Data Segments RFC25815681 says that "a TCP receiver SHOULD send an immediate duplicate ACK when an out-of-order segmentarrives."arrives". After three duplicate ACKs are received, the TCP sender infers a packet loss and implementsFast Retransmitfast retransmit andFast Recovery,fast recovery, retransmitting the missing packet. When the ACK Ratio is at most two, the TCP receiver should still send an immediate duplicate ACK when an out-of-order segment arrives. In general, when the ACK Ratio is greater than two, the TCP receiver still should send an immediate duplicate ACK for each of the first three out-of-order segments that arrive in a reordering event. (We define a reordering event at the receiver as beginning when an out- of-order segment arrives, and ending when the receiver holds no more out-of-order segments.) However, when the ACK Ratio is greater than two, after the first three duplicate ACKs have been sent, the TCP receiver should perform ACK congestion control on the remaining ACKs to be sent during the current reordering event. That is, after the first three duplicate ACKs have been sent, the TCP receiver should return to sending an ACK for every R segments, instead of sending an ACK for every out-of-order segment in that reordering event.[We(We note that theFast Recoveryfast recovery procedure of the TCP sender might have to be modified to take this change intoaccount.]account.) In addition, a receiver must not withhold an ACK for more than 500 ms. We note that in an environment with systematic reordering in the data path (e.g., every set of K data packets arrives in inverted order, for some value of K), the guideline above could result in the receiver sending an ACK for every data packet, regardless of the ACK Ratio. In such an environment with persistent reordering, the receiver may decide not to send an immediate duplicate ACK for each of the first three out-of-order segments that arrive in a reordering event. We leave the investigation of mechanisms for effective ACKCongestion Controlcongestion control in environments with systematic reordering for future work. 4.7. The Sender: Response to ACK Packets The use of a large ACK Ratio can generateline rateline-rate data bursts at a TCP sender. When the ACK Ratio is greater than two, the TCP sender should use some form of burstmitigation,mitigation or rate-based pacing for sending data packets in response to a single acknowledgement. The use of rate-based pacing will be limited by the timer granularity at the TCP sender. We note that the interaction of ACK congestion control and burst mitigation schemes needs further study. Byte counting at the sender: In addition to the impact of a large ACK Ratio on the burstiness of the TCP sender's sending rate, a large ACK Ratio can also affect thedata sendingdata-sending rate by slowing down the increase of the congestion window cwnd. As specified in RFC2581,5681, in slow-start the TCP sender increases cwnd by one full-sized segment for each new ACK received (in this context, a "new ACK" is an ACK that acknowledges new data). RFC25815681 also specifies that in congestion avoidance, the TCP sender increases cwnd by roughly 1/cwnd full-sized segments for each ACK received, resulting in an increase in cwnd of roughly one full-sized segment per round-trip time. In this case, the use of a large ACK Ratio would slow down the increase of the sender's congestion window. RFC25815681 notes that during congestionavoidanceavoidance, it is also acceptable to count the number of bytes acknowledged by newACKs,ACKs and to increase cwnd based on the number of bytes acknowledged, rather than on the number of new ACKs received. Thus, the sender should use this form of byte counting withAcknowledgement Congestion Control,acknowledgement congestion control, sothat the Acknowledgement Congestion Controlthat the acknowledgement congestion control doesn't slow down the window increases for the data traffic sent by the sender. Because rate-based pacing should be used withAcknowledgement Congestion Control,acknowledgement congestion control, as recommended earlier in this section, the TCP sender may increase the congestion window by more than two MSS for each ACK. We note that for Appropriate Byte Counting (ABC) as specified in [RFC3465], duringSlow-Startslow-start the sender is allowed to increase the congestion window by at most two MSS for each ACK. It has not yet been determined whether, withAcknowledgement Congestion Control,acknowledgement congestion control, the TCP sender could use ABC duringSlow-Start.slow-start. If ABC is used withAcknowledgement Congestion Control,acknowledgement congestion control, then when the TCP sender is in slow-start and the ACK Ratio is greater than two, the TCP sender may increase the congestion window by more that two MSS in response to a single ACK. Section 4.2 of [LL07] explores some of the issues with the use of ABC for TCP connections with a fixed ACK Ratio greater than two. Inferring lost data packets: As cited earlier, RFC25815681 infers that a packet has been lost after it receives three duplicate acknowledgements. Because ACKCongestion Controlcongestion control is only used when there is congestion on the reverse path, after a packetlossloss, one or more of the three duplicate ACKs sent by the receiver could be lost on the reverse path, and the receiver might wait until it has received R more out-of-order segments before sending the next duplicate ACK. All this could slow downFast Recoveryfast recovery andFast Retransmitfast retransmit quite a bit. The use of SACK can help reduce the potential delay in detecting a lost packet. With SACK, a TCP sender can use the information in the SACK option to detect when the receiver has received at least three out-of-order datapackets,packets and to initiateFast Retransmitfast retransmit andFast Recoveryfast recovery in this case, even if the TCP sender has not yet received threedupduplicate ACKs. 4.8. Possible Addition: Receiver Bounds on the ACK Ratio It has been suggested that in some environments, the TCP receiver might want to set lower bounds on the ACK Ratio. For example, the TCP receiver might know from configuration or from past experience that the bandwidth on the return path is limited, and might want to set a lower bound (greater than two) on the ACK Ratio R. If this is included, this would require a TCPOptionoption from the TCP receiver to the TCPsendersender, reporting the lower bound on the ACK Ratio. Care would also be needed so that the lower bound on the ACK Ratio was only in effect when the TCP sender's congestion window was sufficiently high. 5. Possible Complications 5.1. Possible Complication: Delayed Acknowledgements The receiver could send a delayed acknowledgement acknowledging a single packet, even when the ACK Ratio is two or more. This should not cause false positives (when the TCP sender infers a loss when no loss happened). The TCP sender only infers that a pure ACK packet has been lost when no data packet has beenlost,lost and an ACK packet arrives acknowledging more than R new packets. Delayed acknowledgements could, however, cause false negatives, with the TCP sender unable to detect the loss of an ACK packet sent as a delayed acknowledgement. False negatives seem acceptable; this would result in approximate ACK congestion control, which would be better than no ACK congestion control at all. In particular, when this form of false negative occurs, it is because the receiver is sending acknowledgements at such a low rate that it is sending delayed acknowledgements, rather than acknowledging at least R data packets with each acknowledgement. 5.2. Possible Complication: DuplicateAcknowledgements.Acknowledgements As discussed in Section 4.3, RFC25815681 states that "a TCP receiver SHOULD send an immediate duplicate ACK when an out-of-order segment arrives", and that "a TCP receiver SHOULD send an immediate ACK when the incoming segment fills in all or part of a gap in the sequence space"[RFC2581].[RFC5681]. When ACKCongestion Controlcongestion control is used, the TCP receiver instead uses the guidelines from Section 4.6 to govern the sending of duplicate ACKs. More work would be useful to evaluate the advantages and disadvantages of this approach in terms of the potential delay in triggeringFast Retransmit,fast retransmit, and to explore alternate possibilities. 5.3. Possible Complication: Two-WayTraffic.Traffic In a TCP connection with two-way traffic, the receiver could send some pure ACKpackets,packets and some acknowledgementspiggy-backedpiggybacked on data packets. The receiver would still follow the rule of only sending a pure ACK packet when there is a need for a delayedACK,ACK or when there are R new data packets to acknowledge. In a connection with two-way traffic, the TCP sender would not always be able to infer when a pure ACK packet had been lost. For example, the receiver could send a pure ACK packet acknowledging packetK, andK and, soon afterwards, the receiver could send anewly-generatednewly generated data packet for the reverse-path flow also acknowledging packet K. The pure ACK packet could be dropped in the network, and the sender would not be able to detect this drop. Fortunately, there are limitations to the potential problems caused by undetected ACK losses in two-way traffic. The sender will only fail to detect the loss of a pure ACK packet if the ACK packet was followed by a data packet with the same acknowledgement number. If the reverse-path traffic for the connection is dominated by data traffic, then the congestion control for the data traffic is more important than the congestion control for the pure ACK traffic. If the reverse-path traffic is dominated by pure ACK traffic, then the sender would detect any losses of pure ACK packets followed by other pure ACK packets, and this would include most of the pure ACK packets for that connection. Thus, the sender's failure to detect the loss of a pure ACK packet followed by a data packet with the same acknowledgement number would not disable acknowledgement congestion control for a TCP connection with two-way traffic. 5.4. Possible Complication: Reordering of ACKPackets.Packets It is possible for ACK packets to be reordered on the reverse path. The TCP sender could either use a parallel mechanism to the DupACK threshold to infer when an ACK packet has been lost, as with TCP, or, more robustly, the TCP sender could wait an entire round-trip time before inferring that an ACK packet has been lost [RFC4653]. 5.5. Possible Complication: Abrupt Changes in the ACKPath.Path What happens when there are abrupt changes in the reverse path, such as from vertical handovers? Can there be any problems that would be worse than those experienced by a TCP connection that is not using ACK congestion control? 5.6. Possible Complication:Corruption.Corruption As with data packets, it is possible for ACK packets to be dropped in the network due to corruption rather than congestion. The current assumption of ACK congestion control is that all losses should be taken as indications of congestion. If there is ever some better mechanism for identifying and responding to corrupted TCP data packets, the same solution hopefully would apply to corrupted ACK packets as well. One problem with the interaction of packet corruption and congestion control, for both data and ACK packets, is that it is not always obvious when the packet corruption is related tocongestion,congestion and when the packet corruption is independent of the level of congestion on the corrupting link. In environments where packet corruption exists and is independent of the level of congestion on the corrupting link, applying ACK congestion control would only make the connection more sensitive to ACK packetcorruption,corruption by reducing the number of ACKs that are sent. 5.7. Possible Complication: ACKsThatthat Don't Contribute toCongestion.Congestion It is possible for the ACK packets in a TCP connection to traverse a congested path where ACK packets aredropped,dropped but where the ACK packets themselves don't significantly contribute to the congestion on the path. In scenarios where ACK packets are dropped but where ACK traffic doesn't make a significant contribution of the congestion on the path, the use of ACKCongestion Controlcongestion control would not contribute to reducing the aggregate congestion on the path. In this case, one goal is to minimize the negative impact of ACKCongestion Controlcongestion control on the overall performance of the TCP connection. J TCP conns. link L -> J TCP conns. data -> |---| |---| <- ACKs <-------------> | | | | <-------------> | | <-------------> | | <-------------> | | | | <-------------> K TCP conns. |---| |---| K TCP conns. ACKs -> <- link L1 <- data Figure 2. AscenarioScenario with JforwardForward and KreverseReverse TCPconnections.Connections To explore the relative contribution of ACK traffic on congestion, it is useful to consider a simple scenario with a congested unidirectional link L carrying data traffic from J TCP connections (the forward TCP connections) and ACK traffic from K TCP connections (the reverse TCP connections). We assume that all TCP connections have the same round-trip time R and the same data packet size S of 1500 bytes. We further assume that all of the forward TCP connections have the same data packet drop rate p and the same congestion window W, and that all of the reverse TCP connections have the same congestion window W1 and the same ACK packet drop rate p1. (The packet drop rate for data packets is defined as the fraction of arriving data packets that are dropped; similarly, the packet drop rate for ACK packets is the fraction of arriving ACK packets that are dropped.) The J TCP connections each use a bandwidth on link L of 1500*W/R bytes per second, and the K TCP connections, without ACKCongestion Control,congestion control, each use a bandwidth on link L of 40*(W1/2)/R bytes per second. This gives a ratio of 75*(J/K)*(W/W1) for TCP data bandwidth to TCP ACK bandwidth on link L. The ratio J/K is the ratio between the number of forward and reverse TCP connections on link L, and could have a wide range of values (e.g., large for an access link from a web server, and small for an access link to a web server). For this scenario, the ratio W/W1 is largely a function of the different levels of congestion on the forward and reverse paths. To explore the possibilities, we will consider some of the range of congestion control mechanisms for the congested link. First, we consider scenarios where the limitation on the congested path is in the link bandwidth in bytes per second. Cases (1), (2), (3), (5), and (7) below represent the best scenarios for ACKCongestion Control,congestion control, where the fraction of packet drops for TCP ACK packets roughly matches the TCP ACK packets' contribution to congestion.[In(In several of these cases thisisis, atbestbest, a rough match because the data packets are a factor in the bandwidth and in the queue limitations, while the TCP ACK packets are only a factor in the queuelimitations.]limitations.) Cases (4) and (8) below represent problematic scenarios where the fraction of packet drops for TCP ACK packets is much higher than the TCP ACK packets' contribution to congestion (in terms of taking space in a congested queue, using scarce CPU cycles at the congested router, or using scarce bandwidth). Case (6) below represents scenarios where ACKCongestion Controlcongestion control would not be effective because it would not be invoked. In the scenarios in case (6), the fraction of packet drops for TCP ACK packets would be much smaller than the TCP ACK packets' contribution to congestion. (1) The Drop-Tail queue for link L is measured in packets. In this case, the congested queue can accommodate Npackets, regardlesspackets (regardless of packetsize,size), there is a limitation of both bandwidth in bytes per second and also in queue space in packets, and large data packets and small TCP ACK packets should see similar packet drop rates. Although TCP ACK packets most likely aren't a major factor in the bandwidth limitation, they can be a significant contribution to the limitation of queue space. So, while the packet drop rate for ACK packets could be high in times of congestion, the ACK packets are contributing to that congestion somewhat by using scarce buffer space. (2) The Drop-Tail queue is measured in bytes. In this case, the congested queue can accommodate M bytes of packets, and TCP ACK packets don't make a significant contribution to either the bandwidth limitation or to the limitation in queue space. It is also the casethatthat, in this scenario, even if there is heavy congestion, the packet drop rate for TCP ACK packets should be small (because small ACK packets can often find space on the congested queue when large data packets can't find space). In this case, ACKCongestion Controlcongestion control should not present any problems; the TCP ACK packets aren't contributing significantly tocongestion,congestion and aren't experiencing significant packet drop rates. (3) The RED queue is in packetmode,mode and is measured in packets. This is similar to case (1) above. Because the queue is measured in packets, small TCP ACK packets contribute to the limitation in queuespace,space but not to the limitation in link bandwidth. Because the queue is in packet mode, large data packets and small TCP ACK packets should see similar packet drop rates. (4) The RED queue is in packetmode,mode but is measured in bytes. Because the queue is measured in bytes, small TCP ACK packets don't contribute significantly to either the limitation in queue space or to the limitation in link bandwidth. Because the queue is in packet mode, large data packets and small TCP ACK packets should see similar packet drop rates. If it existed, this case would be problematic, because the TCP ACK packets would not be contributing significantly to thecongestion,congestion but they would see a similar packet drop rate as the large data packets that are contributing to congestion. (5) The RED queue is in bytemode,mode and is measured in bytes. This is similar to case (2) above. Because the queue is measured in bytes, small TCP ACK packets don't contribute significantly to either the limitation in queue space or to the limitation in link bandwidth. At the same time, because the queue is in byte mode, small TCP ACK packets see much smaller packet drop ratesthatthan those of large data packets. (6) The RED queue is in bytemode,mode but is measured in packets. Because the queue is measured in packets, small TCP ACK packets contribute to the limitation in queuespace,space but not to the limitation in link bandwidth. Because the queue is in byte mode, small TCP ACK packets see much smaller packet drop ratesthatthan those of large data packets. If this case existed, TCP ACK packets would contribute somewhat tocongestion,congestion but would see a much smaller packet drop rate than that of large data packets. Next, we consider scenarios where the limitation on the congested link is in CPU cycles at the router in packets per second, not in bandwidth in bytes per second. (7) The CPU load imposed by TCP ACK packets is similar to the load imposed by other packets (e.g., TCP data packets). ACKCongestion Controlcongestion control would be useful in this scenario, particularly if TCP ACK packets saw the same packet drop rates as TCP data packets. (8) The CPU load imposed by TCP ACK packets is much less than the load imposed by other packets (e.g., TCP data packets). If TCP ACK packets saw a smaller packet drop rate than TCP data packets, then the TCP ACK packet drop rate would roughly match the TCP ACK packets' contribution to congestion, and this would be good. If TCP ACK packets saw the same packet drop rate as TCP data packets, this case would be problematic, because the TCP ACK packets would not be contributing significantly to the congestion, but they would see a similar packet drop rate as the large data packets that are contributing to congestion. 5.8. Possible Complication: TCP Implementations that Skip ACK Packets It has been reported in IETF meetings that current TCP implementations do not always acknowledge at least every other data packet, as required by the TCP specifications. In particular, it has been reported that if a TCP receiver receives many data packets in a burst, before it is able to send an acknowledgement, then it might send a single acknowledgement for the burst of packets. We note that such a behavior would cause complications for a TCP connection that used ACK congestion control, as the sender would not be able to determine when an ACK packet had been dropped in thenetwork, andnetwork or when the packet had been skipped by the receiver because it was processing a burst of data packet arrivals. One possibility for addressing this problem would be for TCP receivers using ACK congestion control to be required to send an acknowledgement for each R packets, for ACK Ratio R. In this case, if the receiver received a large burst of data packets back-to-back, the receiver would be required to send a responding burst of ACK packets, one for each set of R data packets. A second possibility for addressing this problem would be to define a TCP option or flag that the TCP receiver could use when sending an ACK packet to inform the sender that the TCP receiver `skipped' some ACK packets, so that the sender should not infer ACK loss if some previous ACK packets seem to be missing. Future work will explore the costs and benefits of these two approaches. 5.9. Possible Complication: Router orMiddlebox-basedMiddlebox-Based ACK Mechanisms One possible complication would be the interaction of ACKCongestion Controlcongestion control with router-based or middlebox-based ACKmechanismsmechanisms, such as ACK filtering along the reverse path[BPK97] [WWCM99] [BA03] [KLS07].([BPK97], [WWCM99], [BA03], [KLS07]). We are not aware of the deployment of ACK filtering in the Internet, but any testing of ACK congestion control would have to look for interactions with any middlebox-based mechanisms regarding ACK packets. In particular, we would consider interactions of ACK congestion control with the possible deployment of ACK filtering on satellite links, cable modems, or the like. 5.10. Possible Complication: Data-Limited Senders The mechanism for adjusting the ACK Ratio is designed with the goal of having the TCP receiver send at least two ACKs in response to each window of at least four full-sized data packets. However, with ACKCongestion Controlcongestion control in combination with a data-limited sender, it is possible for the sender to send at least four full-sized data packets in a round-trip time, with the receiver sending less than two ACKs in response. As an example, consider a connection where thethesender's congestion window W is greater than four and the ACK Ratio R is at its maximum value of W/2. If the sender becomes data-limited and sends less than W data packets in a round-trip time, then the receiver can send less than two ACK packets in response. This behavior makes the connection more sensitive to the loss of an occasional ACK packet. Of course, there is still the safety mechanism of the receiver sending an ACK packet when the delayed ACK timer expires. However, more work would be useful to explore the conflicting goals of a congestion-controlled ACK flow and a timely ACK response to the sender for the specific case of a connection with a data-limited sender and a congested ACK path. 5.11. Other Issues Are there any problems caused by the combination of two-way traffic and reordering? Or other issues that have not yet been addressed? 6. Evaluating ACK Congestion Control Evaluating ACKCongestion Controlcongestion control will have two components: (1) evaluating the effects of ACKCongestion Controlcongestion control on an individual TCPconnection;connection, and (2) evaluating the effects of ACKCongestion Controlcongestion control on aggregate traffic (including the effects of ACKCongestion Controlcongestion control on the aggregate congestion of the path). The first part, evaluating ACKCongestion Controlcongestion control on the performance of an individual TCP connection, will have to examine those scenarios where ACKCongestion Controlcongestion control might help the performance of a TCPconnection,connection and those scenarios where the use of ACKCongestion Controlcongestion control might cause problems. The second part, evaluating the effects of ACKCongestion Controlcongestion control on aggregate traffic, should consider scenarios where the use of ACKCongestion Controlcongestion control helps all of the connections sharing a path by reducing the aggregate congestion on the path. This part should also see if there are scenarios where ACKCongestion Controlcongestion control causes problems by increasing the burstiness of aggregatetraffic,traffic or by otherwise changing traffic dynamics. 6.1. Contention in Wireless Links or innon-switchedNon-Switched Ethernet One possible benefit of ACK congestion control is that it could reduce contention in wireless links, shared Ethernet, or other environments with contention between forward-path and reverse-path traffic[AJ03] [KIA07].([AJ03], [KIA07]). At the same time, contention on the shared medium won't necessarily result in dropped ACK packets, and therefore wouldn't necessarily be detected by ACK congestion control. 6.2.Keep-aliveKeep-Alive and Other Special ACK Packets Some TCP hosts send keep-alive packets when no data or ACK packets have been received over a long period of time [KEEP-ALIVE]. This keep-alive mechanism is not addressed in TCP specifications. However, such keep-alive packets, if used, should not interact with ACK congestion control one way or another. For ACK congestion control, the ACK Ratio is set small enough to allow the receiver to generally send at least two ACKs for a window of data. In addition, the receiver uses a delayed ACK timer with the ACK Ratio, always sending an acknowledgement if the delayed ACK timer expires. Thus, ACK congestion control will never cause the receiver to delay indefinitely in sending an acknowledgement for a received data packet. Some TCP implementations send pure ACK packets as window probes, to solicit an ACK packet from the other end with current window information. Such ACK packets will generally be orthogonal to the ACKCongestion Controlcongestion control specified in thisdraft.document. TCP receivers also can send pure ACK packets as window update packets announcing a new value for the receive window, even when the acknowledgement number and SACK options in the ACK packet are not new. The receiver may send window update packets even if the ACKCongestion Controlcongestion control mechanism would say that it is not time yet to send a pure ACK. The sender will not necessarily be able to detect the loss of a window update ACK packet. 7. Measurements of ACK Traffic and Congestion There are a number of studies about the traffic composition on various links in the Internet, reporting the fraction of bandwidth used by TCP data and by TCP ACK traffic [Studies]. Are there any studies that show the relative packet drop rates for TCP data and ACK traffic, for particular links or for particular TCP connections? Are there any studies of congested links that show the fraction of traffic on the congested link, or in the congested queue, that consist of TCP ACK packets? 8. Acknowledgement Congestion Control in DCCP's CCID 2 In the transport protocol DCCP [RFC4340], the congestion control mechanism for the CCID 2 profile is based on that of TCP. This section briefly discusses some of the issues that have been addressed in the acknowledgement congestion control already standardized in CCID2.2 [RFC4341]. Rate-based pacing: For CCID 2, RFC 4341 says that "senders MAY use a form ofrate-basedrate- based pacing when sending multiple data packets liberated by a single ACK packet, rather than sending all liberated data packets in a single burst." However, rate-based pacing is not required in CCID 2. Increasing the congestion window: For CCID 2, RFC 4341 says that "when cwnd < ssthresh, meaning that the sender is in slow-start, the congestion window is increased by one packet for every two newly acknowledged data packets with ACK Vector State 0 (not ECN-marked), up to a maximum of ACK Ratio/2 packets per acknowledgement. This is a modified form of Appropriate Byte Counting [RFC3465] that is consistent with TCP's current standard (which does not include byte counting), but allows CCID 2 to increase as aggressively as TCP when CCID 2's ACK Ratio is greater than the default value of two. When cwnd >= ssthresh, the congestion window is increased by one packet for every window of data acknowledged without lost or marked packets." 9. Security Considerations What are the sender's incentives to cheat on ACK congestion control? What are the receiver's incentives to cheat? What are the avenues open for cheating? As long as ACK congestion control is optional, neither host can be forced to use ACK congestion control if it doesn't want to. So ACK congestion control will only be used if the sender or receiver have some chance of receiving some benefit. As long as ACK congestion control is optional for TCP, there is little incentive for the TCP end nodes to cheat on non-ECN-based ACK congestion control. There is nothing now that requires TCP hosts to use congestion control in response to dropped ACK packets. What avenues for cheating are opened by the use of ECN-Capable ACK packets? If the end nodes can use ECN to have ACK packets marked rather than dropped, and if the end nodes can then avoid the use of ACK congestion control that goes along with the use of ECN on ACK packets, then the end nodes could have an incentive to cheat. Senders could cheat by not instructing the receiver to use a higher ACK Ratio; the receiver would have a hard time detecting this cheating. Receivers could cheat by not using the ACK Ratio they were instructed to use, but senders could easily detect this cheating. However, receivers could also cheat by not using ACK congestion control and still sending ACK packets asECN-capable,ECN-Capable, so ACK congestion control is not a necessary component for receivers to cheat about sendingECN-capableECN-Capable ACK packets. One question would be whether there is any way for receivers to cheat about sending ECN- Capable ACK packets and not using appropriate ACK congestion control without this cheating being easily detected by the sender. What about the ability of routers or middleboxes to detect TCP receivers that cheat by inappropriately sending ACK packets as ECN-capable?Capable? The router will only know if the receiver is authorized to send ACK packets as ECN-Capable if the router can see traffic on both the forward and reversepaths,paths and monitored both the SYN and SYN/ACK packets (and was able to read the TCP options in the packet headers). If ACK congestion control has been negotiated, the router will only know if ACK congestion control is being used correctly by the receiver if it can monitor the ACK Ratio options sent from the sender to the receiver. If ACK congestion control is being used, the router will not necessarily be able to tell if ACK congestion control is being used correctly by the sender, because drops of ACK packets might be occurring after the ACK packets have left the router. However, if the router sees the ACK Ratio options sent from the sender, the router will be able to tell if the sender is correctly accounting for those ACK packets that are dropped or ECN-marked on the path from the receiver to the router. 10. IANA Considerations No IANA action is needed at this time. If this document was advanced as Experimental or Proposed Standard, then IANA would allocate the option numbers for the two TCP options, the ACK Congestion Control PermittedOption,option, and the ACK RatioOption.option. Inthissuch a case, the following two lines would be added to the TCP Option Numbers registry(currently located at http://www.iana.org/assignments/tcp- parameters):(maintained by IANA -- http://www.iana.org): Kind Length Meaning Reference ---- ------ --------------------------------- ----------- TBD1 2 ACK Congestion Control Permitted[RFC{this}][RFCXXXX] TBD2 3 ACK Ratio[RFC{this}][RFCXXXX] In the absence of TCP option numbers allocated by IANA, experimenters may use the TCP Option Numbers set aside for Experimentation inRFC4727RFC 4727 [RFC4727]. As stressed in Section 1 of RFC 3692 [RFC3692], the TCP Option Numbers in the experimental range are intended for experimentation and testing and not for wide or general deployments; these option numbers could be in use by other experimentors for other purposes. 11. Conclusions This document specifies a congestion control mechanism for acknowledgementtraffic(ACKs) traffic forTCP,TCP and discusses the possible complications. We are deferring a recommendation on the use of this mechanism for TCP until it has been evaluated more fully. 12. Acknowledgements Many thanks for feedback from Mark Allman, Armando Caro, Alfred Hoenes, Ilpoo Jarvinen, Sara Landstrom, Anantha Ramaiah, and Michael Welzl, and for contributed text from Michael Welzl. Appendix A.Appendix:Related Work There exist several papers dealing with controlling congestion in the reverse path of a TCP connection, especially in the context of networks with bandwidth asymmetry. Some of these proposals require explicit support from routers or middleboxes, whereas others are "pure" end-to-end schemes. RFC 3449 [RFC3449] discusses TCP performance problems that arise in TCP connections over asymmetric paths. Section 3 of RFC 3449 describes in detail how congestion on the ACK path can affect overall TCP performance. RFC 3449 also outlines a number of proposed mitigations, including ACKCongestion Control.congestion control. The experimental ACKCongestion Controlcongestion control mechanism discussed inthethat RFC relies on ECN, with the TCP sender detecting congestion on the ACK path fromECN-markedECN- marked packets.TheRFC 3449 also discusses two receiver-based mechanisms, the Window Prediction Mechanism (WPM) [CLP98] and Acknowledgement based on Cwnd Estimation (ACE) [MJW00], for using a dynamic ACK Ratio. RFC 3449 also considerslinklink- andnetwork layernetwork-layer techniques that address congestion on the upstream path. These include headercompression, andcompression as well as bandwidth management techniques for the upstreamlinklink, including ACK filtering and ACK reconstruction. RFC 3135[RFC3135] on[RFC3135], "Performance Enhancing Proxies Intended to Mitigate Link-RelatedDegradations"Degradations", surveys a range of Performance Enhancing Proxies used to improve TCP behavior, including proxies for ACK filtering and reconstruction. RFC2760 [RFC2760] on2760 [RFC2760], "Ongoing TCP Research Related toSatellites"Satellites", discusses both ACKCongestion Controlcongestion control and ACKFilteringfiltering andReconstruction,reconstruction, with detailed descriptions of the mechanisms proposed byBalakrishnanBalakrishnan, et al. in [BPK97].LandstromLandstrom, et al. in [LL07] explore a mechanism where the receiver sends only four acknowledgements per window of data, along with the sender using a form of Appropriate Byte Counting. In addition, the receiver reverts to a lower acknowledgement frequency after a timeout, to avoid unnecessaryRetransmit Timeouts.retransmit timeouts. One conclusion of the paper is that pacing at the sender introduces an additionaldelay,delay and might not be necessary. A key result of the paper isthatthat, with the use of some form of byte counting at the sender, it is possible for TCP to use a lower acknowledgement frequency than that of delayed acknowledgements. A.1.ECN-onlyECN-Only MechanismsBalakrishnanBalakrishnan, et al. in [BPK97] describe the use of ECN to detect congestion in the return path, in order to reduce the sending rate of ACKs. The use of a RED queue in the reverse path allows for marking of ACK packets. The sender echoes back ECN congestion marks to the receiver. The receiver keeps an ACKratioRatio d (called the "delayed-ACK factor"), specifying the number of data segments that have to be received before the receiver sends a new ACK. The ACKratioRatio d is managed using multiplicative-increase, additive-decrease; upon reception of a congestion mark, the receiver doubles the value of d (hence dividing the ACK sending rate by two). The ACKratioRatio decreases linearly for each RTT in which no ECN-marked ACKs are received. Multiple congestion marks received in an RTT are treated as a single congestion event, i.e., d can be doubled at most once per RTT. The TCP timestamp option is used to keep track of the RTT values. A.2.Receiver-onlyReceiver-Only Mechanisms In [MJW00], TamMing-ChitMing-Chit, et al. propose a receiver-based method for calculating an "appropriate" number of ACKs per congestion window (cwnd) of data, in order to alleviate congestion on the reverse path. The sender's cwnd is estimated at the receiver by counting the number of received packets per RTT (which also has to be estimated by the receiver). From this estimate, a simple algorithm is used to compute the number of ACKs to be sent per cwnd. The algorithm enforces a lower bound on the number of ACKs per cwnd, aiming at minimizing the probability of timeout at the sender due to ACK loss. Similarly, the ACKratioRatio is upper-bounded so as to avoid excessive ACK delay.BlandfordBlandford, et al. [BGG+07] propose an end-to-end, receiver-oriented scheme called "smartacking". The algorithm is based upon thereceiverreceiver's monitoring the inter-segment arrival time for data packets and adapting the ACK sending rate in response. When the bottleneck link is underutilized, ACKs are sent frequently (up to one ACK per received segment) to promote fast growth of the congestion window. On the other hand, when the bottleneck is close to full utilization, the algorithm tries to reduce control traffic overhead and slow congestion window growth by generating ACKs at the minimum rate needed to keep the data pipe full. Reducing the number of ACKs (or, equivalently, increasing the amount of bytes acknowledged by each ACK) can increase the burstiness of the TCP sender. Hence, any mechanism as those cited above should be coupled with a burst mitigation technique,Rate-Based Pacing,such as rate-based pacing, that paces the sending of data segments[AB05] [ASA00] [BPK97].([AB05], [ASA00], [BPK97]). A.3.Middlebox-basedMiddlebox-Based Mechanisms ACK filtering (AF) [BPK97] fromBalakrishnanBalakrishnan, et al. is arouter-basedrouter- based technique that tries to reduce the number of ACKs sent over the congested return link. With AF, an arriving ACK may replace preceding, older ACKs at the bottleneck queue. An aggressive replacement policy might guarantee that at most one ACK per connection is waiting in the queue, alleviating congestion. However, as in other proposals, care must be taken to avoid sender timeouts in case the (too few) ACKs resulting from the filtering get lost. The idea of filtering ACKs has been extended in [YMH03] to deal with SACK information.AweyaAweya, et al. [AOM02] present a middlebox-based approach for mitigating data packet bursts and for controlling the uplink ACK congestion. The main idea is to perform pacing on ACK segments on an edge device close to the sender, so as to control the ACK arrival rate at the sender. Appendix B.Appendix:Design Considerations B.1. The TCP ACK RatioOption,Option or an AckNowbitBit indata packets?Data Packets? In the ACK congestion control mechanism specified in this document, the sender uses the TCP ACK RatioOptionoption to tell the receiver the ACK Ratio to use. An alternate approach to the TCP ACK RatioOptionoption could be for the sender to use an AckNow bit in the TCP header of data packets, telling the receiver to acknowledge this data packet. In the discussion below, we call these two approaches the TCP ACK RatioOptionoption approach and the AckNow approach. An advantage of an AckNow approach is that it would require less state from the receiver; the receiver would not need to maintain a variable for the current ACKRatio,Ratio and would not need to keep track of the number of data packetsunackedun-ACKed to date. However, a disadvantage of the AckNow approach is that the sender does not know when packets will be reordered, delayed, or dropped on the path to the receiver. In particular, the sender does not have control over whether a data packet with the AckNow bit set is reordered, delayed, or dropped in the network. For this reason, we have chosen the approach of the sender determining the ACK Ratio that should beused,used and sending the ACK Ratio to the receiver, rather than the sender telling the receiver exactly which data packets to acknowledge. An additional disadvantage of the AckNow approach is that it would add complications andadddifficulties for the default cases of the receiver using an ACK Ratio of one or two, as is done in the absence of ACK congestion control. For these reasons, we have specified that the sender determines the ACK Ratio to use and tells the receiver, rather than the sender setting an AckNow bit in the TCP Header of selected data packets. Normative References(if standardized)[RFC2119]S.Bradner, S., "KeyWords For Usewords for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.[RFC2581][RFC3465] Allman, M.,V. Paxson, and W. Stevens,"TCP CongestionControl",Control with Appropriate Byte Counting (ABC)", RFC2581, April 1999.3465, February 2003. [RFC3692]Narton,Narten, T., "Assigning Experimental and Testing Numbers Considered Useful", BCP 82, RFC 3692, January 2004.[RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte Counting (ABC)", RFC 3465, Experimental, February 2003.[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram Congestion Control Protocol (DCCP)", RFC 4340, March 2006. [RFC4341] Floyd,S.,S. and E. Kohler, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control", RFC 4341, March 2006. [RFC4727] Fenner, B., "Experimental ValuesinIn IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers", RFC 4727, November 2006. [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion Control", RFC 5681, September 2009. Informative References [RFC2760] Allman, M., Ed., Dawkins, S., Glover, D., Griner, J., Tran, D., Henderson, T., Heidemann, J., Touch, J., Kruse, H., Ostermann, S., Scott, K.,Semke, J., Touch, J.andD. Tran,J. Semke, "Ongoing TCP Research Related to Satellites", RFC 2760, February 2000. [RFC3135] Border, J., Kojo, M., Griner, J., Montenegro,G.G., and Z. Shelby, "Performance Enhancing Proxies Intended to MitigateLink- RelatedLink-Related Degradations", RFC 3135, June 2001. [RFC3168]K.Ramakrishnan,S. FloydK., Floyd, S., and D. Black, "The Addition of Explicit Congestion Notification (ECN) to IP", RFC 3168, September 2001. [RFC3449]H.Balakrishnan,V. N.H., Padmanabhan,G.V., Fairhurst, G., and M. Sooriyabandara, "TCP Performance Implications of Network Path Asymmetry", BCP 69, RFC 3449, December 2002. [RFC4653]S.Bhandarkar,A. L. N.S., Reddy,M. AllmanA., Allman, M., and E. Blanton, "Improving the Robustness of TCP to Non-Congestion Events", RFC 4653, August 2006. [ASA00]A.Aggarwal,S.A., Savage, S., and T. Anderson, "Understanding the Performance of TCP Pacing", INFOCOM (3), pp. 1157-1165, 2000. [AB05]M. AllmanAllman, M., and E. Blanton, "Notes on Burst Mitigation for Transport Protocols",SIGCOMM Comput. Commun. Rev.,SIGCOMM, Computer Communications Review, 35(2):5360, 2005. [AJ03]E. AltmanAltman, E., and T. Jimenez, "Novel Delayed ACK Techniques for Improving TCP Performance in Multihop Wireless Networks", Proc. of the Personal Wireless Communications, 2003. [AOM02]J.Aweya,M.J., Ouellette, M., and D. Y. Montuno, "A Self- regulating TCP Acknowledgement (ack) PacingScheme". Int. J. Netw. Manag.,Scheme", International Journal of Network Management, 12(3):145163, 2002. [BA03]C. BarakatBarakat, C., and E. Altman, "On ACK Filtering on a Slow Reverse Channel", International Journal of Satellite Communications and Networking, V.21 N.3, 2003. [BPK97] Balakrishnan, H.,V.Padmanabhan, V., and Katz, R., "The Effects of Asymmetry on TCP Performance", Third ACM/IEEE Mobicom Conference, September 1997. [BGG+07]D.K.Blandford,S.A.D.K., Goldman,S.S.A., Gorinsky,Y.S., Zhou, Y., and D.R. Dooly, "Smartacking: Improving TCP Performance from the Receiving End", Journal of Internet Engineering, 1(1), 2007. [CLP98] Calveras, A., Linares, J., and J. Paradells, "Window Prediction Mechanism for Improving TCP in Wireless Asymmetric Links". Proc. IEEE Global Communications Conference (GLOBECOM), Sydney Australia,November 1998,pp.533-538.533-538, November 1998. [KIA07] Keceli, F.,I.Inan, I., and E. Ayanoglu, "TCP ACK Congestion Control and Filtering for Fairness Provision in the Uplink of IEEE 802.11 Infrastructure Basic Service Set", Proc. IEEE ICC 2007, June 2007. [KEEP-ALIVE]FabioBusatto, F., "TCP Keepalive HOWTO", May 2007,URL "http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html".http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html. [KLS07]H.Kim,H.H., Lee, H., and S. Shin, "On the Cross-Layer Impact of TCP ACK Thinning on IEEE 802.11 Wireless MAC Dynamics", IEICE Transactions on Communications,20072007. [LL07] Landstrom, S., and Larzon,L.-A.,L.A., "Reducing the TCP Acknowledgement Frequency",CCR,SIGCOMM, Computer Communications Review, July 2007. [MJW00] Ming-Chit, I.T., Jinsong, D., and W. Wang, "Improving TCP Performance Over Asymmetric Networks",ACMSIGCOMM,ACMComputer Communications Review (CCR), Vol.30, No.3, 2000. [Studies]Web page onFloyd, S., "Measurement Studies of End-to-End Congestion Control in the Internet",URL "http://www.icir.org/floyd/ccmeasure.html".http://www.icir.org/floyd/ccmeasure.html. [WWCM99]H.Wu,J.H., Wu,S.J., Cheng, S., and J. Ma, "ACK Filtering on Bandwidth Asymmetry Networks", IEEE Communications, 1999. [YMH03]L.Yu,Y.L., Minhua, Y., and Z. Huimin, "The Improvement of TCP Performance in Bandwidth Asymmetric Network", IEEE PIMRC, 1:482-486, September 2003. Authors' Addresses Sally Floyd ICSI Center for Internet Research 1947 Center Street, Suite 600 Berkeley, CA 94704 USA EMail: floyd@icir.org Andres Arcia Networking, Security & Multimedia (RSM)Dpt.Universidad de Los Andes TELECOM Bretagne Facultad de Ingenieria Rue de la Chataigneraie, CS 17607 Nucleo La Hechicera 35576 Cesson Sevigne CedexFrance Email:ae <dot> arcia <at> telecom-bretagne <dot> eu Universidad de Los Andes Facultad de Ingenieria Nucleo La HechiceraMerida, Merida 5101 France Venezuela EMail:amoret <at> ula <dot> veae.arcia@telecom-bretagne.eu EMail: amoret@ula.ve URI: http://www.ula.veJanardhan R. Iyengar Math and Computer Science Franklin & Marshall College P. O. Box 3003 Lancaster, PA 17604-3003 USA Email: jiyengar <at> fandm <dot> eduDavid Ros Networking, Security & Multimedia (RSM) Dpt. TELECOM Bretagne Rue de la Chataigneraie, CS 17607 35576 Cesson Sevigne Cedex FranceEmail: David <dot> Ros <at> telecom-bretagne <dot> eu Acknowledgement Funding for the RFC Editor function is provided by the IETF Administrative Support Activity (IASA).EMail: David.Ros@telecom-bretagne.eu Janardhan R. Iyengar Math and Computer Science Franklin & Marshall College P. O. Box 3003 Lancaster, PA 17604-3003 USA EMail: jiyengar@fandm.edu