<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-michel-quic-fec-01" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="FEC for QUIC">Forward Erasure Correction for QUIC loss recovery</title>
    <seriesInfo name="Internet-Draft" value="draft-michel-quic-fec-01"/>
    <author fullname="François Michel">
      <organization>UCLouvain</organization>
      <address>
        <email>francois.michel@uclouvain.be</email>
      </address>
    </author>
    <author fullname="Olivier Bonaventure">
      <organization>UCLouvain, WEL RI</organization>
      <address>
        <email>olivier.bonaventure@uclouvain.be</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>FEC</keyword>
    <keyword>network coding</keyword>
    <keyword>QUIC</keyword>
    <abstract>
      <?line 54?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://francoismichel.github.io/i-d-quic-fec/draft-michel-quic-fec.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-michel-quic-fec/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Working Group mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/francoismichel/i-d-quic-fec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC protocol <xref target="QUICv1"/> relies on retransmissions to ensure
the reliable delivery of stream data. Retransmitting the lost
information requires the loss recovery mechanism to identify lost
packets which may take up to several hundreds of milliseconds
<xref target="QUIC-RECOVERY"/>. Depending on their delay-sensitivity, some
applications using QUIC could not afford such a waiting time to
ensure a good quality of experience to their users.</t>
      <t>Works has already been done to consider the use of
Forward Erasure Correction (FEC) for the QUIC protocol to ensure timely
data delivery for delay-sensitive applications <xref target="QUIC-FEC"/> <xref target="FlEC"/>
        <xref target="rQUIC"/> <xref target="I-D.swett-nwcrg-coding-for-quic"/>. These loss recovery
mechanisms generally maintain a coding window containing the
latency-sensitive application data and generate repair symbols
protecting this coding window from packet losses.
This document defines additions to the QUIC protocol to extend its
loss recovery mechanism with FEC capabilities and make it able to
recover from packet losses prior to their retransmission.</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 anchor="fec-related-definitions">
        <name>FEC-related definitions</name>
        <t>Source symbol: piece of information exchanged by two endpoints. This document considers QUIC packets payloads as source symbols.</t>
        <t>Repair symbol: redundant information constructed from the combination
of several source symbols.</t>
        <t>Erasure: loss of one or more symbols</t>
        <t>Erasure correction code: algorithm generating repair symbols and
reconstructing missing source symbols from a set of source and
repair symbols.</t>
        <t>Forward Erasure Correction: process of recovering erased symbols
before the detection of their erasure.</t>
        <t>FEC scheme: the conjunction of an erasure correction code and the
specific protocol elements required to use it with the design
described in this document.</t>
        <t>Encoder: entity producing repair symbols using an erasure correction code.
The encoder can be a library used by the protocol implementation or a
program running in a separate process or machine.</t>
        <t>Decoder: entity reconstructing missing source symbols using an erasure
correction code. The decoder can be a library used by the protocol
implementation or a program running in a separate process or machine.</t>
        <t>Coding window: window of source symbols that are required to decode a
repair symbol.</t>
      </section>
    </section>
    <section anchor="network-packets-and-coded-symbols">
      <name>Network packets and coded symbols</name>
      <t>QUIC endpoints exchange information over a network channel. Adding
Forward Erasure Correction to QUIC introduces a FEC encoder and a
FEC decoder to the QUIC endpoint. The encoder and decoder exchange source
and repair symbols that are carried through QUIC frames inside QUIC
packets.
<xref target="fig-packets-and-symbols"/> illustrates how a FEC-enabled QUIC
endpoint behaves.</t>
      <figure anchor="fig-packets-and-symbols">
        <name>Exchanging source and repair symbols over a QUIC connection</name>
        <artwork><![CDATA[
  +---------------------------------------------------------+
  |                       Application                       |
  +---------------------------------------------------------+
       | Application data                            ^
       | to send              Received and recovered |
       v                            application data |
    +------+                                      +------+
  __| Send |______________________________________| Recv |_______
 |  | API  |                                      | API  |       |
 |  +------+                                      +------+       |
 |     |                                             ^           |
 |     v                                             |           |
 | +---------+                QUIC              +---------+      |
 | |   FEC   |                                  |   FEC   |      |
 | | Encoder |                                  | Decoder |      |
 | +---------+                                  +---------+      |
 |      | Source and                                 ^           |
 |      | repair symbols             Received source |           |
 |      | to send                         and repair |           |
 |      v                                    symbols |           |
 |   +--------+                                +----------+      |
 |   |  QUIC  |                                |   QUIC   |      |
 |   | Sender |                                | Receiver |      |
 |   +--------+                                +----------+      |
 |_______|___________________________________________^___________|
         | QUIC packets                              |
         | to send                          Received |
         v                              QUIC packets |
      +-------------------------------------------------+
      |                     Network                     |
      +-------------------------------------------------+

]]></artwork>
      </figure>
      <t>The application submits new data using the stream or datagram abstraction
provided by the QUIC Send API (left part of <xref target="fig-packets-and-symbols"/>).
The FEC Encoder encodes the QUIC frames containing application data
(e.g. STREAM and DATAGRAM frames) into one or several source symbols
and generates repair symbols protecting these when needed. These
symbols are then packed into network packets by the QUIC Sender.
When repair symbols must be sent, the QUIC Sender packs them inside
dedicated QUIC frames discussed in <xref target="sec-repair-frame"/>.
On the receiving path (right part of <xref target="fig-packets-and-symbols"/>),
the QUIC Receiver consumes network packets and unpacks the symbols they
contain. It provides the received symbols
to the FEC Decoder that then recovers the lost source symbols when
possible. It finally passes the application data present in the newly
received or recovered source symbols to the application using the QUIC
Recv API.</t>
    </section>
    <section anchor="fec-and-the-loss-recovery-mechanism">
      <name>FEC and the loss recovery mechanism</name>
      <t>The FEC mechanism described in this document is an enhancement of the
classical QUIC loss recovery mechanism <xref target="QUIC-RECOVERY"/>. It does
not replace it by any means. A QUIC endpoint <bcp14>MAY</bcp14> ignore every received
repair symbol and <bcp14>MAY</bcp14> not perform any symbol recovery at all. The FEC
mechanism is only intended to allow a receiver recovering faster from
packet losses on the network if it values the timeliness of
data delivery.</t>
    </section>
    <section anchor="protocol-requirements-for-protecting-information-through-fec">
      <name>Protocol requirements for protecting information through FEC</name>
      <t>In this section, we list the points that must be defined by the protocol
for allowing QUIC endpoints to protect information using FEC.</t>
      <section anchor="defining-the-fec-protected-parts-of-a-quic-payload">
        <name>Defining the FEC-protected parts of a QUIC payload</name>
        <t>There is no need to protect every piece information sent on the wire by
QUIC. Some pieces of information are already sent redundantly (e.g. ACKs)
and some data are not delay sensitive and can be retransmitted later with
no harm (e.g. background download on a separate stream). Endpoints need
to agree on which parts of the packets are part of the protected source
symbols and how to compose a source symbol from what is sent on the wire.</t>
        <t>Versions 01 and 02 of <xref target="I-D.swett-nwcrg-coding-for-quic"/> only protect
streams payload. The idea is simple when using a single stream but becomes
complicated and requires more signaling in a multi-stream scenario. It also
cannot protect DATAGRAM frames <xref target="QUIC-DATAGRAM"/>.
In this document, we propose to consider whole frames as part of the source
symbols.
In order to reduce signalling between the peers, a single source symbol
<bcp14>MUST NOT</bcp14> contain the frames of several QUIC packets at the same time.</t>
      </section>
      <section anchor="identifying-the-source-symbols-from-quic-packets">
        <name>Identifying the source symbols from QUIC packets</name>
        <t>Upon reception of a QUIC packet, a receiver needs to identify the source
symbols contained in the packet to forward to the FEC decoder.
The decoder also needs to know which source symbols were lost. Since QUIC
does not enforce sending contiguously increasing packet numbers, it is not
possible for a receiver to distinguish a lost packet from a packet that
has never been sent. Furthermore, a QUIC sender may not want to protect
the payload of some packets if they do not carry latency-sensitive
information. Source symbols are thus attributed a Symbol ID (SID). The
SID of the first source symbol <bcp14>MUST</bcp14> be zero and the SIDs are contiguously
increasing. When a FEC decoder notes gaps in the received SIDs,
the missing SIDs correspond to lost source symbols that can be
recovered using FEC.</t>
        <t>As the QUIC packet number cannot be used to carry the SID, it must
be transmitted using either a dedicated QUIC frame or a dedicated
header field. The second solution being incompatible with <xref target="QUICv1"/>,
it is not discussed in this document. The source
symbol payload can either be put inside a dedicated frame
(<xref target="sec-source-symbol-frame"/>) or infered when handling a specific frame
(<xref target="sec-sid-frame"/>). Both alternatives are presented in the next
sections. Lead to the exact same packet wire format and outcome.</t>
        <section anchor="sec-source-symbol-frame">
          <name>Alternative 1: sending the source symbol inside a frame</name>
          <t>This alternative is compatible with <xref target="QUICv1"/>. It defines a new
SOURCE_SYMBOL frame as shown in <xref target="fig-source-symbol"/>.</t>
          <figure anchor="fig-source-symbol">
            <name>SOURCE_SYMBOL frame format</name>
            <artwork><![CDATA[
SOURCE_SYMBOL {
  SID (i),
  FEC Protected Payload (..)
}
]]></artwork>
          </figure>
          <t>The frame explicitly represents a source symbol. The FEC Protected Payload
field is analogous to the payload of a QUIC packet: it contains a
sequence of frames that are protected by FEC. The SOURCE_SYMBOL frame
is idempotent and explicit: it exactly describes the frames inside the
source symbol. The main drawback is that existing QUIC implementations
are not used to write frames inside other frames which may increase
the implementation cost of the approach. An example of the use of the
SOURCE_SYMBOL frame is shown in <xref target="fig-source-symbol-frame-example"/>.</t>
          <figure anchor="fig-source-symbol-frame-example">
            <name>SID Alternative 1</name>
            <artwork><![CDATA[
Sender                                                       Receiver
  |                                                             |
  | Pkt(5)[ACK[..], SOURCE_SYMBOL(0, { STREAM(4, "abc") }]      |
  |------------------------------------------------------------>|
  |                                                             |
  | Pkt(6)[STREAM(2, "xyz"),                                    |
  |        SOURCE_SYMBOL(1, { STREAM(8, "def"),                 |
  |                           DATAGRAM("msg") }]                |
  |------------------------------------------------------------>|
  |                                                             |
  |                                            Pkt(1)[ACK[..]]  |
  |<------------------------------------------------------------|
  |                                                             |

]]></artwork>
          </figure>
          <t>The two SOURCE_SYMBOL frames contain the source symbols with
SID 0 and 1. The first source symbol contains a frame for stream 4 while
the second one contains a frame for stream 8 and a DATAGRAM frame. The ACK
frame of packet 5 and the STREAM frame for stream 2 of packet 6 are not part
of the source symbol and are thus not protected by FEC. In this scenario,
every source symbol is correctly received and their reception can be deduced
from the acknowledgements of packets 5 and 6.</t>
        </section>
        <section anchor="sec-sid-frame">
          <name>Alternative 2: only sending the SID inside a frame</name>
          <t>This alternative is compatible with <xref target="QUICv1"/>. It defines a new SID frame
as shown in <xref target="fig-sid-frame"/>.</t>
          <figure anchor="fig-sid-frame">
            <name>SID frame format</name>
            <artwork><![CDATA[
SID {
  SID (i),
}
]]></artwork>
          </figure>
          <t>A QUIC packet carrying an SID frame means that the frames following the SID
frames in the packet payload are part of a FEC source symbol. The SID of
this symbol is represented by the only field of the SID frame. A packet
<bcp14>MUST NOT</bcp14> contain more than one SID frame. A packet whose payload is
FEC-protected <bcp14>MUST</bcp14> contain a SID frame whose SID field is the SID of
the related source symbol. This alternative has one drawback: the SID frame
is not idempotent since it is related to its containing packet.
An example of the use of the SID frame is shown in <xref target="fig-sid-frame-example"/>.</t>
          <figure anchor="fig-sid-frame-example">
            <name>SID Alternative 2</name>
            <artwork><![CDATA[
Sender                                       Receiver
  |                                            |
  | Pkt(5)[ACK[..], SID(0), STREAM(4, "abc")]  |
  |------------------------------------------->|
  |                                            |
  | Pkt(6)[STREAM(2, "xyz"),                   |
  |        SID(1), STREAM(8, "def"),           |
  |        DATAGRAM("msg")]                    |
  |------------------------------------------->|
  |                                            |
  |                            Pkt(1)[ACK[..]] |
  |<-------------------------------------------|
  |                                            |

]]></artwork>
          </figure>
          <t>The source symbols carried by the packets in this example are the same as for
<xref target="fig-source-symbol-frame-example"/> and the outcome and wire
format are the same.</t>
        </section>
        <section anchor="choosing-an-alternative">
          <name>Choosing an alternative</name>
          <t>One of these two design alternatives must be chosen to complete the design
of this document. As authors, we tend to prefer Alternative 1 due to the
idempotent character of the introduced frame.</t>
        </section>
      </section>
      <section anchor="sec-repair-frame">
        <name>Sending the repair symbols</name>
        <t>The repair symbols and the metadata attached to them are transferred using
the REPAIR frame shown in <xref target="fig-fec-repair-frame"/>.</t>
        <figure anchor="fig-fec-repair-frame">
          <name>REPAIR frame format</name>
          <artwork><![CDATA[
REPAIR {
  FEC Scheme Specific Repair Payload (1..),
}
]]></artwork>
        </figure>
        <t>The payload of the REPAIR frame is specific to the underlying
FEC scheme. In addition to the repair symbol itself, it may
contain any metadata needed by the erasure-correcting code (e.g. identifying
the source symbols protected by the repair symbol carried by the frame).
Depending on the FEC scheme, the REPAIR frame <bcp14>MAY</bcp14> contain
only a part of a repair symbol.</t>
      </section>
      <section anchor="sec-fec-window-frame">
        <name>Announcing the coding window size</name>
        <t>The receiver needs to store the received symbols in order to recover the
lost source symbols. The FEC_WINDOW frame is sent by the receiver
to announce the number of symbols  that can be stored simultaneously by
the receiver at a given point of time. The format of the FEC_WINDOW frame
is described in <xref target="fig-fec-window-frame"/>.</t>
        <figure anchor="fig-fec-window-frame">
          <name>FEC_WINDOW frame format</name>
          <artwork><![CDATA[
FEC_WINDOW {
  FEC Window Epoch (i),
  FEC Window Size (i),
}
]]></artwork>
        </figure>
        <t>The FEC Window Epoch field is a unique identifier for the announced window.
The first epoch is set to 0. Each time a new FEC_WINDOW frame is sent,
the FEC Window Epoch field is increased by exactly one.</t>
        <t>The Window Size field indicates the number of symbols that can be stored
simultaneously by the receiver. The Window Size value overrides the
window sizes received for smaller window epochs.</t>
      </section>
      <section anchor="sec-symbol-ack-frame">
        <name>Announcing the recovered symbols</name>
        <t>The FEC receiver <bcp14>MAY</bcp14> advertise the recovered source symbols to avoid the sender retransmitting already recovered data. This can be done using the SYMBOL_ACK frame as shown in <xref target="fig-symbol-ack-frame"/>.</t>
        <figure anchor="fig-symbol-ack-frame">
          <name>SYMBOL_ACK frame format</name>
          <artwork><![CDATA[
SYMBOL_ACK {
  Largest Acknowledged (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
}
]]></artwork>
        </figure>
        <t>The frame has a similar format as the ACK frame, announcing the reception
of SIDs instead of packet numbers. In addition to symbols
recovered by FEC, this frame <bcp14>MAY</bcp14> also announce symbols received regularly
through the network to avoid gaps in the ACK ranges and reduce the frame
size. There is no obligation for a FEC receiver to send SYMBOL_ACK frames.
The FEC receiver <bcp14>MAY</bcp14> decide to only advertize a subset of the received
source symbols. The SYMBOL_ACK frame <bcp14>MUST NOT</bcp14> be used to infer any congestion
state on the network (see <xref target="sec-coding-and-congestion"/>).</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>To illustrate the different mechanisms and frames introduced here,
let us take an example where an application sends the bytes
"ABCDEF" over a single QUIC stream. <xref target="fig-example-fec-mechanisms"/>
illustrates this example. In this example, the QUIC Sender
sends the stream data into two separate regular STREAM frames.
Following the Alternative 1 proposed in <xref target="sec-source-symbol-frame"/>,
these two STREAM frames are then placed into two SOURCE_SYMBOL
frames sent in the QUIC packets PKT(42) and PKT(43). The two source
symbols are protected by a REPAIR_SYMBOL frame sent in PKT(44).
PKT(42), containing the bytes "ABC" is lost. Upon the reception of
PKT(43), the bytes "DEF" must be stored by the receiver. The receiver
then has to wait for receiving the first part of the stream before
delivering "DEF" to the application. Once PKT(44) is received,
the repair symbol it contains can be used to recompute the
first source symbol containing the bytes "ABC" without having
to wait for a retransmission. The receiver can then deliver
"ABCDEF" to the application. The packets received through the
network are acknowledged using a regular ACK frame and the
recovered source symbol is acknowledged using a SYMBOL_ACK
frame that lists the IDs of the recovered source symbols.</t>
        <figure anchor="fig-example-fec-mechanisms">
          <name>Recovering lost stream data using FEC</name>
          <artwork><![CDATA[
        QUIC Sender                               QUIC Receiver
            |                                           |
  App sends |                                           |
   "ABCDEF" |  PKT(42)[SOURCE_SYMBOL(1, STREAM{"ABC"})] |
 ---------->|---------------------x                     |
            |                                           |
            |  PKT(43)[SOURCE_SYMBOL(2, STREAM{"DEF"})] |
            |------------------------------------------>| Store "DEF"
            |                                           |
            |  PKT(44)[REPAIR_SYMBOL]                   |
            |------------------------------------------>| (Recompute )
            |                                           | (the source)
            |                                           | (symbol    )
            |                                           |
            |      PKT(50)[ACK[42, 43], SYMBOL_ACK[1]]  |
(Empty rtx) |<------------------------------------------| Deliver
(    queue) |                                           | "ABCDEF"
            |                                           | to the App
            |                                           |---------->
            |                                           |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-coding-and-congestion">
      <name>Coding and congestion control</name>
      <t>The fact of successfully recovering symbols <bcp14>SHOULD NOT</bcp14> be
used to infer any congestion state on the network.
More specifically, the recovery a of a symbol through FEC decoding
<bcp14>SHOULD NOT</bcp14> be used to hide the network loss event of the corresponding
packet to the congestion control, applying Recommandation 1 of <xref target="RFC9265"/>.</t>
    </section>
    <section anchor="negociating-the-fec-extension-using-transport-parameters">
      <name>Negociating the FEC extension using transport parameters</name>
      <t>This section defines the new transport parameters used to negociate and
parametrize the FEC extension described in this document.</t>
      <section anchor="sec-enable-fec-tp">
        <name>enable_fec</name>
        <t>The use of the FEC extension is negociated using the enable_fec transport
parameter defined in <xref target="enable-fec-transport-parameter"/> :</t>
        <table anchor="enable-fec-transport-parameter">
          <name>Values for enable_fec</name>
          <thead>
            <tr>
              <th align="left">Option</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0</td>
              <td align="left">don't support FEC</td>
            </tr>
            <tr>
              <td align="left">0x1</td>
              <td align="left">supports FEC as defined in this document</td>
            </tr>
          </tbody>
        </table>
        <t>When the enable_fec value is 0 or is not advertized by the peer,
the QUIC endpoint <bcp14>MUST NOT</bcp14> use any frame or mechanism described in this
document.</t>
      </section>
      <section anchor="sec-decoder-fec-scheme-tp">
        <name>decoder_fec_scheme</name>
        <t>Each QUIC endpoint uses the decoder_fec_scheme transport parameter to
define the FEC scheme used to decode the received repair symbols. The
QUIC sender <bcp14>MUST</bcp14> use the specified FEC scheme to generate repair symbols.
The decoder_fec_scheme parameter is an integer value representing the
identifier of the desired FEC scheme.
For instance, a FEC scheme using Reed Solomon could be identified by the
ID 0x0 and a FEC scheme using LDPC could be identified by 0x1.</t>
        <t>This document does not specify nor identify any FEC scheme yet.
Several FEC schemes have been proposed
<xref target="I-D.roca-nwcrg-rlc-fec-scheme-for-quic"/> <xref target="RFC6865"/>
          <xref target="I-D.irtf-nwcrg-tetrys"/>. The next version of this
document will detail how some of these schemes can be directly integrated
in QUIC.</t>
        <t>Future
versions of this document will provide ways to format FEC scheme-specific
payload for REPAIR frames.
When the decoder_fec_scheme parameter is not advertized by the peer,
the QUIC sender <bcp14>MUST NOT</bcp14> send any repair symbol.</t>
      </section>
      <section anchor="sec-initial-coding-window-tp">
        <name>initial_coding_window</name>
        <t>Each QUIC endpoint uses the initial_coding_window transport parameter to
define the initial coding window size it uses to store source and repair
symbols (see <xref target="sec-fec-window-frame"/>).
When the initial_coding_window parameter is not advertized by the peer,
the QUIC sender <bcp14>MUST</bcp14> consider a default value of 0 and <bcp14>MUST NOT</bcp14> send
any repair symbol.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</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 source
and 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><em>Disclaimer: the IDs defined in this section are present for experimental</em>
        <em>purposes only. They are not requested codepoints and are subject to change</em>
        <em>in the next versions of this document.</em></t>
      <t>This document defines three new transport parameters and five new frames. The
SID and SOURCE_SYMBOL frames serve the same purpose. One of them will be
removed in next versions of this document. The values present in the tables
are used for experiments.</t>
      <section anchor="new-transport-parameters">
        <name>New transport parameters</name>
        <table anchor="iana-transport-parameters">
          <name>New transport parameters</name>
          <thead>
            <tr>
              <th align="left">Parameter ID</th>
              <th align="left">Parameter name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x238ffeceXX</td>
              <td align="left">enable_fec</td>
              <td align="left">
                <xref target="sec-enable-fec-tp"/></td>
            </tr>
            <tr>
              <td align="left">0x238ffecd</td>
              <td align="left">decoder_fec_scheme</td>
              <td align="left">
                <xref target="sec-decoder-fec-scheme-tp"/></td>
            </tr>
            <tr>
              <td align="left">0x238ffecc</td>
              <td align="left">initial_coding_window</td>
              <td align="left">
                <xref target="sec-initial-coding-window-tp"/></td>
            </tr>
          </tbody>
        </table>
        <t>The XX in 0x238ffeceXX are to be replaced by the version of this document
that is implemented by the QUIC endpoint (e.g. the parameter ID for the
version 00 of this document is 0x238ffece00).</t>
      </section>
      <section anchor="new-frames">
        <name>New frames</name>
        <table anchor="iana-frames">
          <name>New frames</name>
          <thead>
            <tr>
              <th align="left">Frame ID</th>
              <th align="left">Frame name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x32a80fec</td>
              <td align="left">REPAIR</td>
              <td align="left">
                <xref target="sec-repair-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x32a80fec55</td>
              <td align="left">SOURCE_SYMBOL</td>
              <td align="left">
                <xref target="sec-source-symbol-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x32a80fec1d</td>
              <td align="left">SID</td>
              <td align="left">
                <xref target="sec-sid-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x32a80fecac</td>
              <td align="left">SYMBOL_ACK</td>
              <td align="left">
                <xref target="sec-symbol-ack-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x32a80fecc0</td>
              <td align="left">FEC_WINDOW</td>
              <td align="left">
                <xref target="sec-fec-window-frame"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Maxime Piraux, Louis Navarre and all the authors of
<xref target="I-D.swett-nwcrg-coding-for-quic"/>.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="QUIC-DATAGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </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="QUIC-FEC">
          <front>
            <title>QUIC-FEC: Bringing the benefits of Forward Erasure Correction to QUIC</title>
            <author fullname="Francois Michel" initials="F." surname="Michel">
              <organization/>
            </author>
            <author fullname="Quentin De Coninck" initials="Q." surname="De Coninck">
              <organization/>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization/>
            </author>
            <date month="May" year="2019"/>
          </front>
          <seriesInfo name="2019 IFIP Networking Conference (IFIP" value="Networking)"/>
          <seriesInfo name="DOI" value="10.23919/ifipnetworking.2019.8816838"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="rQUIC">
          <front>
            <title>rQUIC: Integrating FEC with QUIC for Robust Wireless Communications</title>
            <author fullname="Pablo Garrido" initials="P." surname="Garrido">
              <organization/>
            </author>
            <author fullname="Isabel Sanchez" initials="I." surname="Sanchez">
              <organization/>
            </author>
            <author fullname="Simone Ferlin" initials="S." surname="Ferlin">
              <organization/>
            </author>
            <author fullname="Ramon Aguero" initials="R." surname="Aguero">
              <organization/>
            </author>
            <author fullname="Ozgu Alay" initials="O." surname="Alay">
              <organization/>
            </author>
            <date month="December" year="2019"/>
          </front>
          <seriesInfo name="2019 IEEE Global Communications Conference" value="(GLOBECOM)"/>
          <seriesInfo name="DOI" value="10.1109/globecom38437.2019.9013401"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="FlEC">
          <front>
            <title>FlEC: Enhancing QUIC With Application-Tailored Reliability Mechanisms</title>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>Department of INGI, Universit&amp;#x00E9; Catholique de Louvain (UCLouvain), Ottignies-Louvain-la-Neuve, Belgium</organization>
            </author>
            <author fullname="Alejandro Cohen" initials="A." surname="Cohen">
              <organization>Technion&amp;#x2014;Israel Institute of Technology, Haifa, Israel</organization>
            </author>
            <author fullname="Derya Malak" initials="D." surname="Malak">
              <organization>Rensselaer Polytechnic Institute, Troy, NY, USA</organization>
            </author>
            <author fullname="Quentin De Coninck" initials="Q." surname="De Coninck">
              <organization>Department of INGI, Universit&amp;#x00E9; Catholique de Louvain (UCLouvain), Ottignies-Louvain-la-Neuve, Belgium</organization>
            </author>
            <author fullname="Muriel Médard" initials="M." surname="Médard">
              <organization>Massachusetts Institute of Technology, Cambridge, MA, USA</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>Department of INGI, Universit&amp;#x00E9; Catholique de Louvain (UCLouvain), Ottignies-Louvain-la-Neuve, Belgium</organization>
            </author>
            <date month="April" year="2023"/>
          </front>
          <seriesInfo name="IEEE/ACM Transactions on Networking" value="vol. 31, no. 2, pp. 606-619"/>
          <seriesInfo name="DOI" value="10.1109/tnet.2022.3195611"/>
          <refcontent>Institute of Electrical and Electronics Engineers (IEEE)</refcontent>
        </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>
        <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.irtf-nwcrg-tetrys">
          <front>
            <title>Tetrys: An On-the-Fly Network Coding Protocol</title>
            <author fullname="Jonathan Detchart" initials="J." surname="Detchart">
              <organization>ISAE-SUPAERO</organization>
            </author>
            <author fullname="Emmanuel Lochin" initials="E." surname="Lochin">
              <organization>ENAC</organization>
            </author>
            <author fullname="Jerome Lacan" initials="J." surname="Lacan">
              <organization>ISAE-SUPAERO</organization>
            </author>
            <author fullname="Vincent Roca" initials="V." surname="Roca">
              <organization>INRIA</organization>
            </author>
            <date day="17" month="November" year="2022"/>
            <abstract>
              <t>This document describes Tetrys, which is an on-the-fly network coding protocol that can be used to transport delay-sensitive and loss-sensitive data over a lossy network. Tetrys may recover from erasures within an RTT-independent delay thanks to the transmission of coded packets. This document is a record of the experience gained by the authors while developing and testing the Tetrys protocol in real conditions.

 This document is a product of the Coding for Efficient NetWork Communications Research Group (NWCRG). It conforms to the NWCRG taxonomy described in RFC 8406.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-nwcrg-tetrys-04"/>
        </reference>
        <reference anchor="RFC6865">
          <front>
            <title>Simple Reed-Solomon Forward Error Correction (FEC) Scheme for FECFRAME</title>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <author fullname="M. Cunche" initials="M." surname="Cunche"/>
            <author fullname="J. Lacan" initials="J." surname="Lacan"/>
            <author fullname="A. Bouabdallah" initials="A." surname="Bouabdallah"/>
            <author fullname="K. Matsuzono" initials="K." surname="Matsuzono"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>&lt;p&gt;This document describes a fully-specified simple Forward Error Correction (FEC) scheme for Reed-Solomon codes over the finite field (also known as the Galois Field) GF(2^^m), with 2</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6865"/>
          <seriesInfo name="DOI" value="10.17487/RFC6865"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
