idnits 2.17.1
draft-ietf-fecframe-ldpc-00.txt:
Checking boilerplate required by RFC 5378 and the IETF Trust (see
https://trustee.ietf.org/license-info):
----------------------------------------------------------------------------
No issues found here.
Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt:
----------------------------------------------------------------------------
No issues found here.
Checking nits according to https://www.ietf.org/id-info/checklist :
----------------------------------------------------------------------------
No issues found here.
Miscellaneous warnings:
----------------------------------------------------------------------------
== The copyright year in the IETF Trust and authors Copyright Line does not
match the current year
-- The document date (September 14, 2011) is 4609 days in the past. Is
this intentional?
Checking references for intended status: Proposed Standard
----------------------------------------------------------------------------
(See RFCs 3967 and 4897 for information about using normative references
to lower-maturity documents in RFCs)
-- Looks like a reference, but probably isn't: '0' on line 388
-- Looks like a reference, but probably isn't: '1' on line 390
-- Looks like a reference, but probably isn't: '2' on line 392
-- Looks like a reference, but probably isn't: '3' on line 394
Summary: 0 errors (**), 0 flaws (~~), 1 warning (==), 5 comments (--).
Run idnits with the --verbose option for more detailed information about
the items above.
--------------------------------------------------------------------------------
2 FecFrame V. Roca
3 Internet-Draft INRIA
4 Intended status: Standards Track M. Cunche
5 Expires: March 17, 2012 NICTA
6 J. Lacan
7 ISAE/LAAS-CNRS
8 September 14, 2011
10 Simple LDPC-Staircase Forward Error Correction (FEC) Scheme for FECFRAME
11 draft-ietf-fecframe-ldpc-00
13 Abstract
15 This document describes a fully-specified simple FEC scheme for LDPC-
16 Staircase codes that can be used to protect media streams along the
17 lines defined by the FECFRAME framework. These codes have many
18 interesting properties: they are systematic codes, they perform close
19 to ideal codes in many use-cases and they also feature very high
20 encoding and decoding throughputs. LDPC-Staircase codes are
21 therefore a good solution to protect a single high bitrate source
22 flow, or to protect globally several mid-rate flows within a single
23 FECFRAME instance. They are also a good solution whenever the
24 processing load of a software encoder or decoder must be kept to a
25 minimum.
27 Status of this Memo
29 This Internet-Draft is submitted in full conformance with the
30 provisions of BCP 78 and BCP 79.
32 Internet-Drafts are working documents of the Internet Engineering
33 Task Force (IETF). Note that other groups may also distribute
34 working documents as Internet-Drafts. The list of current Internet-
35 Drafts is at http://datatracker.ietf.org/drafts/current/.
37 Internet-Drafts are draft documents valid for a maximum of six months
38 and may be updated, replaced, or obsoleted by other documents at any
39 time. It is inappropriate to use Internet-Drafts as reference
40 material or to cite them other than as "work in progress."
42 This Internet-Draft will expire on March 17, 2012.
44 Copyright Notice
46 Copyright (c) 2011 IETF Trust and the persons identified as the
47 document authors. All rights reserved.
49 This document is subject to BCP 78 and the IETF Trust's Legal
50 Provisions Relating to IETF Documents
51 (http://trustee.ietf.org/license-info) in effect on the date of
52 publication of this document. Please review these documents
53 carefully, as they describe your rights and restrictions with respect
54 to this document. Code Components extracted from this document must
55 include Simplified BSD License text as described in Section 4.e of
56 the Trust Legal Provisions and are provided without warranty as
57 described in the Simplified BSD License.
59 Table of Contents
61 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
62 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
63 3. Definitions Notations and Abbreviations . . . . . . . . . . . 4
64 3.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 4
65 3.2. Notations . . . . . . . . . . . . . . . . . . . . . . . . 6
66 3.3. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 7
67 4. Common Procedures Related to the ADU Block and Source
68 Block Creation . . . . . . . . . . . . . . . . . . . . . . . . 7
69 4.1. Restrictions . . . . . . . . . . . . . . . . . . . . . . . 7
70 4.2. ADU Block Creation . . . . . . . . . . . . . . . . . . . . 7
71 4.3. Source Block Creation . . . . . . . . . . . . . . . . . . 8
72 5. LDPC-Staircase FEC Scheme for Arbitrary ADU Flows . . . . . . 10
73 5.1. Formats and Codes . . . . . . . . . . . . . . . . . . . . 10
74 5.1.1. FEC Framework Configuration Information . . . . . . . 10
75 5.1.2. Explicit Source FEC Payload ID . . . . . . . . . . . . 12
76 5.1.3. Repair FEC Payload ID . . . . . . . . . . . . . . . . 13
77 5.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . . 13
78 5.3. FEC Code Specification . . . . . . . . . . . . . . . . . . 14
79 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14
80 6.1. Attacks Against the Data Flow . . . . . . . . . . . . . . 14
81 6.1.1. Access to Confidential Content . . . . . . . . . . . . 14
82 6.1.2. Content Corruption . . . . . . . . . . . . . . . . . . 15
83 6.2. Attacks Against the FEC Parameters . . . . . . . . . . . . 15
84 6.3. When Several Source Flows are to be Protected Together . . 16
85 6.4. Baseline Secure FEC Framework Operation . . . . . . . . . 16
86 7. Operations and Management Considerations . . . . . . . . . . . 16
87 7.1. Operational Recommendations . . . . . . . . . . . . . . . 16
88 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17
89 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18
90 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 18
91 10.1. Normative References . . . . . . . . . . . . . . . . . . . 18
92 10.2. Informative References . . . . . . . . . . . . . . . . . . 18
93 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 20
95 1. Introduction
97 The use of Forward Error Correction (FEC) codes is a classic solution
98 to improve the reliability of unicast, multicast and broadcast
99 Content Delivery Protocols (CDP) and applications [RFC3453]. The
100 [RFC6363] document describes a generic framework to use FEC schemes
101 with media delivery applications, and for instance with real-time
102 streaming media applications based on the RTP real-time protocol.
103 Similarly the [RFC5052] document describes a generic framework to use
104 FEC schemes with with objects (e.g., files) delivery applications
105 based on the ALC [RFC5775] and NORM [RFC5740] reliable multicast
106 transport protocols.
108 More specifically, the [RFC5053] (Raptor) and [RFC5170] (LDPC-
109 Staircase and LDPC-Triangle) FEC schemes introduce erasure codes
110 based on sparse parity check matrices for object delivery protocols
111 like ALC and NORM. Similarly, the [RFC5510] document introduces
112 Reed-Solomon codes based on Vandermonde matrices for the same object
113 delivery protocols. All these codes are systematic codes, meaning
114 that the k source symbols are part of the n encoding symbols.
115 Additionally, the Reed-Solomon FEC codes belong to the class of
116 Maximum Distance Separable (MDS) codes that are optimal in terms of
117 erasure recovery capabilities. It means that a receiver can recover
118 the k source symbols from any set of exactly k encoding symbols out
119 of n. This is not the case with either Raptor or LDPC-Staircase
120 codes, and these codes require a certain number of encoding symbols
121 in excess to k. However, this number is small in practice when an
122 appropriate decoding scheme is used at the receiver [Cunche08].
123 Another key difference is the high encoding/decoding complexity of
124 Reed-Solomon codecs compared to Raptor or LDPC-Staircase codes. A
125 difference of one or more orders of magnitude or more in terms of
126 encoding/decoding speed exists between the Reed-Solomon and LDPC-
127 Staircase software codecs [Cunche08][CunchePHD10]. Finally, Raptor
128 and LDPC-Staircase codes are large block FEC codes, in the sense of
129 [RFC3453], since they can efficiently deal with a large number of
130 source symbols.
132 The present document focuses on LDPC-Staircase codes, that belong to
133 the well-known class of "Low Density Parity Check" codes. Because of
134 their key features, these codes are a good solution in many
135 situations, as detailed in Section 7.
137 This documents inherits from [RFC5170] the specifications of the core
138 LDPC-Staircase codes. Therefore this document specifies only the
139 information specific to the FECFRAME context and refers to [RFC5170]
140 for the core specifications of the codes. To that purpose, the
141 present document introduces:
143 o the Fully-Specified FEC Scheme with FEC Encoding ID XXX that
144 specifies a simple way of using LDPC-Staircase codes in order to
145 protect arbitrary ADU flows.
147 Finally, publicly available reference implementations of these codes
148 are available [LDPC-codec] [LDPC-codec-OpenFEC].
150 2. Terminology
152 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
153 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
154 document are to be interpreted as described in RFC 2119 [RFC2119].
156 3. Definitions Notations and Abbreviations
158 3.1. Definitions
160 This document uses the following terms and definitions. Some of them
161 are FEC scheme specific and are in line with [RFC5052]:
162 Source symbol: unit of data used during the encoding process. In
163 this specification, there is always one source symbol per ADU.
164 Encoding symbol: unit of data generated by the encoding process.
165 With systematic codes, source symbols are part of the encoding
166 symbols.
167 Repair symbol: encoding symbol that is not a source symbol.
168 Code rate: the k/n ratio, i.e., the ratio between the number of
169 source symbols and the number of encoding symbols. By definition,
170 the code rate is such that: 0 < code rate <= 1. A code rate close
171 to 1 indicates that a small number of repair symbols have been
172 produced during the encoding process.
173 Systematic code: FEC code in which the source symbols are part of
174 the encoding symbols. The LDPC-Staircase codes introduced in this
175 document are systematic.
176 Source block: a block of k source symbols that are considered
177 together for the encoding.
178 Packet Erasure Channel: a communication path where packets are
179 either dropped (e.g., by a congested router, or because the number
180 of transmission errors exceeds the correction capabilities of the
181 physical layer codes) or received. When a packet is received, it
182 is assumed that this packet is not corrupted.
184 Some of them are FECFRAME framework specific and are in line with
185 [RFC6363]:
187 Application Data Unit (ADU): a unit of data coming from (sender) or
188 given to (receiver) the media delivery application. Depending on
189 the use-case, an ADU can use an RTP encapsulation. In this
190 specification, there is always one source symbol per ADU.
191 (Source) ADU Flow: a flow of ADUs from a media delivery application
192 and to which FEC protection is applied. Depending on the use-
193 case, several ADU flows can be protected together by the FECFRAME
194 framework.
195 ADU Block: a set of ADUs that are considered together by the
196 FECFRAME instance for the purpose of the FEC scheme. Along with
197 the F[], L[], and Pad[] fields, they form the set of source
198 symbols over which FEC encoding will be performed.
199 ADU Information (ADUI): a unit of data constituted by the ADU and
200 the associated Flow ID, Length and Padding fields (Section 4.3).
201 This is the unit of data that is used as source symbol.
202 FEC Framework Configuration Information: the FEC scheme specific
203 information that enables the synchronization of the FECFRAME
204 sender and receiver instances.
205 FEC Source Packet: a data packet submitted to (sender) or received
206 from (receiver) the transport protocol. It contains an ADU along
207 with its optional Explicit Source FEC Payload ID.
208 FEC Repair Packet: a repair packet submitted to (sender) or received
209 from (receiver) the transport protocol. It contains a repair
210 symbol along with its Repair FEC Payload ID.
212 The above terminology is illustrated in Figure 1 (sender's point of
213 view):
215 +----------------------+
216 | Application |
217 +----------------------+
218 |
219 ADU flow | (1) Application Data Unit (ADU)
220 v
221 +----------------------+ +----------------+
222 | FEC Framework | | |
223 | |------------------------- >| FEC Scheme |
224 |(2) Construct an ADU | (4) Source Symbols for | |
225 | block | this Source Block |(5) Perform FEC |
226 |(3) Construct ADU Info| | Encoding |
227 |(7) Construct FEC Src |< -------------------------| |
228 | Packets and FEC |(6) Ex src FEC Payload Ids,| |
229 | Repair Packets | Repair FEC Payload Ids,| |
230 +----------------------+ Repair Symbols +----------------+
231 | |
232 |(8) FEC Src |(8') FEC Repair
233 | packets | packets
234 v v
235 +----------------------+
236 | Transport Layer |
237 | (e.g., UDP ) |
238 +----------------------+
240 Figure 1: Terminology used in this document (sender).
242 3.2. Notations
244 This document uses the following notations: Some of them are FEC
245 scheme specific:
246 k denotes the number of source symbols in a source block.
247 max_k denotes the maximum number of source symbols for any source
248 block.
249 n denotes the number of encoding symbols generated for a source
250 block.
251 E denotes the encoding symbol length in bytes.
252 CR denotes the "code rate", i.e., the k/n ratio.
253 N1 denotes the target number of "1s" per column in the left side
254 of the parity check matrix.
255 N1m3 denotes the value N1 - 3.
256 a^^b denotes a raised to the power b.
258 Some of them are FECFRAME framework specific:
260 B denotes the number of ADUs per ADU block.
261 max_B denotes the maximum number of ADUs for any ADU block.
263 3.3. Abbreviations
265 This document uses the following abbreviations:
266 ADU stands for Application Data Unit.
267 ESI stands for Encoding Symbol ID.
268 FEC stands for Forward Error (or Erasure) Correction code.
269 FFCI stands for FEC Framework Configuration Information.
270 FSSI stands for FEC Scheme Specific Information.
271 LDPC stands for Low Density Parity Check.
272 MDS stands for Maximum Distance Separable code.
274 4. Common Procedures Related to the ADU Block and Source Block Creation
276 This section introduces the procedures that are used during the ADU
277 block and the related source block creation, for the FEC scheme
278 considered.
280 4.1. Restrictions
282 This specification has the following restrictions:
283 o there MUST be exactly one source symbol per ADUI, and therefore
284 per ADU;
285 o there MUST be exactly one repair symbol per FEC Repair Packet;
286 o there MUST be exactly one source block per ADU block;
287 o the use of the LDPC-Staircase scheme is such that there MUST be
288 exactly one encoding symbol per group, i.e., G MUST be equal to 1
289 [RFC5170];
291 4.2. ADU Block Creation
293 Several aspects must be considered, that impact the ADU block
294 creation:
295 o the maximum source block size (max_k parameter);
296 o the potential real-time constraints, that impact the maximum ADU
297 block size, since the larger the block size, the larger the
298 decoding delay;
299 We now detail each of these aspects.
301 The maximum source block length in symbols, max_k, depends on several
302 parameters: the code rate (CR), the Encoding Symbol ID (ESI) field
303 length in the Explicit Source/Repair FEC Payload ID (16 bits), as
304 well as possible internal codec limitations. More specifically,
305 max_k cannot be larger than the following values, derived from the
306 ESI field size limitation, for a given code rate:
308 max1_k = 2^^(16 - ceil(Log2(1/CR)))
309 Some common max1_k values are:
310 o CR == 1 (no repair symbol): max1_k = 2^^16 = 65536 symbols
311 o 1/2 <= CR < 1: max1_k = 2^^15 = 32,768 symbols
312 o 1/4 <= CR < 1/2: max1_k = 2^^14 = 16,384 symbols
314 Additionally, a codec MAY impose other limitations on the maximum
315 block size, for instance, because of a limited working memory size.
316 This decision MUST be clarified at implementation time, when the
317 target use-case is known. This results in a max2_k limitation.
319 Then, max_k is given by:
320 max_k = min(max1_k, max2_k)
321 Note that this calculation is only required at the encoder (sender),
322 since the actual k parameter (k <= max_k) is communicated to the
323 decoder (receiver) through the Explicit Source/Repair FEC Payload ID.
325 The source ADU flows usually have real-time constraints. It means
326 that the maximum number of ADUs of an ADU block must not exceed a
327 certain threshold since it directly impacts the decoding delay. It
328 is the role of the developer, who knows the flow real-time features,
329 to define an appropriate upper bound to the ADU block size, max_rt.
331 If we take into account these constraints, we find: max_B =
332 min(max_k, max_rt). Then max_B gives an upper bound to the number of
333 ADUs that can constitute an ADU block.
335 4.3. Source Block Creation
337 In its most general form the FECFRAME framework and the LDPC-
338 Staircase FEC scheme are meant to protect a set of independent flows.
339 Since the flows have no relationship to one another, the ADU size of
340 each flow can potentially vary significantly. Even in the special
341 case of a single flow, the ADU sizes can largely vary (e.g., the
342 various frames of a "Group of Pictures (GOP) of an H.264 flow). This
343 diversity must be addressed since the LDPC-Staircase FEC scheme
344 requires a constant encoding symbol size (E parameter) per source
345 block. Since this specification requires that there is only one
346 source symbol per ADU, E must be large enough to contain all the ADUs
347 of an ADU block along with their prepended 3 bytes (see below).
349 In situations where E is determined per source block (default,
350 specified by the FFCI/FSSI with S = 0, Section 5.1.1.2), E is equal
351 to the size of the largest ADU of this source block plus three (for
352 the prepended 3 bytes, see below). In this case, upon receiving the
353 first FEC Repair Packet for this source block, since this packet MUST
354 contain a single repair symbol (Section 5.1.3), a receiver determines
355 the E parameter used for this source block.
357 In situations where E is fixed (specified by the FFCI/FSSI with S =
358 1, Section 5.1.1.2), then E must be greater or equal to the size of
359 the largest ADU of this source block plus three (for the prepended 3
360 bytes, see below). If this is not the case, an error is returned.
361 How to handle this error is use-case specific (e.g., a larger E
362 parameter may be communicated to the receivers in an updated FFCI
363 message, using an appropriate mechanism) and is not considered by
364 this specification.
366 The ADU block is always encoded as a single source block. There are
367 a total of B <= max_B ADUs in this ADU block. For the ADU i, with 0
368 <= i <= B-1, 3 bytes are prepended (Figure 2):
369 o The first byte, FID[i] (Flow ID), contains the integer identifier
370 associated to the source ADU flow to which this ADU belongs to.
371 It is assumed that a single byte is sufficient, or said
372 differently, that no more than 256 flows will be protected by a
373 single instance of the FECFRAME framework.
374 o The following two bytes, L[i] (Length), contain the length of this
375 ADU, in network byte order (i.e., big endian). This length is for
376 the ADU itself and does not include the FID[i], L[i], or Pad[i]
377 fields.
379 Then zero padding is added to ADU i (if needed) in field Pad[i], for
380 alignment purposes up to a size of exactly E bytes. The data unit
381 resulting from the ADU i and the F[i], L[i] and Pad[i] fields, is
382 called ADU Information (or ADUI). Each ADUI contributes to exactly
383 one source symbol to the source block.
385 Encoding Symbol Length (E)
386 < -------------------------------------------------------------- >
387 +----+----+-----------------------+------------------------------+
388 |F[0]|L[0]| ADU[0] | Pad[0] |
389 +----+----+----------+------------+------------------------------+
390 |F[1]|L[1]| ADU[1] | Pad[1] |
391 +----+----+----------+-------------------------------------------+
392 |F[2]|L[2]| ADU[2] |
393 +----+----+------+-----------------------------------------------+
394 |F[3]|L[3]|ADU[3]| Pad[3] |
395 +----+----+------+-----------------------------------------------+
396 \_______________________________ _______________________________/
397 \/
398 simple FEC encoding
400 +----------------------------------------------------------------+
401 | Repair 4 |
402 +----------------------------------------------------------------+
403 . .
404 . .
405 +----------------------------------------------------------------+
406 | Repair 7 |
407 +----------------------------------------------------------------+
409 Figure 2: Source block creation, for code rate 1/2 (equal number of
410 source and repair symbols, 4 in this example), and S = 0.
412 Note that neither the initial 3 bytes nor the optional padding are
413 sent over the network. However, they are considered during FEC
414 encoding. It means that a receiver who lost a certain FEC source
415 packet (e.g., the UDP datagram containing this FEC source packet)
416 will be able to recover the ADUI if FEC decoding succeeds. Thanks to
417 the initial 3 bytes, this receiver will get rid of the padding (if
418 any) and identify the corresponding ADU flow.
420 5. LDPC-Staircase FEC Scheme for Arbitrary ADU Flows
422 5.1. Formats and Codes
424 5.1.1. FEC Framework Configuration Information
426 The FEC Framework Configuration Information (or FFCI) includes
427 information that MUST be communicated between the sender and
428 receiver(s). More specifically, it enables the synchronization of
429 the FECFRAME sender and receiver instances. It includes both
430 mandatory elements and scheme-specific elements, as detailed below.
432 5.1.1.1. Mandatory Information
434 FEC Encoding ID: the value assigned to this fully-specified FEC
435 scheme MUST be XXX, as assigned by IANA (Section 8).
436 When SDP is used to communicate the FFCI, this FEC Encoding ID is
437 carried in the 'encoding-id' parameter.
439 5.1.1.2. FEC Scheme-Specific Information
441 The FEC Scheme Specific Information (FSSI) includes elements that are
442 specific to the present FEC scheme. More precisely:
443 PRNG seed (seed): a non-negative 32 bit integer used as the seed of
444 the Pseudo Random Number Generator, as defined in [RFC5170].
445 Encoding symbol length (E): a non-negative integer that indicates
446 either the length of each encoding symbol in bytes (strict mode,
447 i.e., if S = 1), or the maximum length of any encoding symbol
448 (i.e., if S = 0).
449 Strict (S) flag: when set to 1 this flag indicates that the E
450 parameter is the actual encoding symbol length value for each
451 block of the session (unless otherwise notified by an updated FFCI
452 if this possibility is considered by the use-case or CDP). When
453 set to 0 this flag indicates that the E parameter is the maximum
454 encoding symbol length value for each block of the session (unless
455 otherwise notified by an updated FFCI if this possibility is
456 considered by the use-case or CDP).
457 N1 minus 3 (n1m3): an integer between 0 (default) and 7, inclusive.
458 The number of "1s" per column in the left side of the parity check
459 matrix, N1, is then equal to N1m3 + 3, as specified in [RFC5170].
460 These elements are required both by the sender (LDPC-Staircase
461 encoder) and the receiver(s) (LDPC-Staircase decoder).
463 When SDP is used to communicate the FFCI, this FEC scheme-specific
464 information is carried in the 'fssi' parameter in textual
465 representation as specified in [SDP_ELEMENTS]. For instance:
467 fssi = seed:1234,E:1400,S:0,n1m3:0
469 If another mechanism requires the FSSI to be carried as an opaque
470 octet string (for instance after a Base64 encoding), the encoding
471 format consists of the following 7 octets:
472 o PRNG seed (seed): 32 bit field.
473 o Encoding symbol length (E): 16 bit field.
474 o Strict (S) flag: 1 bit field.
475 o Reserved: a 4 bit field that MUST be set to zero.
476 o N1m3 parameter (n1m3): 3 bit field.
478 0 1 2
479 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
480 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
481 | PRNG seed (seed) |
482 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
483 | Encoding Symbol Length (E) |S| resvd | n1m3|
484 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
486 Figure 3: FSSI encoding format.
488 5.1.2. Explicit Source FEC Payload ID
490 A FEC source packet MUST contain an Explicit Source FEC Payload ID
491 that is appended to the end of the packet as illustrated in Figure 4.
493 +--------------------------------+
494 | IP Header |
495 +--------------------------------+
496 | Transport Header |
497 +--------------------------------+
498 | ADU |
499 +--------------------------------+
500 | Explicit Source FEC Payload ID |
501 +--------------------------------+
503 Figure 4: Structure of a FEC Source Packet with the Explicit Source
504 FEC Payload ID.
506 More precisely, the Explicit Source FEC Payload ID is composed of the
507 following fields (Figure 5):
508 Source Block Number (SBN) (16 bit field): this field identifies the
509 source block to which this FEC source packet belongs.
510 Encoding Symbol ID (ESI) (16 bit field): this field identifies the
511 source symbol contained in this FEC source packet. This value is
512 such that 0 <= ESI <= k - 1 for source symbols.
513 Source Block Length (k) (16 bit field): this field provides the
514 number of source symbols for this source block, i.e., the k
515 parameter.
517 0 1 2 3
518 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
519 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
520 | Source Block Number (SBN) | Encoding Symbol ID (ESI) |
521 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
522 | Source Block Length (k) |
523 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
525 Figure 5: Source FEC Payload ID encoding format.
527 5.1.3. Repair FEC Payload ID
529 A FEC repair packet MUST contain a Repair FEC Payload ID that is
530 prepended to the repair symbol(s) as illustrated in Figure 6. There
531 MUST be a single repair symbol per FEC repair packet.
533 +--------------------------------+
534 | IP Header |
535 +--------------------------------+
536 | Transport Header |
537 +--------------------------------+
538 | Repair FEC Payload ID |
539 +--------------------------------+
540 | Repair Symbol |
541 +--------------------------------+
543 Figure 6: Structure of a FEC Repair Packet with the Repair FEC
544 Payload ID.
546 More precisely, the Repair FEC Payload ID is composed of the
547 following fields: (Figure 7):
548 Source Block Number (SBN) (16 bit field): this field identifies the
549 source block to which the FEC repair packet belongs.
550 Encoding Symbol ID (ESI) (16 bit field) this field identifies the
551 repair symbol contained in this FEC repair packet. This value is
552 such that k <= ESI <= n - 1 for repair symbols.
553 Source Block Length (k) (16 bit field): this field provides the
554 number of source symbols for this source block, i.e., the k
555 parameter.
556 Number of Encoding Symbols (n) (16 bit field): this field provides
557 the number of encoding symbols for this source block, i.e., the n
558 parameter.
560 0 1 2 3
561 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
562 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
563 | Source Block Number (SBN) | Encoding Symbol ID (ESI) |
564 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
565 | Source Block Length (k) | Number Encoding Symbols (n) |
566 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
568 Figure 7: Repair FEC Payload ID encoding format.
570 5.2. Procedures
572 The following procedures apply:
574 o The source block creation procedures are specified in Section 4.3.
575 o The SBN value is incremented for each new source block, starting
576 at 0 for the first block of the ADU flow. Wrapping to zero will
577 happen for long sessions, after value 2^^16 - 1.
578 o The ESI of encoding symbols is managed sequentially, starting at 0
579 for the first symbol. The first k values (0 <= ESI <= k - 1)
580 identify source symbols, whereas the last n-k values (k <= ESI <=
581 n - 1) identify repair symbols.
582 o The FEC repair packet creation procedures are specified in
583 Section 5.1.3.
585 5.3. FEC Code Specification
587 The present document inherits from [RFC5170] the specification of the
588 core LDPC-Staircase codes for a packet erasure transmission channel.
590 Because of the requirement to have exactly one encoding symbol per
591 group, i.e., because G MUST be equal to 1 (Section 4.1), several
592 parts of [RFC5170] are useless. In particular, this is the case of
593 Section 5.6. "Identifying the G Symbols of an Encoding Symbol
594 Group".
596 6. Security Considerations
598 The FEC Framework document [RFC6363] provides a comprehensive
599 analysis of security considerations applicable to FEC schemes.
600 Therefore the present section follows the security considerations
601 section of [RFC6363] and only discusses topics that are specific to
602 the use of LDPC-Staircase codes.
604 6.1. Attacks Against the Data Flow
606 6.1.1. Access to Confidential Content
608 The LDPC-Staircase FEC Scheme specified in this document does not
609 change the recommendations of [RFC6363]. To summarize, if
610 confidentiality is a concern, it is RECOMMENDED that one of the
611 solutions mentioned in [RFC6363] is used, with special considerations
612 to the way this solution is applied (e.g., before versus after FEC
613 protection, and within the end-system versus in a middlebox), to the
614 operational constraints (e.g., performing FEC decoding in a protected
615 environment may be complicated or even impossible) and to the threat
616 model.
618 6.1.2. Content Corruption
620 The LDPC-Staircase FEC Scheme specified in this document does not
621 change the recommendations of [RFC6363]. To summarize, it is
622 RECOMMENDED that one of the solutions mentioned in [RFC6363] is used
623 on both the FEC Source and Repair Packets.
625 6.2. Attacks Against the FEC Parameters
627 The FEC Scheme specified in this document defines parameters that can
628 be the basis of several attacks. More specifically, the following
629 parameters of the FFCI may be modified by an attacker
630 (Section 5.1.1.2):
631 o FEC Encoding ID: changing this parameter leads the receiver to
632 consider a different FEC Scheme, which enables an attacker to
633 create a Denial of Service (DoS).
634 o Encoding symbol length (E): setting this E parameter to a value
635 smaller than the valid one enables an attacker to create a DoS
636 since the repair symbols and certain source symbols will be larger
637 than E, which is an incoherency for the receiver. Setting this E
638 parameter to a value larger than the valid one has similar impacts
639 when S=1 since the received repair symbol size will be smaller
640 than expected. On the opposite it will not lead to any
641 incoherency when S=0 since the actual symbol length value for the
642 block is determined by the size of any received repair symbol, as
643 long as this value is smaller than E. However setting this E
644 parameter to a larger value may have impacts on receivers that
645 pre-allocate memory space in advance to store incoming symbols.
646 o Strict (S) flag: flipping this S flag from 0 to 1 (i.e., E is now
647 considered as a strict value) enables an attacker to mislead the
648 receiver if the actual symbol size varies over different source
649 blocks. Flipping this S flag from 1 to 0 has no major
650 consequences unless the receiver requires to have a fixed E value
651 (e.g., because the receiver pre-allocates memory space).
652 o N1 minus 3 (n1m3): changing this parameter leads the receiver to
653 consider a different code, which enables an attacker to create a
654 DoS.
656 It is therefore RECOMMENDED that security measures are taken to
657 guarantee the FFCI integrity, as specified in [RFC6363]. How to
658 achieve this depends on the way the FFCI is communicated from the
659 sender to the receiver, which is not specified in this document.
661 Similarly, attacks are possible against the Explicit Source FEC
662 Payload ID and Repair FEC Payload ID: by modifying the Source Block
663 Number (SBN), or the Encoding Symbol ID (ESI), or the Source Block
664 Length (k), or the Number Encoding Symbols (n), an attacker can
665 easily corrupt the block identified by the SBN. Other consequences,
666 that are use-case and/or CDP dependant, may also happen. It is
667 therefore RECOMMENDED that security measures are taken to guarantee
668 the FEC Source and Repair Packets as stated in [RFC6363].
670 6.3. When Several Source Flows are to be Protected Together
672 The LDPC-Staircase FEC Scheme specified in this document does not
673 change the recommendations of [RFC6363].
675 6.4. Baseline Secure FEC Framework Operation
677 The LDPC-Staircase FEC Scheme specified in this document does not
678 change the recommendations of [RFC6363] concerning the use of the
679 IPsec/ESP security protocol as a mandatory to implement (but not
680 mandatory to use) security scheme. This is well suited to situations
681 where the only insecure domain is the one over which the FEC
682 Framework operates.
684 7. Operations and Management Considerations
686 The FEC Framework document [RFC6363] provides a comprehensive
687 analysis of operations and management considerations applicable to
688 FEC schemes. Therefore the present section only discusses topics
689 that are specific to the use of LDPC-Staircase codes as specified in
690 this document.
692 7.1. Operational Recommendations
694 LDPC-Staircase codes have excellent erasure recovery capabilities
695 with large source blocks, close to ideal MDS codes. For instance,
696 with a medium source block size k=1024, CR=2/3, N1=5, G=1, with a
697 hybrid ITerative/Maximum Likelihood (IT/ML) decoding approach (see
698 below) and when all symbols are sent in a random order (see below),
699 the average overhead amounts to 0.64% (corresponding to 6.5 symbols
700 in addition to k) and receiving 1043 symbols (corresponding to a 1.9%
701 overhead) is sufficient to reduce the decoding failure probability to
702 5.1*10^^-5. This is why these codes are a good solution to protect a
703 single high bitrate source flow as in [Matsuzono10], or to protect
704 globally several mid-rate source flows within a single FECFRAME
705 instance: in both cases the source block size can be assumed to be
706 equal to a few hundreds (or more) source symbols.
708 LDPC-Staircase codes are also a good solution whenever processing
709 requirements at a software encoder or decoder must be kept to a
710 minimum. This is true when the decoder uses an IT decoding
711 algorithm, or an ML algorithm (we use a Gaussian Elimination as the
712 ML algorithm) when this latter is carefully implemented and the
713 source block size kept reasonable, or a mixture of both techniques
714 which is the recommended solution [Cunche08][CunchePHD10]. For
715 instance an average decoding speed between 1.3 Gbps (corresponding to
716 a very bad channel, close to the theoretical decoding limit and
717 requiring an ML decoding) and 4.3 Gbps (corresponding to a medium
718 quality channel where IT decoding is sufficient) are easily achieved
719 with a source block size composed of k=1024 source symbols, a code
720 rate CR=2/3 (i.e., 512 repair symbols), 1024 byte long symbols, G=1,
721 and N1=5, on an Intel Xeon 5120/1.86GHz workstation running Linux/64
722 bits. Additionally, with a hybrid IT/ML approach, a receiver can
723 decide if and when ML decoding is used, depending on local criteria
724 (e.g., battery or CPU capabilities), independently from other
725 receivers.
727 As the source block size decreases, the erasure recovery capabilities
728 of LDPC codes in general also decrease. In the case of LDPC-
729 Staircase codes, in order to compensate this phenomenon, it is
730 recommended to increase the N1 parameter (e.g., experiments carried
731 out in [Matsuzono10] use N1=7 if k=170 symbols, and N1=5 otherwise)
732 and to use a hybrid IT/ML decoding approach. For instance, with a
733 small source block size k=256 symbols, CR=2/3, N1=7, and G=1, the
734 average overhead amounts to 0.67% (corresponding to 1.7 symbols in
735 addition to k), and receiving 267 symbols (corresponding to a 4.3%
736 overhead) is sufficient to reduce the decoding failure probability to
737 1.4*10^^-5. Using N1=9 further improves these results if need be,
738 which also enables to use LDPC-Staircase codes with k=100 symbols for
739 instance.
741 With very small source blocks (e.g., a few tens symbols), using for
742 instance Reed-Solomon codes [SIMPLE_RS] or 2D parity check codes MAY
743 be more appropriate.
745 The way the FEC Repair Packets are transmitted is of high importance.
746 A good strategy, that works well for any kind of channel loss model,
747 consists in sending FEC Repair Packets in random order (rather than
748 in sequence) while FEC Source Packets are sent first and in sequence.
749 Sending all packets in a random order is another possibility, but it
750 requires that all repair symbols for a source block be produced
751 first, which adds some extra delay at a sender.
753 8. IANA Considerations
755 Values of FEC Encoding IDs are subject to IANA registration.
756 [RFC6363] defines general guidelines on IANA considerations. In
757 particular it defines a registry called FEC Framework (FECFRAME) FEC
758 Encoding IDs whose values are granted on an IETF Consensus basis.
760 This document registers one value in the FEC Framework (FECFRAME) FEC
761 Encoding IDs registry as follows:
762 o XXX refers to the Simple LDPC-Staircase [RFC5170] FEC Scheme for
763 Arbitrary Packet Flows.
765 9. Acknowledgments
767 The authors want to thank K. Matsuzono, J. Detchart and H. Asaeda for
768 their contributions in evaluating the use of LDPC-Staircase codes in
769 the context of FECFRAME [Matsuzono10].
771 10. References
773 10.1. Normative References
775 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
776 Requirement Levels", RFC 2119.
778 [RFC5170] Roca, V., Neumann, C., and D. Furodet, "Low Density Parity
779 Check (LDPC) Forward Error Correction", RFC 5170,
780 June 2008.
782 [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error
783 Correction (FEC) Framework", RFC 6363, September 2011.
785 [SDP_ELEMENTS]
786 Begen, A., "SDP Elements for FEC Framework",
787 draft-ietf-fecframe-sdp-elements-10 (Work in Progress),
788 October 2010.
790 10.2. Informative References
792 [RFC3453] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley,
793 M., and J. Crowcroft, "The Use of Forward Error Correction
794 (FEC) in Reliable Multicast", RFC 3453, December 2002.
796 [RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward Error
797 Correction (FEC) Building Block", RFC 5052, August 2007.
799 [RFC5510] Lacan, J., Roca, V., Peltotalo, J., and S. Peltotalo,
800 "Reed-Solomon Forward Error Correction (FEC) Schemes",
801 RFC 5510, April 2009.
803 [SIMPLE_RS]
804 Roca, V., Cunche, M., Lacan, J., Bouabdallah, A., and K.
805 Matsuzono, "Simple Reed-Solomon Forward Error Correction
806 (FEC) Scheme for FECFRAME",
807 draft-ietf-fecframe-simple-rs-01 (Work in Progress),
808 September 2011.
810 [RFC5053] Luby, M., Shokrollahi, A., Watson, M., and T. Stockhammer,
811 "Raptor Forward Error Correction Scheme", RFC 5053,
812 June 2007.
814 [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker,
815 "NACK-Oriented Reliable Multicast (NORM) Transport
816 Protocol", RFC 5740, November 2009.
818 [RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous
819 Layered Coding (ALC) Protocol Instantiation", RFC 5775,
820 April 2010.
822 [Cunche08]
823 Cunche, M. and V. Roca, "Optimizing the Error Recovery
824 Capabilities of LDPC-Staircase Codes Featuring a Gaussian
825 Elimination Decoding Scheme", 10th IEEE International
826 Workshop on Signal Processing for Space Communications
827 (SPSC'08), October 2008.
829 [CunchePHD10]
830 Cunche, M., "High performances AL-FEC codes for the
831 erasure channel : variation around LDPC codes", PhD
832 dissertation (in
833 French) (http://tel.archives-ouvertes.fr/tel-
834 00451336/en/), June 2010.
836 [Matsuzono10]
837 Matsuzono, K., Detchart, J., Cunche, M., Roca, V., and H.
838 Asaeda, "Performance Analysis of a High-Performance Real-
839 Time Application with Several AL-FEC Schemes", 35th Annual
840 IEEE Conference on Local Computer Networks (LCN 2010),
841 October 2010.
843 [LDPC-codec]
844 Cunche, M., Roca, V., Neumann, C., and J. Laboure, "LDPC-
845 Staircase/LDPC-Triangle Codec Reference Implementation",
846 INRIA Rhone-Alpes and STMicroelectronics,
847 .
849 [LDPC-codec-OpenFEC]
850 "The OpenFEC project", .
852 Authors' Addresses
854 Vincent Roca
855 INRIA
856 655, av. de l'Europe
857 Inovallee; Montbonnot
858 ST ISMIER cedex 38334
859 France
861 Email: vincent.roca@inria.fr
862 URI: http://planete.inrialpes.fr/people/roca/
864 Mathieu Cunche
865 NICTA
866 Australia
868 Email: mathieu.cunche@nicta.com.au
869 URI: http://mathieu.cunche.free.fr/
871 Jerome Lacan
872 ISAE/LAAS-CNRS
873 1, place Emile Blouin
874 Toulouse 31056
875 France
877 Email: jerome.lacan@isae.fr
878 URI: http://dmi.ensica.fr/auteur.php3?id_auteur=5