Simple Low-Density Parity Check (LDPC) Staircase Forward Error Correction (FEC) Scheme for FECFRAME
Extracted elements (27)
FEC repair packets should be transmitted in random order (while source packets go first and in sequence) rather than sequentially. This strategy works well for any channel loss model; sending all packets randomly is also possible but requires all repair symbols to be ready before transmission, adding latency at the sender.
For small source blocks, it is recommended to use N1 >= 7 to compensate for the reduced erasure recovery capability of LDPC codes at small block sizes; with very small blocks (a few tens of symbols), Reed-Solomon or 2D parity check codes may be more appropriate than LDPC-Staircase.
LDPC-Staircase codes are chosen over Reed-Solomon codes because they provide one or more orders of magnitude higher encoding/decoding throughput (e.g., Gbps range in software versus much lower for Reed-Solomon), at the cost of not being MDS — a small overhead (typically under 2%) beyond k symbols is needed for reliable recovery.
The E (encoding symbol length) parameter is allowed to be either fixed per session (S=1) or determined per source block by the size of the first received repair symbol (S=0), because ADU sizes can vary significantly across frames (e.g., H.264 GOP frames) and across flows; the S=0 mode avoids the need to pre-negotiate a fixed E while still conveying E implicitly.
Because G MUST equal 1 (one encoding symbol per group), Section 5.6 of RFC 5170 ('Identifying the G Symbols of an Encoding Symbol Group') is not applicable and should be ignored when using this scheme.
This document inherits the core LDPC-Staircase code specification and the Pseudo-Random Number Generator specification from RFC 5170, Sections 6 and 5.7 respectively. The RFC 5052-specific Formats and Procedures from RFC 5170 (Sections 4 and 5 except 5.7) are replaced by the FECFRAME-specific procedures defined here.
A FEC repair packet MUST contain a Repair FEC Payload ID prepended to the repair symbol(s), and there MUST be a single repair symbol per FEC repair packet.
A FEC source packet MUST contain an Explicit Source FEC Payload ID appended to the end of the packet.
If confidentiality is a concern, it is RECOMMENDED that one of the encryption solutions mentioned in RFC 6363 be used, with attention to whether encryption is applied before or after FEC protection.
It is RECOMMENDED that security measures be taken to guarantee the integrity of FEC source and repair packets, since modification of SBN, ESI, k, or n fields can corrupt source block decoding.
The ESI of encoding symbols MUST start with 0 for the first symbol and MUST be managed sequentially; values 0 to k-1 identify source symbols, values k to n-1 identify repair symbols.
The FEC Encoding ID assigned to the Simple LDPC-Staircase FEC Scheme MUST be 7, as assigned by IANA. When SDP is used, this value is carried in the 'encoding-id' parameter.
The Reserved field in the FSSI opaque encoding MUST be set to zero.
The SBN value MUST start with 0 for the first source block and MUST be incremented by 1 for each new source block, wrapping to zero after 2^^16 - 1.
There MUST be exactly one source symbol per ADUI (and therefore per ADU), one repair symbol per FEC repair packet, one source block per ADU block, and G MUST be equal to 1 (one encoding symbol per group).
To prevent content corruption, it is RECOMMENDED that one of the integrity protection solutions mentioned in RFC 6363 be applied to both FEC source and repair packets.
ADU Information (ADUI) is the source symbol unit, formed by prepending three bytes to each ADU: F[i] (1-byte Flow ID, supporting up to 256 flows), L[i] (2-byte ADU length in network byte order), followed by the ADU itself and zero-padding Pad[i] to reach exactly E bytes.
FEC Scheme-Specific Information (FSSI) includes four parameters: PRNG seed (32-bit), encoding symbol length E (16-bit), Strict flag S (1-bit, indicates whether E is fixed or maximum per block), and N1m3 (3-bit, value 0–7, giving N1 = N1m3 + 3 ones per column in the parity check matrix).
The maximum ADU block size max_B = min(max_k, max_rt), where max_rt is an upper bound from real-time constraints. For a latency limit l and ADU duration d, max_rt = floor(l / d).
The maximum source block size max_k is the minimum of a codec-imposed limit max2_k and max1_k = 2^^(16 - ceil(log2(1/CR))), derived from the 16-bit ESI field size. For CR in [1/2, 1), max1_k = 32,768 symbols.
This document registers FEC Encoding ID value 7 in the 'FEC Framework (FECFRAME) FEC Encoding IDs' registry (defined by RFC 6363), referring to the Simple LDPC-Staircase FEC Scheme for Arbitrary Packet Flows.
IPsec/ESP is specified in RFC 6363 as mandatory-to-implement (but not mandatory-to-use) for baseline secure FECFRAME operation; this document does not alter that requirement and it is suited to deployments where the insecure domain is limited to the FECFRAME operational domain.
Modification of the FEC Encoding ID in the FFCI causes the receiver to apply the wrong FEC scheme, enabling a Denial of Service. Modification of n1m3 similarly causes the receiver to construct a different parity check matrix, also enabling DoS.
Setting the encoding symbol length E to a smaller-than-valid value causes an incoherency at the receiver (repair symbols exceed declared E), enabling DoS. Setting E larger than valid when S=1 has similar impact; when S=0, the receiver derives E from the first repair packet, mitigating the attack on E.
The Explicit Source FEC Payload ID is a 6-byte field appended to FEC source packets: Source Block Number SBN (16-bit), Encoding Symbol ID ESI (16-bit, 0 to k-1), and Source Block Length k (16-bit).
The FSSI opaque encoding is 7 octets: a 32-bit PRNG seed, a 16-bit encoding symbol length E, a 1-bit Strict flag S, a 4-bit Reserved field (must be zero), and a 3-bit n1m3 parameter.
The Repair FEC Payload ID is an 8-byte field prepended to FEC repair packets: Source Block Number SBN (16-bit), Encoding Symbol ID ESI (16-bit, k to n-1), Source Block Length k (16-bit), and Number of Encoding Symbols n (16-bit).