rfc9407.original | rfc9407.txt | |||
---|---|---|---|---|
NWCRG J. Detchart | Internet Research Task Force (IRTF) J. Detchart | |||
Internet-Draft ISAE-SUPAERO | Request for Comments: 9407 ISAE-SUPAERO | |||
Intended status: Experimental E. Lochin | Category: Experimental E. Lochin | |||
Expires: 21 May 2023 ENAC | ISSN: 2070-1721 ENAC | |||
J. Lacan | J. Lacan | |||
ISAE-SUPAERO | ISAE-SUPAERO | |||
V. Roca | V. Roca | |||
INRIA | INRIA | |||
17 November 2022 | June 2023 | |||
Tetrys, an On-the-Fly Network Coding Protocol | Tetrys: An On-the-Fly Network Coding Protocol | |||
draft-irtf-nwcrg-tetrys-04 | ||||
Abstract | Abstract | |||
This document describes Tetrys, an On-The-Fly Network Coding (NC) | This document describes Tetrys, which is an on-the-fly network coding | |||
protocol that can be used to transport delay-sensitive and loss- | protocol that can be used to transport delay-sensitive and loss- | |||
sensitive data over a lossy network. Tetrys may recover from | sensitive data over a lossy network. Tetrys may recover from | |||
erasures within an RTT-independent delay, thanks to the transmission | erasures within an RTT-independent delay thanks to the transmission | |||
of Coded Packets. This document is a record of the experience gained | of coded packets. This document is a record of the experience gained | |||
by the authors while developing and testing the Tetrys protocol in | by the authors while developing and testing the Tetrys protocol in | |||
real conditions. | real conditions. | |||
This document is a product of the Coding for Efficient Network | This document is a product of the Coding for Efficient NetWork | |||
Communications Research Group (NWCRG). It conforms to the NWCRG | Communications Research Group (NWCRG). It conforms to the NWCRG | |||
taxonomy[RFC8406]. | taxonomy described in RFC 8406. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Research Task | |||
time. It is inappropriate to use Internet-Drafts as reference | Force (IRTF). The IRTF publishes the results of Internet-related | |||
material or to cite them other than as "work in progress." | research and development activities. These results might not be | |||
suitable for deployment. This RFC represents the consensus of the | ||||
Coding for Efficient NetWork Communications Research Group of the | ||||
Internet Research Task Force (IRTF). Documents approved for | ||||
publication by the IRSG are not candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 21 May 2023. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9407. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. | |||
described in Section 4.e of the Trust Legal Provisions and are | ||||
provided without warranty as described in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 4 | 1.1. Requirements Notation | |||
2. Definitions, Notations and Abbreviations . . . . . . . . . . 4 | 2. Definitions, Notations, and Abbreviations | |||
3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Architecture | |||
3.1. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Use Cases | |||
3.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Overview | |||
4. Tetrys Basic Functions . . . . . . . . . . . . . . . . . . . 7 | 4. Tetrys Basic Functions | |||
4.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Encoding | |||
4.2. The Elastic Encoding Window . . . . . . . . . . . . . . . 8 | 4.2. The Elastic Encoding Window | |||
4.3. Decoding . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.3. Decoding | |||
5. Packet Format . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5. Packet Format | |||
5.1. Common Header Format . . . . . . . . . . . . . . . . . . 8 | 5.1. Common Header Format | |||
5.1.1. Header Extensions . . . . . . . . . . . . . . . . . . 10 | 5.1.1. Header Extensions | |||
5.2. Source Packet Format . . . . . . . . . . . . . . . . . . 11 | 5.2. Source Packet Format | |||
5.3. Coded Packet Format . . . . . . . . . . . . . . . . . . . 12 | 5.3. Coded Packet Format | |||
5.3.1. The Encoding Vector . . . . . . . . . . . . . . . . . 13 | 5.3.1. The Encoding Vector | |||
5.4. Window Update Packet Format . . . . . . . . . . . . . . . 17 | 5.4. Window Update Packet Format | |||
6. Research Issues . . . . . . . . . . . . . . . . . . . . . . . 18 | 6. Research Issues | |||
6.1. Interaction with Congestion Control . . . . . . . . . . . 18 | 6.1. Interaction with Congestion Control | |||
6.2. Adaptive Coding Rate . . . . . . . . . . . . . . . . . . 19 | 6.2. Adaptive Coding Rate | |||
6.3. Using Tetrys Below The IP Layer For Tunneling . . . . . . 21 | 6.3. Using Tetrys below the IP Layer for Tunneling | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 7. Security Considerations | |||
7.1. Problem Statement . . . . . . . . . . . . . . . . . . . . 21 | 7.1. Problem Statement | |||
7.2. Attacks against the Data Flow . . . . . . . . . . . . . . 21 | 7.2. Attacks against the Data Flow | |||
7.3. Attacks against Signaling . . . . . . . . . . . . . . . . 22 | 7.3. Attacks against Signaling | |||
7.4. Attacks against the Network . . . . . . . . . . . . . . . 22 | 7.4. Attacks against the Network | |||
7.5. Baseline Security Operation . . . . . . . . . . . . . . . 23 | 7.5. Baseline Security Operation | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 8. IANA Considerations | |||
9. Implementation Status . . . . . . . . . . . . . . . . . . . . 23 | 9. References | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23 | 9.1. Normative References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 9.2. Informative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 24 | Acknowledgments | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 25 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
This document is a product of and represents the collaborative work | 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 | Research Group (NWCRG). It is not an IETF product or an IETF | |||
standard. | standard. | |||
This document describes Tetrys, a novel erasure coding protocol. | This document describes Tetrys, which is an on-the-fly network coding | |||
Network codes were introduced in the early 2000s [AHL-00] to address | protocol that can be used to transport delay-sensitive and loss- | |||
the limitations of transmission over the Internet (delay, capacity | sensitive data over a lossy network. Network codes were introduced | |||
and packet loss). While network codes have seen some deployment | in the early 2000s [AHL-00] to address the limitations of | |||
fairly recently in the Internet community, the use of application | transmission over the Internet (delay, capacity, and packet loss). | |||
layer erasure codes in the IETF has already been standardized in the | While network codes have seen some deployment fairly recently in the | |||
RMT [RFC3452] and the FECFRAME [RFC8680] working groups. The | Internet community, the use of application-layer erasure codes in the | |||
protocol presented here may be seen as a network coding extension to | IETF has already been standardized in the RMT [RFC5052] [RFC5445] and | |||
standard unicast transport protocols (or even multicast or anycast | FECFRAME [RFC8680] Working Groups. The protocol presented here may | |||
with a few modifications). The current proposal may be considered a | be seen as a network-coding extension to standard unicast transport | |||
combination of network erasure coding and feedback mechanisms | protocols (or even multicast or anycast with a few modifications). | |||
[Tetrys], [Tetrys-RT] . | The current proposal may be considered a combination of network | |||
erasure coding and feedback mechanisms [Tetrys] [Tetrys-RT]. | ||||
The main innovation of the Tetrys protocol is in the generation of | The main innovation of the Tetrys protocol is in the generation of | |||
Coded Packets from an Elastic Encoding Window. This window is filled | coded packets from an elastic encoding window. This window is filled | |||
by any Source Packets coming from an input flow and is periodically | by any source packets coming from an input flow and is periodically | |||
updated with the receiver feedback. These feedback messages provide | updated with the receiver feedback. These feedback messages provide | |||
to the sender with information about the highest sequence number | to the sender information about the highest sequence number received | |||
received or rebuilt, which can enable flushing the corresponding | or rebuilt, which can enable the flushing the corresponding source | |||
Source Packets stored in the encoding window. The size of this | packets stored in the encoding window. The size of this window may | |||
window may be fixed or dynamically updated. If the window is full, | be fixed or dynamically updated. If the window is full, incoming | |||
incoming Source Packets replace older sources packets which are | source packets replace older source packets that are dropped. As a | |||
dropped. As a matter of fact, its limit should be correctly sized. | matter of fact, its limit should be correctly sized. Finally, Tetrys | |||
Finally, Tetrys allows to deal with losses on both the forward and | allows dealing with losses on both the forward and return paths and | |||
return paths and in particular, is resilient to acknowledgment | is particularly resilient to acknowledgment losses. All these | |||
losses. All these operations are further detailed in Section 4. | operations are further detailed in Section 4. | |||
With Tetrys, a Coded Packet is a linear combination over a finite | With Tetrys, a coded packet is a linear combination over a finite | |||
field of the data Source Packets belonging to the coding window. The | field of the data source packets belonging to the coding window. The | |||
coefficients finite field's choice is a trade-off between the best | choice of coefficients, as finite fields elements, is a trade-off | |||
erasure recovery performance (finite fields of 256 elements) and the | between the best erasure recovery performance (finite fields of 256 | |||
system constraints (finite fields of 16 elements is preferred) and is | elements) and the system constraints (finite fields of 16 elements | |||
driven by the application. | are preferred) and is driven by the application. | |||
Thanks to the Elastic Encoding Window, the Coded Packets are built | Thanks to the elastic encoding window, the coded packets are built | |||
on-the-fly, by using a predefined method to choose the coefficients. | on-the-fly by using a predefined method to choose the coefficients. | |||
The redundancy ratio may be dynamically adjusted, and the | The redundancy ratio may be dynamically adjusted and the coefficients | |||
coefficients may be generated in different ways, during the | may be generated in different ways during the transmission. Compared | |||
transmission. Compared to FEC block codes, this allows reducing the | to Forward Error Correction (FEC) block codes, this reduces the | |||
bandwidth use and the decoding delay. | bandwidth use and the decoding delay. | |||
The description of the design of the Tetrys protocol in this document | The design description of the Tetrys protocol in this document is | |||
is complemented by a record of the experience gained by the authors | complemented by a record of the experience gained by the authors | |||
while developing and testing the Tetrys protocol in realistic | while developing and testing the Tetrys protocol in realistic | |||
conditions. In particular, several research issues are discussed in | conditions. In particular, several research issues are discussed in | |||
Section 6 following our own experience and observations. | Section 6 following our own experience and observations. | |||
1.1. Requirements Notation | 1.1. Requirements Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Definitions, Notations and Abbreviations | 2. Definitions, Notations, and Abbreviations | |||
The notation used in this document is based on the NWCRG taxonomy | The notation used in this document is based on the NWCRG taxonomy | |||
[RFC8406] . | [RFC8406]. | |||
Source Symbol: a symbol that is transmitted between the ingress | Source Symbol: A symbol that is transmitted between the ingress and | |||
and egress of the network. | egress of the network. | |||
Coded Symbol: a linear combination over a finite field of a set of | Coded Symbol: A linear combination over a finite field of a set of | |||
Source Symbols. | source symbols. | |||
Source Symbol ID: a sequence number to identify the Source | Source Symbol ID: A sequence number to identify the source symbols. | |||
Symbols. | ||||
Coded Symbol ID: a sequence number to identify the Coded Symbols. | Coded Symbol ID: A sequence number to identify the coded symbols. | |||
Encoding Coefficients: elements of the finite field characterizing | Encoding Coefficients: Elements of the finite field characterizing | |||
the linear combination used to generate Coded Symbols. | the linear combination used to generate coded symbols. | |||
Encoding Vector: a set of the coding coefficients and input Source | Encoding Vector: A set of the coding coefficients and input source | |||
Symbol IDs. | symbol IDs. | |||
Source Packet: a Source Packet contains a Source Symbol with its | Source Packet: A source packet contains a source symbol with its | |||
associated IDs. | associated IDs. | |||
Coded Packet: a Coded Packet contains a Coded Symbol, the Coded | Coded Packet: A coded packet contains a coded symbol, the coded | |||
Symbol's ID, and Encoding Vector. | symbol's ID, and encoding vector. | |||
Input Symbol: a symbol at the input of the Tetrys Encoder. | Input Symbol: A symbol at the input of the Tetrys encoder. | |||
Output Symbol: a symbol generated by the Tetrys Encoder. For a | Output Symbol: A symbol generated by the Tetrys encoder. For a non- | |||
non-systematic mode, all Output Symbols are Coded Symbols. For a | systematic mode, all output symbols are coded symbols. For a | |||
systematic mode, Output Symbols MAY be the Input Symbols and a | systematic mode, output symbols MAY be the input symbols and a | |||
number of Coded Symbols that are linear combinations of the Input | number of coded symbols that are linear combinations of the input | |||
Symbols + the Encoding Vectors. | symbols plus the encoding vectors. | |||
Feedback Packet: a Feedback Packet is a packet containing | Feedback Packet: A feedback packet is a packet containing | |||
information about the decoded or received Source Symbols. It MAY | information about the decoded or received source symbols. It MAY | |||
also contain additional information about the Packet Error Rate or | also contain additional information about the Packet Error Rate or | |||
the number of various packets in the receiver decoding window. | the number of various packets in the receiver decoding window. | |||
Elastic Encoding Window: an encoder-side buffer that stores all | Elastic Encoding Window: An encoder-side buffer that stores all the | |||
the non-acknowledged Source Packets of the input flow involved in | unacknowledged source packets of the input flow involved in the | |||
the coding process. | coding process. | |||
Coding Coefficient Generator Identifier: a unique identifier that | Coding Coefficient Generator Identifier (CCGI): A unique identifier | |||
defines a function or an algorithm allowing to generate the | that defines a function or an algorithm allowing the generation of | |||
Encoding Vector. | the encoding vector. | |||
Code Rate: Define the rate between the number of Input Symbols and | Code Rate: Defines the rate between the number of input symbols and | |||
the number of Output Symbols. | the number of output symbols. | |||
3. Architecture | 3. Architecture | |||
3.1. Use Cases | 3.1. Use Cases | |||
Tetrys is well suited, but not limited to, the use case where there | Tetrys is well suited, but not limited, to the use case where there | |||
is a single flow originated by a single source, with intra stream | 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 | 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 multiplex of several upper-layer streams. Transmission MAY be over | |||
a single path or multiple paths. This is the simplest use-case, that | 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 | is quite aligned with currently proposed scenarios for end-to-end | |||
streaming. | streaming. | |||
3.2. Overview | 3.2. Overview | |||
+----------+ +----------+ | +----------+ +----------+ | |||
| | | | | | | | | | |||
| 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 | | |||
| |<---------------| | | | |<---------------| | | |||
+----------+ +----------+ | +----------+ +----------+ | |||
Figure 1: Tetrys Architecture | Figure 1: Tetrys Architecture | |||
The Tetrys protocol features several key functionalities. The | The Tetrys protocol features several key functionalities. The | |||
mandatory features are: | mandatory features include: | |||
* on-the-fly encoding; | * on-the-fly encoding; | |||
* decoding; | * decoding; | |||
* signaling, to carry in particular the symbol identifiers in the | * signaling, to carry in particular the symbol IDs in the encoding | |||
encoding window and the associated coding coefficients when | window and the associated coding coefficients when meaningful; | |||
meaningful; | ||||
* feedback management; | * feedback management; | |||
* elastic window management; | * elastic window management; and | |||
* Tetrys packet header creation and processing; | * Tetrys packet header creation and processing. | |||
and the optional features are : | The optional features include: | |||
* channel estimation; | * channel estimation; | |||
* dynamic adjustment of the Code Rate and flow control; | * dynamic adjustment of the code rate and flow control; and | |||
* congestion control management (if appropriate). See Section 6.1 | * congestion control management (if appropriate). See Section 6.1 | |||
for further details; | for further details. | |||
Several building blocks provide these functionalities: | Several building blocks provide the following functionalities: | |||
* The Tetrys Building Block: this BB embeds both the Tetrys Decoder | The Tetrys Building Block: This building block embeds both the | |||
and Tetrys Encoder and thus, is used during encoding, and decoding | Tetrys decoder and Tetrys encoder; thus, it is used during | |||
processes. It must be noted that Tetrys does not mandate a | encoding and decoding processes. It must be noted that Tetrys | |||
specific building block. Instead, any building block compatible | does not mandate a specific building block. Instead, any building | |||
with the Elastic Encoding Window feature of Tetrys may be used. | block compatible with the elastic encoding window feature of | |||
Tetrys may be used. | ||||
* The Window Management Building Block: this building block is in | The Window Management Building Block: This building block is in | |||
charge of managing the encoding window at a Tetrys sender. | charge of managing the encoding window at a Tetrys sender. | |||
To ease the addition of future components and services, Tetrys adds a | To ease the addition of future components and services, Tetrys adds a | |||
header extension mechanism, compatible with that of LCT [RFC5651], | header extension mechanism that is compatible with that of Layered | |||
NORM [RFC5740], FECFRAME [RFC8680]. | Coding Transport (LCT) [RFC5651], NACK-Oriented Reliable Multicast | |||
(NORM) [RFC5740], and FEC Framework (FECFRAME) [RFC8680]. | ||||
4. Tetrys Basic Functions | 4. Tetrys Basic Functions | |||
4.1. Encoding | 4.1. Encoding | |||
At the beginning of a transmission, a Tetrys Encoder MUST choose an | At the beginning of a transmission, a Tetrys encoder MUST choose an | |||
initial Code Rate (added redundancy) as it doesn't know the packet | initial code rate that adds redundancy as it doesn't know the packet | |||
loss rate of the channel. In the steady state, depending on the Code | loss rate of the channel. In the steady state, the Tetrys encoder | |||
Rate, the Tetrys Encoder MAY generate Coded Symbols when it receives | MAY generate coded symbols when it receives a source symbol from the | |||
a Source Symbol from the application or some feedback from the | application or some feedback from the decoding blocks depending on | |||
decoding blocks. | the code rate. | |||
When a Tetrys Encoder needs to generate a Coded Symbol, it considers | When a Tetrys encoder needs to generate a coded symbol, it considers | |||
the set of Source Symbols stored in the Elastic Encoding Window and | the set of source symbols stored in the elastic encoding window and | |||
generates an Encoding Vector with the Coded Symbol. These Source | generates an encoding vector with the coded symbol. These source | |||
Symbols are the set of Source Symbols that are not yet acknowledged | symbols are the set of source symbols that are not yet acknowledged | |||
by the receiver. For each Source Symbol, a finite field coefficient | by the receiver. For each source symbol, a finite field coefficient | |||
is determined using a Coding Coefficient Generator. This generator | is determined using a Coding Coefficient Generator. This generator | |||
MAY take as input the Source Symbol IDs and the Coded Symbol ID and | MAY take the source symbol IDs and the coded symbol ID as an input | |||
MAY determine a coefficient in a deterministic way as presented in | and MAY determine a coefficient in a deterministic way as presented | |||
Section 5.3. Finally, the Coded Symbol is the sum of the Source | in Section 5.3. Finally, the coded symbol is the sum of the source | |||
Symbols multiplied by their corresponding coefficients. | symbols multiplied by their corresponding coefficients. | |||
A Tetrys Encoder SHOULD set a limit to the Elastic Encoding Window | A Tetrys encoder MUST set a limit to the elastic encoding window | |||
maximum size. This controls the algorithmic complexity at the | maximum size. This controls the algorithmic complexity at the | |||
encoder and decoder by limiting the size of linear combinations. It | encoder and decoder by limiting the size of linear combinations. It | |||
is also needed in situations where window update packets are all lost | is also needed in situations where all window update packets are lost | |||
or absent. | or absent. | |||
4.2. The Elastic Encoding Window | 4.2. The Elastic Encoding Window | |||
When an input Source Symbol is passed to a Tetrys Encoder, it is | 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 | added to the elastic encoding window. This window MUST have a limit | |||
set by the encoding building Block. If the Elastic Encoding Window | set by the encoding building block. If the elastic encoding window | |||
reached its limit, the window slides over the symbols: the first | has reached its limit, the window slides over the symbols. The first | |||
(oldest) symbol is removed, and the newest symbol is added. As an | (oldest) symbol is removed, and the newest symbol is added. As an | |||
element of the coding window, this symbol is included in the next | element of the coding window, this symbol is included in the next | |||
linear combinations created to generate the Coded Symbols. | linear combinations created to generate the coded symbols. | |||
As explained below, the Tetrys Decoder sends periodic feedback | As explained below, the Tetrys decoder sends periodic feedback | |||
indicating the received or decoded Source Symbols. When the sender | indicating the received or decoded source symbols. When the sender | |||
receives the information that a Source Symbol was received or decoded | receives the information that a source symbol was received or decoded | |||
by the receiver, it removes this symbol from the coding window. | by the receiver, it removes this symbol from the coding window. | |||
4.3. Decoding | 4.3. Decoding | |||
A standard Gaussian elimination is sufficient to recover the erased | A standard Gaussian elimination is sufficient to recover the erased | |||
Source Symbols, when the matrix rank enables it. | source symbols when the matrix rank enables it. | |||
5. Packet Format | 5. Packet Format | |||
5.1. Common Header Format | 5.1. Common Header Format | |||
All types of Tetrys packets share the same common header format (see | All types of Tetrys packets share the same common header format (see | |||
Figure 2). | Figure 2). | |||
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 | |||
skipping to change at page 8, line 48 ¶ | skipping to change at line 356 ¶ | |||
| ... | | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Transport Session Identifier (TSI, length = 32*S bits) | | | Transport Session Identifier (TSI, length = 32*S bits) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Header Extensions (if applicable) | | | Header Extensions (if applicable) | | |||
| ... | | | ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 2: Common Header Format | Figure 2: Common Header Format | |||
As already noted above in the document, this format is inspired and | As noted above, this format is inspired by, and inherits from, the | |||
inherits from the LCT header format [RFC5651] with slight | LCT header format [RFC5651] with slight modifications. | |||
modifications. | ||||
* Tetrys version number (V): 4 bits. Indicates the Tetrys version | Tetrys version number (V): 4 bits. Indicates the Tetrys version | |||
number. The Tetrys version number for this specification is 1. | number. The Tetrys version number for this specification is 1. | |||
* Congestion control flag (C): 2 bits. C=0 indicates the Congestion | Congestion control flag (C): 2 bits. C set to 0b00 indicates the | |||
Control Information (CCI) field is 0 bits in length. C=1 | Congestion Control Information (CCI) field is 0 bits in length. C | |||
indicates the CCI field is 32 bits in length. C=2 indicates the | set to 0b01 indicates the CCI field is 32 bits in length. C set | |||
CCI field is 64 bits in length. C=3 indicates the CCI field is 96 | to 0b10 indicates the CCI field is 64 bits in length. C set to | |||
bits in length. | 0b11 indicates the CCI field is 96 bits in length. | |||
* Transport Session Identifier flag (S): 1 bit. This is the number | Transport Session Identifier flag (S): 1 bit. This is the number of | |||
of full 32-bit words in the TSI field. The TSI field is 32*S bits | full 32-bit words in the TSI field. The TSI field is 32*S bits in | |||
in length, i.e., the length is either 0 bits or 32 bits. | length; i.e., the length is either 0 bits or 32 bits. | |||
* Reserved (Resv): 9 bits. These bits are reserved. In this | Reserved (Resv): 9 bits. These bits are reserved. In this version | |||
version of the specification, they MUST be set to zero by senders | of the specification, they MUST be set to zero by senders and MUST | |||
and MUST be ignored by receivers. | be ignored by receivers. | |||
* Header length (HDR_LEN): 8 bits. The total length of the Tetrys | Header length (HDR_LEN): 8 bits. The total length of the Tetrys | |||
header in units of 32-bit words. The length of the Tetrys header | header in units of 32-bit words. The length of the Tetrys header | |||
MUST be a multiple of 32 bits. This field may be used to directly | MUST be a multiple of 32 bits. This field may be used to directly | |||
access the portion of the packet beyond the Tetrys header, i.e., | access the portion of the packet beyond the Tetrys header, i.e., | |||
to the first next header if it exists, or to the packet payload if | to the first next header if it exists, to the packet payload if it | |||
it exists and there is no other header, or to the end of the | exists and there is no other header, or to the end of the packet | |||
packet if there are no others headers or packet payload. | if there are no other headers or packet payload. | |||
* PKT_TYPE: Tetrys packet type, 8 bits. Type of packet. There is 3 | Tetrys packet type (PKT_TYPE): 8 bits. There are three types of | |||
types of packets: the PKT_TYPE_SOURCE (0) defined in Section 5.2, | packets: the PKT_TYPE_SOURCE (0b00) defined in Section 5.2, the | |||
the PKT_TYPE_CODED (1) defined in Section 5.3 and the | PKT_TYPE_CODED (0b01) defined in Section 5.3 and the | |||
PKT_TYPE_WND_UPT (3), for window update packets defined in | PKT_TYPE_WND_UPT (0b11) for window update packets defined in | |||
Section 5.4. | Section 5.4. | |||
* Congestion Control Information (CCI): 0, 32, 64, or 96 bits Used | Congestion Control Information (CCI): 0, 32, 64, or 96 bits. Used | |||
to carry congestion control information. For example, the | 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. This field is | logical channel numbers, and sequence numbers. This field is | |||
opaque for this specification. This field MUST be 0 bits (absent) | opaque for this specification. This field MUST be 0 bits (absent) | |||
if C=0. This field MUST be 32 bits if C=1. This field MUST be 64 | if C is set to 0b00. This field MUST be 32 bits if C is set to | |||
bits if C=2. This field MUST be 96 bits if C=3. | 0b01. This field MUST be 64 bits if C is set to 0b10. This field | |||
MUST be 96 bits if C is set to 0b11. | ||||
* Transport Session Identifier (TSI): 0 or 32 bits The TSI uniquely | Transport Session Identifier (TSI): 0 or 32 bits. The TSI uniquely | |||
identifies a session among all sessions from a particular Tetrys | identifies a session among all sessions from a particular Tetrys | |||
encoder. The TSI is scoped by the IP address of the sender, and | encoder. The TSI is scoped by the IP address of the sender; thus, | |||
thus the IP address of the sender and the TSI together uniquely | the IP address of the sender and the TSI together uniquely | |||
identify the session. Although a TSI, conjointly with the IP | identify the session. Although a TSI always uniquely identifies a | |||
address of the sender, always uniquely identifies a session, | session conjointly with the IP address of the sender, whether the | |||
whether the TSI is included in the Tetrys header depends on what | TSI is included in the Tetrys header depends on what is used as | |||
is used as the TSI value. If the underlying transport is UDP, | the TSI value. If the underlying transport is UDP, then the | |||
then the 16-bit UDP source port number MAY serve as the TSI for | 16-bit UDP source port number MAY serve as the TSI for the | |||
the session. If there is no underlying TSI provided by the | session. If there is no underlying TSI provided by the network, | |||
network, transport or any other layer, then the TSI MUST be | transport, or any other layer, then the TSI MUST be included in | |||
included in the Tetrys header. | the Tetrys header. | |||
5.1.1. Header Extensions | 5.1.1. Header Extensions | |||
Header Extensions are used in Tetrys to accommodate optional header | Header extensions are used in Tetrys to accommodate optional header | |||
fields that are not always used or have variable size. The presence | fields that are not always used or have variable sizes. The presence | |||
of Header Extensions MAY be inferred by the Tetrys header length | of header extensions MAY be inferred by the Tetrys header length | |||
(HDR_LEN). If HDR_LEN is larger than the length of the standard | (HDR_LEN). If HDR_LEN is larger than the length of the standard | |||
header, then the remaining header space is taken by Header | header, then the remaining header space is taken by header | |||
Extensions. | extensions. | |||
If present, Header Extensions MUST be processed to ensure that they | If present, header extensions MUST be processed to ensure that they | |||
are recognized before performing any congestion control procedure or | are recognized before performing any congestion control procedure or | |||
otherwise accepting a packet. The default action for unrecognized | otherwise accepting a packet. The default action for unrecognized | |||
Header Extensions is to ignore them. This allows the future | header extensions is to ignore them. This allows for the future | |||
introduction of backward-compatible enhancements to Tetrys without | introduction of backward-compatible enhancements to Tetrys without | |||
changing the Tetrys version number. Non-backward-compatible Header | changing the Tetrys version number. Header extensions that are not | |||
Extensions CANNOT be introduced without changing the Tetrys version | backward-compatible MUST NOT be introduced without changing the | |||
number. | Tetrys version number. | |||
There are two formats for Header Extensions as depicted in Figure 3 : | There are two formats for header extensions as depicted in Figure 3: | |||
* The first format is used for variable-length extensions, with | * The first format is used for variable-length extensions with | |||
Header Extension Type (HET) values between 0 and 127. | header extension type (HET) values between 0 and 127. | |||
* The second format is used for fixed-length (one 32-bit word) | * The second format is used for fixed-length (one 32-bit word) | |||
extensions, using HET values from 128 to 255. | extensions using HET values from 128 to 255. | |||
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) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 3: Header Extension Format | Figure 3: Header Extension Format | |||
* Header Extension Type (HET): 8 bits | Header Extension Type (HET): 8 bits. The type of the header | |||
extension. This document defines several possible types. | ||||
The type of the Header Extension. This document defines several | Additional types may be defined in future versions of this | |||
possible types. Additional types may be defined in future | specification. HET values from 0 to 127 are used for variable- | |||
versions of this specification. HET values from 0 to 127 are used | length header extensions. HET values from 128 to 255 are used for | |||
for variable-length Header Extensions. HET values from 128 to 255 | fixed-length, 32-bit header extensions. | |||
are used for fixed-length 32-bit Header Extensions. | ||||
* Header Extension Length (HEL): 8 bits | ||||
The length of the whole Header Extension field, expressed in | ||||
multiples of 32-bit words. This field MUST be present for | ||||
variable-length extensions (HETs between 0 and 127) and MUST NOT | ||||
be present for fixed-length extensions (HETs between 128 and 255). | ||||
* Header Extension Content (HEC): variable length | Header Extension Length (HEL): 8 bits. The length of the whole | |||
header extension field expressed in multiples of 32-bit words. | ||||
This field MUST be present for variable-length extensions (HETs | ||||
between 0 and 127) and MUST NOT be present for fixed-length | ||||
extensions (HETs between 128 and 255). | ||||
The content of the Header Extension. The format of this subfield | Header Extension Content (HEC): Length of the variable. The content | |||
depends on the Header Extension Type. For fixed-length Header | of the header extension. The format of this subfield depends on | |||
Extensions, the HEC is 24 bits. For variable-length Header | the header extension type. For fixed-length header extensions, | |||
Extensions, the HEC field has variable size, as specified by the | the HEC is 24 bits. For variable-length header extensions, the | |||
HEL field. Note that the length of each Header Extension MUST be | HEC field has a variable size as specified by the HEL field. Note | |||
a multiple of 32 bits. Also, note that the total size of the | that the length of each header extension MUST be a multiple of 32 | |||
Tetrys header, including all Header Extensions and all optional | bits. Additionally, the total size of the Tetrys header, | |||
header fields, cannot exceed 255 32-bit words. | including all header extensions and optional header fields, cannot | |||
exceed 255 32-bit words. | ||||
5.2. Source Packet Format | 5.2. Source Packet Format | |||
A Source Packet is a Common Packet Header encapsulation, a Source | A source packet is a common packet header encapsulation, a source | |||
Symbol ID and a Source Symbol (payload). The Source Symbols MAY have | symbol ID, and a source symbol (payload). The source symbols MAY | |||
variable sizes. | have variable sizes. | |||
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 / | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 4: Source Packet Format | Figure 4: Source Packet Format | |||
Common Packet Header: a common packet header (as common header | Common Packet Header: A common packet header (as common header | |||
format) where Packet Type=0. | format) where packet type is set to 0b00. | |||
Source Symbol ID: the sequence number to identify a Source Symbol. | Source Symbol ID: The sequence number to identify a source symbol. | |||
Payload: the payload (Source Symbol) | Payload: The payload (source symbol). | |||
5.3. Coded Packet Format | 5.3. Coded Packet Format | |||
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 | coded symbol ID, the associated encoding vector, and a coded symbol | |||
(payload). As the Source Symbols MAY have variable sizes, all the | (payload). As the source symbols MAY have variable sizes, all the | |||
Source Symbol sizes need to be encoded. To generate this encoded | source symbol sizes need to be encoded. To generate this encoded | |||
payload size, as a 16-bit unsigned value, the linear combination uses | payload size as a 16-bit unsigned value, the linear combination uses | |||
the same coefficients as the coded payload. The result MUST be | the same coefficients as the coded payload. The result MUST be | |||
stored in the Coded Packet as the Encoded Payload Size (16 bits): as | stored in the coded packet as the encoded payload size (16 bits). As | |||
it is an optional field, the Encoding Vector MUST signal the use of | it is an optional field, the encoding vector MUST signal the use of | |||
variable Source Symbol sizes with the field V (see Section 5.3.1). | variable source symbol sizes with the field V (see Section 5.3.1). | |||
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 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 12, line 46 ¶ | skipping to change at line 541 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Encoded Payload Size | | | | Encoded Payload Size | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | |||
/ Payload / | / Payload / | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 5: Coded Packet Format | Figure 5: Coded Packet Format | |||
Common Packet Header: a common packet header (as common header | Common Packet Header: A common packet header (as common header | |||
format) where Packet Type=1. | format) where packet type is set to 0b01. | |||
Coded Symbol ID: the sequence number to identify a Coded Symbol. | Coded Symbol ID: The sequence number to identify a coded symbol. | |||
Encoding Vector: an Encoding Vector to define the linear combination | Encoding Vector: An encoding vector to define the linear combination | |||
used (coefficients and Source Symbols). | used (coefficients and source symbols). | |||
Encoded Payload Size: the coded payload size used if the Source | Encoded Payload Size: The coded payload size used if the source | |||
Symbols have a variable size (optional,Section 5.3.1). | symbols have a variable size (optional, Section 5.3.1). | |||
Payload: the Coded Symbol. | Payload: The coded symbol. | |||
5.3.1. The Encoding Vector | 5.3.1. The Encoding Vector | |||
An Encoding Vector contains all the information about the linear | An encoding vector contains all the information about the linear | |||
combination used to generate a Coded Symbol. The information | combination used to generate a coded symbol. The information | |||
includes the source identifiers and the coefficients used for each | includes the source identifiers and the coefficients used for each | |||
Source Symbol. It MAY be stored in different ways depending on the | source symbol. It MAY be stored in different ways depending on the | |||
situation. | situation. | |||
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 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 6: Encoding Vector Format | Figure 6: Encoding Vector Format | |||
* Encoding Vector Length (EV_LEN) (8-bits): size in units of 32-bit | Encoding Vector Length (EV_LEN): 8 bits. The size in units of | |||
words. | 32-bit words. | |||
* Coding Coefficient Generator Identifier (CCGI): 4-bit ID to | Coding Coefficient Generator Identifier (CCGI): 4-bit ID to identify | |||
identify the algorithm or the function used to generate the | the algorithm or function used to generate the coefficients. As a | |||
coefficients. As a CCGI is included in each encoded vector, it | CCGI is included in each encoded vector, it MAY dynamically change | |||
MAY dynamically change between the generation of 2 Coded Symbols. | between the generation of two coded symbols. The CCGI builds the | |||
The CCGI builds the coding coefficients used to generate the Coded | coding coefficients used to generate the coded symbols. They MUST | |||
Symbols. They MUST be known by all the Tetrys encoders or | be known by all the Tetrys encoders or decoders. The two RLC FEC | |||
decoders. The two RLC FEC schemes specified in this document | schemes specified in this document reuse the finite fields defined | |||
reuse the Finite Fields defined in [RFC5510], Section 8.1. More | in [RFC5510], Section 8.1. More specifically, the elements of the | |||
specifically, the elements of the field GF(2^(m)) are represented | field GF(2^(m)) are represented by polynomials with binary | |||
by polynomials with binary coefficients (i.e., over GF(2)) and | coefficients (i.e., over GF(2)) and with degree lower or equal to | |||
degree lower or equal to m-1. The addition between two elements | m-1. The addition between two elements is defined as the addition | |||
is defined as the addition of binary polynomials in GF(2), which | of binary polynomials in GF(2), which is equivalent to a bitwise | |||
is equivalent to a bitwise XOR operation on the binary | XOR operation on the binary representation of these elements. | |||
representation of these elements. With GF(2^(8)), multiplication | With GF(2^(8)), multiplication between two elements is the | |||
between two elements is the multiplication modulo a given | multiplication modulo a given irreducible polynomial of degree 8. | |||
irreducible polynomial of degree 8. The following irreducible | The following irreducible polynomial is used for GF(2^(8)): | |||
polynomial is used for GF(2^(8)): x^(8) + x^(4) + x^(3) + x^(2) + | ||||
1 With GF(2^(4)), multiplication between two elements is the | x^(8) + x^(4) + x^(3) + x^(2) + 1 | |||
With GF(2^(4)), multiplication between two elements is the | ||||
multiplication modulo a given irreducible polynomial of degree 4. | multiplication modulo a given irreducible polynomial of degree 4. | |||
The following irreducible polynomial is used for GF(2^(4)): x^(4) | The following irreducible polynomial is used for GF(2^(4)): | |||
+ x + 1 | ||||
- 0: Vandermonde based coefficients over the finite field | x^(4) + x + 1 | |||
GF(2^(4)), as defined below. Each coefficient is built as | ||||
* 0b00: Vandermonde-based coefficients over the finite field | ||||
GF(2^(4)) as defined below. Each coefficient is built as | ||||
alpha^( (source_symbol_id*coded-symbol_id) % 16), with alpha | alpha^( (source_symbol_id*coded-symbol_id) % 16), with alpha | |||
the root of the primitive polynomial. | the root of the primitive polynomial. | |||
- 1: Vandermonde based coefficients over the finite field | * 0b01: Vandermonde-based coefficients over the finite field | |||
GF(2^(8)), as defined below. Each coefficient is built as | GF(2^(8)) as defined below. Each coefficient is built as | |||
alpha^( (source_symbol_id*coded-symbol_id) % 256), with alpha | alpha^( (source_symbol_id*coded-symbol_id) % 256), with alpha | |||
the root of the primitive polynomial. | the root of the primitive polynomial. | |||
- Suppose we want to generate the Coded Symbol 2 as a linear | * Suppose we want to generate the coded symbol 2 as a linear | |||
combination of the Source Symbols 1,2,4 using CCGI=1. The | combination of the source symbols 1, 2, and 4 using CCGI set to | |||
coefficients will be alpha^( (1 * 1) % 256), alpha^( (1 * 2) % | 0b01. The coefficients will be alpha^( (1 * 1) % 256), alpha^( | |||
256), alpha^( (1 * 4) % 256). | (1 * 2) % 256), and alpha^( (1 * 4) % 256). | |||
* Store the Source Symbol ID Format (I) (2 bits): | ||||
- 00 means there is no Source Symbol ID information. | Store the Source Symbol ID Format (I) (2 bits): | |||
* 0b00 means there is no source symbol ID information. | ||||
- 01 means the Encoding Vector contains the edge blocks of the | * 0b01 means the encoding vector contains the edge blocks of the | |||
Source Symbol IDs without compression. | source symbol IDs without compression. | |||
- 10 means the Encoding Vector contains the compressed list of | * 0b10 means the encoding vector contains the compressed list of | |||
the Source Symbol IDs. | the source symbol IDs. | |||
- 11 means the Encoding Vector contains the compressed edge | * 0b11 means the encoding vector contains the compressed edge | |||
blocks of the Source Symbol IDs. | blocks of the source symbol IDs. | |||
* Store the Encoding Coefficients (C): 1 bit to indicate if an | Store the Encoding Coefficients (C): 1 bit to indicate if an | |||
Encoding Vector contains information about the coefficients used. | encoding vector contains information about the coefficients used. | |||
* Having Source Symbols with Variable Size Encoding (V): set V to 1 | Having Source Symbols with Variable Size Encoding (V): Set V to 0b01 | |||
if the combination which refers to the Encoding Vector is a | if the combination that refers to the encoding vector is a | |||
combination of Source Symbols with variable sizes. In this case, | combination of source symbols with variable sizes. In this case, | |||
the Coded Packets MUST have the 'Encoded Payload Size' field. | the coded packets MUST have the 'Encoded Payload Size' field. | |||
* NB_IDS: the number of source IDs stored in the Encoding Vector | NB_IDS: The number of source IDs stored in the encoding vector | |||
(depending on I). | (depending on I). | |||
* Number of coefficients (NB_COEFS): The number of the coefficients | Number of Coefficients (NB_COEFS): The number of the coefficients | |||
used to generate the associated Coded Symbol. | used to generate the associated coded symbol. | |||
* The first source identifier (FIRST_SOURCE_ID): the first Source | The First Source Identifier (FIRST_SOURCE_ID): The first source | |||
Symbol ID used in the combination. | symbol ID used in the combination. | |||
* Number of bits for each edge block (b_id): the number of bits | Number of Bits for Each Edge Block (b_id): The number of bits needed | |||
needed to store the edge. | to store the edge. | |||
* Information about the Source Symbol IDs (id_bit_vector): if I=01, | Information about the Source Symbol IDs (id_bit_vector): If I is set | |||
store the edge blocks as b_id * (NB_IDS * 2 - 1). If I=10, store | to 0b01, store the edge blocks as b_id * (NB_IDS * 2 - 1). If I | |||
in a compressed way the edge blocks. | is set to 0b10, store the edge blocks in a compressed way. | |||
* The coefficients (coef_bit_vector): The coefficients stored | The Coefficients (coef_bit_vector): The coefficients stored | |||
depending on the CCGI (4 or 8 bits for each coefficient). | depending on the CCGI (4 or 8 bits for each coefficient). | |||
* Padding: padding to have an Encoding Vector size multiple of | Padding: Padding to have an encoding vector size that is a multiple | |||
32-bit (for the id and coefficient part). | of 32 bits (for the ID and coefficient part). | |||
The Source Symbol IDs are organized as a sorted list of 32-bit | The source symbol IDs are organized as a sorted list of 32-bit | |||
unsigned integers. Depending on the feedback, the Source Symbol IDs | unsigned integers. Depending on the feedback, the source symbol IDs | |||
MAY be successive or not in the list. If they are successive, the | in the list MAY be successive or not. If they are successive, the | |||
boundaries are stored in the Encoding Vector: it just needs 2*32-bit | boundaries are stored in the encoding vector; it just needs 2*32 bits | |||
of information. If not, the full list or the edge blocks MAY be | of information. If not, the full list or the edge blocks MAY be | |||
stored, and a differential transform to reduce the number of bits | stored and a differential transform to reduce the number of bits | |||
needed to represent an identifier MAY be used. | needed to represent an identifier MAY be used. | |||
For the following subsections, let's take as an example the | For the following subsections, let's take as an example the | |||
generation of an encoding vector for a Coded Symbol which is a linear | generation of an encoding vector for a coded symbol that is a linear | |||
combination of the Source Symbols with IDs 1,2,3,5,6,8,9 and 10 (or | combination of the source symbols with IDs 1, 2, 3, 5, 6, 8, 9, and | |||
as edge blocks: [1..3],[5..6],[8..10]) | 10 (or as edge blocks: [1..3], [5..6], [8..10]). | |||
There are several ways to store the Source Symbols IDs into the | There are several ways to store the source symbol IDs into the | |||
encoding vector: | encoding vector: | |||
* If no information about the Source Symbol IDs is needed, the field | * If no information about the source symbol IDs is needed, the field | |||
I MUST be set to 0b00: no b_id and no id_bit_vector field | I MUST be set to 0b00: no b_id and no id_bit_vector field. | |||
* If the edge blocks are stored without compression, the field I | * If the edge blocks are stored without compression, the field I | |||
MUST be set to 0b01. In this case, set b_id to 32 (as a symbol id | MUST be set to 0b01. In this case, set b_id to 32 (as a Symbol ID | |||
is 32 bits), and store into id_bit_vectors the list as 32 bits | is 32 bits), and store the list of 32-bit unsigned integers (1, 3, | |||
unsigned integers: 1,3,5,6,8,10 | 4, 5, 6, 10) into id_bit_vectors. | |||
* If the Source Symbols Ids are stored as a list with compression, | * If the source symbol IDs are stored as a list with compression, | |||
the field I MUST be set to 0b10. In this case, see | the field I MUST be set to 0b10. In this case, see | |||
Section 5.3.1.1 but rather than compressing the edge blocks, we | Section 5.3.1.1, but rather than compressing the edge blocks, we | |||
compress the full list of the Source Symbol IDs. | compress the full list of the source symbol IDs. | |||
* If the edge blocks are stored with compression, the field I MUST | * If the edge blocks are stored with compression, the field I MUST | |||
be set to 0b11. In this case, see Section 5.3.1.1. | be set to 0b11. In this case, see Section 5.3.1.1. | |||
5.3.1.1. Compressed list of Source Symbol IDs | 5.3.1.1. Compressed List of Source Symbol IDs | |||
Let's continue with our Coded Symbol defined in the previous section. | Let's continue with our coded symbol defined in the previous section. | |||
The Source Symbols IDs used in the linear combination are: | The source symbol IDs used in the linear combination are: [1..3], | |||
[1..3],[5..6],[8..10]. | [5..6], [8..10]. | |||
If we want to compress and store this list into the encoding vector, | If we want to compress and store this list into the encoding vector, | |||
we MUST follow this procedure: | we MUST follow this procedure: | |||
1. Keep the first element in the packet as the first_source_id: 1. | 1. Keep the first element in the packet as the first_source_id: 1. | |||
2. Apply a differential transform to the other elements | 2. Apply a differential transform to the other elements ([3, 5, 6, | |||
([3,5,6,8,10]) which removes the element i-1 to the element i, | 8, 10]) that removes the element i-1 to the element i, starting | |||
starting with the first_source_id as i0, and get the list L = | with the first_source_id as i0, and get the list L = [2, 2, 1, 2, | |||
[2,2,1,2,2] | 2]. | |||
3. Compute b, the number of bits needed to store all the elements, | 3. Compute b, the number of bits needed to store all the elements, | |||
which is ceil(log2(max(L))), where max(L) represents the maximum | which is ceil(log2(max(L))), where max(L) represents the maximum | |||
of the elements of the list L: here, 2 bits. | of the elements of the list L; here, it is 2 bits. | |||
4. Write b in the corresponding field, and write all the b * [(2 * | 4. Write b in the corresponding field, and write all the b * [(2 * | |||
NB blocks) - 1] elements in a bit vector, here: 10 10 01 10 10. | NB blocks) - 1] elements in a bit vector here: 10, 10, 01, 10, | |||
10. | ||||
5.3.1.2. Decompressing the Source Symbol IDs | 5.3.1.2. Decompressing the Source Symbol IDs | |||
When a Tetrys Decoding Block wants to reverse the operations, this | When a Tetrys decoding block wants to reverse the operations, this | |||
algorithm is used: | algorithm is used: | |||
1. Rebuild the list of the transmitted elements by reading the bit | 1. Rebuild the list of the transmitted elements by reading the bit | |||
vector and b: [10 10 01 10 10] => [2,2,1,2,2] | vector and b: [10, 10, 01, 10, 10] => [2, 2, 1, 2, 2]. | |||
2. Apply the reverse transform by adding successively the elements, | 2. Apply the reverse transform by adding successively the elements, | |||
starting with first_source_id: [1,1+2,(1+2)+2,(1+2+2)+1,...] => | starting with first_source_id: [1, 1 + 2, (1 + 2) + 2, (1 + 2 + | |||
[1,3,5,6,8,10] | 2) + 1, ...] => [1, 3, 5, 6, 8, 10]. | |||
3. Rebuild the blocks using the list and first_source_id: | 3. Rebuild the blocks using the list and first_source_id: [1..3], | |||
[1..3],[5..6],[8..10]. | [5..6], [8..10]. | |||
5.4. Window Update Packet Format | 5.4. Window Update Packet Format | |||
A Tetrys Decoder MAY send back to another building block some Window | A Tetrys decoder MAY send window update packets back to another | |||
Update packets. They contain information about what the packets | building block. They contain information about what the packets | |||
received, decoded or dropped, and other information such as a packet | received, decoded, or dropped, and other information such as a packet | |||
loss rate or the size of the decoding buffers. They are used to | loss rate or the size of the decoding buffers. They are used to | |||
optimize the content of the encoding window. The window update | optimize the content of the encoding window. The window update | |||
packets are OPTIONAL, and hence they could be omitted or lost in | packets are OPTIONAL; hence, they could be omitted or lost in | |||
transmission without impacting the protocol behavior. | transmission without impacting the protocol behavior. | |||
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 | | |||
skipping to change at page 17, line 37 ¶ | skipping to change at line 768 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| plr | sack_size | | | | plr | sack_size | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | |||
| | | | | | |||
/ SACK Vector / | / SACK Vector / | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 7: Window Update Packet Format | Figure 7: Window Update Packet Format | |||
Common Packet Header: a common packet header (as common header | Common Packet Header: A common packet header (as common header | |||
format) where Packet Type=2. | format) where packet type is set to 0b10. | |||
nb_missing_src: the number of missing Source Symbols in the receiver | nb_missing_src: The number of missing source symbols in the receiver | |||
since the beginning of the session. | since the beginning of the session. | |||
nb_not_used_coded_symb: the number of Coded Symbols at the receiver | nb_not_used_coded_symb: The number of coded symbols at the receiver | |||
that have not already been used for decoding (e.g., the linear | that have not already been used for decoding (e.g., the linear | |||
combinations contain at least 2 unknown Source Symbols). | combinations contain at least two unknown source symbols). | |||
first_src_id: ID of the first Source Symbol to consider in the SACK | first_src_id: ID of the first source symbol to consider in the | |||
vector. | selective acknowledgment (SACK) vector. | |||
plr: packet loss ratio expressed as a percentage normalized to a | plr: Packet loss ratio expressed as a percentage normalized to an | |||
8-bit unsigned integer. For example, 2.5 % will be stored as | 8-bit unsigned integer. For example, 2.5% will be stored as | |||
floor(2.5 * 256/100) = 6. Conversely, if 6 is the stored value, the | floor(2.5 * 256/100) = 6. Conversely, if 6 is the stored value, | |||
corresponding packet loss ratio expressed as a percentage is | the corresponding packet loss ratio expressed as a percentage is | |||
6*100/256 = 2.34 %. This value is used in the case of dynamic Code | 6*100/256 = 2.34%. This value is used in the case of dynamic code | |||
Rate or for statistical purpose. The choice of calculation is left | rate or for a statistical purpose. The choice of calculation is | |||
to the Tetrys Decoder, depending on a window observation, but should | left to the Tetrys decoder, depending on a window observation, but | |||
be the PLR seen before decoding. | should be the PLR seen before decoding. | |||
sack_size: the size of the SACK vector in 32-bit words. For | sack_size: The size of the SACK vector in 32-bit words. For | |||
instance, with value 2, the SACK vector is 64 bits long. | instance, with a value of 2, the SACK vector is 64 bits long. | |||
SACK vector: bit vector indicating symbols that must be removed in | SACK vector: Bit vector indicating symbols that must be removed in | |||
the encoding window from the first Source Symbol ID. In most cases, | the encoding window from the first source symbol ID. In most | |||
these symbols were received by the receiver. The other cases concern | cases, these symbols were received by the receiver. The other | |||
some events with non-recoverable packets (for example in the case of | cases concern some events with non-recoverable packets (i.e., in | |||
a burst of losses) where it is better to drop and abandon some | the case of a burst of losses) where it is better to drop and | |||
packets, and thus to remove them from the encoding window, to allow | abandon some packets and remove them from the encoding window to | |||
the recovery of the following packets. The "First Source Symbol" is | allow the recovery of the following packets. The "First Source | |||
included in this bit vector. A bit equal to 1 at the i-th position | Symbol" is included in this bit vector. A bit equal to 1 at the | |||
means that this window update packet removes the Source Symbol of ID | i-th position means that this window update packet removes the | |||
equal to "First Source Symbol ID" + i from the encoding window. | source symbol of the ID equal to "First Source Symbol ID" + i from | |||
the encoding window. | ||||
6. Research Issues | 6. Research Issues | |||
The present document describes the baseline protocol, allowing | The present document describes the baseline protocol, allowing | |||
communications between a Tetrys encoder and a Tetrys decoder. In | communications between a Tetrys encoder and Tetrys decoder. In | |||
practice, Tetrys can be used either as a standalone protocol or | practice, Tetrys can be used either as a standalone protocol or | |||
embedded inside an existing protocol, and either above, within or | embedded inside an existing protocol, and either above, within, or | |||
below the transport layer. There are different research questions | below the transport layer. There are different research questions | |||
related to each of these scenarios that should be investigated for | related to each of these scenarios that should be investigated for | |||
future protocol improvements. We summarize them in the following | future protocol improvements. We summarize them in the following | |||
subsections. | subsections. | |||
6.1. Interaction with Congestion Control | 6.1. Interaction with Congestion Control | |||
The Tetrys and congestion control components generate two separate | The Tetrys and congestion control components generate two separate | |||
channels (see [RFC9265], section 2.1): | channels (see [RFC9265], Section 2.1): | |||
* the Tetrys channel carries source and Coded Packets (from the | * The Tetrys channel carries source and coded packets (from the | |||
sender to the receiver) and information from the receiver to the | sender to the receiver) and information from the receiver to the | |||
sender (e.g., signaling which symbols have been recovered, loss | sender (e.g., signaling which symbols have been recovered, loss | |||
rate prior and/or after decoding, etc.); | rate before and/or after decoding, etc.). | |||
* the congestion control channel carries packets from a sender to a | * The congestion control channel carries packets from a sender to a | |||
receiver, and packets signaling information about the network | receiver and packets signaling information about the network | |||
(e.g., number of packets received versus lost, Explicit Congestion | (e.g., number of packets received versus lost, Explicit Congestion | |||
Notification (ECN) marks, etc.) from the receiver to the sender. | Notification (ECN) marks, etc.) from the receiver to the sender. | |||
In practice, depending on how Tetrys is deployed (i.e., above, within | The following topics, which are identified and discussed by | |||
or below the transport layer), [RFC9265] identifies and discusses | [RFC9265], are adapted to the particular deployment cases of Tetrys | |||
several topics. They are briefly listed below and adapted to the | (i.e., above, within, or below the transport layer): | |||
particular case of Tetrys: | ||||
* congestion related losses may be hidden if Tetrys is deployed | * Congestion-related losses may be hidden if Tetrys is deployed | |||
below the transport layer without any precaution (i.e., Tetrys | below the transport layer without any precaution (i.e., Tetrys | |||
recovering packets lost because of a congested router), which can | recovering packets lost because of a congested router), which can | |||
severely impact the the congestion control efficiency. An | severely impact the congestion control efficiency. An approach is | |||
approach is suggested to avoid hiding such signals in [RFC9265], | suggested to avoid hiding such signals in [RFC9265], Section 5. | |||
section 5; | ||||
* having Tetrys and non-Tetrys flows sharing the same network links | * Tetrys and non-Tetrys flows sharing the same network links can | |||
can raise fairness issues between these flows. The situation | raise fairness issues between these flows. In particular, the | |||
depends in particular on whether some of these flows are | situation depends on whether some of these flows and not others | |||
congestion controlled and not others, and which type of congestion | are congestion controlled and which type of congestion control is | |||
control is used. The details are out of scope of this document, | used. The details are out of scope of this document, but may have | |||
but may have major impacts in practice; | major impacts in practice. | |||
* coding rate adaptation within Tetrys can have major impacts on | * Coding rate adaptation within Tetrys can have major impacts on | |||
congestion control if done inappropriately. This topic is | congestion control if done inappropriately. This topic is | |||
discussed more in detail in Section 6.2; | discussed more in detail in Section 6.2. | |||
* Tetrys can leverage on multipath transmissions, the Tetrys packets | * Tetrys can leverage multipath transmissions, with the Tetrys | |||
being sent to the same receiver through multiple paths. Since | packets being sent to the same receiver through multiple paths. | |||
paths can largely differ, a per-path flow control and congestion | Since paths can largely differ, a per-path flow control and | |||
control adaptation could be needed; | congestion control adaptation could be needed. | |||
* protecting several application flows within a single Tetrys flow | * Protecting several application flows within a single Tetrys flow | |||
raises additional questions. This topic is discussed more in | raises additional questions. This topic is discussed more in | |||
detail in Section 6.3. | detail in Section 6.3. | |||
6.2. Adaptive Coding Rate | 6.2. Adaptive Coding Rate | |||
When the network conditions (e.g., delay and loss rate) strongly vary | When the network conditions (e.g., delay and loss rate) strongly vary | |||
over time, an adaptive coding rate can be used to increase or reduce | over time, an adaptive coding rate can be used to increase or reduce | |||
the amount of Coded Packets among a transmission dynamically (i.e., | the amount of coded packets among a transmission dynamically (i.e., | |||
the added redundancy), with the help of a dedicated algorithm, | the added redundancy) with the help of a dedicated algorithm similar | |||
similarly to [A-FEC]. Once again, the strategy differs, depending on | to [A-FEC]. Once again, the strategy differs depending on which | |||
which layer Tetrys is deployed (i.e., above, within or below the | layer Tetrys is deployed (i.e., above, within, or below the transport | |||
transport layer). Basically, we can slice these strategies in two | layer). Basically, we can split these strategies into two distinct | |||
distinct classes: when Tetrys is deployed inside the transport layer, | classes: Tetrys deployment inside the transport layer versus outside | |||
versus outside (i.e., above or below). A deployment within the | the transport layer (i.e., above or below). A deployment within the | |||
transport layer obviously means that interactions between transport | transport layer means that interactions between transport protocol | |||
protocol micro-mechanisms, such as the error recovery mechanism, the | mechanisms such as error recovery, congestion control, and/or flow | |||
congestion control, the flow control or both, are envisioned. | control are envisioned. Otherwise, deploying Tetrys within a | |||
Otherwise, deploying Tetrys within a non congestion controlled | transport protocol that is not congestion controlled, like UDP, would | |||
transport protocol, like UDP, would not bring out any other advantage | not bring out any other advantage than deploying it below or above | |||
than deploying it below or above the transport layer. | the transport layer. | |||
The impact deploying a FEC mechanism within the transport layer is | The impact deploying a FEC mechanism within the transport layer is | |||
further discussed in [RFC9265], section 4, where considerations | further discussed in Section 4 of [RFC9265], where considerations | |||
concerning the interactions between congestion control and coding | concerning the interactions between congestion control and coding | |||
rates, or the impact of fairness, are investigated. This adaptation | rates, or the impact of fairness, are investigated. This adaptation | |||
may be done jointly with the congestion control mechanism of a | may be done jointly with the congestion control mechanism of a | |||
transport layer protocol, as proposed by [CTCP]. This allows the use | transport layer protocol as proposed by [CTCP]. This allows the use | |||
of monitored congestion control metrics (e.g., RTT, congestion | of monitored congestion control metrics (e.g., RTT, congestion | |||
events, or current congestion window size) to adapt the coding rate | events, or current congestion window size) to adapt the coding rate | |||
conjointly with the computed transport sending rate. The rationale | conjointly with the computed transport sending rate. The rationale | |||
is to compute an amount of repair traffic that does not lead to | is to compute an amount of repair traffic that does not lead to | |||
congestion. This joint optimization is mandatory to prevent flows to | congestion. This joint optimization is mandatory to prevent flows | |||
consume the whole available capacity as also discussed in | from consuming the whole available capacity as discussed in | |||
[I-D.singh-rmcat-adaptive-fec] where the authors point out that an | [RMCAT-ADAPTIVE-FEC], where the authors point out that an increase in | |||
increase in the repair ratio should be done conjointly with a | the repair ratio should be done conjointly with a decrease in the | |||
decrease in the source sending rate. | source sending rate. | |||
Finally, adapting a coding rate can also be done outside the | Finally, adapting a coding rate can also be done outside the | |||
transport layer and without considering transport layer metrics. In | transport layer without considering transport-layer metrics. In | |||
particular, this adaptation may be done jointly with the network as | particular, this adaptation may be done jointly with the network as | |||
proposed in [RED-FEC]. In this paper, the authors propose a Random | proposed in [RED-FEC]. In this paper, the authors propose a Random | |||
Early Detection FEC mechanism in the context of video transmission | Early Detection FEC mechanism in the context of video transmission | |||
over wireless networks. Briefly, the idea is to add more redundancy | over wireless networks. Briefly, the idea is to add more redundancy | |||
packets if the queue at the access point is less occupied and vice | packets if the queue at the access point is less occupied and vice | |||
versa. A first theoretical attempt for video delivery has been | versa. A first theoretical attempt for video delivery with Tetrys | |||
proposed [THAI] with Tetrys. This approach is interesting as it | has been proposed [THAI]. This approach is interesting as it | |||
illustrates a joint collaboration between the application | illustrates a joint collaboration between the application | |||
requirements and the network conditions and combines both signals | requirements and the network conditions and combines both signals | |||
coming from the application needs and the network state (i.e., | coming from the application needs and the network state (i.e., | |||
signals below or above the transport layer). | signals below or above the transport layer). | |||
To conclude, there are multiple ways to enable an adaptive coding | To conclude, there are multiple ways to enable an adaptive coding | |||
rate. However, all of them depend on: | rate. However, all of them depend on: | |||
* the signal metrics that can be monitored and used to adapt the | * the signal metrics that can be monitored and used to adapt the | |||
coding rate; | coding rate; | |||
* the transport layer used, whether congestion controlled or not; | * the transport layer used, whether it is congestion controlled or | |||
not; and | ||||
* the objective sought (e.g., to minimize congestion, or to fit | * the objective sought (e.g., to minimize congestion or to fit | |||
application requirements). | application requirements). | |||
6.3. Using Tetrys Below The IP Layer For Tunneling | 6.3. Using Tetrys below the IP Layer for Tunneling | |||
The use of Tetrys to protect an aggregate of flows, typically when | The use of Tetrys to protect an aggregate of flows raises research | |||
Tetrys is used for tunneling, to recover from IP datagram losses, | questions when Tetrys is used to recover from IP datagram losses | |||
raises research questions. When redundancy is applied without flow | while tunneling. Applying redundancy without flow differentiation | |||
differentiation, this may come in contradiction with the service | may contradict the service requirements of individual flows: some | |||
requirements of individual flows, some of them may be more penalized | flows may be penalized more by high latency and jitter than by | |||
by high latency and jitter than by partial reliability, while other | partial reliability, while other flows may be penalized more by | |||
flows may have opposite requirements. In practice head-of-line | partial reliability. In practice, head-of-line blocking impacts all | |||
blocking will impact all flows in a similar manner despite their | flows in a similar manner despite their different needs, which | |||
different needs, which asks for more elaborate strategies inside | indicates that more elaborate strategies inside Tetrys are needed. | |||
Tetrys. | ||||
7. Security Considerations | 7. Security Considerations | |||
First of all, it must be clear that the use of FEC protection to a | First of all, it must be clear that the use of FEC protection on a | |||
data stream does not provide, per se, any kind of security, but, on | data stream does not provide any kind of security per se. On the | |||
the contrary, raises security risks. The situation with Tetrys is | contrary, the use of FEC protection on a data stream raises security | |||
mostly similar to that of other content delivery protocols making use | risks. The situation with Tetrys is mostly similar to that of other | |||
of FEC protection, and this is well described in FECFRAME [RFC6363]. | content delivery protocols making use of FEC protection; this is well | |||
This section leverages on this reference, adding new considerations | described in FECFRAME [RFC6363]. This section builds on this | |||
to comply with Tetrys specificities when meaningful. | reference, adding new considerations to comply with Tetrys | |||
specificities when meaningful. | ||||
7.1. Problem Statement | 7.1. Problem Statement | |||
An attacker can either target the content, the protocol, or the | An attacker can either target the content, protocol, or network. The | |||
network. The consequences will largely differ, reflecting various | consequences will largely differ reflecting various types of goals, | |||
types of goals, like gaining access to confidential content, | like gaining access to confidential content, corrupting the content, | |||
corrupting the content, compromizing the Tetrys Encoder and/or Tetrys | compromising the Tetrys encoder and/or Tetrys decoder, or | |||
Decoder, or compromizing the network behavior. In particular, | compromising the network behavior. In particular, several of these | |||
several of these attacks aim at creating a Denial-of-Service (DoS), | attacks aim at creating a Denial-of-Service (DoS) with consequences | |||
with consequences that may be limited to a single node (e.g., the | that may be limited to a single node (e.g., the Tetrys decoder), or | |||
Tetrys Decoder), or that may impact all the nodes attached to the | that may impact all the nodes attached to the targeted network (e.g., | |||
targeted network (e.g., by making flows non-responsive to congestion | by making flows unresponsive to congestion signals). | |||
signals). | ||||
In the following sections, we discuss these attacks, according to the | In the following sections, we discuss these attacks, according to the | |||
component targeted by the attacker. | component targeted by the attacker. | |||
7.2. Attacks against the Data Flow | 7.2. Attacks against the Data Flow | |||
An attacker may want to access a confidential content, by | An attacker may want to access confidential content by eavesdropping | |||
eavesdropping the traffic between the Tetrys Encoder/Decoder. | the traffic between the Tetrys encoder/decoder. Traffic encryption | |||
Traffic encryption is the usual approach to mitigate this risk, and | is the usual approach to mitigate this risk, and this encryption can | |||
this encryption can be done either on the source flow, above Tetrys, | be applied to the source flow upstream of the Tetrys encoder or to | |||
or below Tetrys, on the output packets, both Source and Coded | the output packets downstream of the Tetrys encoder. The choice on | |||
Packets. The choice on where to apply encryption depends on various | where to apply encryption depends on various criteria, in particular | |||
criteria, in particular the attacker model (e.g., when encryption | the attacker model (e.g., when encryption happens below Tetrys, the | |||
happens below Tetrys, the security risk is assumed to be on the | security risk is assumed to be on the interconnection network). | |||
interconnection network). | ||||
An attacker may also want to corrupt the content (e.g., by injecting | An attacker may also want to corrupt the content (e.g., by injecting | |||
forged or modified Source and Coded Packets to prevent the Tetrys | forged or modified source and coded packets to prevent the Tetrys | |||
Decoder to recover the original source flow). Content integrity and | decoder from recovering the original source flow). Content integrity | |||
source authentication services at the packet level are then needed to | and source authentication services at the packet level are then | |||
mitigate this risk. Here, these services need to be provided below | needed to mitigate this risk. Here, these services need to be | |||
Tetrys in order to enable the receiver to drop undesired packets and | provided below Tetrys in order to enable the receiver to drop | |||
only transfer legitimate packets to the Tetrys Decoder. It should be | undesired packets and only transfer legitimate packets to the Tetrys | |||
noted that forging or modifying Feedback Packets will not corrupt the | decoder. It should be noted that forging or modifying feedback | |||
content, although it will certainly compromize Tetrys operation (see | packets will not corrupt the content, although it will certainly | |||
next section). | compromise Tetrys operation (see Section 7.3). | |||
7.3. Attacks against Signaling | 7.3. Attacks against Signaling | |||
Attacks on signaling information (e.g., by forging or modifying | Attacks on signaling information (e.g., by forging or modifying | |||
Feedback Packets to pretend the good reception or recovery of source | feedback packets to falsify the good reception or recovery of source | |||
content) can easily prevent the Tetrys Decoder to recover the source | content) can easily prevent the Tetrys decoder from recovering the | |||
flow, thereby creating a DoS. In order to prevent this type of | source flow, thereby creating a DoS. In order to prevent this type | |||
attack, content integrity and source authentication services at the | of attack, content integrity and source authentication services at | |||
packet level are needed for the feedback flow, from the Tetrys | the packet level are needed for the feedback flow from the Tetrys | |||
Decoder to the Tetrys Encoder, as well. These services need to be | decoder to the Tetrys encoder as well. These services need to be | |||
provided below Tetrys, in order to drop undesired packets and only | provided below Tetrys in order to drop undesired packets and only | |||
transfer legitimate Feedback Packets to the Tetrys Encoder. | transfer legitimate feedback packets to the Tetrys encoder. | |||
On the opposite, an attacker in position to selectively drop Feedback | Conversely, an attacker in position to selectively drop feedback | |||
Packets (instead of modifying them) will not severily impact Tetrys | packets (instead of modifying them) will not severely impact the | |||
functionning, since Tetrys is naturally robust in front of such | function of Tetrys since it is naturally robust when challenged with | |||
losses. However it will have side impacts, like the use of bigger | such losses. However, it will have side impacts, such as the use of | |||
linear systems (since the Tetrys Encoder cannot remove well received | bigger linear systems (since the Tetrys encoder cannot remove well- | |||
or decoded source packets from its linear system), which mechanically | received or decoded source packets from its linear system), which | |||
increases computational costs on both sides, encoder and decoder. | mechanically increases computational costs on both sides (encoder and | |||
decoder). | ||||
7.4. Attacks against the Network | 7.4. Attacks against the Network | |||
Tetrys can react to congestion signals (Section 6.1) in order to | Tetrys can react to congestion signals (Section 6.1) in order to | |||
provide a certain level of fairness with other flows on a shared | provide a certain level of fairness with other flows on a shared | |||
network. This ability could be exploited by an attacker to create or | network. This ability could be exploited by an attacker to create or | |||
reinforce congestion events (e.g., by forging or modifying Feedback | reinforce congestion events (e.g., by forging or modifying feedback | |||
Packets), which can potentially impact a significant number of nodes | packets) that can potentially impact a significant number of nodes | |||
attached to the network. Here also, in order to mitigate the risk, | attached to the network. In order to mitigate the risk, content | |||
content integrity and source authentication services at the packet | integrity and source authentication services at the packet level are | |||
level are needed to enable the receiver to drop undesired packets and | needed to enable the receiver to drop undesired packets and only | |||
only transfer legitimate packets to the Tetrys Encoder and Decoder. | transfer legitimate packets to the Tetrys encoder and decoder. | |||
7.5. Baseline Security Operation | 7.5. Baseline Security Operation | |||
Tetrys can benefit from an IPsec/Encapsulating Security Payload | Tetrys can benefit from an IPsec / Encapsulating Security Payload | |||
(IPsec/ESP) [RFC4303], that provides in particular confidentiality, | (IPsec/ESP) [RFC4303] that provides confidentiality, origin | |||
origin authentication, integrity, and anti-replay services. IPsec/ | authentication, integrity, and anti-replay services in particular. | |||
ESP can be useful to protect the Tetrys data flows (both directions) | IPsec/ESP can be used to protect the Tetrys data flows (both | |||
against attackers located within the interconnection network, in | directions) against attackers located within the interconnection | |||
position to eavesdrop traffic, or inject forged traffic, or replay | network or attackers in position to eavesdrop traffic, inject forged | |||
legitimate traffic. | traffic, or replay legitimate traffic. | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document does not ask for any IANA registration. | This document has no IANA actions. | |||
9. Implementation Status | ||||
Editor's notes: RFC Editor, please remove this section motivated by | ||||
RFC 7942 before publishing the RFC. Thanks! | ||||
An implementation of Tetrys exists: | ||||
organization: ISAE-SUPAERO | ||||
Description: This is a proprietary implementation made by ISAE- | ||||
SUPAERO | ||||
Maturity: "production" | ||||
Coverage: this software implements TETRYS with some modifications | ||||
Licensing: proprietary | ||||
Implementation experience: maximum | ||||
Information update date: January 2022 | ||||
Contact: jonathan.detchart@isae-supaero.fr | ||||
10. Acknowledgments | ||||
First, the authors want sincerely to thank Marie-Jose Montpetit for | ||||
continuous help and support on Tetrys. Marie-Jo, many thanks! | ||||
The authors also wish to thank NWCRG group members for numerous | ||||
discussions on on-the-fly coding that helped finalize this document. | ||||
Finally, the authors would like to thank Colin Perkins for providing | ||||
comments and feedback on the document. | ||||
11. References | 9. References | |||
11.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Keywords for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3452] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, | ||||
M., Crowcroft, J., and RFC Publisher, "Forward Error | ||||
Correction (FEC) Building Block", RFC 3452, | ||||
DOI 10.17487/RFC3452, December 2002, | ||||
<https://www.rfc-editor.org/info/rfc3452>. | ||||
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | |||
RFC 4303, DOI 10.17487/RFC4303, December 2005, | RFC 4303, DOI 10.17487/RFC4303, December 2005, | |||
<https://www.rfc-editor.org/info/rfc4303>. | <https://www.rfc-editor.org/info/rfc4303>. | |||
[RFC5510] Lacan, J., Roca, V., Peltotalo, J., Peltotalo, S., and RFC | [RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward Error | |||
Publisher, "Reed-Solomon Forward Error Correction (FEC) | Correction (FEC) Building Block", RFC 5052, | |||
Schemes", RFC 5510, DOI 10.17487/RFC5510, April 2009, | DOI 10.17487/RFC5052, August 2007, | |||
<https://www.rfc-editor.org/info/rfc5052>. | ||||
[RFC5445] Watson, M., "Basic Forward Error Correction (FEC) | ||||
Schemes", RFC 5445, DOI 10.17487/RFC5445, March 2009, | ||||
<https://www.rfc-editor.org/info/rfc5445>. | ||||
[RFC5510] Lacan, J., Roca, V., Peltotalo, J., and S. Peltotalo, | ||||
"Reed-Solomon Forward Error Correction (FEC) Schemes", | ||||
RFC 5510, DOI 10.17487/RFC5510, April 2009, | ||||
<https://www.rfc-editor.org/info/rfc5510>. | <https://www.rfc-editor.org/info/rfc5510>. | |||
[RFC5651] Luby, M., Watson, M., Vicisano, L., and RFC Publisher, | [RFC5651] Luby, M., Watson, M., and L. Vicisano, "Layered Coding | |||
"Layered Coding Transport (LCT) Building Block", RFC 5651, | Transport (LCT) Building Block", RFC 5651, | |||
DOI 10.17487/RFC5651, October 2009, | DOI 10.17487/RFC5651, October 2009, | |||
<https://www.rfc-editor.org/info/rfc5651>. | <https://www.rfc-editor.org/info/rfc5651>. | |||
[RFC5740] Adamson, B., Bormann, C., Handley, M., Macker, J., and RFC | [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, | |||
Publisher, "NACK-Oriented Reliable Multicast (NORM) | "NACK-Oriented Reliable Multicast (NORM) Transport | |||
Transport Protocol", RFC 5740, DOI 10.17487/RFC5740, | Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, | |||
November 2009, <https://www.rfc-editor.org/info/rfc5740>. | <https://www.rfc-editor.org/info/rfc5740>. | |||
[RFC6363] Watson, M., Begen, A., Roca, V., and RFC Publisher, | [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | |||
"Forward Error Correction (FEC) Framework", RFC 6363, | Correction (FEC) Framework", RFC 6363, | |||
DOI 10.17487/RFC6363, October 2011, | DOI 10.17487/RFC6363, October 2011, | |||
<https://www.rfc-editor.org/info/rfc6363>. | <https://www.rfc-editor.org/info/rfc6363>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8406] Adamson, B., Adjih, C., Bilbao, J., Firoiu, V., Fitzek, | [RFC8406] Adamson, B., Adjih, C., Bilbao, J., Firoiu, V., Fitzek, | |||
F., Ghanem, S., Lochin, E., Masucci, A., Montpetit, M., | F., Ghanem, S., Lochin, E., Masucci, A., Montpetit, M., | |||
Pedersen, M., Peralta, G., Roca, V., Ed., Saxena, P., | Pedersen, M., Peralta, G., Roca, V., Ed., Saxena, P., and | |||
Sivakumar, S., and RFC Publisher, "Taxonomy of Coding | S. Sivakumar, "Taxonomy of Coding Techniques for Efficient | |||
Techniques for Efficient Network Communications", | Network Communications", RFC 8406, DOI 10.17487/RFC8406, | |||
RFC 8406, DOI 10.17487/RFC8406, June 2018, | June 2018, <https://www.rfc-editor.org/info/rfc8406>. | |||
<https://www.rfc-editor.org/info/rfc8406>. | ||||
[RFC8680] Roca, V., Begen, A., and RFC Publisher, "Forward Error | [RFC8680] Roca, V. and A. Begen, "Forward Error Correction (FEC) | |||
Correction (FEC) Framework Extension to Sliding Window | Framework Extension to Sliding Window Codes", RFC 8680, | |||
Codes", RFC 8680, DOI 10.17487/RFC8680, January 2020, | DOI 10.17487/RFC8680, January 2020, | |||
<https://www.rfc-editor.org/info/rfc8680>. | <https://www.rfc-editor.org/info/rfc8680>. | |||
[RFC9265] Kuhn, N., Lochin, E., Michel, F., Welzl, M., and RFC | [RFC9265] Kuhn, N., Lochin, E., Michel, F., and M. Welzl, "Forward | |||
Publisher, "Forward Erasure Correction (FEC) Coding and | Erasure Correction (FEC) Coding and Congestion Control in | |||
Congestion Control in Transport", RFC 9265, | Transport", RFC 9265, DOI 10.17487/RFC9265, July 2022, | |||
DOI 10.17487/RFC9265, July 2022, | ||||
<https://www.rfc-editor.org/info/rfc9265>. | <https://www.rfc-editor.org/info/rfc9265>. | |||
11.2. Informative References | 9.2. Informative References | |||
[A-FEC] Bolot, J., Fosse-Parisis, S., and D. Towsley, "Adaptive | [A-FEC] Bolot, J., Fosse-Parisis, S., and D. Towsley, "Adaptive | |||
FEC-based error control for Internet telephony", IEEE | FEC-based error control for Internet telephony", IEEE | |||
INFOCOM 99, pp. 1453-1460 vol. 3 DOI | INFOCOM '99, Conference on Computer Communications, New | |||
10.1109/INFCOM.1999.752166, 1999. | York, NY, USA, Vol. 3, pp. 1453-1460, | |||
DOI 10.1109/INFCOM.1999.752166, March 1999, | ||||
<https://doi.org/10.1109/INFCOM.1999.752166>. | ||||
[AHL-00] Ahlswede, R., Ning Cai, Li, S.-Y.R., and R.W. Yeung, | [AHL-00] Ahlswede, R., Cai, N., Li, S., and R. Yeung, "Network | |||
"Network information flow", IEEE Transactions on | information flow", IEEE Transactions on Information | |||
Information Theory vol.46, no.4, pp.1204,1216, July 2000. | Theory, Vol. 46, Issue 4, pp. 1204-1216, | |||
DOI 10.1109/18.850663, July 2000, | ||||
<https://doi.org/10.1109/18.850663>. | ||||
[CTCP] Kim (et al.), M., "Network Coded TCP (CTCP)", | [CTCP] Kim, M., Cloud, J., ParandehGheibi, A., Urbina, L., Fouli, | |||
arXiv 1212.2291v3, 2013. | K., Leith, D., and M. Medard, "Network Coded TCP (CTCP)", | |||
arXiv 1212.2291v3, April 2013, | ||||
<https://arxiv.org/abs/1212.2291>. | ||||
[I-D.singh-rmcat-adaptive-fec] | [RED-FEC] Lin, C., Shieh, C., Chilamkurti, N., Ke, C., and W. Hwang, | |||
"A RED-FEC Mechanism for Video Transmission Over WLANs", | ||||
IEEE Transactions on Broadcasting, Vol. 54, Issue 3, pp. | ||||
517-524, DOI 10.1109/TBC.2008.2001713, September 2008, | ||||
<https://doi.org/10.1109/TBC.2008.2001713>. | ||||
[RMCAT-ADAPTIVE-FEC] | ||||
Singh, V., Nagy, M., Ott, J., and L. Eggert, "Congestion | Singh, V., Nagy, M., Ott, J., and L. Eggert, "Congestion | |||
Control Using FEC for Conversational Media", Work in | Control Using FEC for Conversational Media", Work in | |||
Progress, Internet-Draft, draft-singh-rmcat-adaptive-fec- | Progress, Internet-Draft, draft-singh-rmcat-adaptive-fec- | |||
03, 20 March 2016, <https://www.ietf.org/archive/id/draft- | 03, 20 March 2016, <https://datatracker.ietf.org/doc/html/ | |||
singh-rmcat-adaptive-fec-03.txt>. | draft-singh-rmcat-adaptive-fec-03>. | |||
[RED-FEC] Lin, C., Shieh, C., Chilamkurti, N. K., Ke, C., and H. S. | ||||
Hwang, "A RED-FEC Mechanism for Video Transmission Over | ||||
WLANs", IEEE Transactions on Broadcasting, vol. 54, no. 3, | ||||
pp. 517-524 DOI 10.1109/TBC.2008.2001713, September 2008. | ||||
[Tetrys] Lacan, J. and E. Lochin, "Rethinking reliability for long- | [Tetrys] Lacan, J. and E. Lochin, "Rethinking reliability for long- | |||
delay networks", International Workshop on Satellite and | delay networks", International Workshop on Satellite and | |||
Space Communications 2008 (IWSSC08), October 2008. | Space Communications, Toulouse, France, pp. 90-94, | |||
DOI 10.1109/IWSSC.2008.4656755, October 2008, | ||||
<https://doi.org/10.1109/IWSSC.2008.4656755>. | ||||
[Tetrys-RT] | [Tetrys-RT] | |||
Tournoux, P.U., Lochin, E., Lacan, J., Bouabdallah, A., | Tournoux, P., Lochin, E., Lacan, J., Bouabdallah, A., and | |||
and V. Roca, "On-the-fly erasure coding for real-time | V. Roca, "On-the-Fly Erasure Coding for Real-Time Video | |||
video applications", IEEE Transactions on Multimedia, Vol | Applications", IEEE Transactions on Multimedia, Vol. 13, | |||
13, Issue 4, August 2011 (TMM.2011), August 2011. | Issue 4, pp. 797-812, DOI 10.1109/TMM.2011.2126564, August | |||
2011, <http://dx.doi.org/10.1109/TMM.2011.2126564>. | ||||
[THAI] Tran-Thai, T., Lacan, J., and E. Lochin, "Joint on-the-fly | [THAI] Tran Thai, T., Lacan, J., and E. Lochin, "Joint on-the-fly | |||
network coding/video quality adaptation for real-time | network coding/video quality adaptation for real-time | |||
delivery", Signal Processing: Image Communication, vol. 29 | delivery", Signal Processing: Image Communication, Vol. 29 | |||
(no. 4), pp. 449-461 ISSN 0923-5965, 2014. | Issue 4, pp. 449-461, DOI 10.1016/j.image.2014.02.003, | |||
April 2014, <https://doi.org/10.1016/j.image.2014.02.003>. | ||||
Acknowledgments | ||||
First, the authors want sincerely to thank Marie-Jose Montpetit for | ||||
continuous help and support on Tetrys. Marie-Jo, many thanks! | ||||
The authors also wish to thank NWCRG group members for numerous | ||||
discussions on on-the-fly coding that helped finalize this document. | ||||
Finally, the authors would like to thank Colin Perkins for providing | ||||
comments and feedback on the document. | ||||
Authors' Addresses | Authors' Addresses | |||
Jonathan Detchart | Jonathan Detchart | |||
ISAE-SUPAERO | ISAE-SUPAERO | |||
10, avenue Edouard Belin | ||||
BP 54032 | BP 54032 | |||
10, avenue Edouard Belin | ||||
31055 Toulouse CEDEX 4 | 31055 Toulouse CEDEX 4 | |||
France | France | |||
Email: jonathan.detchart@isae-supaero.fr | Email: jonathan.detchart@isae-supaero.fr | |||
Emmanuel Lochin | Emmanuel Lochin | |||
ENAC | ENAC | |||
7, avenue Edouard Belin | 7, avenue Edouard Belin | |||
31400 Toulouse | 31400 Toulouse | |||
France | France | |||
Email: emmanuel.lochin@enac.fr | Email: emmanuel.lochin@enac.fr | |||
Jerome Lacan | Jerome Lacan | |||
ISAE-SUPAERO | ISAE-SUPAERO | |||
10, avenue Edouard Belin | ||||
BP 54032 | BP 54032 | |||
10, avenue Edouard Belin | ||||
31055 Toulouse CEDEX 4 | 31055 Toulouse CEDEX 4 | |||
France | France | |||
Email: jerome.lacan@isae-supaero.fr | Email: jerome.lacan@isae-supaero.fr | |||
Vincent Roca | Vincent Roca | |||
INRIA | INRIA | |||
655, avenue de l'Europe | ||||
Inovallee; Montbonnot | Inovallee; Montbonnot | |||
38334 ST ISMIER cedex | 655, avenue de l'Europe | |||
38334 St Ismier CEDEX | ||||
France | France | |||
Email: vincent.roca@inria.fr | Email: vincent.roca@inria.fr | |||
End of changes. 202 change blocks. | ||||
634 lines changed or deleted | 622 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |