<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.11 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dmoskvitin-quic-adaptive-fec-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="FEC for QUIC">Adaptive Forward Erasure Correction for Delay-Sensitive QUIC Connections</title>
    <seriesInfo name="Internet-Draft" value="draft-dmoskvitin-quic-adaptive-fec-00"/>
    <author initials="D." surname="Moskvitin" fullname="Dmitry Moskvitin">
      <organization>Huawei</organization>
      <address>
        <email>dmitry.moskvitin@huawei.com</email>
      </address>
    </author>
    <author initials="E." surname="Onegin" fullname="Evgeny Onegin">
      <organization>Huawei</organization>
      <address>
        <email>onegin.evgeny@huawei.com</email>
      </address>
    </author>
    <author initials="R." surname="Huang" fullname="Rachel Huang">
      <organization>Huawei</organization>
      <address>
        <email>rachel.huang@huawei.com</email>
      </address>
    </author>
    <author initials="H." surname="Luo" fullname="Hanlin Luo">
      <organization>Huawei</organization>
      <address>
        <email>luohanlin2@huawei.com</email>
      </address>
    </author>
    <author initials="Q." surname="Chen" fullname="Qichang Chen">
      <organization>Huawei</organization>
      <address>
        <email>chenqichang1@huawei.com</email>
      </address>
    </author>
    <date year="2024" month="May" day="06"/>
    <area>Transport Area</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>This document proposes a FEC supporting mechanism of QUIC protocol for both short flows and long flows protection in accordance to the sender observed packet loss rate.</t>
    </abstract>
  </front>
  <middle>
    <?line 58?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC protocol <xref target="QUICv1"/> is general purpose transport protocol, which supports both reliable and unreliable data transmission. Depending on application-specific use cases, one can choose either to rely on QUIC built-in loss recovery mechanism <xref target="QUIC-RECOVERY"/> or to use application layer retransmission mechanism. In both cases it takes more than one round-trip time to retransmit lost data, which may be crucial in delay-sensitive applications (e.g. RTC) if RTT is high enough. Forward erasure coding allows to avoid or minimize extra delay incurred by the retransmission of lost data, while redundancy adaptation minimizes data overhead generated by FEC..</t>
      <t>There are several works considering the use of Forward Erasure Correction (FEC) in QUIC protocol: <xref target="I-D.roca-nwcrg-rlc-fec-scheme-for-quic"/>, <xref target="I-D.swett-nwcrg-coding-for-quic"/> and <xref target="I-D.michel-quic-fec"/>. These works share the common idea of protecting a sequence of packets each containing protected data. But there is a broad area of applications there it’s only needed to send short messages of data (one or couple QUIC packets) in timely manner with relatively high time gap in-between, for example instant messaging, control channels, notifications, etc. In this case it’s more beneficial to protect every message independently of each over.</t>
      <t>This document defines extensions to the QUIC protocol which has the ability to cover both use cases, i.e., either a FEC packet protecting a sequence of packets or several FEC packets protecting single packet independently, and adaptively adjust the FEC redundancy according to packet loss rate. It is useful in random loss scenarios for delay sensitive services.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="short-message-fec-design-overview">
      <name>Short Message FEC Design Overview</name>
      <t>FEC mechanisms used for streaming scenario which is one FEC pacekts protecting a seqence of packets is well known. In this section, how to protect whole QUIC packet is introduced, motivated by the applications described in introduction. Therefore, each protected packet corresponds to several repair symbols, and each repair symbol correspond to one protected packet. Prior to encryption, serialized QUIC packet is divided into several parts, called shards, each shard acts as source symbol and sequence of shards corresponding to single QUIC packet act as message (see <xref target="quic-shad"/>).</t>
      <figure anchor="quic-shad">
        <name>Example of packet division into two shards</name>
        <artwork><![CDATA[
            +---------------+ - - - - - - +---------------+
            |  QUIC header  |             |               |
            +---------------+             |    Shard 1    |
            |               |             |               |
            |               | - - - - - - +---------------+
            |    Payload    |             |               |
            |               |             |    Shard 2    |
            |               |             |               |
            +---------------+ - - - - - - +---------------+
]]></artwork>
      </figure>
      <t>Number of shards depend on encoding algorithm and parameters used for protection.  If the size of protected packet is either too small or can’t be evenly divided, then the protected packet may be padded with PADDING frame during serialization to achieve desirable size. It is noted that this method only protect the application data space.</t>
      <t>After sending protected packet, sender <bcp14>SHOULD</bcp14> encode corresponding shards into repair symbols and send them afterwards. Several repair symbols <bcp14>MAY</bcp14> be sent in one QUIC packet, but it’s <bcp14>RECOMMENDED</bcp14> to send repair symbols in separate packets. In general, distribution of repair symbols between packets depends on properties of concrete erasure code used. Each repair symbol <bcp14>MUST</bcp14> contain information about corresponding protected packet number. It allows to avoid marking protected packets with some FEC-specific id.</t>
      <t>Receiver <bcp14>MAY</bcp14> ignore repair symbols, particularly in the cases when corresponding protected packet is either already received or recovered. Repair symbols are accumulated on receiver either until recovery or the moment when recovery of corresponding lost packet is not possible anymore.</t>
      <figure anchor="figdo">
        <name>Example of protected packet recovery after two corresponding repair symbols received</name>
        <artwork><![CDATA[
          Network                Receiver side
        Sender                 QUIC Packet             Decoder
           |                   Processing                 |
           |                        |                     |
        Protected                   |                     |
        Packet 1  - - - - X Loss    |                     |
           |                        |                     |
        Repair                      |                     |
        Symbol 1  - - - - - - - - > | - - - - - - - - - > |
           |                        |                     |
        Repair                      |                     |
        Symbol 2  - - - - - - - - > | - - - - - - - - - > |
           |                        |             Protected Packet 1
           |                        | < - - - - - - - Recovered
]]></artwork>
      </figure>
    </section>
    <section anchor="fec-and-loss-recovery">
      <name>FEC and Loss Recovery</name>
      <t>The FEC extension described in this document <bcp14>SHOULD</bcp14> work as an addition to built-in QUIC loss recovery mechanism and intended only for faster recovery of data lost during transmission through network. Modules of QUIC, which rely on precise loss rate measurements (e.g. congestion control) during transmission, should be provided with actual packet loss rate from wire, rather than loss rate measured after recovery. Depending on repair symbol scheduling, packet recovery may be observed as packet reordering in wire, therefore should be properly accounted. Finally, FEC adaptive redundancy mechanism should consider possible losses incurred by congestion control overshooting and avoid positive feedback loop: recursively increase redundancy as a reaction to increased packet loss rate.</t>
    </section>
    <section anchor="protocol-extensions">
      <name>Protocol Extensions</name>
      <t>QUIC protocol extensions are specified in this sectioin.</t>
      <section anchor="handshake-negotiation-and-transport-parameter">
        <name>Handshake Negotiation and Transport Parameter</name>
        <t>This extension defines a new transport parameter,  used to negotiate the use of FEC extensions during the connection handshake, as specified in <xref target="QUICv1"/>. The new transport parameter is defined as follows:</t>
        <t>enable_FEC: The enable_FEC transport parameter is included if the endpoint supports FEC mechanism and FEC extensions as defined in this draft. This parameter specify the the support FEC algorithm. How the FEC algorithm is encoded will be added in future versions.</t>
      </section>
      <section anchor="fectag">
        <name>FEC Tag Frame</name>
        <t>FEC_Tag Frame are used to indicate the relationship between FEC source symbol and repair symbol, as well as adaptive FEC information. FEC_Tag frames are formattes as follow <xref target="fig-fec-tag"/></t>
        <figure anchor="fig-fec-tag">
          <name>FEC_TAG frame format</name>
          <artwork><![CDATA[
FEC_Tag {
   Type (i),
   Tag Type (1), 
   Sequence (5),
   Tag ID Length (2),
   Tag ID (8..32),
   [Redundancy Ratio (8)],
}
]]></artwork>
        </figure>
        <t>This FEC Tag frame can be used either in source symbol or in repair symbol. It contains the following fields:</t>
        <t>Tag type: It indicates the usage of this FEC tag. 0 indicates it is using short message FEC mechanism, in which case only repair symbol <bcp14>MUST</bcp14> include this frame; 1 indicates it's for long flow usage in which case both source symbol and repair symbos must include this frame.</t>
        <t>Sequence: The sequence number in FEC block. When the frame is used in source symbol, it indicates sequence number of this proctected QUIC packet appeared in the current FEC block. When the frame is used in repair symbol, it indicates the sequence number of this repair packet in the current FEC block produced by the FEC mechanism.</t>
        <t>Tag ID Length: It is encoded as an unsigned two-bit integer that is one less than the length of the Tag ID field in bytes</t>
        <t>Tag ID: It is the information of current FEC block. In the case of tag type is 0, i.e., one QUIC packet is protected by several FEC repair packets,  it is equal to the corresponding source packet number that the FEC frame protects, As defined in the packet number definition in <xref target="QUICv1"/>. In the case of tag type is 1, i.e., multiple QUIC packets are protected by one or multiple FEC repair packets, it is encoded as the FEC block ID.</t>
        <t>Redundancy Ratio: The ration of FEC repair packets in one FEC block. It is equivalent to taking the interger part after multiplying the redundancy ratio by 256. The redundacy ratio is defined to be the number of FEC repair packets divided by the total number of packets sent in the same FEC block. When this field is 0, it means that adaptive FEC is not used.</t>
      </section>
      <section anchor="fecrepair">
        <name>Repair Symbol Frame</name>
        <t>FEC-REPAIR Frame are used by a sender to contain the FEC symbol which will be used by  the receiver to recover a lost packet. FEC_REPAIR frames are formatted as follow <xref target="fig-fec-repair"/>.</t>
        <figure anchor="fig-fec-repair">
          <name>FEC_REPAIR frame format</name>
          <artwork><![CDATA[
FEC_REPAIR {
   Type (i) = TBD,
   FEC Version (i),
   FEC Meta Data (..),
   Reserved (i) = 0,
   FEC Payload (..)
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <t>FEC Version: A variable-length integer which specifies the encoding algorithm used and the structure of the following FEC Meta Data field.</t>
        <t>FEC Meta Data: A structure, which is intended for additional information about repair symbol, such as identificator of repair symbol in the coding block, encoding parameters, FEC Payload size, etc. Contents of this structure depend on concrete implementation and encoding algorithm used.</t>
      </section>
      <section anchor="usage-of-fec-tag-in-quic-packets">
        <name>Usage of FEC Tag in QUIC Packets</name>
        <section anchor="short-flow-usage">
          <name>Short Flow Usage</name>
          <t>In this case, the souce symbol quic packets are untouched. The repair symbol quic packets will look like as follow:</t>
          <artwork><![CDATA[
Repir_Symbol_QUIC_Packet {
   QUIC header, FEC_Tag, FEC_REPAIR
}
]]></artwork>
        </section>
        <section anchor="long-flow-usage">
          <name>Long Flow Usage</name>
          <t>In this case, both the souce symbol quic packets and the repair symbol quic packets <bcp14>MUST</bcp14> contain FEC_Tag frame.</t>
          <artwork><![CDATA[
Souce_Symbol_QUIC_Packet {
   QUIC header, FEC_Tag, Original payload
}

Repir_Symbol_QUIC_Packet {
   QUIC header, FEC_Tag, FEC_REPAIR
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="impact-of-loss-recovery">
      <name>Impact of Loss Recovery</name>
      <t>In the case of lost source symbol packets have been successfully recovered by FEC mechnisim, it should avoid the retransmssion of those packets at the sender. Thus, the receiver <bcp14>MUST</bcp14> treat those recovered packets as the received packets, in stead of lost packets, in the ACK frames.</t>
      <t>In the case of lost pacekts are FEC repair symbol, retransmission of these packet at the sender is meaningless. Therefore, the sender <bcp14>SHOULD</bcp14> ignore them when detecting such losses from the ACK frames.</t>
    </section>
    <section anchor="fecack">
      <name>Loss Rate Calculation</name>
      <t>Loss rate calculation is based on the received ACK frame by the sender. With the introduction of FEC, loss rate calculation will includes repair packets, which is not accurately represent the source symbol packet loss rate. When using adaptive FEC, a more precise calculation of the original packet loss rate would be benefitial to determine the appropriate level of FEC redundancy to be injected. Considering the diagram as follow.</t>
      <figure anchor="fig-loss-calc">
        <name>Relationship between acked and FEC acked protected packets</name>
        <artwork><![CDATA[
                +-----------------------+
                |Sent packets           |
                | +-----------------+   |
                | |Acked packets    |   |
                | | +---------------+-+ |
                | | | +----------+  | | |
                | | | | FEC      |  | | |
                | | | | acked    |  | | |
                | | | | packets  |  | | |
                | | | +----------+  | | |
                | +-+---------------+ | |
                |   |Protected packets| |
                |   +-----------------+ |
                +-----------------------+
]]></artwork>
      </figure>
      <t>To address this issue, a new frame is introduced to inform the sender what packets have been recovered.  It is formatted as follow <xref target="fig-fec-ack"/>.</t>
      <figure anchor="fig-fec-ack">
        <name>FEC_ACK frame format</name>
        <artwork><![CDATA[
FEC_ACK {
     Type (i) = TBD,
     FEC Latest Restored Packet Number (i),
     FEC Restored Bytes (i),
     FEC Restored Packets (i),
     FEC Restored Packet List Size (i),
]]></artwork>
      </figure>
      <t>FEC Latest Restored Packet Number: A variable-length integer which contains latest restored packet number.</t>
      <t>FEC Restored Bytes: A variable-length integer which contains number of bytes restored on receiver side. This field is intended for statistics collection and analysis on sender.</t>
      <t>FEC Restored Packets: A variable-length integer which contains number of packets restored on receiver side. This field is intended for statistics collection and analysis on sender.</t>
      <t>FEC Restored Packet List Size: A variable-length integer which contains amount of packet numbers following after in that frame.</t>
      <t>FEC Restored Packet Number: A list of recovered packet numbers listed in restoring order (newer first).</t>
      <t>This frame is optional. It can be used to calculate the loss rate more accurately when used for adaptive FEC.</t>
    </section>
    <section anchor="adaptive-redundancy">
      <name>Adaptive redundancy</name>
      <t>In order to achieve maximum efficiency, sender should change encoding algorithm parameters to match network conditions. To be precise, from a set of algorithm parameters, which provide a certain protection level at current network packet loss rate ( we provide example of relation between loss rate in BEC and performance of FEC scheme with fixed parameters as follow), choose one that have maximum coding rate. This way it will tend to reduce redundancy while providing certain level of protection.</t>
      <figure anchor="fig-adaptive">
        <name>Example of performance profile of a given FEC scheme</name>
        <artwork><![CDATA[
    Success ▲
    rate,%  │
         100│_____.....................................
            │     ─────____
            │              ──__
            │                  ──
            │                    ──
            │                      ─_
            │                        _
            │                         _
            │                          ─__
            │                             -___
          ──┼─────────────────────────────────|───────►
           0│                                100%  Packet
                                                   loss
                                                   rate,%
]]></artwork>
      </figure>
    </section>
    <section anchor="security-consideration">
      <name>Security Consideration</name>
      <t>The FEC mechanism for QUIC only runs under 0-RTT and 1-RTT encryption levels and only operates inside the encrypted payload.</t>
      <section anchor="dos-due-to-difficult-symbols-recoveries">
        <name>DoS due to difficult symbols recoveries</name>
        <t>An attacker could try to cause a DoS of a receiver by selectively sending repair symbols to trigger intensive erasure correction operations on the receiver. A QUIC receiver is never forced to perform any erasure correction and may ignore any received repair symbol if it has doubts in its capabilities to decode it in a reasonable amount of time.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines a new transport parameter for supporting FEC mechanisms, and possibly 2 new frame types.</t>
      <figure anchor="fig-new-frames">
        <name>List of new frames</name>
        <artwork><![CDATA[
    +==========+===========+==============+
    |Frame ID  |Frame name |Specification |
    +==========+===========+==============+
    |TBD       |FEC Tag    |{{fectag}}    |
    +----------+-----------+--------------+
    |TBD       |FEC Repair |{{fecrepair}} |
    +----------+-----------+--------------+
    |TBD       |FEC Ack    |{{fecack}}    |
    +----------+-----------+--------------+
]]></artwork>
      </figure>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="QUICv1">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="rfc9265">
          <front>
            <title>Forward Erasure Correction (FEC) Coding and Congestion Control in Transport</title>
            <author fullname="N. Kuhn" initials="N." surname="Kuhn"/>
            <author fullname="E. Lochin" initials="E." surname="Lochin"/>
            <author fullname="F. Michel" initials="F." surname="Michel"/>
            <author fullname="M. Welzl" initials="M." surname="Welzl"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>Forward Erasure Correction (FEC) is a reliability mechanism that is distinct and separate from the retransmission logic in reliable transfer protocols such as TCP. FEC coding can help deal with losses at the end of transfers or with networks having non-congestion losses. However, FEC coding mechanisms should not hide congestion signals. This memo offers a discussion of how FEC coding and congestion control can coexist. Another objective is to encourage the research community to also consider congestion control aspects when proposing and comparing FEC coding solutions in communication systems.</t>
              <t>This document is the product of the Coding for Efficient Network Communications Research Group (NWCRG). The scope of the document is end-to-end communications; FEC coding for tunnels is out of the scope of the document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9265"/>
          <seriesInfo name="DOI" value="10.17487/RFC9265"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.michel-quic-fec">
          <front>
            <title>Forward Erasure Correction for QUIC loss recovery</title>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain, WEL RI</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This documents lays down the QUIC protocol design considerations
   needed for QUIC to apply Forward Erasure Correction on the data sent
   through the network.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-michel-quic-fec-01"/>
        </reference>
        <reference anchor="I-D.roca-nwcrg-rlc-fec-scheme-for-quic">
          <front>
            <title>Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for QUIC</title>
            <author fullname="Vincent Roca" initials="V." surname="Roca">
              <organization>INRIA</organization>
            </author>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Marie-Jose Montpetit" initials="M." surname="Montpetit">
              <organization>Triangle Video</organization>
            </author>
            <date day="9" month="March" year="2020"/>
            <abstract>
              <t>   This document specifies Sliding Window Random Linear Code (RLC)
   Forward Erasure Correction (FEC) Schemes for the QUIC transport
   protocol, in order to recover from packet losses.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-roca-nwcrg-rlc-fec-scheme-for-quic-03"/>
        </reference>
        <reference anchor="I-D.swett-nwcrg-coding-for-quic">
          <front>
            <title>Coding for QUIC</title>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Marie-Jose Montpetit" initials="M." surname="Montpetit">
              <organization>Triangle Video</organization>
            </author>
            <author fullname="Vincent Roca" initials="V." surname="Roca">
              <organization>INRIA</organization>
            </author>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <date day="9" month="March" year="2020"/>
            <abstract>
              <t>   This document focuses on the integration of FEC coding in the QUIC
   transport protocol, in order to recover from packet losses.  This
   document does not specify any FEC code but defines mechanisms to
   negotiate and integrate FEC Schemes in QUIC.  By using proactive loss
   recovery, it is expected to improve QUIC performance in sessions
   impacted by packet losses.  More precisely it is expected to improve
   QUIC performance with real-time sessions (since FEC coding makes
   packet loss recovery insensitive to the round trip time), with short
   sessions (since FEC coding can help recovering from tail losses more
   rapidely than through retransmissions), with multicast sessions
   (since the same repair packet can recover several different losses at
   several receivers), and with multipath sessions (since repair packets
   add diversity and flexibility).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-swett-nwcrg-coding-for-quic-04"/>
        </reference>
      </references>
    </references>
    <?line 325?>



  </back>
  <!-- ##markdown-source:
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
C6u3RcFaQwAA

-->

</rfc>
