diff options
Diffstat (limited to 'doc/rfc/rfc6937.txt')
-rw-r--r-- | doc/rfc/rfc6937.txt | 899 |
1 files changed, 899 insertions, 0 deletions
diff --git a/doc/rfc/rfc6937.txt b/doc/rfc/rfc6937.txt new file mode 100644 index 0000000..06b8ab8 --- /dev/null +++ b/doc/rfc/rfc6937.txt @@ -0,0 +1,899 @@ + + + + + + +Internet Engineering Task Force (IETF) M. Mathis +Request for Comments: 6937 N. Dukkipati +Category: Experimental Y. Cheng +ISSN: 2070-1721 Google, Inc. + May 2013 + + + Proportional Rate Reduction for TCP + +Abstract + + This document describes an experimental Proportional Rate Reduction + (PRR) algorithm as an alternative to the widely deployed Fast + Recovery and Rate-Halving algorithms. These algorithms determine the + amount of data sent by TCP during loss recovery. PRR minimizes + excess window adjustments, and the actual window size at the end of + recovery will be as close as possible to the ssthresh, as determined + by the congestion control algorithm. + +Status of This Memo + + This document is not an Internet Standards Track specification; it is + published for examination, experimental implementation, and + evaluation. + + This document defines an Experimental Protocol for the Internet + community. This document is a product of the Internet Engineering + Task Force (IETF). It represents the consensus of the IETF + community. It has received public review and has been approved for + publication by the Internet Engineering Steering Group (IESG). Not + all documents approved by the IESG are a candidate for any level of + Internet Standard; see Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc6937. + + + + + + + + + + + + + + + +Mathis, et al. Experimental [Page 1] + +RFC 6937 Proportional Rate Reduction May 2013 + + +Copyright Notice + + Copyright (c) 2013 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 + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + +Table of Contents + + 1. Introduction ....................................................2 + 2. Definitions .....................................................5 + 3. Algorithms ......................................................6 + 3.1. Examples ...................................................6 + 4. Properties ......................................................9 + 5. Measurements ...................................................11 + 6. Conclusion and Recommendations .................................12 + 7. Acknowledgements ...............................................13 + 8. Security Considerations ........................................13 + 9. References .....................................................13 + 9.1. Normative References ......................................13 + 9.2. Informative References ....................................14 + Appendix A. Strong Packet Conservation Bound ......................15 + +1. Introduction + + This document describes an experimental algorithm, PRR, to improve + the accuracy of the amount of data sent by TCP during loss recovery. + + Standard congestion control [RFC5681] requires that TCP (and other + protocols) reduce their congestion window (cwnd) in response to + losses. Fast Recovery, described in the same document, is the + reference algorithm for making this adjustment. Its stated goal is + to recover TCP's self clock by relying on returning ACKs during + recovery to clock more data into the network. Fast Recovery + typically adjusts the window by waiting for one half round-trip time + (RTT) of ACKs to pass before sending any data. It is fragile because + it cannot compensate for the implicit window reduction caused by the + losses themselves. + + + + + +Mathis, et al. Experimental [Page 2] + +RFC 6937 Proportional Rate Reduction May 2013 + + + RFC 6675 [RFC6675] makes Fast Recovery with Selective Acknowledgement + (SACK) [RFC2018] more accurate by computing "pipe", a sender side + estimate of the number of bytes still outstanding in the network. + With RFC 6675, Fast Recovery is implemented by sending data as + necessary on each ACK to prevent pipe from falling below slow-start + threshold (ssthresh), the window size as determined by the congestion + control algorithm. This protects Fast Recovery from timeouts in many + cases where there are heavy losses, although not if the entire second + half of the window of data or ACKs are lost. However, a single ACK + carrying a SACK option that implies a large quantity of missing data + can cause a step discontinuity in the pipe estimator, which can cause + Fast Retransmit to send a burst of data. + + The Rate-Halving algorithm sends data on alternate ACKs during + recovery, such that after 1 RTT the window has been halved. Rate- + Halving is implemented in Linux after only being informally published + [RHweb], including an uncompleted document [RHID]. Rate-Halving also + does not adequately compensate for the implicit window reduction + caused by the losses and assumes a net 50% window reduction, which + was completely standard at the time it was written but not + appropriate for modern congestion control algorithms, such as CUBIC + [CUBIC], which reduce the window by less than 50%. As a consequence, + Rate-Halving often allows the window to fall further than necessary, + reducing performance and increasing the risk of timeouts if there are + additional losses. + + PRR avoids these excess window adjustments such that at the end of + recovery the actual window size will be as close as possible to + ssthresh, the window size as determined by the congestion control + algorithm. It is patterned after Rate-Halving, but using the + fraction that is appropriate for the target window chosen by the + congestion control algorithm. During PRR, one of two additional + Reduction Bound algorithms limits the total window reduction due to + all mechanisms, including transient application stalls and the losses + themselves. + + We describe two slightly different Reduction Bound algorithms: + Conservative Reduction Bound (CRB), which is strictly packet + conserving; and a Slow Start Reduction Bound (SSRB), which is more + aggressive than CRB by, at most, 1 segment per ACK. PRR-CRB meets + the Strong Packet Conservation Bound described in Appendix A; + however, in real networks it does not perform as well as the + algorithms described in RFC 6675, which prove to be more aggressive + in a significant number of cases. SSRB offers a compromise by + allowing TCP to send 1 additional segment per ACK relative to CRB in + some situations. Although SSRB is less aggressive than RFC 6675 + + + + + +Mathis, et al. Experimental [Page 3] + +RFC 6937 Proportional Rate Reduction May 2013 + + + (transmitting fewer segments or taking more time to transmit them), + it outperforms it, due to the lower probability of additional losses + during recovery. + + The Strong Packet Conservation Bound on which PRR and both Reduction + Bounds are based is patterned after Van Jacobson's packet + conservation principle: segments delivered to the receiver are used + as the clock to trigger sending the same number of segments back into + the network. As much as possible, PRR and the Reduction Bound + algorithms rely on this self clock process, and are only slightly + affected by the accuracy of other estimators, such as pipe [RFC6675] + and cwnd. This is what gives the algorithms their precision in the + presence of events that cause uncertainty in other estimators. + + The original definition of the packet conservation principle + [Jacobson88] treated packets that are presumed to be lost (e.g., + marked as candidates for retransmission) as having left the network. + This idea is reflected in the pipe estimator defined in RFC 6675 and + used here, but it is distinct from the Strong Packet Conservation + Bound as described in Appendix A, which is defined solely on the + basis of data arriving at the receiver. + + We evaluated these and other algorithms in a large scale measurement + study presented in a companion paper [IMC11] and summarized in + Section 5. This measurement study was based on RFC 3517 [RFC3517], + which has since been superseded by RFC 6675. Since there are slight + differences between the two specifications, and we were meticulous + about our implementation of RFC 3517, we are not comfortable + unconditionally asserting that our measurement results apply to RFC + 6675, although we believe this to be the case. We have instead + chosen to be pedantic about describing measurement results relative + to RFC 3517, on which they were actually based. General discussions + of algorithms and their properties have been updated to refer to RFC + 6675. + + We found that for authentic network traffic, PRR-SSRB outperforms + both RFC 3517 and Linux Rate-Halving even though it is less + aggressive than RFC 3517. We believe that these results apply to RFC + 6675 as well. + + The algorithms are described as modifications to RFC 5681 [RFC5681], + "TCP Congestion Control", using concepts drawn from the pipe + algorithm [RFC6675]. They are most accurate and more easily + implemented with SACK [RFC2018], but do not require SACK. + + + + + + + +Mathis, et al. Experimental [Page 4] + +RFC 6937 Proportional Rate Reduction May 2013 + + +2. Definitions + + The following terms, parameters, and state variables are used as they + are defined in earlier documents: + + RFC 793: snd.una (send unacknowledged) + + RFC 5681: duplicate ACK, FlightSize, Sender Maximum Segment Size + (SMSS) + + RFC 6675: covered (as in "covered sequence numbers") + + Voluntary window reductions: choosing not to send data in response to + some ACKs, for the purpose of reducing the sending window size and + data rate + + We define some additional variables: + + SACKd: The total number of bytes that the scoreboard indicates have + been delivered to the receiver. This can be computed by scanning + the scoreboard and counting the total number of bytes covered by + all SACK blocks. If SACK is not in use, SACKd is not defined. + + DeliveredData: The total number of bytes that the current ACK + indicates have been delivered to the receiver. When not in + recovery, DeliveredData is the change in snd.una. With SACK, + DeliveredData can be computed precisely as the change in snd.una, + plus the (signed) change in SACKd. In recovery without SACK, + DeliveredData is estimated to be 1 SMSS on duplicate + acknowledgements, and on a subsequent partial or full ACK, + DeliveredData is estimated to be the change in snd.una, minus 1 + SMSS for each preceding duplicate ACK. + + Note that DeliveredData is robust; for TCP using SACK, DeliveredData + can be precisely computed anywhere in the network just by inspecting + the returning ACKs. The consequence of missing ACKs is that later + ACKs will show a larger DeliveredData. Furthermore, for any TCP + (with or without SACK), the sum of DeliveredData must agree with the + forward progress over the same time interval. + + We introduce a local variable "sndcnt", which indicates exactly how + many bytes should be sent in response to each ACK. Note that the + decision of which data to send (e.g., retransmit missing data or send + more new data) is out of scope for this document. + + + + + + + +Mathis, et al. Experimental [Page 5] + +RFC 6937 Proportional Rate Reduction May 2013 + + +3. Algorithms + + At the beginning of recovery, initialize PRR state. This assumes a + modern congestion control algorithm, CongCtrlAlg(), that might set + ssthresh to something other than FlightSize/2: + + ssthresh = CongCtrlAlg() // Target cwnd after recovery + prr_delivered = 0 // Total bytes delivered during recovery + prr_out = 0 // Total bytes sent during recovery + RecoverFS = snd.nxt-snd.una // FlightSize at the start of recovery + + On every ACK during recovery compute: + + DeliveredData = change_in(snd.una) + change_in(SACKd) + prr_delivered += DeliveredData + pipe = (RFC 6675 pipe algorithm) + if (pipe > ssthresh) { + // Proportional Rate Reduction + sndcnt = CEIL(prr_delivered * ssthresh / RecoverFS) - prr_out + } else { + // Two versions of the Reduction Bound + if (conservative) { // PRR-CRB + limit = prr_delivered - prr_out + } else { // PRR-SSRB + limit = MAX(prr_delivered - prr_out, DeliveredData) + MSS + } + // Attempt to catch up, as permitted by limit + sndcnt = MIN(ssthresh - pipe, limit) + } + + On any data transmission or retransmission: + + prr_out += (data sent) // strictly less than or equal to sndcnt + +3.1. Examples + + We illustrate these algorithms by showing their different behaviors + for two scenarios: TCP experiencing either a single loss or a burst + of 15 consecutive losses. In all cases we assume bulk data (no + application pauses), standard Additive Increase Multiplicative + Decrease (AIMD) congestion control, and cwnd = FlightSize = pipe = 20 + segments, so ssthresh will be set to 10 at the beginning of recovery. + We also assume standard Fast Retransmit and Limited Transmit + [RFC3042], so TCP will send 2 new segments followed by 1 retransmit + in response to the first 3 duplicate ACKs following the losses. + + + + + + +Mathis, et al. Experimental [Page 6] + +RFC 6937 Proportional Rate Reduction May 2013 + + + Each of the diagrams below shows the per ACK response to the first + round trip for the various recovery algorithms when the zeroth + segment is lost. The top line indicates the transmitted segment + number triggering the ACKs, with an X for the lost segment. "cwnd" + and "pipe" indicate the values of these algorithms after processing + each returning ACK. "Sent" indicates how much 'N'ew or + 'R'etransmitted data would be sent. Note that the algorithms for + deciding which data to send are out of scope of this document. + + When there is a single loss, PRR with either of the Reduction Bound + algorithms has the same behavior. We show "RB", a flag indicating + which Reduction Bound subexpression ultimately determined the value + of sndcnt. When there are minimal losses, "limit" (both algorithms) + will always be larger than ssthresh - pipe, so the sndcnt will be + ssthresh - pipe, indicated by "s" in the "RB" row. + + RFC 6675 + ack# X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 + cwnd: 20 20 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + pipe: 19 19 18 18 17 16 15 14 13 12 11 10 10 10 10 10 10 10 10 + sent: N N R N N N N N N N N + + + Rate-Halving (Linux) + ack# X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 + cwnd: 20 20 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 + pipe: 19 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 + sent: N N R N N N N N N N N + + + PRR + ack# X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 + pipe: 19 19 18 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 10 + sent: N N R N N N N N N N N + RB: s s + + Cwnd is not shown because PRR does not use it. + + Key for RB + s: sndcnt = ssthresh - pipe // from ssthresh + b: sndcnt = prr_delivered - prr_out + SMSS // from banked + d: sndcnt = DeliveredData + SMSS // from DeliveredData + (Sometimes, more than one applies.) + + Note that all 3 algorithms send the same total amount of data. + RFC 6675 experiences a "half window of silence", while the + Rate-Halving and PRR spread the voluntary window reduction across an + entire RTT. + + + +Mathis, et al. Experimental [Page 7] + +RFC 6937 Proportional Rate Reduction May 2013 + + + Next, we consider the same initial conditions when the first 15 + packets (0-14) are lost. During the remainder of the lossy RTT, only + 5 ACKs are returned to the sender. We examine each of these + algorithms in succession. + + RFC 6675 + ack# X X X X X X X X X X X X X X X 15 16 17 18 19 + cwnd: 20 20 11 11 11 + pipe: 19 19 4 10 10 + sent: N N 7R R R + + Rate-Halving (Linux) + ack# X X X X X X X X X X X X X X X 15 16 17 18 19 + cwnd: 20 20 5 5 5 + pipe: 19 19 4 4 4 + sent: N N R R R + + PRR-CRB + ack# X X X X X X X X X X X X X X X 15 16 17 18 19 + pipe: 19 19 4 4 4 + sent: N N R R R + RB: b b b + + PRR-SSRB + ack# X X X X X X X X X X X X X X X 15 16 17 18 19 + pipe: 19 19 4 5 6 + sent: N N 2R 2R 2R + RB: bd d d + + In this specific situation, RFC 6675 is more aggressive because once + Fast Retransmit is triggered (on the ACK for segment 17), TCP + immediately retransmits sufficient data to bring pipe up to cwnd. + Our measurement data (see Section 5) indicates that RFC 6675 + significantly outperforms Rate-Halving, PRR-CRB, and some other + similarly conservative algorithms that we tested, showing that it is + significantly common for the actual losses to exceed the window + reduction determined by the congestion control algorithm. + + The Linux implementation of Rate-Halving includes an early version of + the Conservative Reduction Bound [RHweb]. In this situation, the 5 + ACKs trigger exactly 1 transmission each (2 new data, 3 old data), + and cwnd is set to 5. At a window size of 5, it takes 3 round trips + to retransmit all 15 lost segments. Rate-Halving does not raise the + window at all during recovery, so when recovery finally completes, + TCP will slow start cwnd from 5 up to 10. In this example, TCP + operates at half of the window chosen by the congestion control for + more than 3 RTTs, increasing the elapsed time and exposing it to + timeouts in the event that there are additional losses. + + + +Mathis, et al. Experimental [Page 8] + +RFC 6937 Proportional Rate Reduction May 2013 + + + PRR-CRB implements a Conservative Reduction Bound. Since the total + losses bring pipe below ssthresh, data is sent such that the total + data transmitted, prr_out, follows the total data delivered to the + receiver as reported by returning ACKs. Transmission is controlled + by the sending limit, which is set to prr_delivered - prr_out. This + is indicated by the RB:b tagging in the figure. In this case, + PRR-CRB is exposed to exactly the same problems as Rate-Halving; the + excess window reduction causes it to take excessively long to recover + the losses and exposes it to additional timeouts. + + PRR-SSRB increases the window by exactly 1 segment per ACK until pipe + rises to ssthresh during recovery. This is accomplished by setting + limit to one greater than the data reported to have been delivered to + the receiver on this ACK, implementing slow start during recovery, + and indicated by RB:d tagging in the figure. Although increasing the + window during recovery seems to be ill advised, it is important to + remember that this is actually less aggressive than permitted by RFC + 5681, which sends the same quantity of additional data as a single + burst in response to the ACK that triggered Fast Retransmit. + + For less extreme events, where the total losses are smaller than the + difference between FlightSize and ssthresh, PRR-CRB and PRR-SSRB have + identical behaviors. + +4. Properties + + The following properties are common to both PRR-CRB and PRR-SSRB, + except as noted: + + PRR maintains TCP's ACK clocking across most recovery events, + including burst losses. RFC 6675 can send large unclocked bursts + following burst losses. + + Normally, PRR will spread voluntary window reductions out evenly + across a full RTT. This has the potential to generally reduce the + burstiness of Internet traffic, and could be considered to be a type + of soft pacing. Hypothetically, any pacing increases the probability + that different flows are interleaved, reducing the opportunity for + ACK compression and other phenomena that increase traffic burstiness. + However, these effects have not been quantified. + + If there are minimal losses, PRR will converge to exactly the target + window chosen by the congestion control algorithm. Note that as TCP + approaches the end of recovery, prr_delivered will approach RecoverFS + and sndcnt will be computed such that prr_out approaches ssthresh. + + + + + + +Mathis, et al. Experimental [Page 9] + +RFC 6937 Proportional Rate Reduction May 2013 + + + Implicit window reductions, due to multiple isolated losses during + recovery, cause later voluntary reductions to be skipped. For small + numbers of losses, the window size ends at exactly the window chosen + by the congestion control algorithm. + + For burst losses, earlier voluntary window reductions can be undone + by sending extra segments in response to ACKs arriving later during + recovery. Note that as long as some voluntary window reductions are + not undone, the final value for pipe will be the same as ssthresh, + the target cwnd value chosen by the congestion control algorithm. + + PRR with either Reduction Bound improves the situation when there are + application stalls, e.g., when the sending application does not queue + data for transmission quickly enough or the receiver stops advancing + rwnd (receiver window). When there is an application stall early + during recovery, prr_out will fall behind the sum of the + transmissions permitted by sndcnt. The missed opportunities to send + due to stalls are treated like banked voluntary window reductions; + specifically, they cause prr_delivered - prr_out to be significantly + positive. If the application catches up while TCP is still in + recovery, TCP will send a partial window burst to catch up to exactly + where it would have been had the application never stalled. Although + this burst might be viewed as being hard on the network, this is + exactly what happens every time there is a partial RTT application + stall while not in recovery. We have made the partial RTT stall + behavior uniform in all states. Changing this behavior is out of + scope for this document. + + PRR with Reduction Bound is less sensitive to errors in the pipe + estimator. While in recovery, pipe is intrinsically an estimator, + using incomplete information to estimate if un-SACKed segments are + actually lost or merely out of order in the network. Under some + conditions, pipe can have significant errors; for example, pipe is + underestimated when a burst of reordered data is prematurely assumed + to be lost and marked for retransmission. If the transmissions are + regulated directly by pipe as they are with RFC 6675, a step + discontinuity in the pipe estimator causes a burst of data, which + cannot be retracted once the pipe estimator is corrected a few ACKs + later. For PRR, pipe merely determines which algorithm, PRR or the + Reduction Bound, is used to compute sndcnt from DeliveredData. While + pipe is underestimated, the algorithms are different by at most 1 + segment per ACK. Once pipe is updated, they converge to the same + final window at the end of recovery. + + Under all conditions and sequences of events during recovery, PRR-CRB + strictly bounds the data transmitted to be equal to or less than the + amount of data delivered to the receiver. We claim that this Strong + Packet Conservation Bound is the most aggressive algorithm that does + + + +Mathis, et al. Experimental [Page 10] + +RFC 6937 Proportional Rate Reduction May 2013 + + + not lead to additional forced losses in some environments. It has + the property that if there is a standing queue at a bottleneck with + no cross traffic, the queue will maintain exactly constant length for + the duration of the recovery, except for +1/-1 fluctuation due to + differences in packet arrival and exit times. See Appendix A for a + detailed discussion of this property. + + Although the Strong Packet Conservation Bound is very appealing for a + number of reasons, our measurements summarized in Section 5 + demonstrate that it is less aggressive and does not perform as well + as RFC 6675, which permits bursts of data when there are bursts of + losses. PRR-SSRB is a compromise that permits TCP to send 1 extra + segment per ACK as compared to the Packet Conserving Bound. From the + perspective of a strict Packet Conserving Bound, PRR-SSRB does indeed + open the window during recovery; however, it is significantly less + aggressive than RFC 6675 in the presence of burst losses. + +5. Measurements + + In a companion IMC11 paper [IMC11], we describe some measurements + comparing the various strategies for reducing the window during + recovery. The experiments were performed on servers carrying Google + production traffic and are briefly summarized here. + + The various window reduction algorithms and extensive instrumentation + were all implemented in Linux 2.6. We used the uniform set of + algorithms present in the base Linux implementation, including CUBIC + [CUBIC], Limited Transmit [RFC3042], threshold transmit (Section 3.1 + in [FACK]) (this algorithm was not present in RFC 3517, but a similar + algorithm has been added to RFC 6675), and lost retransmission + detection algorithms. We confirmed that the behaviors of Rate- + Halving (the Linux default), RFC 3517, and PRR were authentic to + their respective specifications and that performance and features + were comparable to the kernels in production use. All of the + different window reduction algorithms were all present in a common + kernel and could be selected with a sysctl, such that we had an + absolutely uniform baseline for comparing them. + + Our experiments included an additional algorithm, PRR with an + unlimited bound (PRR-UB), which sends ssthresh-pipe bursts when pipe + falls below ssthresh. This behavior parallels RFC 3517. + + An important detail of this configuration is that CUBIC only reduces + the window by 30%, as opposed to the 50% reduction used by + traditional congestion control algorithms. This accentuates the + tendency for RFC 3517 and PRR-UB to send a burst at the point when + Fast Retransmit gets triggered because pipe is likely to already be + below ssthresh. Precisely this condition was observed for 32% of the + + + +Mathis, et al. Experimental [Page 11] + +RFC 6937 Proportional Rate Reduction May 2013 + + + recovery events: pipe fell below ssthresh before Fast Retransmit was + triggered, thus the various PRR algorithms started in the Reduction + Bound phase, and RFC 3517 sent bursts of segments with the Fast + Retransmit. + + In the companion paper, we observe that PRR-SSRB spends the least + time in recovery of all the algorithms tested, largely because it + experiences fewer timeouts once it is already in recovery. + + RFC 3517 experiences 29% more detected lost retransmissions and 2.6% + more timeouts (presumably due to undetected lost retransmissions) + than PRR-SSRB. These results are representative of PRR-UB and other + algorithms that send bursts when pipe falls below ssthresh. + + Rate-Halving experiences 5% more timeouts and significantly smaller + final cwnd values at the end of recovery. The smaller cwnd sometimes + causes the recovery itself to take extra round trips. These results + are representative of PRR-CRB and other algorithms that implement + strict packet conservation during recovery. + +6. Conclusion and Recommendations + + Although the Strong Packet Conservation Bound used in PRR-CRB is very + appealing for a number of reasons, our measurements show that it is + less aggressive and does not perform as well as RFC 3517 (and by + implication RFC 6675), which permits bursts of data when there are + bursts of losses. RFC 3517 and RFC 6675 are conservative in the + original sense of Van Jacobson's packet conservation principle, which + included the assumption that presumed lost segments have indeed left + the network. PRR-CRB makes no such assumption, following instead a + Strong Packet Conservation Bound in which only packets that have + actually arrived at the receiver are considered to have left the + network. PRR-SSRB is a compromise that permits TCP to send 1 extra + segment per ACK relative to the Strong Packet Conservation Bound, to + partially compensate for excess losses. + + From the perspective of the Strong Packet Conservation Bound, + PRR-SSRB does indeed open the window during recovery; however, it is + significantly less aggressive than RFC 3517 (and RFC 6675) in the + presence of burst losses. Even so, it often outperforms RFC 3517 + (and presumably RFC 6675) because it avoids some of the self- + inflicted losses caused by bursts. + + At this time, we see no reason not to test and deploy PRR-SSRB on a + large scale. Implementers worried about any potential impact of + raising the window during recovery may want to optionally support + PRR-CRB (which is actually simpler to implement) for comparison + + + + +Mathis, et al. Experimental [Page 12] + +RFC 6937 Proportional Rate Reduction May 2013 + + + studies. Furthermore, there is one minor detail of PRR that can be + improved by replacing pipe by total_pipe, as defined by Laminar TCP + [Laminar]. + + One final comment about terminology: we expect that common usage will + drop "Slow Start Reduction Bound" from the algorithm name. This + document needed to be pedantic about having distinct names for PRR + and every variant of the Reduction Bound. However, we do not + anticipate any future exploration of the alternative Reduction + Bounds. + +7. Acknowledgements + + This document is based in part on previous incomplete work by Matt + Mathis, Jeff Semke, and Jamshid Mahdavi [RHID] and influenced by + several discussions with John Heffner. + + Monia Ghobadi and Sivasankar Radhakrishnan helped analyze the + experiments. + + Ilpo Jarvinen reviewed the code. + + Mark Allman improved the document through his insightful review. + +8. Security Considerations + + PRR does not change the risk profile for TCP. + + Implementers that change PRR from counting bytes to segments have to + be cautious about the effects of ACK splitting attacks [Savage99], + where the receiver acknowledges partial segments for the purpose of + confusing the sender's congestion accounting. + +9. References + +9.1. Normative References + + [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, + RFC 793, September 1981. + + [RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP + Selective Acknowledgment Options", RFC 2018, October + 1996. + + [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion + Control", RFC 5681, September 2009. + + + + + +Mathis, et al. Experimental [Page 13] + +RFC 6937 Proportional Rate Reduction May 2013 + + + [RFC6675] Blanton, E., Allman, M., Wang, L., Jarvinen, I., Kojo, + M., and Y. Nishida, "A Conservative Loss Recovery + Algorithm Based on Selective Acknowledgment (SACK) for + TCP", RFC 6675, August 2012. + +9.2. Informative References + + [RFC3042] Allman, M., Balakrishnan, H., and S. Floyd, "Enhancing + TCP's Loss Recovery Using Limited Transmit", RFC 3042, + January 2001. + + [RFC3517] Blanton, E., Allman, M., Fall, K., and L. Wang, "A + Conservative Selective Acknowledgment (SACK)-based Loss + Recovery Algorithm for TCP", RFC 3517, April 2003. + + [IMC11] Dukkipati, N., Mathis, M., Cheng, Y., and M. Ghobadi, + "Proportional Rate Reduction for TCP", Proceedings of + the 11th ACM SIGCOMM Conference on Internet Measurement + 2011, Berlin, Germany, November 2011. + + [FACK] Mathis, M. and J. Mahdavi, "Forward Acknowledgment: + Refining TCP Congestion Control", ACM SIGCOMM SIGCOMM96, + August 1996. + + [RHID] Mathis, M., Semke, J., and J. Mahdavi, "The Rate-Halving + Algorithm for TCP Congestion Control", Work in Progress, + August 1999. + + [RHweb] Mathis, M. and J. Mahdavi, "TCP Rate-Halving with + Bounding Parameters", Web publication, December 1997, + <http://www.psc.edu/networking/papers/FACKnotes/current/>. + + [CUBIC] Rhee, I. and L. Xu, "CUBIC: A new TCP-friendly high- + speed TCP variant", PFLDnet 2005, February 2005. + + [Jacobson88] Jacobson, V., "Congestion Avoidance and Control", + SIGCOMM Comput. Commun. Rev. 18(4), August 1988. + + [Savage99] Savage, S., Cardwell, N., Wetherall, D., and T. + Anderson, "TCP congestion control with a misbehaving + receiver", SIGCOMM Comput. Commun. Rev. 29(5), October + 1999. + + [Laminar] Mathis, M., "Laminar TCP and the case for refactoring + TCP congestion control", Work in Progress, July 2012. + + + + + + +Mathis, et al. Experimental [Page 14] + +RFC 6937 Proportional Rate Reduction May 2013 + + +Appendix A. Strong Packet Conservation Bound + + PRR-CRB is based on a conservative, philosophically pure, and + aesthetically appealing Strong Packet Conservation Bound, described + here. Although inspired by Van Jacobson's packet conservation + principle [Jacobson88], it differs in how it treats segments that are + missing and presumed lost. Under all conditions and sequences of + events during recovery, PRR-CRB strictly bounds the data transmitted + to be equal to or less than the amount of data delivered to the + receiver. Note that the effects of presumed losses are included in + the pipe calculation, but do not affect the outcome of PRR-CRB, once + pipe has fallen below ssthresh. + + We claim that this Strong Packet Conservation Bound is the most + aggressive algorithm that does not lead to additional forced losses + in some environments. It has the property that if there is a + standing queue at a bottleneck that is carrying no other traffic, the + queue will maintain exactly constant length for the entire duration + of the recovery, except for +1/-1 fluctuation due to differences in + packet arrival and exit times. Any less aggressive algorithm will + result in a declining queue at the bottleneck. Any more aggressive + algorithm will result in an increasing queue or additional losses if + it is a full drop tail queue. + + We demonstrate this property with a little thought experiment: + + Imagine a network path that has insignificant delays in both + directions, except for the processing time and queue at a single + bottleneck in the forward path. By insignificant delay, we mean when + a packet is "served" at the head of the bottleneck queue, the + following events happen in much less than one bottleneck packet time: + the packet arrives at the receiver; the receiver sends an ACK that + arrives at the sender; the sender processes the ACK and sends some + data; the data is queued at the bottleneck. + + If sndcnt is set to DeliveredData and nothing else is inhibiting + sending data, then clearly the data arriving at the bottleneck queue + will exactly replace the data that was served at the head of the + queue, so the queue will have a constant length. If queue is drop + tail and full, then the queue will stay exactly full. Losses or + reordering on the ACK path only cause wider fluctuations in the queue + size, but do not raise its peak size, independent of whether the data + is in order or out of order (including loss recovery from an earlier + RTT). Any more aggressive algorithm that sends additional data will + overflow the drop tail queue and cause loss. Any less aggressive + algorithm will under-fill the queue. Therefore, setting sndcnt to + DeliveredData is the most aggressive algorithm that does not cause + forced losses in this simple network. Relaxing the assumptions + + + +Mathis, et al. Experimental [Page 15] + +RFC 6937 Proportional Rate Reduction May 2013 + + + (e.g., making delays more authentic and adding more flows, delayed + ACKs, etc.) is likely to increase the fine grained fluctuations in + queue size but does not change its basic behavior. + + Note that the congestion control algorithm implements a broader + notion of optimal that includes appropriately sharing the network. + Typical congestion control algorithms are likely to reduce the data + sent relative to the Packet Conserving Bound implemented by PRR, + bringing TCP's actual window down to ssthresh. + +Authors' Addresses + + Matt Mathis + Google, Inc. + 1600 Amphitheatre Parkway + Mountain View, California 94043 + USA + + EMail: mattmathis@google.com + + + Nandita Dukkipati + Google, Inc. + 1600 Amphitheatre Parkway + Mountain View, California 94043 + USA + + EMail: nanditad@google.com + + + Yuchung Cheng + Google, Inc. + 1600 Amphitheatre Parkway + Mountain View, California 94043 + USA + + EMail: ycheng@google.com + + + + + + + + + + + + + + +Mathis, et al. Experimental [Page 16] + |