Traffic from or to different end users may share various types of bottlenecks. When such a shared bottleneck does not implement some form of flow protection, the share of the available capacity between single flows can help assess when one flow starves the other.
As one example, for residential accesses, the data rate can be guaranteed for the customer premises equipment but not necessarily for the end user. The quality of service that guarantees fairness between the different clients can be seen as a policy concern [
FLOW-RATE-FAIRNESS].
While past efforts have focused on achieving fairness, quantifying and limiting harm caused by new algorithms (or algorithms with coding) is more practical [
BEYONDJAIN]. This document considers fairness as the impact of the addition of coded flows on non-coded flows when they share the same bottleneck. It is assumed that the non-coded flows respond to congestion signals from the network. This document does not contribute to the definition of fairness at a wider scale.
Figures [
1] and [
2] present the notations that will be used in this document and introduce the Forward Erasure Correction (FEC) and Congestion Control (CC) channels. The FEC channel carries repair symbols (from the sender to the receiver) and information from the receiver to the sender (e.g., signaling which symbols have been recovered, loss rate prior and/or after decoding, etc.). The CC channel carries network packets from a sender to a receiver and packets signaling information about the network (number of packets received vs. lost, Explicit Congestion Notification (ECN) marks [
RFC 3168], etc.) from the receiver to the sender. The network packets that are sent by the CC channel may be composed of source packets and/or repair symbols.
SENDER RECEIVER
+------+ +------+
| | ----- network packets ---->| |
| CC | | CC |
| | <--- network information ---| |
+------+ +------+
SENDER RECEIVER
+------+ +------+
| | source and/or | |
| | ----- repair symbols ---->| |
| FEC | | FEC |
| | signaling | |
| | <--- recovered symbols ----| |
+------+ +------+
Inside a host, the CC and FEC entities can be regarded as conceptually separate:
| ^ | ^
| source | coding |packets | sending
| packets | rate |requirements | rate (or
v | v | window)
+---------------+source +-----------------+
| FEC |and/or | CC |
| |repair | |network
| |symbols | |packets
+---------------+==> +-----------------+==>
^ ^
| signaling | network
| recovered symbols | information
| |
| source and/or | network
| repair symbols | packets
v v
+---------------+ +-----------------+
| FEC |signaling | CC |
| |recovered | |network
| |symbols | |information
+---------------+==> +-----------------+==>
Figures [
3] and [
4] provide more details than Figures [
1] and [
2]. Some elements are introduced:
-
'network information' (input control plane for the transport including CC):
-
refers not only to the network information that is explicitly signaled from the receiver but all the information a congestion control obtains from a network.
-
'requirements' (input control plane for the transport including CC):
-
refers to application requirements such as upper/lower rate bounds, periods of quiescence, or a priority.
-
'sending rate (or window)' (output control plane for the transport including CC):
-
refers to the rate at which a congestion control decides to transmit packets based on 'network information'.
-
'signaling recovered symbols' (input control plane for the FEC):
-
refers to the information a FEC sender can obtain from a FEC receiver about the performance of the FEC solution as seen by the receiver.
-
'coding rate' (output control plane for the FEC):
-
refers to the coding rate that is used by the FEC solution (i.e., proportion of transmitted symbols that carry useful data).
-
'network packets' (output data plane for the CC):
-
refers to the data that is transmitted by a CC sender to a CC receiver. The network packets may contain source and/or repair symbols.
-
'source and/or repair symbols' (data plane for the FEC):
-
refers to the data that is transmitted by a FEC sender to a FEC receiver. The sender can decide to send source symbols only (meaning that the coding rate is 0), repair symbols only (if the solution decides not to send the original source symbols), or a mix of both.
The inputs to FEC (incoming data packets without repair symbols and signaling from the receiver about losses and/or recovered symbols) are distinct from the inputs to CC. The latter calculates a sending rate or window from network information, and it takes the packet to send as input, sometimes along with application requirements such as upper/lower rate bounds, periods of quiescence, or a priority. It is not clear that the ACK signals feeding into a congestion control algorithm are useful to FEC in their raw form, and vice versa; information about recovered blocks may be quite irrelevant to a CC algorithm.
The choice of the adequate transport layer may be related to application requirements and the services offered by a transport protocol [
RFC 8095]:
The transport layer may implement a retransmission mechanism to guarantee the reliability of a data transfer (e.g., TCP). Depending on how the FEC and CC functions are scheduled (FEC above CC (
Section 3), FEC in CC (
Section 4), and FEC below CC (
Section 5)), the impact of reliable transport on the FEC reliability mechanisms is different.
The transport layer may provide an unreliable transport service (e.g., UDP or the Datagram Congestion Control Protocol (DCCP) [
RFC 4340]) or a partially reliable transport service (e.g., the Stream Control Transmission Protocol (SCTP) with the partial reliability extension [
RFC 3758] or QUIC with the unreliable datagram extension [
RFC 9221]). Depending on the amount of redundancy and network conditions, there could be cases where it becomes impossible to carry traffic. This is further discussed in
Section 3 where a "FEC above CC" case is assessed and in Sections [
4] and [
5] where "FEC in CC" and "FEC below CC" are assessed, respectively.
The application layer can be composed of several streams above FEC and transport-layer instances. The transport layer can exploit a multipath mechanism. The different streams could exploit different paths between the sender and the receiver. Moreover, a single-stream application could also exploit a multipath transport mechanism. This section describes what is in the scope of this document with regard to multistream applications and multipath transport protocols.
The different combinations between multistream applications and multipath transport are the following: (1) one application-layer stream as input packets above a combination of FEC and multipath (Mpath) transport layers (
Figure 5) and (2) multiple application-layer streams as input packets above a combination of FEC and multipath (Mpath) or single path (Spath) transport layers (
Figure 6). This document further details cases I (in
Section 3.7), II (in
Section 4.6), and III (in
Section 5.7) as illustrated in
Figure 5. Cases IV, V, and VI of
Figure 6 are related to how multiple streams are managed by a single transport or FEC layer; this does not directly concern the interaction between FEC and the transport and is out of the scope of this document.
CASE I CASE II CASE III
+---------------+ +---------------+ +---------------+
| Stream 1 | | Stream 2 | | Stream 3 |
+---------------+ +---------------+ +---------------+
+---------------+ +---------------+ +---------------+
| FEC | | FEC | |Mpath Transport|
+---------------+ | in | +---------------+
|Mpath Transport|
+---------------+ | | +-----+ +-----+
|Mpath Transport| | | |Flow1|...|FlowM|
+---------------+ +---------------+ +-----+ +-----+
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+
|Flow1|...|FlowM| |Flow1|...|FlowM| | FEC |...| FEC |
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+
CASE IV CASE V CASE VI
+-------+ +-------+ +-------+ +-------+ +-------+ +-------+
|Stream1|...|StreamM| |Stream1|...|StreamM| |Stream1|...|StreamM|
+-------+ +-------+ +-------+ +-------+ +-------+ +-------+
+-------------------+ +-------------------+ +-------------------+
| | | FEC | | Mpath Transport |
| FEC | +-------------------+ +-------------------+
| above/in/below |
| Spath Transport | +-------------------+ +-------------------+
| | | Mpath Transport | | FEC |
+-------------------+ +-------------------+ +-------------------+
+-------------------+ +-----+ +-----+ +-----+ +-----+
| Flow | |Flow1| ... |FlowM| |Flow1| ... |FlowM|
+-------------------+ +-----+ +-----+ +-----+ +-----+
[
RFC 8406] summarizes recommended terminology for Network Coding concepts and constructs. In particular, the document identifies the following coding types (among many others):
-
Block Coding:
-
Coding technique where the input Flow must first be segmented into a sequence of blocks; FEC encoding and decoding are performed independently on a per-block basis.
-
Sliding Window Coding:
-
General class of coding techniques that rely on a sliding encoding window.
The decoding scheme may not be able to decode all the symbols. The chance of decoding the erased packets depends on the size of the encoding window, the coding rate, and the distribution of erasure in the transmission channel. The FEC channel may let the client transmit information related to the need of supplementary symbols to adapt the level of reliability. Partial and full reliability could be envisioned.
-
Full reliability:
-
The receiver may hold symbols until the decoding of source symbols is possible. In particular, if the codec does not enable a subset of the system to be inverted, the receiver would have to wait for a certain minimum amount of repair packets before it can recover all the source symbols.
-
Partial reliability:
-
The receiver cannot deliver source symbols that could not have been decoded to the upper layer. For a fixed size of encoding window (for Sliding Window Coding) or of blocks (for Block Coding) containing the source symbols, increasing the amount of repair symbols would increase the chances of recovering the erased symbols. However, this would have an impact on memory requirements, the cost of encoding and decoding processes, and the network overhead.