idnits 2.17.1 draft-ietf-fecframe-ldpc-03.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 (October 4, 2012) is 4222 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 411 -- Looks like a reference, but probably isn't: '1' on line 413 -- Looks like a reference, but probably isn't: '2' on line 415 -- Looks like a reference, but probably isn't: '3' on line 417 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: April 7, 2013 INSA-Lyon/INRIA 6 J. Lacan 7 ISAE, Univ. of Toulouse 8 October 4, 2012 10 Simple LDPC-Staircase Forward Error Correction (FEC) Scheme for FECFRAME 11 draft-ietf-fecframe-ldpc-03 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 April 7, 2013. 44 Copyright Notice 46 Copyright (c) 2012 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 . . . . . . . . . . . . . . . . . . 9 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 . . . . . . . . . . . . . . . . . . . . . . . . 14 78 5.3. FEC Code Specification . . . . . . . . . . . . . . . . . . 14 79 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14 80 6.1. Attacks Against the Data Flow . . . . . . . . . . . . . . 15 81 6.1.1. Access to Confidential Content . . . . . . . . . . . . 15 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 . . . . . . . . . . . . . . . . . . . . . 18 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 objects (e.g., files) delivery applications based on 105 the ALC [RFC5775] and NORM [RFC5740] reliable multicast transport 106 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): The unit of source data provided as 188 payload to the transport layer. Depending on the use-case, an ADU 189 may use an RTP encapsulation. 190 (Source) ADU Flow: A sequence of ADUs associated with a transport- 191 layer flow identifier (such as the standard 5-tuple {Source IP 192 address, source port, destination IP address, destination port, 193 transport protocol}). Depending on the use-case, several ADU 194 flows may be protected together by the FECFRAME 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: Information which controls 203 the operation of the FEC Framework. The FFCI enables the 204 synchronization of the FECFRAME sender and receiver instances. 205 FEC Source Packet: At a sender (respectively, at a receiver) a 206 payload submitted to (respectively, received from) the transport 207 protocol containing an ADU along with an optional Explicit Source 208 FEC Payload ID. 209 FEC Repair Packet: At a sender (respectively, at a receiver) a 210 payload submitted to (respectively, received from) the transport 211 protocol containing one repair symbol along with a Repair FEC 212 Payload ID and possibly an RTP header. 214 The above terminology is illustrated in Figure 1 (sender's point of 215 view): 217 +----------------------+ 218 | Application | 219 +----------------------+ 220 | 221 | (1) Application Data Units (ADUs) 222 | 223 v 224 +----------------------+ +----------------+ 225 | FEC Framework | | | 226 | |-------------------------->| FEC Scheme | 227 |(2) Construct source |(3) Source Block | | 228 | blocks | |(4) FEC Encoding| 229 |(6) Construct FEC |<--------------------------| | 230 | source and repair | | | 231 | packets |(5) Explicit Source FEC | | 232 +----------------------+ Payload IDs +----------------+ 233 | Repair FEC Payload IDs 234 | Repair symbols 235 | 236 |(7) FEC source and repair packets 237 v 238 +----------------------+ 239 | Transport Layer | 240 | (e.g., UDP) | 241 +----------------------+ 243 Figure 1: Terminology used in this document (sender). 245 3.2. Notations 247 This document uses the following notations: Some of them are FEC 248 scheme specific: 249 k denotes the number of source symbols in a source block. 250 max_k denotes the maximum number of source symbols for any source 251 block. 252 n denotes the number of encoding symbols generated for a source 253 block. 254 E denotes the encoding symbol length in bytes. 255 CR denotes the "code rate", i.e., the k/n ratio. 256 N1 denotes the target number of "1s" per column in the left side 257 of the parity check matrix. 258 N1m3 denotes the value N1 - 3. 259 a^^b denotes a raised to the power b. 261 Some of them are FECFRAME framework specific: 263 B denotes the number of ADUs per ADU block. 264 max_B denotes the maximum number of ADUs for any ADU block. 266 3.3. Abbreviations 268 This document uses the following abbreviations: 269 ADU stands for Application Data Unit. 270 ESI stands for Encoding Symbol ID. 271 FEC stands for Forward Error (or Erasure) Correction code. 272 FFCI stands for FEC Framework Configuration Information. 273 FSSI stands for FEC Scheme Specific Information. 274 LDPC stands for Low Density Parity Check. 275 MDS stands for Maximum Distance Separable code. 276 SDP stands for Session Description Protocol. 278 4. Common Procedures Related to the ADU Block and Source Block Creation 280 This section introduces the procedures that are used during the ADU 281 block and the related source block creation, for the FEC scheme 282 considered. 284 4.1. Restrictions 286 This specification has the following restrictions: 287 o there MUST be exactly one source symbol per ADUI, and therefore 288 per ADU; 289 o there MUST be exactly one repair symbol per FEC Repair Packet; 290 o there MUST be exactly one source block per ADU block; 291 o the use of the LDPC-Staircase scheme is such that there MUST be 292 exactly one encoding symbol per group, i.e., G MUST be equal to 1 293 [RFC5170]; 295 4.2. ADU Block Creation 297 Two kinds of limitations exist that impact the ADU block creation: 298 o at the FEC Scheme level: the FEC Scheme and the FEC codec have 299 limitations that define a maximum source block size; 300 o at the FECFRAME instance level: the target use-case can have real- 301 time constraints that can/will define a maximum ADU block size; 302 Note that terminology "maximum source block size" and "maximum ADU 303 block size" depends on the point of view that is adopted (FEC Scheme 304 versus FECFRAME instance). However, in this document, both refer to 305 the same value since Section 4.1 requires there is exactly one source 306 symbol per ADU. We now detail each of these aspects. 308 The maximum source block size in symbols, max_k, depends on several 309 parameters: the code rate (CR), the Encoding Symbol ID (ESI) field 310 length in the Explicit Source/Repair FEC Payload ID (16 bits), as 311 well as possible internal codec limitations. More specifically, 312 max_k cannot be larger than the following values, derived from the 313 ESI field size limitation, for a given code rate: 314 max1_k = 2^^(16 - ceil(Log2(1/CR))) 315 Some common max1_k values are: 316 o CR == 1 (no repair symbol): max1_k = 2^^16 = 65536 symbols 317 o 1/2 <= CR < 1: max1_k = 2^^15 = 32,768 symbols 318 o 1/4 <= CR < 1/2: max1_k = 2^^14 = 16,384 symbols 320 Additionally, a codec can impose other limitations on the maximum 321 source block size, for instance, because of a limited working memory 322 size. This decision MUST be clarified at implementation time, when 323 the target use-case is known. This results in a max2_k limitation. 325 Then, max_k is given by: 326 max_k = min(max1_k, max2_k) 327 Note that this calculation is only required at the encoder (sender), 328 since the actual k parameter (k <= max_k) is communicated to the 329 decoder (receiver) through the Explicit Source/Repair FEC Payload ID. 331 The source ADU flows can have real-time constraints. When there are 332 multiple flows, with different real-time constraints, let us consider 333 the most stringent constraints (see [RFC6363], section 10.2, item 6 334 for recommendations when several flows are globally protected). In 335 that case the maximum number of ADUs of an ADU block must not exceed 336 a certain threshold since it directly impacts the decoding delay. 337 The larger the ADU block size, the longer a decoder may have to wait 338 until it has received a sufficient number of encoding symbols for 339 decoding to succeed, and therefore the larger the decoding delay. 340 When the target use-case is known, these real-time constraints result 341 in an upper bound to the ADU block size, max_rt. 343 For instance, if the use-case specifies a maximum decoding latency, 344 l, and if each source ADU covers a duration d of a continuous media 345 (we assume here the simple case of a constant bit rate ADU flow), 346 then the ADU block size must not exceed: 347 max_rt = floor(l / d) 348 After encoding, this block will produce a set of at most n = max_rt / 349 CR encoding symbols. These n encoding symbols will have to be sent 350 at a rate of n / l packets per second. For instance, with d = 10 ms, 351 l = 1 s, max_rt = 100 ADUs. 353 If we take into account all these constraints, we find: 354 max_B = min(max_k, max_rt) 355 This max_B parameter is an upper bound to the number of ADUs that can 356 constitute an ADU block. 358 4.3. Source Block Creation 360 In its most general form the FECFRAME framework and the LDPC- 361 Staircase FEC scheme are meant to protect a set of independent flows. 362 Since the flows have no relationship to one another, the ADU size of 363 each flow can potentially vary significantly. Even in the special 364 case of a single flow, the ADU sizes can largely vary (e.g., the 365 various frames of a "Group of Pictures (GOP) of an H.264 flow). This 366 diversity must be addressed since the LDPC-Staircase FEC scheme 367 requires a constant encoding symbol size (E parameter) per source 368 block. Since this specification requires that there is only one 369 source symbol per ADU, E must be large enough to contain all the ADUs 370 of an ADU block along with their prepended 3 bytes (see below). 372 In situations where E is determined per source block (default, 373 specified by the FFCI/FSSI with S = 0, Section 5.1.1.2), E is equal 374 to the size of the largest ADU of this source block plus three (for 375 the prepended 3 bytes, see below). In this case, upon receiving the 376 first FEC Repair Packet for this source block, since this packet MUST 377 contain a single repair symbol (Section 5.1.3), a receiver determines 378 the E parameter used for this source block. 380 In situations where E is fixed (specified by the FFCI/FSSI with S = 381 1, Section 5.1.1.2), then E must be greater or equal to the size of 382 the largest ADU of this source block plus three (for the prepended 3 383 bytes, see below). If this is not the case, an error is returned. 384 How to handle this error is use-case specific (e.g., a larger E 385 parameter may be communicated to the receivers in an updated FFCI 386 message, using an appropriate mechanism) and is not considered by 387 this specification. 389 The ADU block is always encoded as a single source block. There are 390 a total of B <= max_B ADUs in this ADU block. For the ADU i, with 0 391 <= i <= B-1, 3 bytes are prepended (Figure 2): 392 o The first byte, FID[i] (Flow ID), contains the integer identifier 393 associated to the source ADU flow to which this ADU belongs to. 394 It is assumed that a single byte is sufficient, or said 395 differently, that no more than 256 flows will be protected by a 396 single instance of the FECFRAME framework. 397 o The following two bytes, L[i] (Length), contain the length of this 398 ADU, in network byte order (i.e., big endian). This length is for 399 the ADU itself and does not include the FID[i], L[i], or Pad[i] 400 fields. 402 Then zero padding is added to ADU i (if needed) in field Pad[i], for 403 alignment purposes up to a size of exactly E bytes. The data unit 404 resulting from the ADU i and the F[i], L[i] and Pad[i] fields, is 405 called ADU Information (or ADUI). Each ADUI contributes to exactly 406 one source symbol to the source block. 408 Encoding Symbol Length (E) 409 < -------------------------------------------------------------- > 410 +----+----+-----------------------+------------------------------+ 411 |F[0]|L[0]| ADU[0] | Pad[0] | 412 +----+----+----------+------------+------------------------------+ 413 |F[1]|L[1]| ADU[1] | Pad[1] | 414 +----+----+----------+-------------------------------------------+ 415 |F[2]|L[2]| ADU[2] | 416 +----+----+------+-----------------------------------------------+ 417 |F[3]|L[3]|ADU[3]| Pad[3] | 418 +----+----+------+-----------------------------------------------+ 419 \_______________________________ _______________________________/ 420 \/ 421 simple FEC encoding 423 +----------------------------------------------------------------+ 424 | Repair 4 | 425 +----------------------------------------------------------------+ 426 . . 427 . . 428 +----------------------------------------------------------------+ 429 | Repair 7 | 430 +----------------------------------------------------------------+ 432 Figure 2: Source block creation, for code rate 1/2 (equal number of 433 source and repair symbols, 4 in this example), and S = 0. 435 Note that neither the initial 3 bytes nor the optional padding are 436 sent over the network. However, they are considered during FEC 437 encoding. It means that a receiver who lost a certain FEC source 438 packet (e.g., the UDP datagram containing this FEC source packet) 439 will be able to recover the ADUI if FEC decoding succeeds. Thanks to 440 the initial 3 bytes, this receiver will get rid of the padding (if 441 any) and identify the corresponding ADU flow. 443 5. LDPC-Staircase FEC Scheme for Arbitrary ADU Flows 445 5.1. Formats and Codes 447 5.1.1. FEC Framework Configuration Information 449 The FEC Framework Configuration Information (or FFCI) includes 450 information that MUST be communicated between the sender and 451 receiver(s). More specifically, it enables the synchronization of 452 the FECFRAME sender and receiver instances. It includes both 453 mandatory elements and scheme-specific elements, as detailed below. 455 5.1.1.1. Mandatory Information 457 FEC Encoding ID: the value assigned to this fully-specified FEC 458 scheme MUST be XXX, as assigned by IANA (Section 8). 459 When SDP is used to communicate the FFCI, this FEC Encoding ID is 460 carried in the 'encoding-id' parameter. 462 5.1.1.2. FEC Scheme-Specific Information 464 The FEC Scheme Specific Information (FSSI) includes elements that are 465 specific to the present FEC scheme. More precisely: 466 PRNG seed (seed): a non-negative 32 bit integer used as the seed of 467 the Pseudo Random Number Generator, as defined in [RFC5170]. 468 Encoding symbol length (E): a non-negative integer that indicates 469 either the length of each encoding symbol in bytes (strict mode, 470 i.e., if S = 1), or the maximum length of any encoding symbol 471 (i.e., if S = 0). 472 Strict (S) flag: when set to 1 this flag indicates that the E 473 parameter is the actual encoding symbol length value for each 474 block of the session (unless otherwise notified by an updated FFCI 475 if this possibility is considered by the use-case or CDP). When 476 set to 0 this flag indicates that the E parameter is the maximum 477 encoding symbol length value for each block of the session (unless 478 otherwise notified by an updated FFCI if this possibility is 479 considered by the use-case or CDP). 480 N1 minus 3 (n1m3): an integer between 0 (default) and 7, inclusive. 481 The number of "1s" per column in the left side of the parity check 482 matrix, N1, is then equal to N1m3 + 3, as specified in [RFC5170]. 483 These elements are required both by the sender (LDPC-Staircase 484 encoder) and the receiver(s) (LDPC-Staircase decoder). 486 When SDP is used to communicate the FFCI, this FEC scheme-specific 487 information is carried in the 'fssi' parameter in textual 488 representation as specified in [RFC6364]. For instance: 490 fssi=seed:1234,E:1400,S:0,n1m3:0 492 If another mechanism requires the FSSI to be carried as an opaque 493 octet string (for instance after a Base64 encoding), the encoding 494 format consists of the following 7 octets: 495 o PRNG seed (seed): 32 bit field. 496 o Encoding symbol length (E): 16 bit field. 497 o Strict (S) flag: 1 bit field. 498 o Reserved: a 4 bit field that MUST be set to zero. 500 o N1m3 parameter (n1m3): 3 bit field. 502 0 1 2 503 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 504 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 505 | PRNG seed (seed) | 506 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 507 | Encoding Symbol Length (E) |S| resvd | n1m3| 508 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 510 Figure 3: FSSI encoding format. 512 5.1.2. Explicit Source FEC Payload ID 514 A FEC source packet MUST contain an Explicit Source FEC Payload ID 515 that is appended to the end of the packet as illustrated in Figure 4. 517 +--------------------------------+ 518 | IP Header | 519 +--------------------------------+ 520 | Transport Header | 521 +--------------------------------+ 522 | ADU | 523 +--------------------------------+ 524 | Explicit Source FEC Payload ID | 525 +--------------------------------+ 527 Figure 4: Structure of a FEC Source Packet with the Explicit Source 528 FEC Payload ID. 530 More precisely, the Explicit Source FEC Payload ID is composed of the 531 following fields (Figure 5): 532 Source Block Number (SBN) (16 bit field): this field identifies the 533 source block to which this FEC source packet belongs. 534 Encoding Symbol ID (ESI) (16 bit field): this field identifies the 535 source symbol contained in this FEC source packet. This value is 536 such that 0 <= ESI <= k - 1 for source symbols. 537 Source Block Length (k) (16 bit field): this field provides the 538 number of source symbols for this source block, i.e., the k 539 parameter. 541 0 1 2 3 542 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 543 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 544 | Source Block Number (SBN) | Encoding Symbol ID (ESI) | 545 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 546 | Source Block Length (k) | 547 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 549 Figure 5: Source FEC Payload ID encoding format. 551 5.1.3. Repair FEC Payload ID 553 A FEC repair packet MUST contain a Repair FEC Payload ID that is 554 prepended to the repair symbol(s) as illustrated in Figure 6. There 555 MUST be a single repair symbol per FEC repair packet. 557 +--------------------------------+ 558 | IP Header | 559 +--------------------------------+ 560 | Transport Header | 561 +--------------------------------+ 562 | Repair FEC Payload ID | 563 +--------------------------------+ 564 | Repair Symbol | 565 +--------------------------------+ 567 Figure 6: Structure of a FEC Repair Packet with the Repair FEC 568 Payload ID. 570 More precisely, the Repair FEC Payload ID is composed of the 571 following fields: (Figure 7): 572 Source Block Number (SBN) (16 bit field): this field identifies the 573 source block to which the FEC repair packet belongs. 574 Encoding Symbol ID (ESI) (16 bit field) this field identifies the 575 repair symbol contained in this FEC repair packet. This value is 576 such that k <= ESI <= n - 1 for repair symbols. 577 Source Block Length (k) (16 bit field): this field provides the 578 number of source symbols for this source block, i.e., the k 579 parameter. 580 Number of Encoding Symbols (n) (16 bit field): this field provides 581 the number of encoding symbols for this source block, i.e., the n 582 parameter. 584 0 1 2 3 585 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 586 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 587 | Source Block Number (SBN) | Encoding Symbol ID (ESI) | 588 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 589 | Source Block Length (k) | Number Encoding Symbols (n) | 590 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 592 Figure 7: Repair FEC Payload ID encoding format. 594 5.2. Procedures 596 The following procedures apply: 597 o The source block creation MUST follow the procedures specified in 598 Section 4.3. 599 o The SBN value MUST start with value 0 for the first block of the 600 ADU flow and MUST be incremented by 1 for each new source block. 601 Wrapping to zero will happen for long sessions, after value 2^^16 602 - 1. 603 o The ESI of encoding symbols MUST start with value 0 for the first 604 symbol and MUST be managed sequentially. The first k values (0 <= 605 ESI <= k - 1) identify source symbols whereas the last n-k values 606 (k <= ESI <= n - 1) identify repair symbols. 607 o The FEC repair packet creation MUST follow the procedures 608 specified in Section 5.1.3. 610 5.3. FEC Code Specification 612 The present document inherits from [RFC5170] the specification of the 613 core LDPC-Staircase codes for a packet erasure transmission channel. 615 Because of the requirement to have exactly one encoding symbol per 616 group, i.e., because G MUST be equal to 1 (Section 4.1), several 617 parts of [RFC5170] are useless. In particular, this is the case of 618 Section 5.6. "Identifying the G Symbols of an Encoding Symbol 619 Group". 621 6. Security Considerations 623 The FEC Framework document [RFC6363] provides a comprehensive 624 analysis of security considerations applicable to FEC schemes. 625 Therefore the present section follows the security considerations 626 section of [RFC6363] and only discusses topics that are specific to 627 the use of LDPC-Staircase codes. 629 6.1. Attacks Against the Data Flow 631 6.1.1. Access to Confidential Content 633 The LDPC-Staircase FEC Scheme specified in this document does not 634 change the recommendations of [RFC6363]. To summarize, if 635 confidentiality is a concern, it is RECOMMENDED that one of the 636 solutions mentioned in [RFC6363] is used, with special considerations 637 to the way this solution is applied (e.g., before versus after FEC 638 protection, and within the end-system versus in a middlebox), to the 639 operational constraints (e.g., performing FEC decoding in a protected 640 environment may be complicated or even impossible) and to the threat 641 model. 643 6.1.2. Content Corruption 645 The LDPC-Staircase FEC Scheme specified in this document does not 646 change the recommendations of [RFC6363]. To summarize, it is 647 RECOMMENDED that one of the solutions mentioned in [RFC6363] is used 648 on both the FEC Source and Repair Packets. 650 6.2. Attacks Against the FEC Parameters 652 The FEC Scheme specified in this document defines parameters that can 653 be the basis of several attacks. More specifically, the following 654 parameters of the FFCI may be modified by an attacker 655 (Section 5.1.1.2): 656 o FEC Encoding ID: changing this parameter leads the receiver to 657 consider a different FEC Scheme, which enables an attacker to 658 create a Denial of Service (DoS). 659 o Encoding symbol length (E): setting this E parameter to a value 660 smaller than the valid one enables an attacker to create a DoS 661 since the repair symbols and certain source symbols will be larger 662 than E, which is an incoherency for the receiver. Setting this E 663 parameter to a value larger than the valid one has similar impacts 664 when S=1 since the received repair symbol size will be smaller 665 than expected. On the opposite it will not lead to any 666 incoherency when S=0 since the actual symbol length value for the 667 block is determined by the size of any received repair symbol, as 668 long as this value is smaller than E. However setting this E 669 parameter to a larger value may have impacts on receivers that 670 pre-allocate memory space in advance to store incoming symbols. 671 o Strict (S) flag: flipping this S flag from 0 to 1 (i.e., E is now 672 considered as a strict value) enables an attacker to mislead the 673 receiver if the actual symbol size varies over different source 674 blocks. Flipping this S flag from 1 to 0 has no major 675 consequences unless the receiver requires to have a fixed E value 676 (e.g., because the receiver pre-allocates memory space). 678 o N1 minus 3 (n1m3): changing this parameter leads the receiver to 679 consider a different code, which enables an attacker to create a 680 DoS. 682 It is therefore RECOMMENDED that security measures are taken to 683 guarantee the FFCI integrity, as specified in [RFC6363]. How to 684 achieve this depends on the way the FFCI is communicated from the 685 sender to the receiver, which is not specified in this document. 687 Similarly, attacks are possible against the Explicit Source FEC 688 Payload ID and Repair FEC Payload ID: by modifying the Source Block 689 Number (SBN), or the Encoding Symbol ID (ESI), or the Source Block 690 Length (k), or the Number Encoding Symbols (n), an attacker can 691 easily corrupt the block identified by the SBN. Other consequences, 692 that are use-case and/or CDP dependant, may also happen. It is 693 therefore RECOMMENDED that security measures are taken to guarantee 694 the FEC Source and Repair Packets as stated in [RFC6363]. 696 6.3. When Several Source Flows are to be Protected Together 698 The LDPC-Staircase FEC Scheme specified in this document does not 699 change the recommendations of [RFC6363]. 701 6.4. Baseline Secure FEC Framework Operation 703 The LDPC-Staircase FEC Scheme specified in this document does not 704 change the recommendations of [RFC6363] concerning the use of the 705 IPsec/ESP security protocol as a mandatory to implement (but not 706 mandatory to use) security scheme. This is well suited to situations 707 where the only insecure domain is the one over which the FEC 708 Framework operates. 710 7. Operations and Management Considerations 712 The FEC Framework document [RFC6363] provides a comprehensive 713 analysis of operations and management considerations applicable to 714 FEC schemes. Therefore the present section only discusses topics 715 that are specific to the use of LDPC-Staircase codes as specified in 716 this document. 718 7.1. Operational Recommendations 720 LDPC-Staircase codes have excellent erasure recovery capabilities 721 with large source blocks, close to ideal MDS codes. For instance, 722 independently of FECFRAME, with source block size k=1024 symbols, 723 CR=2/3, N1=7, G=1, a hybrid ITerative/Maximum Likelihood (IT/ML) 724 decoding approach (see below) and when all symbols are sent in a 725 random order, the average overhead amounts to 0.237% (i.e., receiving 726 2.43 symbols in addition to k enables a successful decoding with a 727 probability 0.5) and an overhead of 1.46% (i.e., receiving 15 symbols 728 in addition to k) is sufficient to reduce the decoding failure 729 probability to 8.2*10^^-5. This is why these codes are a good 730 solution to protect a single high bitrate source flow as in 731 [Matsuzono10], or to protect globally several mid-rate source flows 732 within a single FECFRAME instance: in both cases the source block 733 size can be assumed to be equal to a few hundreds (or more) source 734 symbols. 736 LDPC-Staircase codes are also a good solution whenever processing 737 requirements at a software encoder or decoder must be kept to a 738 minimum. This is true when the decoder uses an IT decoding 739 algorithm, or an ML algorithm (we use a Gaussian Elimination as the 740 ML algorithm) when this latter is carefully implemented, or a mixture 741 of both techniques which is the recommended solution 742 [Cunche08][CunchePHD10][LDPC-codec-OpenFEC]. For instance an average 743 decoding speed between 1.78 Gbps (overhead of 2 symbols in addition 744 to k, corresponding to a very bad channel, close to the theoretical 745 decoding limit, where ML decoding is required) and 3.41 Gbps 746 (corresponding to a medium quality channel where IT decoding is 747 sufficient) is easily achieved with a source block size composed of 748 k=1024 source symbols, a code rate CR=2/3 (i.e., 512 repair symbols), 749 1024 byte long symbols, G=1, and N1=7, on an Intel Xeon 5120/1.86GHz 750 workstation running Linux/64 bits. Under the same conditions, on a 751 Samsung Galaxy SII (GT-I9100P model, featuring an ARM Cortex-A9/1.2 752 GHz processor and running Android 2.3.4), decoding speed is between 753 278 Mbps (overhead of 2 symbols and ML decoding) and 626 Mbps (IT 754 decoding). 756 As the source block size decreases, the erasure recovery capabilities 757 of LDPC codes in general also decrease. In the case of LDPC- 758 Staircase codes, in order to limit this phenomenon, it is recommended 759 to use a value of the N1 parameter at least equal to 7 (e.g., 760 experiments carried out in [Matsuzono10] use N1=7 if k=170 symbols, 761 and N1=5 otherwise). For instance, independently of FECFRAME, with 762 source block size k=256 symbols, CR=2/3, N1=7, and G=1, the average 763 overhead amounts to 0.706% (i.e., receiving 1.8 symbols in addition 764 to k enables a successful decoding with a probability 0.5), and an 765 overhead of 5.86% (i.e., receiving 15 symbols ina addition to k) is 766 sufficient to reduce the decoding failure probability to 5.9*10^^-5. 768 With very small source blocks (e.g., a few tens of symbols), using 769 for instance Reed-Solomon codes [SIMPLE_RS] or 2D parity check codes 770 may be more appropriate. 772 The way the FEC Repair Packets are transmitted is of high importance. 774 A good strategy, that works well for any kind of channel loss model, 775 consists in sending FEC Repair Packets in random order (rather than 776 in sequence) while FEC Source Packets are sent first and in sequence. 777 Sending all packets in a random order is another possibility, but it 778 requires that all repair symbols for a source block be produced 779 first, which adds some extra delay at a sender. 781 8. IANA Considerations 783 This document registers one value in the FEC Framework (FECFRAME) FEC 784 Encoding IDs registry [RFC6363] as follows: 785 o XXX refers to the Simple LDPC-Staircase FEC Scheme for Arbitrary 786 Packet Flows, as defined in Section 5 of this document. 788 9. Acknowledgments 790 The authors want to thank K. Matsuzono, J. Detchart and H. Asaeda for 791 their contributions in evaluating the use of LDPC-Staircase codes in 792 the context of FECFRAME [Matsuzono10]. 794 10. References 796 10.1. Normative References 798 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 799 Requirement Levels", RFC 2119. 801 [RFC5170] Roca, V., Neumann, C., and D. Furodet, "Low Density Parity 802 Check (LDPC) Forward Error Correction", RFC 5170, 803 June 2008. 805 [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error 806 Correction (FEC) Framework", RFC 6363, September 2011. 808 [RFC6364] Begen, A., "Session Description Protocol Elements for the 809 Forward Error Correction (FEC) Framework", RFC 6364, 810 October 2011. 812 10.2. Informative References 814 [RFC3453] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, 815 M., and J. Crowcroft, "The Use of Forward Error Correction 816 (FEC) in Reliable Multicast", RFC 3453, December 2002. 818 [RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward Error 819 Correction (FEC) Building Block", RFC 5052, August 2007. 821 [RFC5510] Lacan, J., Roca, V., Peltotalo, J., and S. Peltotalo, 822 "Reed-Solomon Forward Error Correction (FEC) Schemes", 823 RFC 5510, April 2009. 825 [SIMPLE_RS] 826 Roca, V., Cunche, M., Lacan, J., Bouabdallah, A., and K. 827 Matsuzono, "Simple Reed-Solomon Forward Error Correction 828 (FEC) Scheme for FECFRAME", 829 draft-ietf-fecframe-simple-rs-02 (Work in Progress), 830 March 2012. 832 [RFC5053] Luby, M., Shokrollahi, A., Watson, M., and T. Stockhammer, 833 "Raptor Forward Error Correction Scheme", RFC 5053, 834 June 2007. 836 [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, 837 "NACK-Oriented Reliable Multicast (NORM) Transport 838 Protocol", RFC 5740, November 2009. 840 [RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous 841 Layered Coding (ALC) Protocol Instantiation", RFC 5775, 842 April 2010. 844 [Cunche08] 845 Cunche, M. and V. Roca, "Optimizing the Error Recovery 846 Capabilities of LDPC-Staircase Codes Featuring a Gaussian 847 Elimination Decoding Scheme", 10th IEEE International 848 Workshop on Signal Processing for Space Communications 849 (SPSC'08), October 2008. 851 [CunchePHD10] 852 Cunche, M., "High performances AL-FEC codes for the 853 erasure channel : variation around LDPC codes", PhD 854 dissertation (in 855 French) (http://tel.archives-ouvertes.fr/tel- 856 00451336/en/), June 2010. 858 [Matsuzono10] 859 Matsuzono, K., Detchart, J., Cunche, M., Roca, V., and H. 860 Asaeda, "Performance Analysis of a High-Performance Real- 861 Time Application with Several AL-FEC Schemes", 35th Annual 862 IEEE Conference on Local Computer Networks (LCN 2010), 863 October 2010. 865 [LDPC-codec] 866 Cunche, M., Roca, V., Neumann, C., and J. Laboure, "LDPC- 867 Staircase/LDPC-Triangle Codec Reference Implementation", 868 INRIA Rhone-Alpes and STMicroelectronics, 869 . 871 [LDPC-codec-OpenFEC] 872 "The OpenFEC project", . 874 Authors' Addresses 876 Vincent Roca 877 INRIA 878 655, av. de l'Europe 879 Inovallee; Montbonnot 880 ST ISMIER cedex 38334 881 France 883 Email: vincent.roca@inria.fr 884 URI: http://planete.inrialpes.fr/people/roca/ 886 Mathieu Cunche 887 INSA-Lyon/INRIA 888 Laboratoire CITI 889 6 av. des Arts 890 Villeurbanne cedex 69621 891 France 893 Email: mathieu.cunche@inria.fr 894 URI: http://mathieu.cunche.free.fr/ 896 Jerome Lacan 897 ISAE, Univ. of Toulouse 898 10 av. Edouard Belin; BP 54032 899 Toulouse cedex 4 31055 900 France 902 Email: jerome.lacan@isae.fr 903 URI: http://personnel.isae.fr/jerome-lacan/