| rfc9407xml2.original.xml | rfc9407.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- $Id$ --> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc [ | |||
| <rfc category="exp" docName="draft-irtf-nwcrg-tetrys-04" ipr="trust200902" obsol | <!ENTITY nbsp " "> | |||
| etes="" updates="" submissionType="IETF" xml:lang="en"> | <!ENTITY zwsp "​"> | |||
| <?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2 | <!ENTITY nbhy "‑"> | |||
| 629.xslt' ?> | <!ENTITY wj "⁠"> | |||
| <?rfc toc="yes"?> | ]> | |||
| <?rfc tocompact="yes"?> | ||||
| <?rfc tocdepth="3"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IRTF" category=" | |||
| <?rfc tocindent="yes"?> | exp" consensus="true" docName="draft-irtf-nwcrg-tetrys-04" number="9407" ipr="tr | |||
| <?rfc symrefs="yes"?> | ust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="3" | |||
| <?rfc sortrefs="yes"?> | symRefs="true" sortRefs="true" version="3"> | |||
| <?rfc comments="yes"?> | ||||
| <?rfc inline="yes"?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <?rfc strict="yes" ?> | ||||
| <front> | <front> | |||
| <title abbrev="Tetrys Network Coding Protocol">Tetrys, an On-the-Fly Netwo | <title abbrev="Tetrys Network Coding Protocol">Tetrys: An On-the-Fly Network | |||
| rk Coding Protocol</title> | Coding Protocol</title> | |||
| <author fullname="Jonathan Detchart" initials="J." surname="Detchart"> | <seriesInfo name="RFC" value="9407"/> | |||
| <organization>ISAE-SUPAERO</organization> | <author fullname="Jonathan Detchart" initials="J." surname="Detchart"> | |||
| <address> | <organization>ISAE-SUPAERO</organization> | |||
| <postal> | <address> | |||
| <street>10, avenue Edouard Belin</street> | <postal> | |||
| <street>BP 54032</street> | <street>10, avenue Edouard Belin</street> | |||
| <city>Toulouse CEDEX 4</city> | <extaddr>BP 54032</extaddr> | |||
| <code>31055</code> | <city>Toulouse CEDEX 4</city> | |||
| <country>France</country> | <code>31055</code> | |||
| </postal> | <country>France</country> | |||
| <email>jonathan.detchart@isae-supaero.fr</email> | </postal> | |||
| </address> | <email>jonathan.detchart@isae-supaero.fr</email> | |||
| </author> | </address> | |||
| <author fullname="Emmanuel Lochin" initials="E." surname="Lochin"> | </author> | |||
| <organization>ENAC</organization> | <author fullname="Emmanuel Lochin" initials="E." surname="Lochin"> | |||
| <address> | <organization>ENAC</organization> | |||
| <postal> | <address> | |||
| <street>7, avenue Edouard Belin</street> | <postal> | |||
| <city>Toulouse</city> | <street>7, avenue Edouard Belin</street> | |||
| <code>31400</code> | <city>Toulouse</city> | |||
| <country>France</country> | <code>31400</code> | |||
| </postal> | <country>France</country> | |||
| <email>emmanuel.lochin@enac.fr</email> | </postal> | |||
| </address> | <email>emmanuel.lochin@enac.fr</email> | |||
| </author> | </address> | |||
| <author fullname="Jerome Lacan" initials="J." surname="Lacan"> | </author> | |||
| <organization>ISAE-SUPAERO</organization> | <author fullname="Jerome Lacan" initials="J." surname="Lacan"> | |||
| <address> | <organization>ISAE-SUPAERO</organization> | |||
| <postal> | <address> | |||
| <street>10, avenue Edouard Belin</street> | <postal> | |||
| <street>BP 54032</street> | <street>10, avenue Edouard Belin</street> | |||
| <city>Toulouse CEDEX 4</city> | <extaddr>BP 54032</extaddr> | |||
| <code>31055</code> | <city>Toulouse CEDEX 4</city> | |||
| <country>France</country> | <code>31055</code> | |||
| </postal> | <country>France</country> | |||
| <email>jerome.lacan@isae-supaero.fr</email> | </postal> | |||
| </address> | <email>jerome.lacan@isae-supaero.fr</email> | |||
| </author> | </address> | |||
| <author fullname="Vincent Roca" initials="V." surname="Roca"> | </author> | |||
| <organization>INRIA</organization> | <author fullname="Vincent Roca" initials="V." surname="Roca"> | |||
| <address> | <organization>INRIA</organization> | |||
| <postal> | <address> | |||
| <street>655, avenue de l'Europe</street> | <postal> | |||
| <street>Inovallee; Montbonnot</street> | <street>655, avenue de l'Europe</street> | |||
| <city>ST ISMIER cedex</city> | <extaddr>Inovallee; Montbonnot</extaddr> | |||
| <code>38334</code> | <city>St Ismier CEDEX</city> | |||
| <country>France</country> | <code>38334</code> | |||
| </postal> | <country>France</country> | |||
| <email>vincent.roca@inria.fr</email> | </postal> | |||
| </address> | <email>vincent.roca@inria.fr</email> | |||
| </author> | </address> | |||
| <date /> | </author> | |||
| <area /> | <date year="2023" month="June" /> | |||
| <workgroup>NWCRG</workgroup> | <workgroup>Coding for Efficient NetWork Communications</workgroup> | |||
| <keyword>Network Coding</keyword> | <keyword>Network Coding</keyword> | |||
| <abstract> | <abstract> | |||
| <t>This document describes Tetrys, an On-The-Fly Network Coding (NC) pr | <t>This document describes Tetrys, which is an on-the-fly network coding p | |||
| otocol that can be used to transport delay-sensitive and loss-sensitive data ove | rotocol that can be used to transport delay-sensitive and loss-sensitive data ov | |||
| r a lossy network. Tetrys may recover from erasures within an RTT-independent de | er a lossy network. Tetrys may recover from erasures within an RTT-independent d | |||
| lay, thanks to the transmission of Coded Packets. | elay thanks to the transmission of coded packets. | |||
| This document is a record of the experience gained by the authors while developi ng and testing the Tetrys protocol in real conditions.</t> | This document is a record of the experience gained by the authors while developi ng and testing the Tetrys protocol in real conditions.</t> | |||
| <t> | <t> | |||
| This document is a product of the Coding for Efficient Network Commu | This document is a product of the Coding for Efficient NetWork Commu | |||
| nications Research Group (NWCRG). It conforms to the NWCRG taxonomy<xref target | nications Research Group (NWCRG). | |||
| ="RFC8406" />. | It conforms to the NWCRG taxonomy described in RFC 8406. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" title="Introduction" numbered="true" toc="default" | <section anchor="intro" numbered="true" toc="default"> | |||
| > | <name>Introduction</name> | |||
| <!-- ==================================== --> | ||||
| <t>This document is a product of and represents the collaborative work | <t>This document is a product of and represents the collaborative work | |||
| and consensus of the Coding for Efficient Network Communications | and consensus of the Coding for Efficient NetWork Communications | |||
| Research Group (NWCRG). It is not an IETF product and is not an IETF s | Research Group (NWCRG). It is not an IETF product or an IETF standard. | |||
| tandard.</t> | </t> | |||
| <t> | <t>This document describes Tetrys, which is an on-the-fly network coding | |||
| This document describes Tetrys, a novel erasure coding protocol. Net | protocol that can be used to transport delay-sensitive and | |||
| work codes were introduced in the early 2000s | loss-sensitive data over a lossy network. | |||
| <xref target="AHL-00" pageno="false" format="default" /> | Network codes were introduced in the early 2000s <xref | |||
| to address the limitations of transmission over the Internet (delay, | target="AHL-00" format="default"/> to address the limitations of | |||
| capacity and packet loss). While network codes have seen some deployment fairly | transmission over the Internet (delay, capacity, and packet | |||
| recently in the Internet community, the use of application layer erasure codes | loss). While network codes have seen some deployment fairly | |||
| in the IETF has already been standardized in the RMT | recently in the Internet community, the use of application-layer | |||
| <xref target="RFC3452" pageno="false" format="default" /> | erasure codes in the IETF has already been standardized in the RMT | |||
| and the FECFRAME | <xref target="RFC5052" format="default"/> <xref target="RFC5445" for | |||
| <xref target="RFC8680" pageno="false" format="default" /> | mat="default"/> | |||
| working groups. The protocol presented here may be seen as a network | and FECFRAME | |||
| coding extension to standard unicast transport protocols (or even multicast or | <xref target="RFC8680" format="default"/> | |||
| anycast with a few modifications). The current proposal may be considered a com | Working Groups. The protocol presented here may be seen as a network | |||
| bination of network erasure coding and feedback mechanisms | -coding extension to standard unicast transport protocols (or even multicast or | |||
| <xref target="Tetrys" pageno="false" format="default" />, <xref targ | anycast with a few modifications). The current proposal may be considered a com | |||
| et="Tetrys-RT" pageno="false" format="default"/> | bination of network erasure coding and feedback mechanisms | |||
| . | <xref target="Tetrys" format="default"/> <xref target="Tetrys-RT" fo | |||
| </t> | rmat="default"/>. | |||
| <t>The main innovation of the Tetrys protocol is in the generation of C | </t> | |||
| oded Packets from an Elastic Encoding Window. This window is filled by any Sourc | <t>The main innovation of the Tetrys protocol is in the generation of code | |||
| e Packets coming from an input flow and is periodically updated with the receive | d packets from an elastic encoding window. This window is filled by any source p | |||
| r feedback. These feedback messages provide to the sender with information about | ackets coming from an input flow and is periodically updated with the receiver f | |||
| the highest sequence number received or rebuilt, which can enable flushing the | eedback. | |||
| corresponding Source Packets stored in the encoding window. The size of this win | These feedback messages provide to the sender information about the | |||
| dow may be fixed or dynamically updated. If the window is full, incoming Source | highest sequence number received or rebuilt, which can enable the flushing the | |||
| Packets replace older sources packets which are dropped. As a matter of fact, it | corresponding source packets stored in the encoding window. The size of this | |||
| s limit should be correctly sized. Finally, Tetrys allows to deal with losses on | window may be fixed or dynamically updated. If the window is full, incoming | |||
| both the forward and return paths and in particular, is resilient to acknowledg | source packets replace older source packets that are dropped. As a matter of | |||
| ment losses. All these operations are further detailed in <xref target="tetrys_b | fact, its limit should be correctly sized. | |||
| asic_functions" pageno="false" format="default" />.</t> | ||||
| <t>With Tetrys, a Coded Packet is a linear combination over a finite fi | ||||
| eld of the data Source Packets belonging to the coding window. The coefficients | ||||
| finite field's choice is a trade-off between the best erasure recovery performan | ||||
| ce (finite fields of 256 elements) and the system constraints (finite fields of | ||||
| 16 elements is preferred) and is driven by the application.</t> | ||||
| <t>Thanks to the Elastic Encoding Window, the Coded Packets are built o | ||||
| n-the-fly, by using a predefined method to choose the coefficients. The redundan | ||||
| cy ratio may be dynamically adjusted, and the coefficients may be generated in d | ||||
| ifferent ways, during the transmission. Compared to FEC block codes, this allows | ||||
| reducing the bandwidth use and the decoding delay.</t> | ||||
| <t>The description of the design of the Tetrys protocol in this documen | ||||
| t is complemented by a record of the experience gained by the authors while deve | ||||
| loping and testing the Tetrys protocol in realistic conditions. In particular, s | ||||
| everal research issues are discussed in <xref target="research" pageno="false" f | ||||
| ormat="default" /> following our own experience and observations.</t> | ||||
| <section title="Requirements Notation" numbered="true" toc="default"> | Finally, Tetrys allows dealing with losses on both the forward and return paths | |||
| <!-- ==================================== --> | and is particularly resilient to acknowledgment losses. All these operations are | |||
| <t> | further detailed in <xref target="tetrys_basic_functions" format="default"/>.</ | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | t> | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" | <t>With Tetrys, a coded packet is a linear combination over a finite field | |||
| in this document are to be interpreted as described in BCP14 <xref target="RFC21 | of the data source packets belonging to the coding window. | |||
| 19" pageno="false" format="default" /> <xref target="RFC8174" pageno="false" fo | ||||
| rmat="default" /> when, and only when, they appear in all capitals, as shown her | The choice of coefficients, as finite fields elements, is a trade-off between th | |||
| e. | e best erasure recovery performance (finite fields of 256 elements) and the syst | |||
| </t> | em constraints (finite fields of 16 elements are preferred) and is driven by the | |||
| </section> | application.</t> | |||
| <t>Thanks to the elastic encoding window, the coded packets are built on-t | ||||
| he-fly by using a predefined method to choose the coefficients. The redundancy r | ||||
| atio may be dynamically adjusted and the coefficients may be generated in differ | ||||
| ent ways during the transmission. Compared to Forward Error Correction (FEC) blo | ||||
| ck codes, this reduces the bandwidth use and the decoding delay.</t> | ||||
| <t>The design description of the Tetrys protocol in this document is compl | ||||
| emented by a record of the experience gained by the authors while developing and | ||||
| testing the Tetrys protocol in realistic conditions. In particular, several res | ||||
| earch issues are discussed in <xref target="research" format="default"/> followi | ||||
| ng our own experience and observations.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Requirements Notation</name> | ||||
| <t> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
| IRED</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> | ||||
| </section> | </section> | |||
| <section anchor="terminology" title="Definitions, Notations and Abbreviati | </section> | |||
| ons" numbered="true" toc="default"> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <!-- ==================================== --> | <name>Definitions, Notations, and Abbreviations</name> | |||
| <t> | <t> | |||
| The notation used in this document is based on the NWCRG taxon omy | The notation used in this document is based on the NWCRG taxon omy | |||
| <xref target="RFC8406" pageno="false" format="default" /> | <xref target="RFC8406" format="default"/>. | |||
| . | </t> | |||
| </t> | <dl spacing="normal" newline="false"> | |||
| <t> | <dt>Source Symbol:</dt><dd>A symbol that is transmitted between the ingr | |||
| <list style="empty"> | ess and egress of the network.</dd> | |||
| <t>Source Symbol: a symbol that is transmitted between the ingres | <dt>Coded Symbol:</dt><dd>A linear combination over a finite field of a | |||
| s and egress of the network.</t> | set of source symbols.</dd> | |||
| <t>Coded Symbol: a linear combination over a finite field of a se | <dt>Source Symbol ID:</dt><dd>A sequence number to identify the source s | |||
| t of Source Symbols.</t> | ymbols.</dd> | |||
| <t>Source Symbol ID: a sequence number to identify the Source Sym | <dt>Coded Symbol ID:</dt><dd>A sequence number to identify the coded sym | |||
| bols.</t> | bols.</dd> | |||
| <t>Coded Symbol ID: a sequence number to identify the Coded Symbo | <dt>Encoding Coefficients:</dt><dd>Elements of the finite field characte | |||
| ls.</t> | rizing the linear combination used to generate coded symbols.</dd> | |||
| <t>Encoding Coefficients: elements of the finite field characteri | <dt>Encoding Vector:</dt><dd>A set of the coding coefficients and input | |||
| zing the linear combination used to generate Coded Symbols.</t> | source symbol IDs.</dd> | |||
| <t>Encoding Vector: a set of the coding coefficients and input So | <dt>Source Packet:</dt><dd>A source packet contains a source symbol with | |||
| urce Symbol IDs.</t> | its associated IDs.</dd> | |||
| <t>Source Packet: a Source Packet contains a Source Symbol with i | <dt>Coded Packet:</dt><dd>A coded packet contains a coded symbol, the co | |||
| ts associated IDs.</t> | ded symbol's ID, and encoding vector.</dd> | |||
| <t>Coded Packet: a Coded Packet contains a Coded Symbol, the Code | <dt>Input Symbol:</dt><dd>A symbol at the input of the Tetrys encoder.</ | |||
| d Symbol's ID, and Encoding Vector.</t> | dd> | |||
| <t>Input Symbol: a symbol at the input of the Tetrys Encoder.</t> | <dt>Output Symbol:</dt><dd>A symbol generated by the Tetrys encoder. For | |||
| <t>Output Symbol: a symbol generated by the Tetrys Encoder. For a | a non-systematic mode, all output symbols are coded symbols. For a systematic m | |||
| non-systematic mode, all Output Symbols are Coded Symbols. For a systematic mod | ode, output symbols <bcp14>MAY</bcp14> be the input symbols and a number of code | |||
| e, Output Symbols MAY be the Input Symbols and a number of Coded Symbols that ar | d symbols that are linear combinations of the input symbols plus the encoding ve | |||
| e linear combinations of the Input Symbols + the Encoding Vectors.</t> | ctors.</dd> | |||
| <t>Feedback Packet: a Feedback Packet is a packet containing info | <dt>Feedback Packet:</dt><dd>A feedback packet is a packet containing in | |||
| rmation about the decoded or received Source Symbols. It MAY also contain additi | formation about the decoded or received source symbols. It <bcp14>MAY</bcp14> al | |||
| onal information about the Packet Error Rate or the number of various packets in | so contain additional information about the Packet Error Rate or the number of v | |||
| the receiver decoding window.</t> | arious packets in the receiver decoding window.</dd> | |||
| <t>Elastic Encoding Window: an encoder-side buffer that stores al | <dt>Elastic Encoding Window:</dt><dd>An encoder-side buffer that stores | |||
| l the non-acknowledged Source Packets of the input flow involved in the coding p | all the unacknowledged source packets of the input flow involved in the coding p | |||
| rocess.</t> | rocess.</dd> | |||
| <t>Coding Coefficient Generator Identifier: a unique identifier t | <dt>Coding Coefficient Generator Identifier (CCGI):</dt><dd>A unique identifier | |||
| hat defines a function or an algorithm allowing to generate the Encoding Vector. | that | |||
| </t> | defines a function or an algorithm allowing the generation of the encoding | |||
| <t>Code Rate: Define the rate between the number of Input Symbols | vector.</dd> | |||
| and the number of Output Symbols.</t> | <dt>Code Rate:</dt><dd>Defines the rate between the number of input symb | |||
| </list> | ols and the number of output symbols.</dd> | |||
| </t> | </dl> | |||
| </section> | ||||
| <section anchor="tetrys_architecture" numbered="true" toc="default"> | ||||
| <name>Architecture</name> | ||||
| <section anchor="use_cases" numbered="true" toc="default"> | ||||
| <name>Use Cases</name> | ||||
| <t>Tetrys is well suited, but not limited, to the use case where | ||||
| there is a single flow originated by a single source with intra-stre | ||||
| am | ||||
| coding at a single encoding node. Note that the input | ||||
| stream <bcp14>MAY</bcp14> be a multiplex of several upper-layer | ||||
| streams. Transmission <bcp14>MAY</bcp14> be over a single path or | ||||
| multiple paths. | ||||
| This is the simplest use case that is quite | ||||
| aligned with currently proposed scenarios for end-to-end | ||||
| streaming.</t> | ||||
| </section> | </section> | |||
| <section anchor="tetrys_architecture" title="Architecture" numbered="true" | <section anchor="protocol_overview" numbered="true" toc="default"> | |||
| toc="default"> | <name>Overview</name> | |||
| <!-- ==================================== --> | <figure anchor="fig-archi-tetrys"> | |||
| <section anchor="use_cases" title="Use Cases" numbered="true" toc="defa | <name>Tetrys Architecture</name> | |||
| ult"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <!-- ==================================== --> | ||||
| <t>Tetrys is well suited, but not limited to, the use case where the | ||||
| re is a single flow originated by a single source, with intra stream coding at a | ||||
| single encoding node. Note that the input stream MAY be a multiplex of several | ||||
| upper layer streams. | ||||
| Transmission MAY be over a single path or multiple paths. | ||||
| This is the simplest use-case, that is very much aligned | ||||
| with currently proposed scenarios for end-to-end streaming.</t> | ||||
| </section> | ||||
| <section anchor="protocol_overview" title="Overview" numbered="true" to | ||||
| c="default"> | ||||
| <!-- ==================================== --> | ||||
| <figure anchor="fig-archi-tetrys" title="Tetrys Architecture" suppre | ||||
| ss-title="false" align="left" alt="" width="" height=""> | ||||
| <artwork xml:space="preserve" name="" type="" align="left" alt="" | ||||
| width="" height=""> | ||||
| +----------+ +----------+ | +----------+ +----------+ | |||
| | | | | | | | | | | |||
| | App | | App | | | App | | App | | |||
| | | | | | | | | | | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| | ^ | | ^ | |||
| | Source Source | | | Source Source | | |||
| | Symbols Symbols | | | Symbols Symbols | | |||
| | | | | | | |||
| v | | v | | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| | | output packets | | | | | Output Packets | | | |||
| | Tetrys |--------------->| Tetrys | | | Tetrys |--------------->| Tetrys | | |||
| | Encoder |Feedback Packets| Decoder | | | Encoder |Feedback Packets| Decoder | | |||
| | |<---------------| | | | |<---------------| | | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| The Tetrys protocol features several key functionalities. The man | The Tetrys protocol features several key functionalities. The man | |||
| datory features are: | datory features include: | |||
| <list style="symbols"> | </t> | |||
| <t>on-the-fly encoding;</t> | <ul spacing="normal"> | |||
| <t>decoding;</t> | <li>on-the-fly encoding;</li> | |||
| <t>signaling, to carry in particular the symbol identifiers in | <li>decoding;</li> | |||
| the encoding window and the associated coding coefficients when meaningful;</t> | <li>signaling, to carry in particular the symbol IDs in the encoding w | |||
| <t>feedback management;</t> | indow and the associated coding coefficients when meaningful;</li> | |||
| <t>elastic window management;</t> | <li>feedback management;</li> | |||
| <t>Tetrys packet header creation and processing;</t> | <li>elastic window management; and</li> | |||
| </list> | <li>Tetrys packet header creation and processing.</li> | |||
| </t> | </ul> | |||
| <t> | <t>The optional features include: | |||
| and the optional features are : | </t> | |||
| <list style="symbols"> | <ul spacing="normal"> | |||
| <t>channel estimation;</t> | <li>channel estimation;</li> | |||
| <t>dynamic adjustment of the Code Rate and flow control;</t> | <li>dynamic adjustment of the code rate and flow control; and</li> | |||
| <t> | <li> | |||
| congestion control management (if appropriate). See <xref t | congestion control management (if appropriate). See <xref | |||
| arget="transport-issue" /> for further details; | target="transport-issue" format="default"/> for further | |||
| </t> | details. | |||
| </list> | </li> | |||
| </t> | </ul> | |||
| <t> | <t> | |||
| Several building blocks provide these functionalities: | Several building blocks provide the following functionalities: | |||
| <list style="symbols"> | </t> | |||
| <t>The Tetrys Building Block: this BB embeds both the Tetrys D | <dl spacing="normal"> | |||
| ecoder and Tetrys Encoder and thus, is used during encoding, and decoding proces | <dt>The Tetrys Building Block:</dt><dd>This building block embeds | |||
| ses. | both the Tetrys decoder and Tetrys encoder; thus, it is used during | |||
| It must be noted that Tetrys does not man | encoding and decoding processes. It must be noted that Tetrys does | |||
| date a specific building block. | not mandate a specific building block. Instead, any building block | |||
| Instead, any building block compatible wi | compatible with the elastic encoding window feature of Tetrys may be | |||
| th the Elastic Encoding Window feature of Tetrys may be used.</t> | used.</dd> | |||
| <t> | <dt>The Window Management Building Block:</dt><dd>This building block | |||
| The Window Management Building Block: this building block i | is in charge of managing the encoding window at a Tetrys | |||
| s in charge of managing the encoding window at a Tetrys sender. | sender. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | <t> | |||
| <t> | To ease the addition of future components and services, Tetrys ad | |||
| To ease the addition of future components and services, Tetrys ad | ds a header extension mechanism that is compatible with that of Layered Coding T | |||
| ds a header extension mechanism, compatible with that of LCT | ransport (LCT) | |||
| <xref target="RFC5651" />, NORM | <xref target="RFC5651" format="default"/>, NACK-Oriented Reliable | |||
| <xref target="RFC5740" />, FECFRAME | Multicast (NORM) | |||
| <xref target="RFC8680" />. | <xref target="RFC5740" format="default"/>, and FEC Framework (FEC | |||
| </t> | FRAME) | |||
| <!-- VR: pas d'accord... JL: OK, a discuter. | <xref target="RFC8680" format="default"/>. | |||
| <t>Tetrys uses three building blocks to provide a reliabl | </t> | |||
| e protocol:</t> | ||||
| <t> - The Tetrys Encoding Building Block creates some | ||||
| linear combinations of all the non-acknowledged Input Symbols. An upper limit ca | ||||
| n be set to avoid big computations. Each linear combination is called a Coded Sy | ||||
| mbol. It is associated to an Encoding Vector, which MUST defines the Input Symbo | ||||
| ls and MAY define the coefficients used in the combinations. If not, a Coding Co | ||||
| efficient Generator Identifier (CCGI) is used to identify the function or the al | ||||
| gorithm used to rebuild the coefficients.</t> | ||||
| <t> - The Tetrys Relaying Building Block transmits inp | ||||
| ut packets received from the source or a relay node to a relay node or the desti | ||||
| nation node. According to the characteristics of previous and next links, it can | ||||
| remove some Coded Packets or generate additional Coded Packets. The generation | ||||
| of new packets is done by the recoding process (which does not need a decoding p | ||||
| rocess).</t> | ||||
| <t> - The Tetrys Decoding Building Block stores all th | ||||
| e received output packets. When it is possible, the Coded Symbols are decoded to | ||||
| rebuild the lost Source Symbols. | ||||
| Regularly, this building block sends a feedback p | ||||
| acket containing information about the acknowledgment of received and decoded So | ||||
| urce Symbols. | ||||
| When this information is received by a Tetrys Enc | ||||
| oding Building Block, the acknowledged Source Symbols are removed, and will not | ||||
| be considered in the next Coded Symbols.</t> | ||||
| <t>This encoding mechanism is called an elastic coding wi | ||||
| ndow. Each generated Output Symbols is encapsulated in an output packet format. | ||||
| </t> | ||||
| --> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section anchor="tetrys_basic_functions" numbered="true" toc="default"> | ||||
| <name>Tetrys Basic Functions</name> | ||||
| <section anchor="encoding" numbered="true" toc="default"> | ||||
| <name>Encoding</name> | ||||
| <t>At the beginning of a transmission, a Tetrys encoder <bcp14>MUST< | ||||
| /bcp14> choose an initial code rate that adds redundancy as it doesn't know the | ||||
| packet loss rate of the channel. | ||||
| In the steady state, the Tetrys encoder <bcp14>MAY</bcp14> generate coded symbol | ||||
| s when it receives a source symbol from the application or some feedback from th | ||||
| e decoding blocks depending on the code rate.</t> | ||||
| <t>When a Tetrys encoder needs to generate a coded symbol, it considers | ||||
| the set of source symbols stored in the elastic encoding window and generates an | ||||
| encoding vector with the coded symbol. These source symbols are the set of sour | ||||
| ce symbols that are not yet acknowledged by the receiver. For each source symbol | ||||
| , a finite field coefficient is determined using a Coding Coefficient Generator. | ||||
| This generator <bcp14>MAY</bcp14> take the source symbol IDs and the coded symbo | ||||
| l ID as an input and <bcp14>MAY</bcp14> determine a coefficient in a determinist | ||||
| ic way as presented in <xref target="coded-packet" format="default"/>. Finally, | ||||
| the coded symbol is the sum of the source symbols multiplied by their correspond | ||||
| ing coefficients.</t> | ||||
| <t>A Tetrys encoder <bcp14>MUST</bcp14> set a limit to the elastic encod | ||||
| ing window maximum size. This controls the algorithmic complexity at the encoder | ||||
| and decoder by limiting the size of linear combinations. It is also needed in s | ||||
| ituations where all window update packets are lost or absent.</t> | ||||
| </section> | </section> | |||
| <section anchor="tetrys_basic_functions" title="Tetrys Basic Functions" nu | <section anchor="windowing" numbered="true" toc="default"> | |||
| mbered="true" toc="default"> | <name>The Elastic Encoding Window</name> | |||
| <!-- ==================================== --> | <t>When an input source symbol is passed to a Tetrys encoder, it is | |||
| <section anchor="encoding" title="Encoding" numbered="true" toc="defaul | added to the elastic encoding window. This window <bcp14>MUST</bcp14> have a lim | |||
| t"> | it set by the encoding building block. | |||
| <!-- ==================================== --> | If the elastic encoding window has reached its limit, the window slides over the | |||
| <t>At the beginning of a transmission, a Tetrys Encoder MUST choose | symbols. The first (oldest) symbol is removed, and the newest symbol is added. | |||
| an initial Code Rate (added redundancy) as it doesn't know the packet loss rate | As an element of the coding window, this symbol is included in the next linear c | |||
| of the channel. In the steady state, depending on the Code Rate, the Tetrys Enco | ombinations created to generate the coded symbols.</t> | |||
| der MAY generate Coded Symbols when it receives a Source Symbol from the applica | <t>As explained below, the Tetrys decoder sends periodic feedback indica | |||
| tion or some feedback from the decoding blocks.</t> | ting the received or decoded source symbols. When the sender receives the inform | |||
| <t>When a Tetrys Encoder needs to generate a Coded Symbol, it consid | ation that a source symbol was received or decoded by the receiver, it removes t | |||
| ers the set of Source Symbols stored in the Elastic Encoding Window and generate | his symbol from the coding window.</t> | |||
| s an Encoding Vector with the Coded Symbol. These Source Symbols are the set of | ||||
| Source Symbols that are not yet acknowledged by the receiver. For each Source Sy | ||||
| mbol, a finite field coefficient is determined using a Coding Coefficient Genera | ||||
| tor. This generator MAY take as input the Source Symbol IDs and the Coded Symbol | ||||
| ID and MAY determine a coefficient in a deterministic way as presented in <xref | ||||
| target="coded-packet" pageno="false" format="default" />. Finally, the Coded Sy | ||||
| mbol is the sum of the Source Symbols multiplied by their corresponding coeffici | ||||
| ents.</t> | ||||
| <t>A Tetrys Encoder SHOULD set a limit to the Elastic Encoding Windo | ||||
| w maximum size. This controls the algorithmic complexity at the encoder and deco | ||||
| der by limiting the size of linear combinations. It is also needed in situations | ||||
| where window update packets are all lost or absent.</t> | ||||
| </section> | ||||
| <section anchor="windowing" title="The Elastic Encoding Window" numbere | ||||
| d="true" toc="default"> | ||||
| <!-- ==================================== --> | ||||
| <t>When an input Source Symbol is passed to a Tetrys Encoder, it is | ||||
| added to the Elastic Encoding Window. This window MUST have a limit set by the e | ||||
| ncoding building Block. If the Elastic Encoding Window reached its limit, the wi | ||||
| ndow slides over the symbols: the first (oldest) symbol is removed, and the newe | ||||
| st symbol is added. As an element of the coding window, this symbol is included | ||||
| in the next linear combinations created to generate the Coded Symbols.</t> | ||||
| <t>As explained below, the Tetrys Decoder sends periodic feedback in | ||||
| dicating the received or decoded Source Symbols. When the sender receives the in | ||||
| formation that a Source Symbol was received or decoded by the receiver, it remov | ||||
| es this symbol from the coding window.</t> | ||||
| </section> | ||||
| <section anchor="decoding" title="Decoding" numbered="true" toc="defaul | ||||
| t"> | ||||
| <!-- ==================================== --> | ||||
| <t>A standard Gaussian elimination is sufficient to recover the eras | ||||
| ed Source Symbols, when the matrix rank enables it.</t> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="encapsulation-format" title="Packet Format" numbered="tru | <section anchor="decoding" numbered="true" toc="default"> | |||
| e" toc="default"> | <name>Decoding</name> | |||
| <!-- ==================================== --> | <t>A standard Gaussian elimination is sufficient to recover the eras | |||
| <section anchor="common-packet-header-format" title="Common Header Form | ed source symbols when the matrix rank enables it.</t> | |||
| at" numbered="true" toc="default"> | </section> | |||
| <!-- ==================================== --> | </section> | |||
| <section anchor="encapsulation-format" numbered="true" toc="default"> | ||||
| <name>Packet Format</name> | ||||
| <section anchor="common-packet-header-format" numbered="true" toc="defa | ||||
| ult"> | ||||
| <name>Common Header Format</name> | ||||
| <t> | <t> | |||
| All types of Tetrys packets share the same common header format ( | All types of Tetrys packets share the same common header format ( | |||
| see <xref target="fig-common-header-format" pageno="false" format="default" />). | see <xref target="fig-common-header-format" format="default"/>). | |||
| <figure anchor="fig-common-header-format" title="Common Header Fo | </t> | |||
| rmat" suppress-title="false" align="left" alt="" width="" height=""> | <figure anchor="fig-common-header-format"> | |||
| <artwork xml:space="preserve" name="" type="" align="left" alt | <name>Common Header Format</name> | |||
| ="" width="" height=""> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | V | C |S| Reserved | HDR_LEN | PKT_TYPE | | | V | C |S| Reserved | HDR_LEN | PKT_TYPE | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Congestion Control Information (CCI, length = 32*C bits) | | | Congestion Control Information (CCI, length = 32*C bits) | | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Transport Session Identifier (TSI, length = 32*S bits) | | | Transport Session Identifier (TSI, length = 32*S bits) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Header Extensions (if applicable) | | | Header Extensions (if applicable) | | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| </t> | <t>As noted above, this format is inspired by, and inherits from, the LC | |||
| <t>As already noted above in the document, this format is inspired a | T header format <xref target="RFC5651" format="default"/> with slight modificati | |||
| nd inherits from the LCT header format <xref target="RFC5651" pageno="false" for | ons.</t> | |||
| mat="default" /> with slight modifications.</t> | <dl spacing="normal"> | |||
| <t> | <dt>Tetrys version number (V):</dt><dd>4 bits. | |||
| <list style="symbols"> | Indicates the Tetrys version number. The Tetrys ve | |||
| <t>Tetrys version number (V): 4 bits. | rsion number for this specification is 1.</dd> | |||
| Indicates the Tetrys version number. The Tetrys ve | <dt>Congestion control flag (C):</dt><dd>2 bits. C set to 0b00 | |||
| rsion number for this specification is 1.</t> | indicates the Congestion Control Information (CCI) field | |||
| <t> | is 0 bits in length. C set to 0b01 indicates the CCI field | |||
| Congestion control flag (C): 2 bits. | is 32 | |||
| C=0 indicates the Congestion Control Information (CCI) field | bits in length. C set to 0b10 indicates the CCI field is 64 | |||
| is 0 bits in length. C=1 indicates the CCI field is 32 bits in length. C=2 indi | bits in | |||
| cates the CCI field is 64 bits in length. C=3 indicates the CCI field is 96 bit | length. C set to 0b11 indicates the CCI field is 96 bits i | |||
| s in length. | n | |||
| </t> | length. | |||
| <t>Transport Session Identifier flag (S): 1 bit. | </dd> | |||
| This is the number of full 32-bit words in the TSI field | <dt>Transport Session Identifier flag (S):</dt><dd>1 bit. | |||
| . The TSI field is 32*S bits in length, i.e., the length is either 0 bits or 32 | This is the number of full 32-bit words in the TSI field | |||
| bits.</t> | . The TSI field is 32*S bits in length; i.e., the length is either 0 bits or 32 | |||
| <t>Reserved (Resv): 9 bits. These bits are reserved. In this | bits.</dd> | |||
| version of the specification, they MUST be set to zero by senders and MUST be ig | <dt>Reserved (Resv):</dt><dd>9 bits. These bits are reserved. In this | |||
| nored by receivers.</t> | version of the specification, they <bcp14>MUST</bcp14> be set to zero by sender | |||
| <t>Header length (HDR_LEN): 8 bits. | s and <bcp14>MUST</bcp14> be ignored by receivers.</dd> | |||
| The total length of the Tetrys header in units of 3 | <dt>Header length (HDR_LEN):</dt><dd>8 bits. The total length of | |||
| 2-bit words. The | the Tetrys header in units of 32-bit words. The length of the Tetrys | |||
| length of the Tetrys header MUST be a multiple of 3 | header <bcp14>MUST</bcp14> be a multiple of 32 bits. This field may | |||
| 2 bits. This | be used to directly access the portion of the packet beyond the | |||
| field may be used to directly access the portion of | Tetrys header, i.e., to the first next header if it exists, to the | |||
| the packet | packet payload if it exists and there is no other header, or to the | |||
| beyond the Tetrys header, i.e., to the first next h | end of the packet if there are no other headers or packet | |||
| eader if it | payload.</dd> | |||
| exists, or to the packet payload if it exists and t | <dt>Tetrys packet type (PKT_TYPE):</dt><dd>8 bits. | |||
| here is no | There are three types of packets: the PKT_TYPE_SO | |||
| other header, or to the end of the packet if there | URCE (0b00) defined in <xref target="source-packet" format="default"/>, the PKT_ | |||
| are no others | TYPE_CODED (0b01) defined in <xref target="coded-packet" format="default"/> and | |||
| headers or packet payload.</t> | the PKT_TYPE_WND_UPT (0b11) for window update packets defined in <xref target="a | |||
| <t>PKT_TYPE: Tetrys packet type, 8 bits. | ck-packet" format="default"/>.</dd> | |||
| Type of packet. There is 3 types of packets: the | <dt>Congestion Control Information (CCI):</dt><dd>0, 32, 64, or 96 bit | |||
| PKT_TYPE_SOURCE (0) defined in <xref target="source-packet" pageno="false" forma | s. | |||
| t="default" />, the PKT_TYPE_CODED (1) defined in <xref target="coded-packet" pa | ||||
| geno="false" format="default" /> and the PKT_TYPE_WND_UPT (3), for window update | ||||
| packets defined in <xref target="ack-packet" pageno="false" format="default" /> | ||||
| .</t> | ||||
| <t>Congestion Control Information (CCI): 0, 32, 64, or 96 bits | ||||
| Used to carry congestion control information. For example, the | Used to carry congestion control information. For example, the | |||
| congestion control information could include layer numbers, | congestion control information could include layer numbers, | |||
| logical channel numbers, and sequence numbers. Thi s field is | logical channel numbers, and sequence numbers. Thi s field is | |||
| opaque for this specification. | opaque for this specification. | |||
| This field MUST be 0 bits (absent) if C=0. | This field <bcp14>MUST</bcp14> be 0 bits (absent) i | |||
| This field MUST be 32 bits if C=1. | f C is set to 0b00. | |||
| This field MUST be 64 bits if C=2. | This field <bcp14>MUST</bcp14> be 32 bits if C is s | |||
| This field MUST be 96 bits if C=3.</t> | et to 0b01. | |||
| <t> | This field <bcp14>MUST</bcp14> be 64 bits if C is s | |||
| Transport Session Identifier (TSI): 0 or 32 bits | et to 0b10. | |||
| This field <bcp14>MUST</bcp14> be 96 bits if C is s | ||||
| et to 0b11.</dd> | ||||
| <dt>Transport Session Identifier (TSI):</dt><dd>0 or 32 bits. | ||||
| The TSI uniquely identifies a session among all ses sions from a | The TSI uniquely identifies a session among all ses sions from a | |||
| particular Tetrys encoder. The TSI is scoped by the IP address of the | particular Tetrys encoder. The TSI is scoped by the IP address of the | |||
| sender, and thus the IP address of the sender and t | sender; thus, the IP address of the sender and the | |||
| he TSI together | TSI together | |||
| uniquely identify the session. Although a TSI, con | uniquely identify the session. | |||
| jointly with | Although a TSI always uniquely identifies a session conjointly with | |||
| the IP address of the sender, always uniquely ident | the IP address of the sender, whether the TSI is in | |||
| ifies a session, | cluded in the Tetrys header depends on | |||
| whether the TSI is included in the Tetrys header de | ||||
| pends on | ||||
| what is used as the TSI value. If the underlying t ransport is | what is used as the TSI value. If the underlying t ransport is | |||
| UDP, then the 16-bit UDP source port number MAY ser ve as the TSI | UDP, then the 16-bit UDP source port number <bcp14> MAY</bcp14> serve as the TSI | |||
| for the session. | for the session. | |||
| <!-- If the TSI value appears multiple times in a | ||||
| packet, then all occurrences MUST be the same value | ||||
| . --> | ||||
| If there is | If there is | |||
| no underlying TSI provided by the network, transpor | no underlying TSI provided by the network, transpor | |||
| t or any other | t, or any other | |||
| layer, then the TSI MUST be included in the Tetrys | layer, then the TSI <bcp14>MUST</bcp14> be included | |||
| header. | in the Tetrys header. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | <section anchor="header-extension-format" numbered="true" toc="default"> | |||
| <section anchor="header-extension-format" title="Header Extensions" | <name>Header Extensions</name> | |||
| numbered="true" toc="default"> | <t>Header extensions are used in Tetrys to accommodate optional h | |||
| <!-- ==================================== --> | eader fields that are not always used or have variable sizes. | |||
| <t>Header Extensions are used in Tetrys to accommodate optional h | The presence of header extensions <bcp14>MAY</bcp | |||
| eader fields that are not always used or have variable size. | 14> be inferred by the Tetrys header length (HDR_LEN). | |||
| The presence of Header Extensions MAY be inferred | If HDR_LEN is larger than the length of the stand | |||
| by the Tetrys header length (HDR_LEN). | ard header, then the remaining header space is taken by header extensions.</t> | |||
| If HDR_LEN is larger than the length of the stand | <t>If present, header extensions <bcp14>MUST</bcp14> be processed to e | |||
| ard header, then the remaining header space is taken by Header Extensions.</t> | nsure that they are recognized before performing any congestion control procedur | |||
| <t>If present, Header Extensions MUST be processed to ensure that | e or otherwise accepting a packet. | |||
| they are recognized before performing any congestion control procedure or other | The default action for unrecognized header extens | |||
| wise accepting a packet. | ions is to ignore them. | |||
| The default action for unrecognized Header Extens | This allows for the future introduction of backwa | |||
| ions is to ignore them. | rd-compatible enhancements to Tetrys without changing the Tetrys version number. | |||
| This allows the future introduction of backward-c | Header extensions that are not backward-compatibl | |||
| ompatible enhancements to Tetrys without changing the Tetrys version number. | e <bcp14>MUST NOT</bcp14> be introduced without changing the Tetrys version numb | |||
| Non-backward-compatible Header Extensions CANNOT | er.</t> | |||
| be introduced without changing the Tetrys version number.</t> | <t> | |||
| <t> | There are two formats for header extensions as depicted in <xr | |||
| There are two formats for Header Extensions as depicted in <xr | ef target="fig_header_extension" format="default"/>: | |||
| ef target="fig:header_extension" pageno="false" format="default" /> : | </t> | |||
| <list style="symbols"> | <ul spacing="normal"> | |||
| <t>The first format is used for variable-length extensions, | <li>The first format is used for variable-length extensions with hea | |||
| with Header Extension Type (HET) values between 0 and 127.</t> | der extension type (HET) values between 0 and 127.</li> | |||
| <t>The second format is used for fixed-length (one 32-bit w | <li>The second format is used for fixed-length (one 32-bit word) ext | |||
| ord) extensions, using HET values from 128 to 255.</t> | ensions using HET values from 128 to 255.</li> | |||
| </list> | </ul> | |||
| </t> | <figure anchor="fig_header_extension"> | |||
| <figure anchor="fig:header_extension" title="Header Extension For | <name>Header Extension Format</name> | |||
| mat" suppress-title="false" align="left" alt="" width="" height=""> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork xml:space="preserve" name="" type="" align="left" alt | ||||
| ="" width="" height=""> | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | HET (<=127) | HEL | | | | HET (<=127) | HEL | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| . . | . . | |||
| . Header Extension Content (HEC) . | . Header Extension Content (HEC) . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | HET (>=128) | Header Extension Content (HEC) | | | HET (>=128) | Header Extension Content (HEC) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <dl spacing="normal"> | |||
| <list style="symbols"> | <dt>Header Extension Type (HET):</dt><dd>8 bits. The type of the hea | |||
| <t>Header Extension Type (HET): 8 bits | der extension. This document defines several possible types. | |||
| <t>The type of the Header Extension. This documen | ||||
| t defines several possible types. | ||||
| Additional types may be defined in future version s of this specification. | Additional types may be defined in future version s of this specification. | |||
| HET values from 0 to 127 are used for variable-le | HET values from 0 to 127 are used for variable-le | |||
| ngth Header Extensions. | ngth header extensions. | |||
| HET values from 128 to 255 are used for fixed-len | HET values from 128 to 255 are used for fixed-len | |||
| gth 32-bit Header Extensions.</t> | gth, 32-bit header extensions.</dd> | |||
| </t> | <dt>Header Extension Length (HEL):</dt><dd>8 bits. The length of t | |||
| <t>Header Extension Length (HEL): 8 bits | he whole header extension field expressed in multiples of 32-bit words. | |||
| <t>The length of the whole Header Extension field | This field <bcp14>MUST</bcp14> be present for var | |||
| , expressed in multiples of 32-bit words. | iable-length extensions (HETs between 0 and 127) and <bcp14>MUST NOT</bcp14> be | |||
| This field MUST be present for variable-length ex | present for fixed-length extensions (HETs between 128 and 255).</dd> | |||
| tensions (HETs between 0 and 127) and MUST NOT be present for fixed-length exten | <dt>Header Extension Content (HEC):</dt><dd>Length of the variable | |||
| sions (HETs between 128 and 255).</t></t> | . The content of the header extension. | |||
| <t>Header Extension Content (HEC): variable length | The format of this subfield depends on the header | |||
| <t>The content of the Header Extension. | extension type. | |||
| The format of this subfield depends on the Header | For fixed-length header extensions, the HEC is 24 | |||
| Extension Type. | bits. | |||
| For fixed-length Header Extensions, the HEC is 24 | For variable-length header extensions, the HEC fi | |||
| bits. | eld has a variable size as specified by the HEL field. | |||
| For variable-length Header Extensions, the HEC fi | Note that the length of each header extension <bc | |||
| eld has variable size, as specified by the HEL field. | p14>MUST</bcp14> be a multiple of 32 bits. | |||
| Note that the length of each Header Extension MUS | Additionally, the total size of the Tetrys header | |||
| T be a multiple of 32 bits. | , including all header extensions and optional header fields, cannot exceed 255 | |||
| Also, note that the total size of the Tetrys head | 32-bit words.</dd> | |||
| er, including all Header Extensions and all optional header fields, cannot excee | </dl> | |||
| d 255 32-bit words.</t></t> | </section> | |||
| </list> | </section> | |||
| </t> | <section anchor="source-packet" numbered="true" toc="default"> | |||
| </section> | <name>Source Packet Format</name> | |||
| </section> | <t>A source packet is a common packet header encapsulation, a source | |||
| <section anchor="source-packet" title="Source Packet Format" numbered=" | symbol ID, and a source symbol (payload). The source symbols <bcp14>MAY</bcp14> | |||
| true" toc="default"> | have variable sizes.</t> | |||
| <!-- ==================================== --> | <figure anchor="fig-src-pkt"> | |||
| <t>A Source Packet is a Common Packet Header encapsulation, a Source | <name>Source Packet Format</name> | |||
| Symbol ID and a Source Symbol (payload). The Source Symbols MAY have variable s | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| izes.</t> | ||||
| <figure anchor="fig-src-pkt" title="Source Packet Format" suppress-t | ||||
| itle="false" align="left" alt="" width="" height=""> | ||||
| <artwork xml:space="preserve" name="" type="" align="left" alt="" | ||||
| width="" height=""> | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| / Common Packet Header / | / Common Packet Header / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Source Symbol ID | | | Source Symbol ID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| / Payload / | / Payload / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>Common Packet Header: a common packet header (as common header fo | <dl spacing="normal"> | |||
| rmat) where Packet Type=0.</t> | <dt>Common Packet Header:</dt><dd>A common packet header (as common head | |||
| <t>Source Symbol ID: the sequence number to identify a Source Symbol | er format) where packet type is set to 0b00.</dd> | |||
| .</t> | <dt>Source Symbol ID:</dt><dd>The sequence number to identify a source s | |||
| <t>Payload: the payload (Source Symbol)</t> | ymbol.</dd> | |||
| </section> | <dt>Payload:</dt><dd>The payload (source symbol).</dd> | |||
| <section anchor="coded-packet" title="Coded Packet Format" numbered="tr | </dl> | |||
| ue" toc="default"> | </section> | |||
| <!-- ==================================== --> | <section anchor="coded-packet" numbered="true" toc="default"> | |||
| <name>Coded Packet Format</name> | ||||
| <t> | <t> | |||
| A Coded Packet is the encapsulation of a Common Packet Header, a | A coded packet is the encapsulation of a common packet header, a | |||
| Coded Symbol ID, the associated Encoding Vector, and a Coded Symbol (payload). | coded symbol ID, the associated encoding vector, and a coded symbol (payload). | |||
| As the Source Symbols MAY have variable sizes, all the Source Sym | As the source symbols <bcp14>MAY</bcp14> have variable sizes, all | |||
| bol sizes need to be encoded. To generate this encoded payload size, as a 16-bit | the source symbol sizes need to be encoded. To generate this encoded payload si | |||
| unsigned value, the linear combination uses the same coefficients as the coded | ze as a 16-bit unsigned value, the linear combination uses the same coefficients | |||
| payload. The result MUST be stored in the Coded Packet as the Encoded Payload Si | as the coded payload. The result <bcp14>MUST</bcp14> be stored in the coded pac | |||
| ze (16 bits): as it is an optional field, the Encoding Vector MUST signal the us | ket as the encoded payload size (16 bits). As it is an optional field, the encod | |||
| e of variable Source Symbol sizes with the field V (see <xref target="unified-en | ing vector <bcp14>MUST</bcp14> signal the use of variable source symbol sizes wi | |||
| coding-vector-format" pageno="false" format="default" />). | th the field V (see <xref target="unified-encoding-vector-format" format="defaul | |||
| </t> | t"/>). | |||
| <figure anchor="fig-rpr-pkt" title="Coded Packet Format" suppress-ti | </t> | |||
| tle="false" align="left" alt="" width="" height=""> | <figure anchor="fig-rpr-pkt"> | |||
| <artwork xml:space="preserve" name="" type="" align="left" alt="" | <name>Coded Packet Format</name> | |||
| width="" height=""> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| / Common Packet Header / | / Common Packet Header / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Coded Symbol ID | | | Coded Symbol ID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| / Encoding Vector / | / Encoding Vector / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Encoded Payload Size | | | | Encoded Payload Size | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | | |||
| / Payload / | / Payload / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>Common Packet Header: a common packet header (as common header fo | <dl spacing="normal"> | |||
| rmat) where Packet Type=1.</t> | <dt>Common Packet Header:</dt><dd>A common packet header (as common head | |||
| <t>Coded Symbol ID: the sequence number to identify a Coded Symbol.< | er format) where packet type is set to 0b01.</dd> | |||
| /t> | <dt>Coded Symbol ID:</dt><dd>The sequence number to identify a coded sym | |||
| <t>Encoding Vector: an Encoding Vector to define the linear combinat | bol.</dd> | |||
| ion used (coefficients and Source Symbols).</t> | <dt>Encoding Vector:</dt><dd>An encoding vector to define the linear com | |||
| <t>Encoded Payload Size: the coded payload size used if the Source S | bination used (coefficients and source symbols).</dd> | |||
| ymbols have a variable size (optional,<xref target="unified-encoding-vector-form | <dt>Encoded Payload Size:</dt><dd>The coded payload size used if the sou | |||
| at" pageno="false" format="default" />).</t> | rce symbols have a variable size (optional, <xref target="unified-encoding-vecto | |||
| <t>Payload: the Coded Symbol.</t> | r-format" format="default"/>).</dd> | |||
| <section anchor="unified-encoding-vector-format" title="The Encoding | <dt>Payload:</dt><dd>The coded symbol.</dd> | |||
| Vector" numbered="true" toc="default"> | </dl> | |||
| <t>An Encoding Vector contains all the information about the linear | <section anchor="unified-encoding-vector-format" numbered="true" toc="de | |||
| combination used to generate a Coded Symbol. The information includes the source | fault"> | |||
| identifiers and the coefficients used for each Source Symbol. It MAY be stored | <name>The Encoding Vector</name> | |||
| in different ways depending on the situation.</t> | <t>An encoding vector contains all the information about the linear co | |||
| <figure anchor="fig-unif-enc-vec" title="Encoding Vector Format" | mbination used to generate a coded symbol. The information includes the source i | |||
| suppress-title="false" align="left" alt="" width="" height=""> | dentifiers and the coefficients used for each source symbol. It <bcp14>MAY</bcp1 | |||
| <artwork xml:space="preserve" name="" type="" align="left" alt | 4> be stored in different ways depending on the situation.</t> | |||
| ="" width="" height=""> | <figure anchor="fig-unif-enc-vec"> | |||
| <name>Encoding Vector Format</name> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | EV_LEN | CCGI | I |C|V| NB_IDS | NB_COEFS | | | EV_LEN | CCGI | I |C|V| NB_IDS | NB_COEFS | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | FIRST_SOURCE_ID | | | FIRST_SOURCE_ID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | b_id | | | | b_id | | | |||
| +-+-+-+-+-+-+-+-+ id_bit_vector +-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ id_bit_vector +-+-+-+-+-+-+-+ | |||
| | | Padding | | | | Padding | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + coef_bit_vector +-+-+-+-+-+-+-+ | + coef_bit_vector +-+-+-+-+-+-+-+ | |||
| | | Padding | | | | Padding | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <dl> | |||
| <list style="symbols"> | <dt>Encoding Vector Length (EV_LEN):</dt><dd>8 bits. The size in | |||
| <t>Encoding Vector Length (EV_LEN) (8-bits): size in units | units of 32-bit words.</dd> | |||
| of 32-bit words.</t> | <dt>Coding Coefficient Generator Identifier (CCGI):</dt><dd><t>4-b | |||
| <t>Coding Coefficient Generator Identifier (CCGI): 4-bit ID | it ID to identify the algorithm or function used to generate the coefficients. A | |||
| to identify the algorithm or the function used to generate the coefficients. As | s a CCGI is included in each encoded vector, it <bcp14>MAY</bcp14> dynamically c | |||
| a CCGI is included in each encoded vector, it MAY dynamically change between th | hange between the generation of two coded symbols. | |||
| e generation of 2 Coded Symbols. | The CCGI builds the coding coefficients used to generate th | |||
| The CCGI builds the coding coefficients used to generate th | e coded symbols. They <bcp14>MUST</bcp14> be known by all the Tetrys encoders or | |||
| e Coded Symbols. They MUST be known by all the Tetrys encoders or decoders. | decoders. | |||
| The two RLC FEC schemes specified in this document reuse th | The two RLC FEC schemes specified in this document reuse th | |||
| e Finite Fields defined in <xref target="RFC5510" pageno="false" format="default | e finite fields defined in <xref target="RFC5510" sectionFormat="comma" section= | |||
| " />, Section 8.1. More specifically, the elements of the field GF(2^(m)) are r | "8.1"/>. | |||
| epresented by polynomials with binary coefficients (i.e., over GF(2)) and degree | More specifically, the elements of the field GF(2<sup>(m)</sup>) are represented | |||
| lower or equal to m-1. The addition between two elements is defined as the addi | by polynomials with binary coefficients (i.e., over GF(2)) and with degree lowe | |||
| tion of binary polynomials in GF(2), which is equivalent to a bitwise XOR operat | r or equal to m-1. The addition between two elements is defined as the addition | |||
| ion on the binary representation of these elements. | of binary polynomials in GF(2), which is equivalent to a bitwise XOR operation o | |||
| With GF(2^(8)), multiplication between two elements is the | n the binary representation of these elements. | |||
| multiplication modulo a given irreducible polynomial of degree 8. The following | With GF(2<sup>(8)</sup>), multiplication between two elemen | |||
| irreducible polynomial is used for GF(2^(8)): | ts is the multiplication modulo a given irreducible polynomial of degree 8. The | |||
| following irreducible polynomial is used for GF(2<sup>(8)</sup>):</t> | ||||
| x^(8) + x^(4) + x^(3) + x^(2) + 1 | <t indent="3">x<sup>(8)</sup> + x<sup>(4)</sup> + x<sup>(3)</sup> + x<sup>( 2)</sup> + 1</t> | |||
| With GF(2^(4)), multiplication between two elements is the m ultiplication modulo a given irreducible polynomial of degree 4. The following i rreducible polynomial is used for GF(2^(4)): | <t>With GF(2<sup>(4)</sup>), multiplication between two elem ents is the multiplication modulo a given irreducible polynomial of degree 4. Th e following irreducible polynomial is used for GF(2<sup>(4)</sup>):</t> | |||
| x^(4) + x + 1 | <t indent="3">x<sup>(4)</sup> + x + 1 | |||
| <list style="ccgi"> | </t> | |||
| <t>0: Vandermonde based coefficients over the finite | <ul spacing="normal"> | |||
| field GF(2^(4)), as defined below. Each coefficient is built as alpha^( (source_ | <li>0b00: Vandermonde-based coefficients over the finite field G | |||
| symbol_id*coded-symbol_id) % 16), with alpha the root of the primitive polynomia | F(2<sup>(4)</sup>) as defined below. Each coefficient is built as alpha<sup>( (s | |||
| l.</t> | ource_symbol_id*coded-symbol_id) % 16)</sup>, with alpha the root of the primiti | |||
| <t>1: Vandermonde based coefficients over the finite | ve polynomial.</li> | |||
| field GF(2^(8)), as defined below. Each coefficient is built as alpha^( (source_ | <li>0b01: Vandermonde-based coefficients over the finite field G | |||
| symbol_id*coded-symbol_id) % 256), with alpha the root of the primitive polynomi | F(2<sup>(8)</sup>) as defined below. Each coefficient is built as alpha<sup>( (s | |||
| al.</t> | ource_symbol_id*coded-symbol_id) % 256)</sup>, with alpha the root of the primit | |||
| <t>Suppose we want to generate the Coded Symbol 2 as | ive polynomial.</li> | |||
| a linear combination of the Source Symbols 1,2,4 using CCGI=1. The coefficients | <li>Suppose we want to generate the coded symbol 2 as a linear c | |||
| will be alpha^( (1 * 1) % 256), alpha^( (1 * 2) % 256), alpha^( (1 * 4) % 256).< | ombination of the source symbols 1, 2, and 4 using CCGI set to 0b01. The coeffic | |||
| /t> | ients will be alpha<sup>( (1 * 1) % 256)</sup>, alpha<sup>( (1 * 2) % 256)</sup> | |||
| </list> | , and alpha<sup>( (1 * 4) % 256)</sup>.</li> | |||
| </t> | </ul></dd> | |||
| <!-- <t>Store the Source Symbol IDs (I) (1 bit): if equal t | <dt> | |||
| o 1, the Encoding Vector contains the list of the Source Symbol IDs, if equal to | ||||
| 0, there is no Source Symbol ID information.</t> --> | ||||
| <t> | ||||
| Store the Source Symbol ID Format (I) (2 bits): | Store the Source Symbol ID Format (I) (2 bits): | |||
| <list style="symbols"> | </dt><dd> | |||
| <t>00 means there is no Source Symbol ID information. | <ul spacing="normal"> | |||
| </t> | <li>0b00 means there is no source symbol ID information.</li> | |||
| <t>01 means the Encoding Vector contains the edge blo | <li>0b01 means the encoding vector contains the edge blocks of t | |||
| cks of the Source Symbol IDs without compression.</t> | he source symbol IDs without compression.</li> | |||
| <t>10 means the Encoding Vector contains the compress | <li>0b10 means the encoding vector contains the compressed list | |||
| ed list of the Source Symbol IDs.</t> | of the source symbol IDs.</li> | |||
| <t>11 means the Encoding Vector contains the compress | <li>0b11 means the encoding vector contains the compressed edge | |||
| ed edge blocks of the Source Symbol IDs.</t> | blocks of the source symbol IDs.</li> | |||
| </list> | </ul> | |||
| </t> | </dd> | |||
| <t>Store the Encoding Coefficients (C): 1 bit to indicate i | <dt>Store the Encoding Coefficients (C):</dt><dd>1 bit to indicate i | |||
| f an Encoding Vector contains information about the coefficients used.</t> | f an encoding vector contains information about the coefficients used.</dd> | |||
| <t>Having Source Symbols with Variable Size Encoding (V): s | <dt>Having Source Symbols with Variable Size Encoding (V):</dt><dd>S | |||
| et V to 1 if the combination which refers to the Encoding Vector is a combinatio | et V to 0b01 if the combination that refers to the encoding vector is a combinat | |||
| n of Source Symbols with variable sizes. In this case, the Coded Packets MUST ha | ion of source symbols with variable sizes. In this case, the coded packets <bcp1 | |||
| ve the 'Encoded Payload Size' field.</t> | 4>MUST</bcp14> have the 'Encoded Payload Size' field.</dd> | |||
| <t>NB_IDS: the number of source IDs stored in the Encoding | <dt>NB_IDS:</dt><dd>The number of source IDs stored in the encoding | |||
| Vector (depending on I).</t> | vector (depending on I).</dd> | |||
| <t>Number of coefficients (NB_COEFS): The number of the coe | <dt>Number of Coefficients (NB_COEFS):</dt><dd>The number of the coe | |||
| fficients used to generate the associated Coded Symbol.</t> | fficients used to generate the associated coded symbol.</dd> | |||
| <t>The first source identifier (FIRST_SOURCE_ID): the first | <dt>The First Source Identifier (FIRST_SOURCE_ID):</dt><dd>The first | |||
| Source Symbol ID used in the combination.</t> | source symbol ID used in the combination.</dd> | |||
| <t> | <dt> | |||
| Number of bits for each edge block (b_id): the number of | Number of Bits for Each Edge Block (b_id):</dt><dd>The n | |||
| bits needed to store the edge. | umber of bits needed to store the edge. | |||
| </t> | </dd> | |||
| <t>Information about the Source Symbol IDs (id_bit_vector): | <dt>Information about the Source Symbol IDs (id_bit_vector):</dt><dd | |||
| if I=01, store the edge blocks as b_id * (NB_IDS * 2 - 1). If I=10, store in a | >If I is set to 0b01, store the edge blocks as b_id * (NB_IDS * 2 - 1). | |||
| compressed way the edge blocks.</t> | If I is set to 0b10, store the edge blocks in a compressed way.</dd> | |||
| <t>The coefficients (coef_bit_vector): The coefficients sto | <dt>The Coefficients (coef_bit_vector):</dt><dd>The coefficients sto | |||
| red depending on the CCGI (4 or 8 bits for each coefficient).</t> | red depending on the CCGI (4 or 8 bits for each coefficient).</dd> | |||
| <t>Padding: padding to have an Encoding Vector size multipl | <dt>Padding:</dt><dd>Padding to have an encoding vector size that is | |||
| e of 32-bit (for the id and coefficient part).</t> | a multiple of 32 bits (for the ID and coefficient part).</dd> | |||
| </list> | </dl> | |||
| </t> | <t>The source symbol IDs are organized as a sorted list of 32-bit | |||
| <!-- ==================================== --> | unsigned integers. Depending on the feedback, the source symbol IDs in the list | |||
| <t>The Source Symbol IDs are organized as a sorted list of 32-bit | <bcp14>MAY</bcp14> be successive or not. If they are successive, the boundaries | |||
| unsigned integers. Depending on the feedback, the Source Symbol IDs MAY be succ | are stored in the encoding vector; it just needs 2*32 bits of information. If n | |||
| essive or not in the list. If they are successive, the boundaries are stored in | ot, the full list or the edge blocks <bcp14>MAY</bcp14> be stored and a differen | |||
| the Encoding Vector: it just needs 2*32-bit of information. If not, the full lis | tial transform to reduce the number of bits needed to represent an identifier <b | |||
| t or the edge blocks MAY be stored, and a differential transform to reduce the n | cp14>MAY</bcp14> be used.</t> | |||
| umber of bits needed to represent an identifier MAY be used.</t> | <t>For the following subsections, let's take as an example the generation of an | |||
| <t>For the following subsections, let's take as an example the ge | encoding vector for a coded symbol that is a linear combination of the source sy | |||
| neration of an encoding vector for a Coded Symbol which is a linear combination | mbols with IDs 1, 2, 3, 5, 6, 8, 9, and 10 (or as edge blocks: [1..3], [5..6], [ | |||
| of the Source Symbols with IDs 1,2,3,5,6,8,9 and 10 (or as edge blocks: [1..3],[ | 8..10]).</t> | |||
| 5..6],[8..10])</t> | <t>There are several ways to store the source symbol IDs into the enco | |||
| <t>There are several ways to store the Source Symbols IDs into th | ding vector: | |||
| e encoding vector: | </t> | |||
| <list style="symbols"> | <ul spacing="normal"> | |||
| <t>If no information about the Source Symbol IDs is needed, the | <li>If no information about the source symbol IDs is needed, the fie | |||
| field I MUST be set to 0b00: no b_id and no id_bit_vector field</t> | ld I <bcp14>MUST</bcp14> be set to 0b00: no b_id and no id_bit_vector field.</l | |||
| <t>If the edge blocks are stored without compression, the field | i> | |||
| I MUST be set to 0b01. In this case, set b_id to 32 (as a symbol id is 32 bits), | <li>If the edge blocks are stored without compression, the field I < | |||
| and store into id_bit_vectors the list as 32 bits unsigned integers: 1,3,5,6,8, | bcp14>MUST</bcp14> be set to 0b01. | |||
| 10</t> | In this case, set b_id to 32 (as a Symbol ID is 32 bits), and store the list of | |||
| <t>If the Source Symbols Ids are stored as a list with compressi | 32-bit unsigned integers (1, 3, 4, 5, 6, 10) into id_bit_vectors.</li> | |||
| on, the field I MUST be set to 0b10. In this case, see <xref target="compressing | <li>If the source symbol IDs are stored as a list with compression, | |||
| -encoding-vector" pageno="false" format="default" /> but rather than compressing | the field I <bcp14>MUST</bcp14> be set to 0b10. In this case, see <xref target=" | |||
| the edge blocks, we compress the full list of the Source Symbol IDs.</t> | compressing-encoding-vector" format="default"/>, but rather than compressing the | |||
| <t>If the edge blocks are stored with compression, the field I M | edge blocks, we compress the full list of the source symbol IDs.</li> | |||
| UST be set to 0b11. In this case, see <xref target="compressing-encoding-vector" | <li>If the edge blocks are stored with compression, the field I <bcp | |||
| pageno="false" format="default" />.</t> | 14>MUST</bcp14> be set to 0b11. In this case, see <xref target="compressing-enco | |||
| </list> | ding-vector" format="default"/>.</li> | |||
| </t> | </ul> | |||
| <section anchor="compressing-encoding-vector" title="Compressed l | <section anchor="compressing-encoding-vector" numbered="true" toc="def | |||
| ist of Source Symbol IDs" numbered="true" toc="default"> | ault"> | |||
| <!-- ==================================== --> | <name>Compressed List of Source Symbol IDs</name> | |||
| <t>Let's continue with our Coded Symbol defined in the previou | <t>Let's continue with our coded symbol defined in the previou | |||
| s section. The Source Symbols IDs used in the linear combination are: [1..3],[5. | s section. The source symbol IDs used in the linear combination are: [1..3], [5. | |||
| .6],[8..10].</t> | .6], [8..10].</t> | |||
| <t> If we want to compress and store this list into the encodi | <t> If we want to compress and store this list into the encoding vec | |||
| ng vector, we MUST follow this procedure: | tor, we <bcp14>MUST</bcp14> follow this procedure: | |||
| <list style="numbers"> | </t> | |||
| <t>Keep the first element in the packet as the first_sou | <ol spacing="normal" type="1"><li>Keep the first element in the pack | |||
| rce_id: 1.</t> | et as the first_source_id: 1.</li> | |||
| <t>Apply a differential transform to the other elements | <li>Apply a differential transform to the other elements | |||
| ([3,5,6,8,10]) which removes the element i-1 to the element i, starting with the | ([3, 5, 6, 8, 10]) that removes the element i-1 to the element i, | |||
| first_source_id as i0, and get the list L = [2,2,1,2,2]</t> | starting with the first_source_id as i0, and get the list L = | |||
| <t>Compute b, the number of bits needed to store all the | [2, 2, 1, 2, 2].</li> <li>Compute b, the number of bits needed to | |||
| elements, which is ceil(log2(max(L))), where max(L) represents the maximum of t | store all the elements, which is ceil(log2(max(L))), where | |||
| he elements of the list L: here, 2 bits.</t> | max(L) represents the maximum of the elements of the list L; | |||
| <t>Write b in the corresponding field, and write all the | here, it is 2 bits.</li> | |||
| b * [(2 * NB blocks) - 1] elements in a bit vector, here: 10 10 01 10 10.</t> | <li>Write b in the corresponding field, and write all the b * [(2 | |||
| </list> | * NB blocks) - 1] elements in a bit vector here: 10, 10, 01, 10, 10.</li> | |||
| </t> | </ol> | |||
| </section> | </section> | |||
| <section anchor="decompressing-encoding-vector" title="Decompress | <section anchor="decompressing-encoding-vector" numbered="true" toc="d | |||
| ing the Source Symbol IDs" numbered="true" toc="default"> | efault"> | |||
| <!-- ==================================== --> | <name>Decompressing the Source Symbol IDs</name> | |||
| <t>When a Tetrys Decoding Block wants to reverse the operation | <t>When a Tetrys decoding block wants to reverse the operation | |||
| s, this algorithm is used:</t> | s, this algorithm is used:</t> | |||
| <t> | <ol spacing="normal" type="1"><li>Rebuild the list of the transmitte | |||
| <list style="numbers"> | d elements by reading the bit vector and b: [10, 10, 01, 10, 10] => [2, 2, 1, | |||
| <t>Rebuild the list of the transmitted elements by readi | 2, 2].</li> | |||
| ng the bit vector and b: [10 10 01 10 10] => [2,2,1,2,2]</t> | <li>Apply the reverse transform by adding successively the element | |||
| <t>Apply the reverse transform by adding successively th | s, starting with first_source_id: [1, 1 + 2, (1 + 2) + 2, (1 + 2 + 2) + 1, ...] | |||
| e elements, starting with first_source_id: [1,1+2,(1+2)+2,(1+2+2)+1,...] => [ | => [1, 3, 5, 6, 8, 10].</li> | |||
| 1,3,5,6,8,10]</t> | <li>Rebuild the blocks using the list and first_source_id: [1..3], | |||
| <t>Rebuild the blocks using the list and first_source_id | [5..6], [8..10].</li> | |||
| : [1..3],[5..6],[8..10].</t> | </ol> | |||
| </list> | </section> | |||
| </t> | </section> | |||
| </section> | </section> | |||
| </section> | <section anchor="ack-packet" numbered="true" toc="default"> | |||
| </section> | <name>Window Update Packet Format</name> | |||
| <section anchor="ack-packet" title="Window Update Packet Format" number | <t>A Tetrys decoder <bcp14>MAY</bcp14> send window update packets | |||
| ed="true" toc="default"> | back to another building block. They contain information about what the packets | |||
| <!-- ==================================== --> | received, decoded, or dropped, and other information such as a packet loss rate | |||
| <t>A Tetrys Decoder MAY send back to another building block some Win | or the size of the decoding buffers. They are used to optimize the content of th | |||
| dow Update packets. They contain information about what the packets received, de | e encoding window. The window update packets are <bcp14>OPTIONAL</bcp14>; hence, | |||
| coded or dropped, and other information such as a packet loss rate or the size o | they could be omitted or lost in transmission without impacting the protocol be | |||
| f the decoding buffers. They are used to optimize the content of the encoding wi | havior.</t> | |||
| ndow. The window update packets are OPTIONAL, and hence they could be omitted or | <figure anchor="fig-ack-pkt"> | |||
| lost in transmission without impacting the protocol behavior.</t> | <name>Window Update Packet Format</name> | |||
| <figure anchor="fig-ack-pkt" title="Window Update Packet Format" sup | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| press-title="false" align="left" alt="" width="" height=""> | ||||
| <artwork xml:space="preserve" name="" type="" align="left" alt="" | ||||
| width="" height=""> | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| / Common Packet Header / | / Common Packet Header / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | nb_missing_src | | | nb_missing_src | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | nb_not_used_coded_symb | | | nb_not_used_coded_symb | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | first_src_id | | | first_src_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | plr | sack_size | | | | plr | sack_size | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | | |||
| / SACK Vector / | / SACK Vector / | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t>Common Packet Header: a common packet header (as common header fo | <dl spacing="normal"> | |||
| rmat) where Packet Type=2.</t> | <dt>Common Packet Header:</dt><dd>A common packet header (as common head | |||
| <t>nb_missing_src: the number of missing Source Symbols in the recei | er format) where packet type is set to 0b10.</dd> | |||
| ver since the beginning of the session.</t> | <dt>nb_missing_src:</dt><dd>The number of missing source symbols in the | |||
| <!-- <t>Nb of not already used Coded Symbols: the number of not alre | receiver since the beginning of the session.</dd> | |||
| ady used Coded Symbols in the receiver that have not already been used for decod | <dt>nb_not_used_coded_symb:</dt><dd>The number of coded symbols at t | |||
| ing. Meaning the number of linear combinations containing at least 2 unknown Sou | he receiver that have not already been used for decoding (e.g., the linear combi | |||
| rce Symbols.</t> --> | nations contain at least two unknown source symbols).</dd> | |||
| <t>nb_not_used_coded_symb: the number of Coded Symbols at the receiv | <dt>first_src_id:</dt><dd>ID of the first source symbol to consider in the selec | |||
| er that have not already been used for decoding (e.g., the linear combinations c | tive acknowledgment (SACK) vector.</dd> | |||
| ontain at least 2 unknown Source Symbols).</t> | <dt>plr:</dt><dd>Packet loss ratio expressed as a percentage normalized to an 8- | |||
| <t>first_src_id: ID of the first Source Symbol to consider in the SA | bit unsigned integer. For example, 2.5% will be stored as floor(2.5 * 256/100) = | |||
| CK vector.</t> | 6. Conversely, if 6 is the stored value, the corresponding packet loss ratio ex | |||
| <t>plr: packet loss ratio expressed as a percentage normalized to a | pressed as a percentage is 6*100/256 = 2.34%. This value is used in the case of | |||
| 8-bit unsigned integer. For example, 2.5 % will be stored as floor(2.5 * 256/100 | dynamic code rate or for a statistical purpose. The choice of calculation is lef | |||
| ) = 6. Conversely, if 6 is the stored value, the corresponding packet loss ratio | t to the Tetrys decoder, depending on a window observation, but should be the PL | |||
| expressed as a percentage is 6*100/256 = 2.34 %. This value is used in the case | R seen before decoding.</dd> | |||
| of dynamic Code Rate or for statistical purpose. The choice of calculation is l | <dt>sack_size:</dt><dd>The size of the SACK vector in 32-bit words. For | |||
| eft to the Tetrys Decoder, depending on a window observation, but should be the | instance, with a value of 2, the SACK vector is 64 bits long.</dd> | |||
| PLR seen before decoding.</t> | <dt>SACK vector:</dt><dd>Bit vector indicating symbols that must be remo | |||
| <t>sack_size: the size of the SACK vector in 32-bit words. For insta | ved in the encoding window from the first source symbol ID. In most cases, these | |||
| nce, with value 2, the SACK vector is 64 bits long.</t> | symbols were received by the receiver. The other cases concern some events with | |||
| <t>SACK vector: bit vector indicating symbols that must be removed i | non-recoverable packets (i.e., in the case of a burst of losses) where it is be | |||
| n the encoding window from the first Source Symbol ID. In most cases, these symb | tter to drop and abandon some packets and remove them from the encoding window t | |||
| ols were received by the receiver. The other cases concern some events with non- | o allow the recovery of the following packets. | |||
| recoverable packets (for example in the case of a burst of losses) where it is b | The "First Source Symbol" is included in this bit | |||
| etter to drop and abandon some packets, and thus to remove them from the encodin | vector. | |||
| g window, to allow the recovery of the following packets. | A bit equal to 1 at the i-th position means that this window update packet remov | |||
| The "First Source Symbol" is included in this bi | es the source symbol of the ID equal to "First Source Symbol ID" + i from the en | |||
| t vector. | coding window.</dd> | |||
| A bit equal to 1 at the i-th position means that | </dl> | |||
| this window update packet removes the Source Symbol of ID equal to "First Source | ||||
| Symbol ID" + i from the encoding window.</t> | ||||
| </section> | ||||
| </section> | ||||
| <!-- <section anchor="ccgi" title="The Coding Coefficient Generator Identif | ||||
| ier" numbered="true" toc="default"> | ||||
| <t>The Coding Coefficient Generator Identifier define a function or | ||||
| an algorithm to build the coding coefficients used to generate the Coded Symbols | ||||
| . They MUST be known by all the Tetrys encoders or decoders.</t> | ||||
| <t>0: Vandermonde based coefficients over a finite field with 2^^4 e | ||||
| lements,defined by the primitive polynomial 1+x+x^^4. Each coefficient is built | ||||
| as alpha^( (source_symbol_id*coded-symbol_id) % 16), with alpha the root of the | ||||
| primitive polynomial.</t> | ||||
| <t>1: Vandermonde based coefficients over a finite field with 2^^8 e | ||||
| lements,defined by the primitive polynomial 1+x^^2+x^^3+x^^4+x^^8. Each coeffici | ||||
| ent is built as alpha^( (source_symbol_id*coded-symbol_id) % 256), with alpha th | ||||
| e root of the primitive polynomial.</t> | ||||
| <section anchor="ccgi_example" title="how to use the CCGI" numbered="tr | ||||
| ue" toc="default"> | ||||
| <t>At the generation of a Coded Symbol, the Tetrys Encoder generates an | ||||
| Encoding Vector containing the IDs of the Source Symbols stored in the Elastic | ||||
| Encoding Window. For each Source Symbol, a finite field coefficient is determine | ||||
| d using a Coding Coefficient Generator. This generator MAY take as input the Sou | ||||
| rce Symbol ID and the Coded Symbol ID and MAY determine a coefficient in a deter | ||||
| ministic way. A typical example of such a deterministic function is a generator | ||||
| matrix where the rows are indexed by the Source Symbol IDs and the columns by th | ||||
| e Coded Symbol IDs. For example, the entries of this matrix MAY be built from a | ||||
| Vandermonde structure, like Reed-Solomon codes, or a sparse binary matrix, like | ||||
| Low-Density Generator Matrix codes. Finally, the Coded Symbol is the sum of the | ||||
| Source Symbols multiplied by their corresponding coefficients.</t> | ||||
| <t>Suppose we want to generate the Coded Symbol 2 as a linear combinati | ||||
| on of the Source Symbols 1,2,4. The coefficients will be alpha ^( (1 * 1) % 256) | ||||
| , alpha ^( (1 * 2) % 256), alpha ^( (1 * 4) % 256).</t> | ||||
| </section> | ||||
| </section> | </section> | |||
| --> | </section> | |||
| <section anchor="research" numbered="true" toc="default"> | ||||
| <!-- ===================================================================== | <name>Research Issues</name> | |||
| == --> | <t>The present document describes the baseline protocol, allowing communic | |||
| <section anchor="research" title="Research Issues" numbered="true" toc="de | ations between a Tetrys encoder and Tetrys decoder. In practice, Tetrys can be | |||
| fault"> | used either as a standalone protocol or embedded inside an existing protocol, an | |||
| d either above, within, or below the transport layer. There are different resea | ||||
| <t>The present document describes the baseline protocol, allowing communications | rch questions related to each of these scenarios that should be investigated for | |||
| between a Tetrys encoder and a Tetrys decoder. In practice, Tetrys can be used | future protocol improvements. We summarize them in the following subsections.</ | |||
| either as a standalone protocol or embedded inside an existing protocol, and ei | t> | |||
| ther above, within or below the transport layer. There are different research q | <section anchor="transport-issue" numbered="true" toc="default"> | |||
| uestions related to each of these scenarios that should be investigated for futu | <name>Interaction with Congestion Control</name> | |||
| re protocol improvements. We summarize them in the following subsections.</t> | <t> | |||
| The Tetrys and congestion control components generate two separate channels (see | ||||
| <section anchor="transport-issue" title="Interaction with Congestion Co | <xref target="RFC9265" sectionFormat="comma" section="2.1"/>): | |||
| ntrol" numbered="true" toc="default"> | ||||
| <t> | ||||
| The Tetrys and congestion control components generate two separate channels (see | ||||
| <xref target="RFC9265" pageno="false" format="default" />, section 2.1): | ||||
| <list style="symbols"> | ||||
| <t>the Tetrys channel carries source and Coded Packets (from the sender t | ||||
| o the receiver) and information from the receiver to the sender (e.g., signaling | ||||
| which symbols have been recovered, loss rate prior and/or after decoding, etc.) | ||||
| ;</t> | ||||
| <t>the congestion control channel carries packets from a sender to a rece | ||||
| iver, and packets signaling information about the network (e.g., number of packe | ||||
| ts received versus lost, Explicit Congestion Notification (ECN) marks, etc.) fro | ||||
| m the receiver to the sender. </t> | ||||
| </list> | ||||
| In practice, depending on how Tetrys is deployed (i.e., above, within or below t | ||||
| he transport layer), <xref target="RFC9265" pageno="false" format="default" /> i | ||||
| dentifies and discusses several topics. They are briefly listed below and adapte | ||||
| d to the particular case of Tetrys: | ||||
| <list style="symbols"> | ||||
| <t>congestion related losses may be hidden if Tetrys is deployed below th | ||||
| e transport layer without any precaution (i.e., Tetrys recovering packets lost b | ||||
| ecause of a congested router), which can severely impact the the congestion cont | ||||
| rol efficiency. An approach is suggested to avoid hiding such signals in <xref t | ||||
| arget="RFC9265" pageno="false" format="default" />, section 5;</t> | ||||
| <t>having Tetrys and non-Tetrys flows sharing the same network links can | ||||
| raise fairness issues between these flows. The situation depends in particular o | ||||
| n whether some of these flows are congestion controlled and not others, and whic | ||||
| h type of congestion control is used. The details are out of scope of this docum | ||||
| ent, but may have major impacts in practice;</t> | ||||
| <t>coding rate adaptation within Tetrys can have major impacts on congest | ||||
| ion control if done inappropriately. This topic is discussed more in detail in < | ||||
| xref target="adaptive"/>;</t> | ||||
| <t>Tetrys can leverage on multipath transmissions, the Tetrys packets bei | ||||
| ng sent to the same receiver through multiple paths. Since paths can largely dif | ||||
| fer, a per-path flow control and congestion control adaptation could be needed;< | ||||
| /t> | ||||
| <t>protecting several application flows within a single Tetrys flow raise | ||||
| s additional questions. This topic is discussed more in detail in <xref target=" | ||||
| tunnel"/>.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| <!-- <t> | <li>The Tetrys channel carries source and coded packets (from the send | |||
| Tetrys coding and congestion control MAY be seen as two separate channels (the n | er to the receiver) and information from the receiver to the sender (e.g., signa | |||
| otion of channel corresponds to that of <xref target="RFC9265" pageno="false" fo | ling which symbols have been recovered, loss rate before and/or after decoding, | |||
| rmat="default" />, section 2.1). In practice, implementations MAY interact with | etc.).</li> | |||
| both channels by sharing information from one channel to the other one. This r | <li>The congestion control channel carries packets from a sender to a | |||
| aises several concerns that must be tackled when Tetrys is jointly used with a c | receiver and packets signaling information about the network (e.g., number of pa | |||
| ongestion-controlled transport protocol. For example, the Encoding Window or the | ckets received versus lost, Explicit Congestion Notification (ECN) marks, etc.) | |||
| Code Rate COULD be adjusted by some feedback from the congestion-control channe | from the receiver to the sender. </li> | |||
| l. All these numerous research issues are discussed in a separate document, <xr | </ul> | |||
| ef target="RFC9265" pageno="false" format="default" />, which investigates end-t | <t> | |||
| o-end unicast data transfer with FEC coding in the application (above the transp | The following topics, which are identified and discussed by <xref target="RFC926 | |||
| ort layer), within the transport layer, or directly below the transport; the rel | 5" format="default"/>, are adapted to the particular deployment cases of Tetrys | |||
| ationship between transport layer and application requirements; and the case of | (i.e., above, within, or below the transport layer): | |||
| transport multipath and multi-streams applications. | </t> | |||
| </t> | <ul spacing="normal"> | |||
| <li>Congestion-related losses may be hidden if Tetrys is deployed belo | ||||
| w the transport layer without any precaution (i.e., Tetrys recovering packets lo | ||||
| st because of a congested router), which can severely impact the congestion cont | ||||
| rol efficiency. An approach is suggested to avoid hiding such signals in <xref t | ||||
| arget="RFC9265" sectionFormat="comma" section="5"/>.</li> | ||||
| <li>Tetrys and non-Tetrys flows sharing the same network links can rai | ||||
| se fairness issues between these flows. In particular, the situation depends on | ||||
| whether some of these flows and not others are congestion controlled and which t | ||||
| ype of congestion control is used. The details are out of scope of this document | ||||
| , but may have major impacts in practice.</li> | ||||
| <li>Coding rate adaptation within Tetrys can have major impacts on con | ||||
| gestion control if done inappropriately. This topic is discussed more in detail | ||||
| in <xref target="adaptive" format="default"/>.</li> | ||||
| <li>Tetrys can leverage multipath transmissions, with the Tetrys packe | ||||
| ts being sent to the same receiver through multiple paths. Since paths can large | ||||
| ly differ, a per-path flow control and congestion control adaptation could be ne | ||||
| eded.</li> | ||||
| <li>Protecting several application flows within a single Tetrys flow r | ||||
| aises additional questions. This topic is discussed more in detail in <xref targ | ||||
| et="tunnel" format="default"/>.</li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| <section anchor="adaptive" numbered="true" toc="default"> | ||||
| <section anchor="adaptive" title="Adaptive Coding Rate" numbered="true" | <name>Adaptive Coding Rate</name> | |||
| toc="default"> | <t> | |||
| When the network conditions (e.g., delay and loss rate) strongly vary over time, | ||||
| <t> | an adaptive coding rate can be used to increase or reduce the amount of coded p | |||
| When the network conditions (e.g., delay and loss rate) strongly vary | ackets among a transmission dynamically (i.e., the added redundancy) with the he | |||
| over time, an adaptive coding rate can be used to increase or reduce the amount | lp of a dedicated algorithm similar to <xref target="A-FEC" format="default"/>. | |||
| of Coded Packets among a transmission dynamically (i.e., the added redundancy), | Once again, the strategy differs depending on which layer Tetrys is deployed (i. | |||
| with the help of a dedicated algorithm, similarly to <xref target="A-FEC" pagen | e., above, within, or below the transport layer). Basically, we can split these | |||
| o="false" format="default" />. Once again, the strategy differs, depending on wh | strategies into two distinct classes: Tetrys deployment inside the transport lay | |||
| ich layer Tetrys is deployed (i.e., above, within or below the transport layer). | er versus outside the transport layer (i.e., above or below). A deployment withi | |||
| Basically, we can slice these strategies in two distinct classes: when Tetrys i | n the transport layer means | |||
| s deployed inside the transport layer, versus outside (i.e., above or below). A | that interactions between transport protocol mechanisms such as error recovery, | |||
| deployment within the transport layer obviously means that interactions between | congestion control, and/or flow control are envisioned. Otherwise, deploying Tet | |||
| transport protocol micro-mechanisms, such as the error recovery mechanism, the c | rys within a transport protocol that is not congestion controlled, like UDP, wou | |||
| ongestion control, the flow control or both, are envisioned. Otherwise, deployin | ld not bring out any other advantage than deploying it below or above the transp | |||
| g Tetrys within a non congestion controlled transport protocol, like UDP, would | ort layer. | |||
| not bring out any other advantage than deploying it below or above the transport | </t> | |||
| layer. | <t>The impact deploying a FEC mechanism within the transport layer is fu | |||
| </t> | rther discussed in <xref target="RFC9265" sectionFormat="of" section="4"/>, wher | |||
| e considerations concerning the interactions between congestion control and codi | ||||
| <t>The impact deploying a FEC mechanism within the transport layer is | ng rates, or the impact of fairness, are investigated. This adaptation may be do | |||
| further discussed in <xref target="RFC9265" pageno="false" format="default" />, | ne jointly with the congestion control mechanism of a transport layer protocol a | |||
| section 4, where considerations concerning the interactions between congestion | s proposed by <xref target="CTCP" format="default"/>. This allows the use of mon | |||
| control and coding rates, or the impact of fairness, are investigated. This adap | itored congestion control metrics (e.g., RTT, congestion events, or current cong | |||
| tation may be done jointly with the congestion control mechanism of a transport | estion window size) to adapt the coding rate conjointly with the computed transp | |||
| layer protocol, as proposed by <xref target="CTCP"/>. This allows the use of mon | ort sending rate. The rationale is to compute an amount of repair traffic that d | |||
| itored congestion control metrics (e.g., RTT, congestion events, or current cong | oes not lead to congestion. This joint optimization is mandatory to prevent flo | |||
| estion window size) to adapt the coding rate conjointly with the computed transp | ws from consuming the whole available capacity as discussed in <xref target="I-D | |||
| ort sending rate. The rationale is to compute an amount of repair traffic that d | .singh-rmcat-adaptive-fec" format="default"/>, where the authors point out that | |||
| oes not lead to congestion. This joint optimization is mandatory to prevent flow | an increase in the repair ratio should be done conjointly with a decrease in the | |||
| s to consume the whole available capacity as also discussed in <xref target="I-D | source sending rate. | |||
| .singh-rmcat-adaptive-fec" /> where the authors point out that an increase in th | </t> | |||
| e repair ratio should be done conjointly with a decrease in the source sending r | <t> | |||
| ate. | Finally, adapting a coding rate can also be done outside the transpor | |||
| </t> | t layer without considering transport-layer metrics. In particular, this adaptat | |||
| ion may be done jointly with the network as proposed in <xref target="RED-FEC" f | ||||
| <t> | ormat="default"/>. In this paper, the authors propose a Random Early Detection F | |||
| Finally, adapting a coding rate can also be done outside the transpor | EC mechanism in the context of video transmission over wireless networks. Briefl | |||
| t layer and without considering transport layer metrics. In particular, this ada | y, the idea is to add more redundancy packets if the queue at the access point i | |||
| ptation may be done jointly with the network as proposed in <xref target="RED-FE | s less occupied and vice versa. A first theoretical attempt for video delivery w | |||
| C" pageno="false" format="default" />. In this paper, the authors propose a Rand | ith Tetrys has been proposed <xref target="THAI" format="default"/>. This approa | |||
| om Early Detection FEC mechanism in the context of video transmission over wirel | ch is interesting as it illustrates a joint collaboration between the applicatio | |||
| ess networks. Briefly, the idea is to add more redundancy packets if the queue a | n requirements and the network conditions and combines both signals coming from | |||
| t the access point is less occupied and vice versa. A first theoretical attempt | the application needs and the network state (i.e., signals below or above the tr | |||
| for video delivery has been proposed <xref target="THAI" pageno="false" format=" | ansport layer). | |||
| default" /> with Tetrys. This approach is interesting as it illustrates a joint | </t> | |||
| collaboration between the application requirements and the network conditions an | <t> | |||
| d combines both signals coming from the application needs and the network state | ||||
| (i.e., signals below or above the transport layer). | ||||
| </t> | ||||
| <t> | ||||
| To conclude, there are multiple ways to enable an adaptive coding rat e. However, all of them depend on: | To conclude, there are multiple ways to enable an adaptive coding rat e. However, all of them depend on: | |||
| <list style="symbols"> | </t> | |||
| <t>the signal metrics that can be monitored and used to adapt the | <ul spacing="normal"> | |||
| coding rate;</t> | <li>the signal metrics that can be monitored and used to adapt the cod | |||
| <t>the transport layer used, whether congestion controlled or not | ing rate;</li> | |||
| ;</t> | <li>the transport layer used, whether it is congestion controlled or n | |||
| <t>the objective sought (e.g., to minimize congestion, or to fit | ot; and</li> | |||
| application requirements).</t> | <li>the objective sought (e.g., to minimize congestion or to fit appli | |||
| </list> | cation requirements).</li> | |||
| </t> | </ul> | |||
| </section> | ||||
| <section anchor="tunnel" title="Using Tetrys Below The IP Layer For Tun | ||||
| neling" numbered="true" toc="default"> | ||||
| <t> | ||||
| The use of Tetrys to protect an aggregate of flows, typically when Tetrys is use | ||||
| d for tunneling, to recover from IP datagram losses, raises research questions. | ||||
| When redundancy is applied without flow differentiation, this may come in contra | ||||
| diction with the service requirements of individual flows, some of them may be m | ||||
| ore penalized by high latency and jitter than by partial reliability, while othe | ||||
| r flows may have opposite requirements. | ||||
| In practice head-of-line blocking will impact all flows in a similar manner desp | ||||
| ite their different needs, which asks for more elaborate strategies inside Tetry | ||||
| s. | ||||
| <!-- Note this research issue joins the topics discussed in the IRTF LOOPS worki | ||||
| ng group <xref target="I-D.li-tsvwg-loops-problem-opportunities" pageno="false" | ||||
| format="default" />. --> | ||||
| </t> | ||||
| </section> | ||||
| </section> | </section> | |||
| <!-- ===================================================================== | <section anchor="tunnel" numbered="true" toc="default"> | |||
| == --> | <name>Using Tetrys below the IP Layer for Tunneling</name> | |||
| <section anchor="security" title="Security Considerations" numbered="true" | ||||
| toc="default"> | ||||
| <!-- ==================================== --> | ||||
| <t> | <t> | |||
| First of all, it must be clear that the use of FEC protection to a data | The use of Tetrys to protect an aggregate of flows raises research quest | |||
| stream does not provide, per se, any kind of security, but, on the contrary, rai | ions when Tetrys is used to recover from IP datagram losses while tunneling. Ap | |||
| ses security risks. | plying redundancy without flow differentiation may contradict the service requir | |||
| The situation with Tetrys is mostly similar to that of other content del | ements of individual flows: some flows may be penalized more by high latency and | |||
| ivery protocols making use of FEC protection, and this is well described in FECF | jitter than by partial reliability, while other flows may be penalized more by | |||
| RAME <xref target="RFC6363" pageno="false" format="default" />. | partial reliability. In practice, head-of-line blocking impacts all flows in a | |||
| This section leverages on this reference, adding new considerations to c | similar manner despite their different needs, which indicates that more elaborat | |||
| omply with Tetrys specificities when meaningful. | e strategies inside Tetrys are needed. | |||
| </t> | </t> | |||
| </section> | ||||
| <section anchor="security-problem-statement" title="Problem Statement" n | </section> | |||
| umbered="true" toc="default"> | <section anchor="security" numbered="true" toc="default"> | |||
| <t> | <name>Security Considerations</name> | |||
| An attacker can either target the content, the protocol, or the networ | <t> | |||
| k. | First of all, it must be clear that the use of FEC protection on a data | |||
| The consequences will largely differ, reflecting various types of goal | stream does not provide any kind of security per se. On the contrary, the use of | |||
| s, like gaining access to confidential content, corrupting the content, compromi | FEC protection on a data stream raises security risks. | |||
| zing the Tetrys Encoder and/or Tetrys Decoder, or compromizing the network behav | The situation with Tetrys is mostly similar to that of other content del | |||
| ior. | ivery protocols making use of FEC protection; this is well described in FECFRAME | |||
| In particular, several of these attacks aim at creating a Denial-of-Se | <xref target="RFC6363" format="default"/>. | |||
| rvice (DoS), with consequences that may be limited to a single node (e.g., the T | This section builds on this reference, adding new considerations to comp | |||
| etrys Decoder), or that may impact all the nodes attached to the targeted networ | ly with Tetrys specificities when meaningful. | |||
| k (e.g., by making flows non-responsive to congestion signals). | </t> | |||
| </t> | <section anchor="security-problem-statement" numbered="true" toc="default" | |||
| <t> | > | |||
| <name>Problem Statement</name> | ||||
| <t> | ||||
| An attacker can either target the content, protocol, or network. | ||||
| The consequences will largely differ reflecting various types of goals | ||||
| , like gaining access to confidential content, corrupting the content, compromis | ||||
| ing the Tetrys encoder and/or Tetrys decoder, or compromising the network behavi | ||||
| or. | ||||
| In particular, several of these attacks aim at creating a Denial-of-Se | ||||
| rvice (DoS) with consequences that may be limited to a single node (e.g., the Te | ||||
| trys decoder), or that may impact all the nodes attached to the targeted network | ||||
| (e.g., by making flows unresponsive to congestion signals). | ||||
| </t> | ||||
| <t> | ||||
| In the following sections, we discuss these attacks, according to the component targeted by the attacker. | In the following sections, we discuss these attacks, according to the component targeted by the attacker. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="security-attack-against-data-flow" numbered="true" toc="d | ||||
| <section anchor="security-attack-against-data-flow" title="Attacks again | efault"> | |||
| st the Data Flow" numbered="true" toc="default"> | <name>Attacks against the Data Flow</name> | |||
| <t> | <t> | |||
| An attacker may want to access a confidential content, by eavesdroppin | An attacker may want to access confidential content by eavesdropping t | |||
| g the traffic between the Tetrys Encoder/Decoder. | he traffic between the Tetrys encoder/decoder. | |||
| Traffic encryption is the usual approach to mitigate this risk, and th | Traffic encryption is the usual approach to mitigate this risk, and th | |||
| is encryption can be done either on the source flow, above Tetrys, or below Tetr | is encryption can be applied to the source flow upstream of the Tetrys encoder o | |||
| ys, on the output packets, both Source and Coded Packets. | r to the output packets downstream of the Tetrys encoder. | |||
| The choice on where to apply encryption depends on various criteria, i | The choice on where to apply encryption depends on various criteria, | |||
| n particular the attacker model (e.g., when encryption happens below Tetrys, the | in particular the attacker model (e.g., when encryption happens | |||
| security risk is assumed to be on the interconnection network). | below Tetrys, the security risk is assumed to be on the | |||
| </t> | interconnection network). | |||
| <t> | </t> | |||
| An attacker may also want to corrupt the content (e.g., by injecting f | <t> | |||
| orged or modified Source and Coded Packets to prevent the Tetrys Decoder to reco | An attacker may also want to corrupt the content (e.g., by injecting f | |||
| ver the original source flow). | orged or modified source and coded packets to prevent the Tetrys decoder from re | |||
| covering the original source flow). | ||||
| Content integrity and source authentication services at the packet lev el are then needed to mitigate this risk. | Content integrity and source authentication services at the packet lev el are then needed to mitigate this risk. | |||
| Here, these services need to be provided below Tetrys in order to enab | Here, these services need to be provided below Tetrys in order to enab | |||
| le the receiver to drop undesired packets and only transfer legitimate packets t | le the receiver to drop undesired packets and only transfer legitimate packets t | |||
| o the Tetrys Decoder. | o the Tetrys decoder. | |||
| It should be noted that forging or modifying Feedback Packets will not | It should be noted that forging or modifying feedback packets will not | |||
| corrupt the content, although it will certainly compromize Tetrys operation (se | corrupt the content, although it will certainly compromise Tetrys operation (se | |||
| e next section). | e <xref target="security-attack-against-signaling"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="security-attack-against-signaling" numbered="true" toc="d | ||||
| efault"> | ||||
| <name>Attacks against Signaling</name> | ||||
| <t> | ||||
| Attacks on signaling information (e.g., by forging or modifying feedba | ||||
| ck packets to falsify the good reception or recovery of source content) can easi | ||||
| ly prevent the Tetrys decoder from recovering the source flow, thereby creating | ||||
| a DoS. | ||||
| In order to prevent this type of attack, content integrity and source | ||||
| authentication services at the packet level are needed for the feedback flow fro | ||||
| m the Tetrys decoder to the Tetrys encoder as well. | ||||
| These services need to be provided below Tetrys in order to drop undes | ||||
| ired packets and only transfer legitimate feedback packets to the Tetrys encoder | ||||
| . | ||||
| </t> | ||||
| <t> | ||||
| Conversely, an attacker in position to selectively drop feedback packe | ||||
| ts (instead of modifying them) will not severely impact the function of Tetrys s | ||||
| ince it is naturally robust when challenged with such losses. | ||||
| However, it will have side impacts, such as the use of bigger linear s | ||||
| ystems (since the Tetrys encoder cannot remove well-received or decoded source p | ||||
| ackets from its linear system), which mechanically increases computational costs | ||||
| on both sides (encoder and decoder). | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="security-attack-against-network" numbered="true" toc="def | ||||
| ault"> | ||||
| <name>Attacks against the Network</name> | ||||
| <t> | ||||
| Tetrys can react to congestion signals (<xref target="transport-issue" | ||||
| format="default"/>) in order to provide a certain level of fairness with other | ||||
| flows on a shared network. | ||||
| This ability could be exploited by an attacker to create or reinforce | ||||
| congestion events (e.g., by forging or modifying feedback packets) that can pote | ||||
| ntially impact a significant number of nodes attached to the network. | ||||
| In order to mitigate the risk, content integrity and source authentica | ||||
| tion services at the packet level are needed to enable the receiver to drop unde | ||||
| sired packets and only transfer legitimate packets to the Tetrys encoder and dec | ||||
| oder. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="security-baseline-security" numbered="true" toc="default" | ||||
| > | ||||
| <name>Baseline Security Operation</name> | ||||
| <t> | ||||
| Tetrys can benefit from an IPsec / Encapsulating Security Payload (IPs | ||||
| ec/ESP) <xref target="RFC4303" format="default"/> that provides confidentiality, | ||||
| origin authentication, integrity, and anti-replay services in particular. | ||||
| IPsec/ESP can be used to protect the Tetrys data flows (both directions) | ||||
| against attackers located within the interconnection network or attackers in pos | ||||
| ition to eavesdrop traffic, inject forged traffic, or replay legitimate traffic. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="iana" numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <t>This document has no IANA actions.</t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <section anchor="security-attack-against-signaling" title="Attacks again | <displayreference target="I-D.singh-rmcat-adaptive-fec" to="RMCAT-ADAPTIVE-FEC"/ | |||
| st Signaling" numbered="true" toc="default"> | > | |||
| <t> | ||||
| Attacks on signaling information (e.g., by forging or modifying Feedba | ||||
| ck Packets to pretend the good reception or recovery of source content) can easi | ||||
| ly prevent the Tetrys Decoder to recover the source flow, thereby creating a DoS | ||||
| . | ||||
| In order to prevent this type of attack, content integrity and source | ||||
| authentication services at the packet level are needed for the feedback flow, fr | ||||
| om the Tetrys Decoder to the Tetrys Encoder, as well. | ||||
| These services need to be provided below Tetrys, in order to drop unde | ||||
| sired packets and only transfer legitimate Feedback Packets to the Tetrys Encode | ||||
| r. | ||||
| </t> | ||||
| <t> | ||||
| On the opposite, an attacker in position to selectively drop Feedback | ||||
| Packets (instead of modifying them) will not severily impact Tetrys functionning | ||||
| , since Tetrys is naturally robust in front of such losses. | ||||
| However it will have side impacts, like the use of bigger linear syste | ||||
| ms (since the Tetrys Encoder cannot remove well received or decoded source packe | ||||
| ts from its linear system), which mechanically increases computational costs on | ||||
| both sides, encoder and decoder. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="security-attack-against-network" title="Attacks against | <references> | |||
| the Network" numbered="true" toc="default"> | <name>References</name> | |||
| <t> | <references> | |||
| Tetrys can react to congestion signals (<xref target="transport-issue" | <name>Normative References</name> | |||
| />) in order to provide a certain level of fairness with other flows on a share | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
| d network. | 119.xml"/> | |||
| This ability could be exploited by an attacker to create or reinforce | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
| congestion events (e.g., by forging or modifying Feedback Packets), which can po | 174.xml"/> | |||
| tentially impact a significant number of nodes attached to the network. | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
| Here also, in order to mitigate the risk, content integrity and source | 052.xml"/> | |||
| authentication services at the packet level are needed to enable the receiver t | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
| o drop undesired packets and only transfer legitimate packets to the Tetrys Enco | 445.xml"/> | |||
| der and Decoder. | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
| </t> | 303.xml"/> | |||
| </section> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
| 510.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | ||||
| 651.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | ||||
| 740.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | ||||
| 363.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 8406.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 680.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 265.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <section anchor="security-baseline-security" title="Baseline Security Op | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| eration" numbered="true" toc="default"> | .singh-rmcat-adaptive-fec.xml"/> | |||
| <t> | ||||
| Tetrys can benefit from an IPsec/Encapsulating Security Payload (IPsec | ||||
| /ESP) <xref target="RFC4303" pageno="false" format="default" />, that provides i | ||||
| n particular confidentiality, origin authentication, integrity, and anti-replay | ||||
| services. | ||||
| IPsec/ESP can be useful to protect the Tetrys data flows (both directions | ||||
| ) against attackers located within the interconnection network, in position to e | ||||
| avesdrop traffic, or inject forged traffic, or replay legitimate traffic. | ||||
| </t> | ||||
| </section> | ||||
| </section> | <reference anchor="AHL-00" target="https://doi.org/10.1109/18.850663"> | |||
| <front> | ||||
| <title>Network information flow</title> | ||||
| <author initials="R." surname="Ahlswede"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="N." surname="Cai"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="S." surname="Li"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="R." surname="Yeung"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2000"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.1109/18.850663"/> | ||||
| <refcontent>IEEE Transactions on Information Theory, Vol. 46, Issue 4, | ||||
| pp. 1204-1216</refcontent> | ||||
| </reference> | ||||
| <!-- | <reference anchor="Tetrys" target="https://doi.org/10.1109/IWSSC.2008.46 | |||
| <section anchor="security" title="Security Considerations" numbered="true" | 56755"> | |||
| toc="default"> | <front> | |||
| <t> | <title>Rethinking reliability for long-delay networks</title> | |||
| Tetrys inherits a subset of the security issues described in FECFRAM | <author initials="J." surname="Lacan"> | |||
| E | <organization/> | |||
| <xref target="RFC8680" pageno="false" format="default" /> | </author> | |||
| and in particular in sections "9.2.2. Content Corruption" and "9.3. | <author initials="E." surname="Lochin"> | |||
| Attacks against the FEC Parameters". As an application layer end-to-end protocol | <organization/> | |||
| , security considerations of Tetrys should also be comparable to those of HTTP/2 | </author> | |||
| with TLS. | <date month="October" year="2008"/> | |||
| The considerations from Section 10 of HTTP2 | </front> | |||
| <xref target="RFC7540" pageno="false" format="default" /> | <seriesInfo name="DOI" value="10.1109/IWSSC.2008.4656755"/> | |||
| also apply in addition to those listed here. | <refcontent>International Workshop on Satellite and Space Communicatio | |||
| </t> | ns, Toulouse, France, pp. 90-94</refcontent> | |||
| </section> | </reference> | |||
| <section anchor="iana" title="IANA Considerations" numbered="true" toc="de | <reference anchor="Tetrys-RT" target="http://dx.doi.org/10.1109/TMM.2011 | |||
| fault"> | .2126564"> | |||
| <!-- ==================================== --> | <front> | |||
| <t>This document does not ask for any IANA registration.</t> | <title>On-the-Fly Erasure Coding for Real-Time Video Applications</t | |||
| </section> | itle> | |||
| <section anchor="implementation" title="Implementation Status" numbered="t | <author initials="P." surname="Tournoux"> | |||
| rue" toc="default"> | <organization/> | |||
| <t>Editor's notes: RFC Editor, please remove this section motivated by | </author> | |||
| RFC 7942 before publishing the RFC. Thanks!</t> | <author initials="E." surname="Lochin"> | |||
| <t>An implementation of Tetrys exists: | <organization/> | |||
| <list> | </author> | |||
| <t>organization: ISAE-SUPAERO</t> | <author initials="J." surname="Lacan"> | |||
| <t>Description: This is a proprietary implementation made by ISAE | <organization/> | |||
| -SUPAERO</t> | </author> | |||
| <t>Maturity: "production"</t> | <author initials="A." surname="Bouabdallah"> | |||
| <t>Coverage: this software implements TETRYS with some modificati | <organization/> | |||
| ons</t> | </author> | |||
| <t>Licensing: proprietary</t> | <author initials="V." surname="Roca"> | |||
| <t>Implementation experience: maximum</t> | <organization/> | |||
| <t>Information update date: January 2022</t> | </author> | |||
| <t>Contact: jonathan.detchart@isae-supaero.fr</t> | <date month="August" year="2011"/> | |||
| </list> | </front> | |||
| </t> | <seriesInfo name="DOI" value="10.1109/TMM.2011.2126564"/> | |||
| </section> | <refcontent>IEEE Transactions on Multimedia, Vol. 13, Issue 4, pp. 797 | |||
| <section anchor="ack" title="Acknowledgments" numbered="true" toc="default | -812</refcontent> | |||
| "> | </reference> | |||
| <!-- ==================================== --> | ||||
| <t>First, the authors want sincerely to thank Marie-Jose Montpetit for | <reference anchor="CTCP" target="https://arxiv.org/abs/1212.2291"> | |||
| continuous help and support on Tetrys. Marie-Jo, many thanks!</t> | <front> | |||
| <t>The authors also wish to thank NWCRG group members for numerous disc | <title>Network Coded TCP (CTCP)</title> | |||
| ussions on on-the-fly coding that helped finalize this document.</t> | <author initials="M." surname="Kim"> | |||
| <t>Finally, the authors would like to thank Colin Perkins for providing | </author> | |||
| comments and feedback on the document.</t> | <author initials="J." surname="Cloud"> | |||
| </section> | </author> | |||
| </middle> | <author initials="A." surname="ParandehGheibi"> | |||
| <back> | </author> | |||
| <references title="Normative References"> | <author initials="L." surname="Urbina"> | |||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc | </author> | |||
| 2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2 | <author initials="K." surname="Fouli"> | |||
| 119.xml"> | </author> | |||
| <front> | <author initials="D." surname="Leith"> | |||
| <title>Keywords for use in RFCs to Indicate Requirement Levels</t | </author> | |||
| itle> | <author initials="M." surname="Medard"> | |||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | </author> | |||
| <organization /> | <date month="April" year="2013"/> | |||
| </author> | </front> | |||
| <date year="1997" month="March" /> | <seriesInfo name="arXiv" value="1212.2291v3"/> | |||
| <abstract> | </reference> | |||
| <t>In many standards track documents, several words are used t | ||||
| o signify the requirements in the specification. These words are often capitali | <reference anchor="A-FEC" target="https://doi.org/10.1109/INFCOM.1999.75 | |||
| zed. This document defines these words as they should be interpreted in IETF doc | 2166"> | |||
| uments. This document specifies an Internet Best Current Practices for the Inte | <front> | |||
| rnet Community, and requests discussion and suggestions for improvements.</t> | <title>Adaptive FEC-based error control for Internet telephony</titl | |||
| </abstract> | e> | |||
| </front> | <author initials="J." surname="Bolot"> | |||
| <seriesInfo name="BCP" value="14" /> | <organization/> | |||
| <seriesInfo name="RFC" value="2119" /> | </author> | |||
| <seriesInfo name="DOI" value="10.17487/RFC2119" /> | <author initials="S." surname="Fosse-Parisis"> | |||
| </reference> | <organization/> | |||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc | </author> | |||
| 8174"> | <author initials="D." surname="Towsley"> | |||
| <front> | <organization/> | |||
| <title> | </author> | |||
| Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words | <date month="March" year="1999"/> | |||
| </title> | </front> | |||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | <refcontent>IEEE INFOCOM '99, Conference on Computer Communications, N | |||
| <organization/> | ew York, NY, USA, Vol. 3, pp. 1453-1460</refcontent> | |||
| </author> | <seriesInfo name="DOI" value="10.1109/INFCOM.1999.752166"/> | |||
| <date year="2017" month="May"/> | </reference> | |||
| <abstract> | ||||
| <t> | <reference anchor="RED-FEC" target="https://doi.org/10.1109/TBC.2008.200 | |||
| RFC 2119 specifies common key words that may be used in protoc | 1713"> | |||
| ol specifications. This document aims to reduce the ambiguity by clarifying that | <front> | |||
| only UPPERCASE usage of the key words have the defined special meanings. | <title>A RED-FEC Mechanism for Video Transmission Over WLANs</title> | |||
| </t> | <author initials="C." surname="Lin"> | |||
| </abstract> | <organization/> | |||
| </front> | </author> | |||
| <seriesInfo name="BCP" value="14"/> | <author initials="C." surname="Shieh"> | |||
| <seriesInfo name="RFC" value="8174"/> | <organization/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | </author> | |||
| </reference> | <author initials="N." surname="Chilamkurti"> | |||
| <?rfc include="reference.RFC.3452.xml"?> | <organization/> | |||
| <?rfc include="reference.RFC.4303.xml"?> | </author> | |||
| <?rfc include="reference.RFC.5510.xml"?> | <author initials="C." surname="Ke"> | |||
| <?rfc include="reference.RFC.5651.xml"?> | <organization/> | |||
| <?rfc include="reference.RFC.5740.xml"?> | </author> | |||
| <?rfc include="reference.RFC.6363.xml"?> | <author initials="W." surname="Hwang"> | |||
| <!-- <?rfc include="reference.RFC.7540.xml"?>--> | <organization/> | |||
| <?rfc include="reference.RFC.8406.xml"?> | </author> | |||
| <?rfc include="reference.RFC.8680.xml"?> | <date month="September" year="2008"/> | |||
| <?rfc include="reference.RFC.9265.xml"?> | </front> | |||
| </references> | <refcontent>IEEE Transactions on Broadcasting, Vol. 54, Issue 3, pp. 5 | |||
| <references title="Informative References"> | 17-524</refcontent> | |||
| <!-- <?rfc include="reference.I-D.li-tsvwg-loops-problem-opportunities.x | <seriesInfo name="DOI" value="10.1109/TBC.2008.2001713"/> | |||
| ml"?> --> | </reference> | |||
| <?rfc include="reference.I-D.singh-rmcat-adaptive-fec.xml"?> | ||||
| <reference anchor="AHL-00" quote-title="true"> | <reference anchor="THAI" target="https://doi.org/10.1016/j.image.2014.02 | |||
| <front> | .003"> | |||
| <title>Network information flow</title> | <front> | |||
| <author initials="R." surname="Ahlswede"> | <title>Joint on-the-fly network coding/video quality adaptation for | |||
| <organization /> | real-time delivery</title> | |||
| </author> | <author initials="T." surname="Tran Thai"> | |||
| <author initials="" surname="Ning Cai"> | <organization/> | |||
| <organization /> | </author> | |||
| </author> | <author initials="J." surname="Lacan"> | |||
| <author initials="S.-Y.R." surname="Li"> | <organization/> | |||
| <organization /> | </author> | |||
| </author> | <author initials="E." surname="Lochin"> | |||
| <author initials="R.W." surname="Yeung"> | <organization/> | |||
| <organization /> | </author> | |||
| </author> | <date month="April" year="2014"/> | |||
| <date month="July" year="2000" /> | </front> | |||
| </front> | <refcontent>Signal Processing: Image Communication, Vol. 29 Issue 4, p | |||
| <seriesInfo name="IEEE Transactions on Information Theory" value="vo | p. 449-461</refcontent> | |||
| l.46, no.4, pp.1204,1216" /> | <seriesInfo name="DOI" value="10.1016/j.image.2014.02.003"/> | |||
| </reference> | </reference> | |||
| <reference anchor="Tetrys" quote-title="true"> | ||||
| <front> | ||||
| <title>Rethinking reliability for long-delay networks</title> | ||||
| <author initials="J." surname="Lacan"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="E." surname="Lochin"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="October" year="2008" /> | ||||
| </front> | ||||
| <seriesInfo name="International Workshop on Satellite and Space Comm | ||||
| unications 2008" value="(IWSSC08)" /> | ||||
| </reference> | ||||
| <reference anchor="Tetrys-RT" quote-title="true"> | ||||
| <front> | ||||
| <title>On-the-fly erasure coding for real-time video applications | ||||
| </title> | ||||
| <author initials="P.U." surname="Tournoux"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="E." surname="Lochin"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="J." surname="Lacan"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="A." surname="Bouabdallah"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="V." surname="Roca"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="August" year="2011" /> | ||||
| </front> | ||||
| <seriesInfo name="IEEE Transactions on Multimedia, Vol 13, Issue 4, | ||||
| August 2011" value="(TMM.2011)" /> | ||||
| </reference> | ||||
| <reference anchor="CTCP"> | ||||
| <front> | ||||
| <title>Network Coded TCP (CTCP)</title> | ||||
| <author initials="M" surname="Kim (et al.)"> | ||||
| </author> | ||||
| <date year="2013"/> | ||||
| </front> | ||||
| <seriesInfo name="arXiv" value="1212.2291v3"/> | ||||
| </reference> | ||||
| <reference anchor="A-FEC" quote-title="true"> | ||||
| <front> | ||||
| <title>Adaptive FEC-based error control for Internet telephony</t | ||||
| itle> | ||||
| <author initials="J." surname="Bolot"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="S." surname="Fosse-Parisis"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="D." surname="Towsley"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date year="1999" /> | ||||
| </front> | ||||
| <seriesInfo name="IEEE INFOCOM 99, pp. 1453-1460 vol. 3" value="DOI | ||||
| 10.1109/INFCOM.1999.752166" /> | ||||
| </reference> | ||||
| <reference anchor="RED-FEC" quote-title="true"> | ||||
| <front> | ||||
| <title>A RED-FEC Mechanism for Video Transmission Over WLANs</tit | ||||
| le> | ||||
| <author initials="C." surname="Lin"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="C." surname="Shieh"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="N. K." surname="Chilamkurti"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="C." surname="Ke"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="H. S." surname="Hwang"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="September" year="2008" /> | ||||
| </front> | ||||
| <seriesInfo name="IEEE Transactions on Broadcasting, vol. 54, no. 3, | ||||
| pp. 517-524" value="DOI 10.1109/TBC.2008.2001713" /> | ||||
| </reference> | ||||
| <reference anchor="THAI" quote-title="true"> | ||||
| <front> | ||||
| <title>Joint on-the-fly network coding/video quality adaptation f | ||||
| or real-time delivery</title> | ||||
| <author initials="T." surname="Tran-Thai"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="J." surname="Lacan"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="E." surname="Lochin"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date year="2014" /> | ||||
| </front> | ||||
| <seriesInfo name="Signal Processing: Image Communication, vol. 29 (n | ||||
| o. 4), pp. 449-461" value="ISSN 0923-5965" /> | ||||
| </reference> | ||||
| </references> | </references> | |||
| </back> | </references> | |||
| <section anchor="ack" numbered="false" toc="default"> | ||||
| <name>Acknowledgments</name> | ||||
| <t>First, the authors want sincerely to thank <contact fullname="Marie- | ||||
| Jose | ||||
| Montpetit"/> for continuous help and support on Tetrys. Marie-Jo, many thanks!</ | ||||
| t> | ||||
| <t>The authors also wish to thank NWCRG group members for numerous discuss | ||||
| ions on | ||||
| on-the-fly coding that helped finalize this document.</t> | ||||
| <t>Finally, the authors would like to thank <contact fullname="Colin Perki | ||||
| ns"/> for | ||||
| providing comments and feedback on the document.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 50 change blocks. | ||||
| 1287 lines changed or deleted | 1139 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||