nwcrg | V. Roca, Ed. |
Internet-Draft | INRIA |
Intended status: Informational | F. Michel |
Expires: September 10, 2020 | UCLouvain |
I. Swett | |
M-J. Montpetit | |
Triangle Video | |
March 9, 2020 |
Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for QUIC
draft-roca-nwcrg-rlc-fec-scheme-for-quic-03
This document specifies Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for the QUIC transport protocol, in order to recover from packet losses.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 10, 2020.
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
QUIC [QUIC-transport] is a transport protocol that aims at improving network performance by enabling stream multiplexing, partial reliability, and methods of recovery besides retransmission, while also improving security. This document specifies FEC schemes for Sliding Window Random Linear Code (RLC) [RFC8681] to recover from lost packets within a single QUIC stream or across several QUIC streams, compliant with the FEC coding framework for QUIC [Coding4QUIC].
The ability to add FEC coding in QUIC may be beneficial in several situations:
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
Terms and definitions that apply to coding are available in [nc-taxonomy]. More specifically, this document uses the following definitions:
This document uses the following abbreviations:
This section introduces the procedures that are used by these FEC Schemes.
The present FEC Scheme follows the source symbols mapping specified in [Coding4QUIC]. Figure 1 illustrates this mapping.
QUIC packet |<E-1-4>|< E-1 >|< E-1 >|< E-1 >| +------|----+--|-------|-------|-------| |Header| 0 | Packet Payload | 4 packet chunks +------|----+--|-------|-------|-------| / | | \ v v v v +-+--+----+ +-+-------+ +-+-------+ +-+-------+ |m|pn|chnk| |m| chunk| |m| chunk| |m| chunk| 4 source symbols +-+--+----+ +-+-------+ +-+-------+ +-+-------+ | | | | | | | | |< --E-- >| |< --E-- >| |< --E-- >| |< --E-- >|
Figure 1: Example of source symbol mapping, when the E value is relatively small.
Similarly to [RFC8681], the present FEC Scheme assigns a unique identifier (ID) to each produced source symbol. The IDs are assigned to the produced source symbols in the ascending order. The IDs start at MUST start 0 and MUST be contiguous. For any symbol with ID x, the source symbol with ID x+1 is :
Do we want to authorize a wrapping of the source symbol ID ? It would be a lot easier if wrapping is not permitted.
The RLC FEC Schemes defined in this document rely on the TinyMT32 PRNG defined in [RFC8682] along with the two mapping functions to 4-bit and 8-bit unsigned integers defined in [RFC8681].
The coding coefficients, used during the encoding process, are generated at the RLC encoder by the generate_coding_coefficients() function each time a new repair symbol needs to be produced. This specification uses the generate_coding_coefficients() defined in [RFC8681].
This fully-specified FEC Scheme defines the Sliding Window Random Linear Codes (RLC) over GF(2^^8).
This section provides the RLC configuration information that needs to be shared during QUIC negotiation between the QUIC sender and receiver endpoints in order to synchronize them.
TODO: specify exact format, with binary encoding, to be carried within the opaque 32-bit field during negotiation.
The RLC FEC Scheme requires explicit signaling of the Source Symbols it transmits. The QUIC packets whose payload is protected by FEC MUST contain an SRC FPI frame with the following format.
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID of First Source Symbol in Packet (i) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: SRC FPI frame format.
The SRC FPI frame contains the ID of the first source symbol contained in this packet. Each source symbol contains a packet chunk of E-1 bytes long. If the payload to protect is longer than E-1 bytes, this means that the packet contains several packet chunks. In this case the source symbol ID will increase by exactly one for each additional packet chunk contained in the payload to protect.
The RLC FEC Scheme requires QUIC REPAIR frames to convey enough information. This section specifies the REPAIR frame format specific to the RLC FEC Scheme. Note that the notion of REPAIR frame format is equivalent to the notion of Repair FEC Payload ID in [RFC8681].
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID of First Source Symbol in EW (i) ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Repair_Key | NSS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DT | NRS | Repair Symbols ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: REPAIR frame format when protecting a single QUIC stream.
More precisely, the REPAIR frame format is composed of the following fields (Figure 3):
This RLC FEC Scheme relies on the FEC code specification defined in [RFC8681].
[RFC8681] high level description of a Sliding Window RLC encoder also applies here to this FEC Scheme.
[RFC8681] high level description of a Sliding Window RLC decoder also applies here to this FEC Scheme.
TBD
This document registers two values in the "QUIC FEC Encoding IDs" registry as follows:
TBD
[Coding4QUIC] | Swett, I., Montpetit, M-J., Roca, V. and F. Michel, "Coding for QUIC", Work in Progress, NWCRG draft-swett-nwcrg-coding-for-quic (Work in Progress), March 2020. |
[QUIC-transport] | Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed and Secure Transport", Internet-Draft draft-ietf-quic-transport (Work in Progress), November 2019. |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |
[RFC8681] | Roca, V. and B. Teibi, "Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for FECFRAME", RFC 8681, DOI 10.17487/RFC8681, January 2020. |
[RFC8682] | Saito, M., Matsumoto, M., Roca, V. and E. Baccelli, "TinyMT32 Pseudorandom Number Generator (PRNG)", RFC 8682, DOI 10.17487/RFC8682, January 2020. |
[nc-taxonomy] | Roca (Ed.) et al., V., "Taxonomy of Coding Techniques for Efficient Network Communications", Request For Comments RFC 8406, June 2018. |