<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.39 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-quic-recovery-00" category="std">

  <front>
    <title abbrev="QUIC Loss Detection">QUIC Loss Detection and Congestion Control</title>

    <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
      <organization>Google</organization>
      <address>
        <email>jri@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>

    <date year="2016" month="November"/>

    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    

    <abstract>


<t>QUIC is a new multiplexed and secure transport atop UDP.  QUIC builds on decades
of transport and security experience, and implements mechanisms that make it
attractive as a modern general-purpose transport.  QUIC implements the spirit of
known TCP loss detection mechanisms, described in RFCs, various Internet-drafts,
and also those prevalent in the Linux TCP implementation.  This document
describes QUIC loss detection and congestion control, and attributes the TCP
equivalent in RFCs, Internet-drafts, academic papers, and TCP implementations.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>QUIC is a new multiplexed and secure transport atop UDP.  QUIC builds on decades
of transport and security experience, and implements mechanisms that make it
attractive as a modern general-purpose transport.  The QUIC protocol is
described in <xref target="QUIC-TRANSPORT"/>.</t>

<t>QUIC implements the spirit of known TCP loss recovery mechanisms, described in
RFCs, various Internet-drafts, and also those prevalent in the Linux TCP
implementation.  This document describes QUIC congestion control and loss
recovery, and where applicable, attributes the TCP equivalent in RFCs,
Internet-drafts, academic papers, and/or TCP implementations.</t>

<t>This document first describes pre-requisite parts of the QUIC transmission
machinery, then discusses QUIC’s default congestion control and loss detection
mechanisms, and finally lists the various TCP mechanisms that QUIC loss
detection implements (in spirit.)</t>

<section anchor="notational-conventions" title="Notational Conventions">

<t>The words “MUST”, “MUST NOT”, “SHOULD”, and “MAY” are used in this document.
It’s not shouting; when they are capitalized, they have the special meaning
defined in <xref target="RFC2119"/>.</t>

</section>
</section>
<section anchor="design-of-the-quic-transmission-machinery" title="Design of the QUIC Transmission Machinery">

<t>All transmissions in QUIC are sent with a packet-level header, which includes a
packet sequence number (referred to below as a packet number).  These packet
numbers never repeat in the lifetime of a connection, and are monotonically
increasing, which makes duplicate detection trivial.  This fundamental design
decision obviates the need for disambiguating between transmissions and
retransmissions and eliminates significant complexity from QUIC’s interpretation
of TCP loss detection mechanisms.</t>

<t>Every packet may contain several frames.  We outline the frames that are
important to the loss detection and congestion control machinery below.</t>

<t><list style="symbols">
  <t>Retransmittable frames are frames requiring reliable delivery.  The most
common are STREAM frames, which typically contain application data.</t>
  <t>Crypto handshake data is also sent as STREAM data, and uses the reliability
machinery of QUIC underneath.</t>
  <t>ACK frames contain acknowledgment information.  QUIC uses a SACK- based
scheme, where acks express up to 256 ranges.  The ACK frame also includes a
receive timestamp for each packet newly acked.</t>
</list></t>

<section anchor="relevant-differences-between-quic-and-tcp" title="Relevant Differences Between QUIC and TCP">

<t>There are some notable differences between QUIC and TCP which are important for
reasoning about the differences between the loss recovery mechanisms employed by
the two protocols.  We briefly describe these differences below.</t>

<section anchor="monotonically-increasing-packet-numbers" title="Monotonically Increasing Packet Numbers">

<t>TCP conflates transmission sequence number at the sender with delivery sequence
number at the receiver, which results in retransmissions of the same data
carrying the same sequence number, and consequently to problems caused by
“retransmission ambiguity”.  QUIC separates the two: QUIC uses a packet sequence
number (referred to as the “packet number”) for transmissions, and any data that
is to be delivered to the receiving application(s) is sent in one or more
streams, with stream offsets encoded within STREAM frames inside of packets that
determine delivery order.</t>

<t>QUIC’s packet number is strictly increasing, and directly encodes transmission
order.  A higher QUIC packet number signifies that the packet was sent later,
and a lower QUIC packet number signifies that the packet was sent earlier.  When
a packet containing frames is deemed lost, QUIC rebundles necessary frames in a
new packet with a new packet number, removing ambiguity about which packet is
acknowledged when an ACK is received.  Consequently, more accurate RTT
measurements can be made, spurious retransmissions are trivially detected, and
mechanisms such as Fast Retransmit can be applied universally, based only on
packet number.</t>

<t>This design point significantly simplifies loss detection mechanisms for QUIC.
Most TCP mechanisms implicitly attempt to infer transmission ordering based on
TCP sequence numbers - a non-trivial task, especially when TCP timestamps are
not available.</t>

</section>
<section anchor="no-reneging" title="No Reneging">

<t>QUIC ACKs contain information that is equivalent to TCP SACK, but QUIC does not
allow any acked packet to be reneged, greatly simplifying implementations on
both sides and reducing memory pressure on the sender.</t>

</section>
<section anchor="more-ack-ranges" title="More ACK Ranges">

<t>QUIC supports up to 256 ACK ranges, opposed to TCP’s 3 SACK ranges.  In high
loss environments, this speeds recovery.</t>

</section>
<section anchor="explicit-correction-for-delayed-acks" title="Explicit Correction For Delayed Acks">

<t>QUIC ACKs explicitly encode the delay incurred at the receiver between when a
packet is received and when the corresponding ACK is sent.  This allows the
receiver of the ACK to adjust for receiver delays, specifically the delayed ack
timer, when estimating the path RTT.  This mechanism also allows a receiver to
measure and report the delay from when a packet was received by the OS kernel,
which is useful in receivers which may incur delays such as context-switch
latency before a userspace QUIC receiver processes a received packet.</t>

</section>
</section>
</section>
<section anchor="loss-detection" title="Loss Detection">

<t>We now describe QUIC’s loss detection as functions that should be called on
packet transmission, when a packet is acked, and timer expiration events.</t>

<section anchor="variables-of-interest" title="Variables of interest">

<t>We first describe the variables required to implement the loss detection
mechanisms described in this section.</t>

<t><list style="symbols">
  <t>loss_detection_alarm: Multi-modal alarm used for loss detection.</t>
  <t>alarm_mode: QUIC maintains a single loss detection alarm, which switches
between various modes.  This mode is used to determine the duration of the
alarm.</t>
  <t>handshake_count: The number of times the handshake packets have been
retransmitted without receiving an ack.</t>
  <t>tlp_count: The number of times a tail loss probe has been sent without
receiving an ack.</t>
  <t>rto_count: The number of times an rto has been sent without receiving an ack.</t>
  <t>smoothed_rtt: The smoothed RTT of the connection, computed as described in
<xref target="RFC6298"/>.  TODO: Describe RTT computations.</t>
  <t>reordering_threshold: The largest delta between the largest acked
retransmittable packet and a packet containing retransmittable frames before
it’s declared lost.</t>
  <t>time_loss: When true, loss detection operates solely based on reordering
threshold in time, rather than in packet number gaps.</t>
</list></t>

</section>
<section anchor="initialization" title="Initialization">

<t>At the beginning of the connection, initialize the loss detection variables as
follows:</t>

<figure><artwork><![CDATA[
   loss_detection_alarm.reset();
   handshake_count = 0;
   tlp_count = 0;
   rto_count = 0;
   smoothed_rtt = 0;
   reordering_threshold = 3;
   time_loss = false;
]]></artwork></figure>

</section>
<section anchor="setting-the-loss-detection-alarm" title="Setting the Loss Detection Alarm">

<t>QUIC loss detection uses a single alarm for all timer-based loss detection.  The
duration of the alarm is based on the alarm’s mode, which is set in the packet
and timer events further below.  The function SetLossDetectionAlarm defined
below shows how the single timer is set based on the alarm mode.</t>

<t>Pseudocode for SetLossDetectionAlarm follows:</t>

<figure><artwork><![CDATA[
 SetLossDetectionAlarm():
    if (retransmittable packets are not outstanding):
      loss_detection_alarm.cancel();
      return;
    if (handshake packets are outstanding):
      alarm_duration = max(1.5 * smoothed_rtt, 10ms) << handshake_count;
      handshake_count++;
    else if (largest sent packet is acked):
      // Set alarm based on short timer for early retransmit.
      alarm_duration = 0.25 x smoothed_rtt;
    else if (tlp_count < 2):
      if (retransmittable_packets_outstanding = 1):
        alarm_duration = max(1.5 x smoothed_rtt + delayed_ack_timer,
                             2 x smoothed_rtt);
      else:
        alarm_duration = max (10ms, 2 x smoothed_rtt);
      tlp_count++;
    else:
      if (rto_count = 0):
        alarm_duration = max(200ms, smoothed_rtt + 4 x rttvar);
      else:
        alarm_duration = loss_detection_alarm.get_delay() << 1;
      rto_count++;

    loss_detection_alarm.set(now + alarm_duration);
]]></artwork></figure>

</section>
<section anchor="on-sending-a-packet" title="On Sending a Packet">

<t>After any packet is sent, be it a new transmission or a rebundled transmission,
the following OnPacketSent function is called.  The parameters to OnPacketSent
are as follows:</t>

<t><list style="symbols">
  <t>packet_number: The packet number of the sent packet.</t>
  <t>is_retransmittble: A boolean that indicates whether the packet contains at
least one frame requiring reliable deliver.  The retransmittability of various
QUIC frames is described in <xref target="QUIC-TRANSPORT"/>.  If false, it is still
acceptable for an ack to be received for this packet.  However, a caller MUST
NOT set is_retransmittable to true if an ack is not expected.</t>
</list></t>

<t>Pseudocode for OnPacketSent follows:</t>

<figure><artwork><![CDATA[
 OnPacketSent(packet_number, is_retransmittable):
     if is_retransmittable:
       SetLossDetectionAlarm()
]]></artwork></figure>

</section>
<section anchor="on-packet-acknowledgment" title="On Packet Acknowledgment">

<t>When a packet is acked for the first time, the following OnPacketAcked function
is called.  Note that a single ACK frame may newly acknowledge several packets.
OnPacketAcked must be called once for each of these newly acked packets.</t>

<t>OnPacketAcked takes one parameter, acked_packet, which is the packet number of
the newly acked packet, and returns a list of packet numbers that are detected
as lost.</t>

<t>Pseudocode for OnPacketAcked follows:</t>

<figure><artwork><![CDATA[
   OnPacketAcked(acked_packet):
     handshake_count = 0;
     tlp_count = 0;
     rto_count = 0;
     UpdateRtt(); // TODO: document RTT estimator.
     DetectLostPackets(acked_packet);
     SetLossDetectionAlarm();
]]></artwork></figure>

</section>
<section anchor="on-alarm-firing" title="On Alarm Firing">

<t>QUIC uses one loss recovery alarm, which when set, can be in one of several
modes.  When the alarm fires, the mode determines the action to be performed.
OnAlarm returns a list of packet numbers that are detected as lost.</t>

<t>Pseudocode for OnAlarm follows:</t>

<figure><artwork><![CDATA[
   OnAlarm(acked_packet):
     lost_packets = DetectLostPackets(acked_packet);
     MaybeRetransmitLostPackets();
     SetLossDetectionAlarm();
]]></artwork></figure>

</section>
<section anchor="detecting-lost-packets" title="Detecting Lost Packets">

<t>Packets in QUIC are only considered lost once a larger packet number is
acknowledged.  DetectLostPackets is called every time there is a new largest
packet or if the loss detection alarm fires the previous largest acked packet is
supplied.</t>

<t>DetectLostPackets takes one parameter, acked_packet, which is the packet number
of the largest acked packet, and returns a list of packet numbers detected as
lost.</t>

<t>Pseudocode for DetectLostPackets follows:</t>

<figure><artwork><![CDATA[
   DetectLostPackets(acked_packet):
     lost_packets = {};
     foreach (unacked_packet less than acked_packet):
         if (unacked_packet.time_sent <
             acked_packet.time_sent - 1/8 * smoothed_rtt):
           lost_packets.insert(unacked_packet.packet_number);
       else if (unacked_packet.packet_number <
                acked_packet.packet_number - reordering_threshold)
         lost_packets.insert(unacked_packet.packet_number);
     return lost_packets;
]]></artwork></figure>

</section>
</section>
<section anchor="congestion-control" title="Congestion Control">

<t>(describe NewReno-style congestion control for QUIC.)</t>

</section>
<section anchor="tcp-mechanisms-in-quic" title="TCP mechanisms in QUIC">

<t>QUIC implements the spirit of a variety of RFCs, Internet drafts, and other
well-known TCP loss recovery mechanisms, though the implementation details
differ from the TCP implementations.</t>

<section anchor="rfc-6298-rto-computation" title="RFC 6298 (RTO computation)">

<t>QUIC calculates SRTT and RTTVAR according to the standard formulas.  An RTT
sample is only taken if the delayed ack correction is smaller than the measured
RTT (otherwise a negative RTT would result), and the ack’s contains a new,
larger largest observed packet number.  min_rtt is only based on the observed
RTT, but SRTT uses the delayed ack correction delta.</t>

<t>As described above, QUIC implements RTO with the standard timeout and CWND
reduction.  However, QUIC retransmits the earliest outstanding packets rather
than the latest, because QUIC doesn’t have retransmission ambiguity.  QUIC uses
the commonly accepted min RTO of 200ms instead of the 1s the RFC specifies.</t>

</section>
<section anchor="fack-loss-recovery-paper" title="FACK Loss Recovery (paper)">

<t>QUIC implements the algorithm for early loss recovery described in the FACK
paper (and implemented in the Linux kernel.)  QUIC uses the packet number to
measure the FACK reordering threshold.  Currently QUIC does not implement an
adaptive threshold as many TCP implementations (i.e., the Linux kernel) do.</t>

</section>
<section anchor="rfc-3782-rfc-6582-newreno-fast-recovery" title="RFC 3782, RFC 6582 (NewReno Fast Recovery)">

<t>QUIC only reduces its CWND once per congestion window, in keeping with the
NewReno RFC.  It tracks the largest outstanding packet at the time the loss is
declared and any losses which occur before that packet number are considered
part of the same loss event.  It’s worth noting that some TCP implementations
may do this on a sequence number basis, and hence consider multiple losses of
the same packet a single loss event.</t>

</section>
<section anchor="tlp-draft" title="TLP (draft)">

<t>QUIC always sends two tail loss probes before RTO is triggered.  QUIC invokes
tail loss probe even when a loss is outstanding, which is different than some
TCP implementations.</t>

</section>
<section anchor="rfc-5827-early-retransmit-with-delay-timer" title="RFC 5827 (Early Retransmit) with Delay Timer">

<t>QUIC implements early retransmit with a timer in order to minimize spurious
retransmits.  The timer is set to 1/4 SRTT after the final outstanding packet is
acked.</t>

</section>
<section anchor="rfc-5827-f-rto" title="RFC 5827 (F-RTO)">

<t>QUIC implements F-RTO by not reducing the CWND and SSThresh until a subsequent
ack is received and it’s sure the RTO was not spurious.  Conceptually this is
similar, but it makes for a much cleaner implementation with fewer edge cases.</t>

</section>
<section anchor="rfc-6937-proportional-rate-reduction" title="RFC 6937 (Proportional Rate Reduction)">

<t>PRR-SSRB is implemented by QUIC in the epoch when recovering from a loss.</t>

</section>
<section anchor="tcp-cubic-draft-with-optional-rfc-5681-reno" title="TCP Cubic (draft) with optional RFC 5681 (Reno)">

<t>TCP Cubic is the default congestion control algorithm in QUIC.  Reno is also an
easily available option which may be requested via connection options and is
fully implemented.</t>

</section>
<section anchor="hybrid-slow-start-paper" title="Hybrid Slow Start (paper)">

<t>QUIC implements hybrid slow start, but disables ack train detection, because it
has shown to falsely trigger when coupled with packet pacing, which is also on
by default in QUIC.  Currently the minimum delay increase is 4ms, the maximum is
16ms, and within that range QUIC exits slow start if the min_rtt within a round
increases by more than one eighth of the connection mi</t>

</section>
<section anchor="rack-draft" title="RACK (draft)">

<t>QUIC’s loss detection is by it’s time-ordered nature, very similar to RACK.
Though QUIC defaults to loss detection based on reordering threshold in packets,
it could just as easily be based on fractions of an rtt, as RACK does.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document has no IANA actions.  Yet.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="QUIC-TLS" >
  <front>
    <title>Using Transport Layer Security (TLS) to Secure QUIC</title>
    <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
      <organization>Mozilla</organization>
    </author>
    <author initials="S." surname="Turner, Ed" fullname="Sean Turner" role="editor">
      <organization>sn3rd</organization>
    </author>
    <date year="2016" month="November"/>
  </front>
</reference>
<reference anchor="QUIC-TRANSPORT" >
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
      <organization>Google</organization>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
      <organization>Mozilla</organization>
    </author>
    <date year="2016" month="November"/>
  </front>
</reference>




<reference  anchor='RFC2119' target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor='RFC6298' target='http://www.rfc-editor.org/info/rfc6298'>
<front>
<title>Computing TCP's Retransmission Timer</title>
<author initials='V.' surname='Paxson' fullname='V. Paxson'><organization /></author>
<author initials='M.' surname='Allman' fullname='M. Allman'><organization /></author>
<author initials='J.' surname='Chu' fullname='J. Chu'><organization /></author>
<author initials='M.' surname='Sargent' fullname='M. Sargent'><organization /></author>
<date year='2011' month='June' />
<abstract><t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer.  It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST.  This document obsoletes RFC 2988.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6298'/>
<seriesInfo name='DOI' value='10.17487/RFC6298'/>
</reference>




    </references>



<section anchor="acknowledgments" title="Acknowledgments">

</section>


  </back>

<!-- ##markdown-source:
H4sIAPDDPFgAA91b23Ijx5F9r6+opR5EWgA0pKSxRMkRS83FGu/McJbkWOHY
2GAUGgWgPH2Bu7rJgRXSt+/JzKrqC5r0rL1P6wcPBXRXZeXl5MmsxHw+V41r
cnuu//P9q2f6deW9fm4bmzWuKrUpV/pZVW6s5//En01d5cosl7W9m3xFraqs
NAXWW9Vm3cydbdbzv7Uum9c2q+5svZ/npsF6aoV/zvXZk9On89NTleG/NlW9
P9e+WSm3q891U7e+OXvy5LsnZ8rU1pzrm9qUflfVjbqv6g+bump3IoRSvoGs
tyavSiy6t17t3Ln+r6bKZtrjhdquPf7aF/IHhCzMbufKzX8rZdpmW9XnSs+V
xv9c6c/1nxb61d6WG1PzZ3KiP5nSDD6u6s25/mNVbXLL/20L4/Jz/dfa/fuG
P11kVcHfQGtYwK5cU9WDjV4t9PW9bZreNq9M2fvsgT0cNEHPPLqRKqu6MI27
s+cK35Km5jevr8/5yWD2o/ceauhUq1+bva31tc3a2jV7fYwXTnRTySeWFzni
BYYGpE+SJvl/8/BvOOmbhb7ZVoWHj8TP5bxvTN248uBLPvib6u8uz036cKjH
qW2usU1bl7ae6RerxWirawvdytfDfXz5Vb2a3iUp7uri7fW7y6ubofrou3N9
od8/fzf/0Xi70m/avHG73H7E3xRAQXFJw/+U9kYO+YhTTjnNp6nu/95CypXr
ngvO53Ntlr6pTdYoxejhvDa6tPe6GGnNi9aa5JemqXak5YXYQy9bl6+8Biyt
bGZWCPlq3X88rkFObD/ubO1smdkZf+EK7FTYsvG6sNnWlM4XXjdb0+jCfLDa
Nco0LCYE14ZkLKqVrUu9sfAdk893bb2rfE++KFZv6WZrtd85SKCrtfpQVvfQ
4bN3OifEXCWQ7SQAMFmf1W4JHUDfVy+f4aM7U7uq9fpV2UAA28wZWP1M0UFM
7ivsQ5LsAMkmx8b0Km392pXtR94wyWRoQ0h6s4XeAYItfajipl5OMBKPtsm6
HJBJDhA9kpLcsgWe847YS1mAfSeHHGEsujZksMJlemdgGC+LHUrqF+IzhVut
4MnqM1qprlatpJr/fx50sxWAhTEr5K4qx+nUwCd++WUIRr/+uoh6eMDx9Mjx
Yh5+0O/U436nP9nv1ON+p0d+d+hkvBUJraLQsvv91sKwSOC5y8wyJ5McOKKe
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
AA==

-->

</rfc>

