diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3453.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3453.txt')
-rw-r--r-- | doc/rfc/rfc3453.txt | 1011 |
1 files changed, 1011 insertions, 0 deletions
diff --git a/doc/rfc/rfc3453.txt b/doc/rfc/rfc3453.txt new file mode 100644 index 0000000..93c5dcd --- /dev/null +++ b/doc/rfc/rfc3453.txt @@ -0,0 +1,1011 @@ + + + + + + +Network Working Group M. Luby +Request for Comments: 3453 Digital Fountain +Category: Informational L. Vicisano + Cisco + J. Gemmell + Microsoft + L. Rizzo + Univ. Pisa + M. Handley + ICIR + J. Crowcroft + Cambridge Univ. + December 2002 + + + The Use of Forward Error Correction (FEC) in Reliable Multicast + +Status of this Memo + + This memo provides information for the Internet community. It does + not specify an Internet standard of any kind. Distribution of this + memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2002). All Rights Reserved. + +Abstract + + This memo describes the use of Forward Error Correction (FEC) codes + to efficiently provide and/or augment reliability for one-to-many + reliable data transport using IP multicast. One of the key + properties of FEC codes in this context is the ability to use the + same packets containing FEC data to simultaneously repair different + packet loss patterns at multiple receivers. Different classes of FEC + codes and some of their basic properties are described and + terminology relevant to implementing FEC in a reliable multicast + protocol is introduced. Examples are provided of possible abstract + formats for packets carrying FEC. + + + + + + + + + + + + +Luby, et. al. Informational [Page 1] + +RFC 3453 FEC in Reliable Multicast December 2002 + + +Table of Contents + + 1. Rationale and Overview . . . . . . . . . . . . . . . . . . . . 2 + 1.1. Application of FEC codes . . . . . . . . . . . . . . . . . 5 + 2. FEC Codes. . . . . . . . . . . . . . . . . . . . . . . . . . . 6 + 2.1. Simple codes . . . . . . . . . . . . . . . . . . . . . . . 6 + 2.2. Small block FEC codes. . . . . . . . . . . . . . . . . . . 8 + 2.3. Large block FEC codes. . . . . . . . . . . . . . . . . . . 10 + 2.4. Expandable FEC codes . . . . . . . . . . . . . . . . . . . 11 + 2.5. Source blocks with variable length source symbols. . . . . 13 + 3. Security Considerations. . . . . . . . . . . . . . . . . . . . 14 + 4. Intellectual Property Disclosure . . . . . . . . . . . . . . . 14 + 5. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 15 + 6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 + 7. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 17 + 8. Full Copyright Statement . . . . . . . . . . . . . . . . . . . 18 + +1. Rationale and Overview + + There are many ways to provide reliability for transmission + protocols. A common method is to use ARQ, automatic request for + retransmission. With ARQ, receivers use a back channel to the sender + to send requests for retransmission of lost packets. ARQ works well + for one-to-one reliable protocols, as evidenced by the pervasive + success of TCP/IP. ARQ has also been an effective reliability tool + for one-to-many reliability protocols, and in particular for some + reliable IP multicast protocols. However, for one-to-very-many + reliability protocols, ARQ has limitations, including the feedback + implosion problem because many receivers are transmitting back to the + sender, and the need for a back channel to send these requests from + the receiver. Another limitation is that receivers may experience + different loss patterns of packets, and thus receivers may be delayed + by retransmission of packets that other receivers have lost that but + they have already received. This may also cause wasteful use of + bandwidth used to retransmit packets that have already been received + by many of the receivers. + + In environments where ARQ is either costly or impossible because + there is either a very limited capacity back channel or no back + channel at all, such as satellite transmission, a Data Carousel + approach to reliability is sometimes used [1]. With a Data Carousel, + the sender partitions the object into equal length pieces of data, + which we hereafter call source symbols, places them into packets, and + then continually cycles through and sends these packets. Receivers + continually receive packets until they have received a copy of each + packet. Data Carousel has the advantage that it requires no back + channel because there is no data that flows from receivers to the + sender. However, Data Carousel also has limitations. For example, + + + +Luby, et. al. Informational [Page 2] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + if a receiver loses a packet in one round of transmission it must + wait an entire round before it has a chance to receive that packet + again. This may also cause wasteful use of bandwidth, as the sender + continually cycles through and transmits the packets until no + receiver is missing a packet. + + Forward Error Correction (FEC) codes provide a reliability method + that can be used to augment or replace other reliability methods, + especially for one-to-many reliability protocols such as reliable IP + multicast. We first briefly review some of the basic properties and + types of FEC codes before reviewing their uses in the context of + reliable IP multicast. Later, we provide a more detailed description + of some of FEC codes. + + In the general literature, FEC refers to the ability to overcome both + erasures (losses) and bit-level corruption. However, in the case of + an IP multicast protocol, the network layers will detect corrupted + packets and discard them or the transport layers can use packet + authentication to discard corrupted packets. Therefore the primary + application of FEC codes to IP multicast protocols is as an erasure + code. The payloads are generated and processed using an FEC erasure + encoder and objects are reassembled from reception of packets + containing the generated encoding using the corresponding FEC erasure + decoder. + + The input to an FEC encoder is some number k of equal length source + symbols. The FEC encoder generates some number of encoding symbols + that are of the same length as the source symbols. The chosen length + of the symbols can vary upon each application of the FEC encoder, or + it can be fixed. These encoding symbols are placed into packets for + transmission. The number of encoding symbols placed into each packet + can vary on a per packet basis, or a fixed number of symbols (often + one) can be placed into each packet. Also, in each packet is placed + enough information to identify the particular encoding symbols + carried in that packet. Upon receipt of packets containing encoding + symbols, the receiver feeds these encoding symbols into the + corresponding FEC decoder to recreate an exact copy of the k source + symbols. Ideally, the FEC decoder can recreate an exact copy from + any k of the encoding symbols. + + In a later section, we describe a technique for using FEC codes as + described above to handle blocks with variable length source symbols. + + Block FEC codes work as follows. The input to a block FEC encoder is + k source symbols and a number n. The encoder generates a total of n + encoding symbols. The encoder is systematic if it generates n-k + redundant symbols yielding an encoding block of n encoding symbols in + total composed of the k source symbols and the n-k redundant symbols. + + + +Luby, et. al. Informational [Page 3] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + A block FEC decoder has the property that any k of the n encoding + symbols in the encoding block is sufficient to reconstruct the + original k source symbols. + + Expandable FEC codes work as follows. An expandable FEC encoder + takes as input k source symbols and generates as many unique encoding + symbols as requested on demand, where the amount of time for + generating each encoding symbol is the same independent of how many + encoding symbols are generated. An expandable FEC decoder has the + property that any k of the unique encoding symbols is sufficient to + reconstruct the original k source symbols. + + The above definitions explain the ideal situation when the reception + of any k encoding symbols is sufficient to recover the k source + symbols, in which case the reception overhead is 0%. For some + practical FEC codes, slightly more than k encoding symbols are needed + to recover the k source symbols. If k*(1+ep) encoding symbols are + needed, we say the reception overhead is ep*100%, e.g., if k*1.05 + encoding symbols are needed then the reception overhead is 5%. + + Along a different dimension, we classify FEC codes loosely as being + either small or large. A small FEC code is efficient in terms of + processing time requirements for encoding and decoding for small + values of k, and a large FEC code is efficient for encoding and + decoding for much large values of k. There are implementations of + block FEC codes that have encoding times proportional to n-k times + the length of the k source symbols, and decoding times proportional + to l times the length of the k source symbols, where l is the number + of missing source symbols among the k received encoding symbols and l + can be as large as k. Because of the growth rate of the encoding and + decoding times as a product of k and n-k, these are typically + considered to be small block FEC codes. There are block FEC codes + with a small reception overhead that can generate n encoding symbols + and can decode the k source symbols in time proportional to the + length of the n encoding symbols. These codes are considered to be + large block FEC codes. There are expandable FEC codes with a small + reception overhead that can generate each encoding symbol in time + roughly proportional to its length, and can decode all k source + symbols in time roughly proportional to their length. These are + considered to be large expandable FEC codes. We describe examples of + all of these types of codes later. + + Ideally, FEC codes in the context of IP multicast can be used to + generate encoding symbols that are transmitted in packets in such a + way that each received packet is fully useful to a receiver to + reassemble the object regardless of previous packet reception + patterns. Thus, if some packets are lost in transit between the + sender and the receiver, instead of asking for specific + + + +Luby, et. al. Informational [Page 4] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + retransmission of the lost packets or waiting till the packets are + resent using Data Carousel, the receiver can use any other subsequent + equal number of packets that arrive to reassemble the object. These + packets can either be proactively transmitted or they can be + explicitly requested by receivers. This implies that the same packet + is fully useful to all receivers to reassemble the object, even + though the receivers may have previously experienced different packet + loss patterns. This property can reduce or even eliminate the + problems mentioned above associated with ARQ and Data Carousel and + thereby dramatically increase the scalability of the protocol to + orders of magnitude more receivers. + +1.1. Application of FEC codes + + For some reliable IP multicast protocols, FEC codes are used in + conjunction with ARQ to provide reliability. For example, a large + object could be partitioned into a number of source blocks consisting + of a small number of source symbols each, and in a first round of + transmission all of the source symbols for all the source blocks + could be transmitted. Then, receivers could report back to the + sender the number of source symbols they are missing from each source + block. The sender could then compute the maximum number of missing + source symbols from each source block among all receivers. Based on + this, a small block FEC encoder could be used to generate for each + source block a number of redundant symbols equal to the computed + maximum number of missing source symbols from the block among all + receivers, as long as this maximum maximum for each block does not + exceed the number of redundant symbols that can be generated + efficiently. In a second round of transmission, the server would + then send all of these redundant symbols for all blocks. In this + example, if there are no losses in the second round of transmission + then all receivers will be able to recreate an exact copy of each + original block. In this case, even if different receivers are + missing different symbols in different blocks, transmitted redundant + symbols for a given block are useful to all receivers missing symbols + from that block in the second round. + + For other reliable IP multicast protocols, FEC codes are used in a + Data Carousel fashion to provide reliability, which we call an FEC + Data Carousel. For example, an FEC Data Carousel using a large block + FEC code could work as follows. The large block FEC encoder produces + n encoding symbols considering all the k source symbols of an object + as one block. The sender cycles through and transmits the n encoding + symbols in packets in the same order in each round. An FEC Data + Carousel can have much better protection against packet loss than a + Data Carousel. For example, a receiver can join the transmission at + any point in time, and, as long as the receiver receives at least k + encoding symbols during the transmission of the next n encoding + + + +Luby, et. al. Informational [Page 5] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + symbols, the receiver can completely recover the object. This is + true even if the receiver starts receiving packets in the middle of a + pass through the encoding symbols. This method can also be used when + the object is partitioned into blocks and a short block FEC code is + applied to each block separately. In this case, as we explain in + more detail below, it is useful to interleave the symbols from the + different blocks when they are transmitted. + + Since any number of encoding symbols can be generated using an + expandable FEC encoder, reliable IP multicast protocols that use + expandable FEC codes generally rely solely on these codes for + reliability. For example, when an expandable FEC code is used in a + FEC Data Carousel application, the encoding packets never repeat, and + thus any k of the encoding symbols in the potentially unbounded + number of encoding symbols are sufficient to recover the original k + source symbols. + + For additional reliable IP multicast protocols, the method to obtain + reliability is to generate enough encoding symbols so that each + encoding symbol is transmitted only once (at most). For example, the + sender can decide a priori how many encoding symbols it will + transmit, use an FEC code to generate that number of encoding symbols + from the object, and then transmit the encoding symbols to all + receivers. This method is applicable to streaming protocols, for + example, where the stream is partitioned into objects, the source + symbols for each object are encoded into encoding symbols using an + FEC code, and then the sets of encoding symbols for each object are + transmitted one after the other using IP multicast. + +2. FEC Codes + +2.1. Simple codes + + There are some very simple codes that are effective for repairing + packet loss under very low loss conditions. For example, to provide + protection from a single loss is to partition the object into fixed + size source symbols and then add a redundant symbol that is the + parity (XOR) of all the source symbols. The size of a source symbol + is chosen so that it fits perfectly into the payload of a packet, + i.e. if the packet payload is 512 bytes then each source symbol is + 512 bytes. The header of each packet contains enough information to + identify the payload. This is an example of encoding symbol ID. The + encoding symbol IDs can consist of two parts in this example. The + first part is an encoding flag that is equal to 1 if the encoding + symbol is a source symbol and is equal to 0 if the encoding symbol is + a redundant symbol. The second part of the encoding symbol ID is a + source symbol ID if the encoding flag is 1 and a redundant symbol ID + if the encoding flag is 0. The source symbol IDs can be numbered + + + +Luby, et. al. Informational [Page 6] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + from 0 to k-1 and the redundant symbol ID can be 0. For example, if + the object consists of four source symbols that have values a, b, c + and d, then the value of the redundant symbol is e = a XOR b XOR c + XOR d. Then, the packets carrying these symbols look like: + + (1, 0: a), (1, 1: b), (1, 2: c), (1, 3: d), (0, 0: e). + + In this example, the encoding symbol ID consists of the first two + values, where the first value is the encoding flag and the second + value is either a source symbol ID or the redundant symbol ID. The + portion of the packet after the colon is the value of the encoding + symbol. Any single source symbol of the object can be recovered as + the parity of all the other symbols. For example, if packets + + (1, 0: a), (1, 1: b), (1, 3: d), (0, 0: e) + + are received then the missing source symbol value with source symbol + ID = 2 can be recovered by computing a XOR b XOR d XOR e = c. + + Another way of forming the encoding symbol ID is to let values + 0,...,k-1 correspond to the k source symbols and value k correspond + to the redundant symbol that is the XOR of the k source symbols. + + When the number of source symbols in the object is large, a simple + block code variant of the above can be used. In this case, the + source symbols are grouped together into source blocks of some number + k of consecutive symbols each, where k may be different for different + blocks. If a block consists of k source symbols then a redundant + symbol is added to form an encoding block consisting of k+1 encoding + symbols. Then, a source block consisting of k source symbols can be + recovered from any k of the k+1 encoding symbols from the associated + encoding block. + + Slightly more sophisticated ways of adding redundant symbols using + parity can also be used. For example, one can group a block + consisting of k source symbols in an object into a p x p square + matrix, where p = sqrt(k). Then, for each row a redundant symbol is + added that is the parity of all the source symbols in the row. + Similarly, for each column a redundant symbol is added that is the + parity of all the source symbols in the column. Then, any row of the + matrix can be recovered from any p of the p+1 symbols in the row, and + similarly for any column. Higher dimensional product codes using + this technique can also be used. However, one must be wary of using + these constructions without some thought towards the possible loss + patterns of symbols. Ideally, the property that one would like to + obtain is that if k source symbols are encoded into n encoding + symbols (the encoding symbols consist of the source symbols and the + redundant symbols) then the k source symbols can be recovered from + + + +Luby, et. al. Informational [Page 7] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + any k of the n encoding symbols. Using the simple constructions + described above does not yield codes that come close to obtaining + this ideal behavior. + +2.2. Small block FEC codes + + Reliable IP multicast protocols may use a block (n, k) FEC code [2]. + For such codes, k source symbols are encoded into n > k encoding + symbols, such that any k of the encoding symbols can be used to + reassemble the original k source symbols. Thus, these codes have no + reception overhead when used to encode the entire object directly. + Block codes are usually systematic, which means that the n encoding + symbols consist of the k source symbols and n-k redundant symbols + generated from these k source symbols, where the size of a redundant + symbol is the same as that for a source symbol. For example, the + first simple code (XOR) described in the previous subsection is a + (k+1, k) code. In general, the freedom to choose n larger than k+1 + is desirable, as this can provide much better protection against + losses. A popular example of these types of codes is a class of + Reed-Solomon codes, which are based on algebraic methods using finite + fields. Implementations of (n, k) FEC erasure codes are efficient + enough to be used by personal computers [16]. For example, [15] + describes an implementation where the encoding and decoding speeds + decay as C/j, where the constant C is on the order of 10 to 80 + Mbytes/second for Pentium class machines of various vintages and j is + upper bounded by min(k, n-k). + + In practice, the values of k and n must be small (for example below + 256) for such FEC codes as large values make encoding and decoding + prohibitively expensive. As many objects are longer than k symbols + for reasonable values of k and the symbol length (e.g. larger than 16 + kilobyte for k = 16 using 1 kilobyte symbols), they can be divided + into a number of source blocks. Each source block consists of some + number k of source symbols, where k may vary between different source + blocks. The FEC encoder is used to encode a k source symbol source + block into a n encoding symbol encoding block, where the number n of + encoding symbols in the encoding block may vary for each source + block. For a receiver to completely recover the object, for each + source block consisting of k source symbols, k distinct encoding + symbols (i.e., with different encoding symbol IDs) must be received + from the corresponding encoding block. For some encoding blocks, + more encoding symbols may be received than there are source symbols + in the corresponding source block, in which case the excess encoding + symbols are discarded. An example encoding structure is shown in + Figure 1. + + + + + + +Luby, et. al. Informational [Page 8] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + | source symbol IDs | source symbols IDs | + | of source block 0 | of source block 1 | + | | + v v + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |0 |1 |2 |3 |4 |5 |6 |7 |0 |1 |2 |3 | 4|5 |6 |7 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | + FEC encoder + | + v + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |0 |1 |2 |3 | 4| 5| 6| 7| 8| 9| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + ^ ^ + | | + | encoding symbol IDs | encoding symbol IDs | + | of encoding block 0 | of encoding block 1 | + + Figure 1. The encoding structure for an object divided into two + source blocks consisting of 8 source symbols each, and the FEC + encoder is used to generate 2 additional redundant symbols (10 + encoding symbols in total) for each of the two source blocks. + + In many cases, an object is partitioned into equal length source + blocks each consisting of k contiguous source symbols of the object, + i.e., block c consists of the range of source symbols [ck, (c+1)k-1]. + This ensures that the FEC encoder can be optimized to handle a + particular number k of source symbols. This also ensures that memory + references are local when the sender reads source symbols to encode, + and when the receiver reads encoding symbols to decode. Locality of + reference is particularly important when the object is stored on + disk, as it reduces the disk seeks required. The block number and + the source symbol ID within that block can be used to uniquely + specify a source symbol within the object. If the size of the object + is not a multiple of k source symbols, then the last source block + will contain less than k symbols. + + The block numbers can be numbered consecutively starting from zero. + Encoding symbols within a block can be uniquely identified by an + encoding symbol ID. One way of identifying encoding symbols within a + block is to use the combination of an encoding flag that identifies + the symbol as either a source symbol or a redundant symbol together + with either a source symbol ID or a redundant symbol ID. For + example, an encoding flag value of 1 can indicate that the encoding + symbol is a source symbol and 0 can indicate that it is a redundant + symbol. The source symbol IDs can be numbered from 0 to k-1 and the + redundant symbol IDs can be numbered from 0 to n-k-1. + + + +Luby, et. al. Informational [Page 9] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + For example, if the object consists 10 source symbols with values a, + b, c, d, e, f, g, h, i, and j, and k = 5 and n = 8, then there are + two source blocks consisting of 5 symbols each, and there are two + encoding blocks consisting of 8 symbols each. Let p, q and r be the + values of the redundant symbols for the first encoding block, and let + x, y and z be the values of the redundant symbols for the second + encoding block. Then the encoding symbols together with their + identifiers are + + (0, 1, 0: a), (0, 1, 1: b), (0, 1, 2: c), (0, 1, 3: d), (0, 1, 4: e), + (0, 0, 0: p), (0, 0, 1: q), (0, 0, 2: r), + (1, 1, 0: f), (1, 1, 1: g), (1, 1, 2: h), (1, 1, 3: i), (1, 1, 4: j), + (1, 0, 0: x), (1, 0, 1: y), (1, 0, 2: z). + + In this example, the first value identifies the block number and the + second two values together identify the encoding symbol within the + block, i.e, the encoding symbol ID consists of the encoding flag + together with either the source symbol ID or the redundant symbol ID + depending on the value of the encoding flag. The value of the + encoding symbol is written after the colon. Each block can be + recovered from any 5 of the 8 encoding symbols associated with that + block. For example, reception of + + (0, 1, 1: b), (0, 1, 2: c), (0, 1, 3: d), (0, 0, 0: p), (0, 0, 1: q) + + is sufficient to recover the first source block, and reception of + + (1, 1, 0: f), (1, 1, 1: g), (1, 0, 0: x), (1, 0, 1: y), (1, 0, 2: z) + + is sufficient to recover the second source block. + + Another way of uniquely identifying encoding symbols within a block + is to let the encoding symbol IDs for source symbols be 0,...,k-1 and + to let the encoding symbol IDs for redundant symbols be k,...,n-1. + +2.3. Large block FEC codes + + Tornado codes [12], [13], [10], [11], [9] are large block FEC codes + that provide an alternative to small block FEC codes. An (n, k) + Tornado code requires slightly more than k out of n encoding symbols + to recover k source symbols, i.e., there is a small reception + overhead. The benefit of the small cost of non-zero reception + overhead is that the value of k may be on the order of tens of + thousands and still the encoding and decoding are efficient. Because + of memory considerations, in practice the value of n is restricted to + be a small multiple of k, e.g., n = 2k. For example, [4] describes + an implementation of Tornado codes where the encoding and decoding + speeds are tens of megabytes per second for Pentium class machines of + + + +Luby, et. al. Informational [Page 10] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + various vintages when k is in the tens of thousands and n = 2k. The + reception overhead for such values of k and n is in the 5-10% range. + Tornado codes require a large amount of out of band information to be + communicated to all senders and receivers for each different object + length, and require an amount of memory on the encoder and decoder + which is proportional to the object length times 2n/k. + + Tornado codes are designed to have low reception overhead on average + with respect to reception of a random portion of the encoding + packets. Thus, to ensure that a receiver can reassemble the object + with low reception overhead, the packets are permuted into a random + order before transmission. + +2.4. Expandable FEC codes + + All of the FEC codes described up to this point are block codes. + There is a different type of FEC codes that we call expandable FEC + codes. Like block codes, an expandable FEC encoder operates on an + object of known size that is partitioned into equal length source + symbols. Unlike block codes, there is no predetermined number of + encoding symbols that can be generated for expandable FEC codes. + Instead, an expandable FEC encoder can generate as few or as many + unique encoding symbols as required on demand. + + LT codes [6], [7], [8], [5] are an example of large expandable FEC + codes with a small reception overhead. An LT encoder uses + randomization to generate each encoding symbol randomly and + independently of all other encoding symbols. Like Tornado codes, the + number of source symbols k may be very large for LT codes, i.e., on + the order of tens to hundreds of thousands, and the encoder and + decoder run efficiently in software. For example the encoding and + decoding speeds for LT codes are in the range 3-20 megabytes per + second for Pentium class machines of various vintages when k is in + the high tens of thousands. An LT encoder can generate as few or as + many encoding symbols as required on demand. When a new encoding + symbol is to be generated by an LT encoder, it is based on a randomly + chosen encoding symbol ID that uniquely describes how the encoding + symbol is to be generated from the source symbols. In general, each + encoding symbol ID value corresponds to a unique encoding symbol, and + thus the space of possible encoding symbols is approximately four + billion if for example the encoding symbol ID is 4 bytes. Thus, the + chance that a particular encoding symbol is the same as any other + particular encoding symbol is inversely proportional to the number of + possible encoding symbol IDs. An LT decoder has the property that + with very high probability the receipt of any set of slightly more + than k randomly and independently generated encoding symbols is + sufficient to reassemble the k source symbols. For example, when k + + + + +Luby, et. al. Informational [Page 11] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + is on the order of tens to hundreds of thousands the reception + overhead is less than 5% with no failures in hundreds of millions of + trials under any loss conditions. + + Because encoding symbols are randomly and independently generated by + choosing random encoding symbol IDs, LT codes have the property that + encoding symbols for the same k source symbols can be generated and + transmitted from multiple senders and received by a receiver and the + reception overhead and the decoding time is the same as if though all + the encoding symbols were generated by a single sender. The only + requirement is that the senders choose their encoding symbol IDs + randomly and independently of one another. + + There is a weak tradeoff between the number of source symbols and the + reception overhead for LT codes, and the larger the number of source + symbols the smaller the reception overhead. Thus, for shorter + objects, it is sometimes advantageous to partition the object into + many short source symbols and include multiple encoding symbols in + each packet. In this case, a single encoding symbol ID is used to + identify the multiple encoding symbols contained in a single packet. + + There are a couple of factors for choosing the appropriate symbol + length/ number of source symbols tradeoff. The primary consideration + is that there is a fixed overhead per symbol in the overall + processing requirements of the encoding and decoding, independent of + the number of source symbols. Thus, using shorter symbols means that + this fixed overhead processing per symbol will be a larger component + of the overall processing requirements, leading to larger overall + processing requirements. A second much less important consideration + is that there is a component of the processing per symbol that + depends logarithmically on the number of source symbols, and thus for + this reason there is a slight preference towards fewer source + symbols. + + Like small block codes, there is a point when the object is large + enough that it makes sense to partition it into blocks when using LT + codes. Generally the object is partitioned into blocks whenever the + number of source symbols times the packet payload length is less than + the size of the object. Thus, if the packet payload is 1024 bytes + and the maximum number of source symbols is 128,000 then any object + over 128 megabytes will be partitioned into more than one block. One + can choose the maximum number of source symbols to use, depending on + the desired encoding and decoding speed versus reception overhead + tradeoff desired. Encoding symbols can be uniquely identified by a + block number (when the object is large enough to be partitioned into + more than one block) and an encoding symbol ID. The block numbers, + if they are used, are generally numbered consecutively starting from + zero within the object. The block number and the encoding symbol ID + + + +Luby, et. al. Informational [Page 12] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + are both chosen uniformly and randomly from their range when an + encoding symbol is to be transmitted. For example, suppose the + number of source symbols is 128,000 and the number of blocks is 2. + Then, each packet generated by the LT encoder could be of the form + (b, x: y). In this example, the first value identifies the block + number and the second value identifies the encoding symbol within the + block. In this example, the block number b is either 0 or 1, and the + encoding symbol ID x might be a 32-bit value. The value y after the + colon is the value of the encoding symbol. + +2.5. Source blocks with variable length source symbols + + For all the FEC codes described above, all the source symbols in the + same source block are all of the same length. In this section, we + describe a general technique to handle the case when it is desirable + to use source symbols of varying lengths in a single source block. + This technique is applicable to block FEC codes. + + Let l_1, l_2, ... , l_k be the lengths in bytes of k varying length + source symbols to be considered part of the same source block. Let + lmax be the maximum over i = 1, ... , k of l_i. To prepare the + source block for the FEC encoder, pad each source symbol i out to + length lmax with a suffix of lmax-l_i zeroes, and then prepend to the + beginning of this the value l_i. Thus, each padded source symbol is + of length x+lmax, assuming that it takes x bytes to store an integer + with possible values 0,...,lmax, where x is a protocol constant known + to both the encoder and the decoder. These padded source symbols, + each of length x+lmax, are the input to the encoder, together with + the value n. The encoder then generates n-k redundant symbols, each + of length x+lmax. + + The encoding symbols that are placed into packets consist of the + original k varying length source symbols and n-k redundant symbols, + each of length x+lmax. From any k of the received encoding symbols, + the FEC decoder recreates the k original source symbols as follows. + If all k original source symbols are received, then no decoding is + necessary. Otherwise, at least one redundant symbol is received, + from which the receiver can easily determine if the block is composed + of variable- length source symbols: if the redundant symbol(s) is + longer than the source symbols then the source symbols are variable- + length. Note that in a variable-length block the redundant symbols + are always longer than the longest source symbol, due to the presence + of the prepended symbol- length. The receiver can determine the + value of lmax by subtracting x from the length of a received + redundant symbol. For each of the received original source symbols, + the receiver can generate the corresponding padded source symbol as + described above. Then, the input to the FEC decoder is the set of + received redundant symbols, together with the set of padded source + + + +Luby, et. al. Informational [Page 13] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + symbols constructed from the received original symbols. The FEC + decoder then produces the set of k padded source symbols. Once the k + padded source symbols have been recovered, the length l_i of original + source symbol i can be recovered from the first x bytes of the ith + padded source symbol, and then original source symbol i is obtained + by taking the next l_i bytes following the x bytes of the length + field. + +3. Security Considerations + + The use of FEC, in and of itself, imposes no additional security + considerations versus sending the same information without FEC. + However, just like for any transmission system, a malicious sender + may try to inject packets carrying corrupted encoding symbols. If a + receiver accepts one or more corrupted encoding symbol, in place of + authentic ones, then such a receiver may reconstruct a corrupted + object. + + Application-level transmission object authentication can detect the + corrupted transfer, but the receiver must discard the transferred + object. By injecting corrupted encoding symbols, they are accepted + as valid encoding symbols by a receiver, which at the very least, is + an effective denial of service attack. + + In light of this possibility, FEC receivers may screen the source + address of a received symbol against a list of authentic transmitter + addresses. Since source addresses may be spoofed, transport + protocols using FEC may provide mechanisms for robust source + authentication of each encoding symbol. Multicast routers along the + path of a FEC transfer may provide the capability of discarding + multicast packets that originated on that subnet, and whose source IP + address does not correspond with that subnet. + + It is recommended that a packet authentication scheme such as TESLA + [14] be used in conjunction with FEC codes. Then, packets that + cannot be authenticated can be discarded and the object can be + reliably recovered from the received authenticated packets. + +4. Intellectual Property Disclosure + + The IETF has been notified of intellectual property rights claimed in + regard to some or all of the specification contained in this + document. For more information consult the online list of claimed + rights. + + + + + + + +Luby, et. al. Informational [Page 14] + +RFC 3453 FEC in Reliable Multicast December 2002 + + +5. Acknowledgments + + Thanks to Vincent Roca and Hayder Radha for their detailed comments + on this document. + +6. References + + [1] Acharya, S., Franklin, M. and S. Zdonik, "Dissemination - Based + Data Delivery Using Broadcast Disks", IEEE Personal + Communications, pp.50-60, Dec 1995. + + [2] Blahut, R.E., "Theory and Practice of Error Control Codes", + Addison Wesley, MA, 1984. + + [3] Bradner, S., "The Internet Standards Process -- Revision 3", BCP + 9, RFC 2026, October 1996. + + [4] Byers, J.W., Luby, M., Mitzenmacher, M. and A. Rege, "A Digital + Fountain Approach to Reliable Distribution of Bulk Data", + Proceedings ACM SIGCOMM '98, Vancouver, Canada, Sept 1998. + + [5] Haken, A., Luby, M., Horn, G., Hernek, D., Byers, J. and M. + Mitzenmacher, "Generating high weight encoding symbols using a + basis", U.S. Patent No. 6,411,223, June 25, 2002. + + [6] Luby, M., "Information Additive Code Generator and Decoder for + Communication Systems", U.S. Patent No. 6,307,487, October 23, + 2001. + + [7] Luby, M., "Information Additive Group Code Generator and Decoder + for Communication Systems", U.S. Patent No. 6,320,520, November + 20, 2001. + + [8] Luby, M., "Information Additive Code Generator and Decoder for + Communication Systems", U.S. Patent No. 6,373,406, April 16, + 2002. + + [9] Luby, M. and M. Mitzenmacher, "Loss resilient code with double + heavy tailed series of redundant layers", U.S. Patent No. + 6,195,777, February 27, 2001. + + [10] Luby, M., Mitzenmacher, M., Shokrollahi, A., Spielman, D. and V. + Stemann, "Message encoding with irregular graphing", U.S. Patent + No. 6,163,870, December 19, 2000. + + + + + + + +Luby, et. al. Informational [Page 15] + +RFC 3453 FEC in Reliable Multicast December 2002 + + + [11] Luby, M., Mitzenmacher, M., Shokrollahi, A. and D. Spielman, + "Efficient Erasure Correcting Codes", IEEE Transactions on + Information Theory, Special Issue: Codes on Graphs and Iterative + Algorithms, pp. 569-584, Vol. 47, No. 2, February 2001. + + [12] Luby, M., Shokrollahi, A., Stemann, V., Mitzenmacher, M. and D. + Spielman, "Loss resilient decoding technique", U.S. Patent No. + 6,073,250, June 6, 2000. + + [13] Luby, M., Shokrollahi, A., Stemann, V., Mitzenmacher, M. and D. + Spielman, "Irregularly graphed encoding technique", U.S. Patent + No. 6,081,909, June 27, 2000. + + [14] Perrig, A., Canetti, R., Song, D. and J.D. Tygar, "Efficient and + Secure Source Authentication for Multicast", Network and + Distributed System Security Symposium, NDSS 2001, pp. 35-46, + February 2001. + + [15] Rizzo, L., "Effective Erasure Codes for Reliable Computer + Communication Protocols", ACM SIGCOMM Computer Communication + Review, Vol.27, No.2, pp.24-36, Apr 1997. + + [16] Rizzo, L., "On the Feasibility of Software FEC", DEIT Tech + Report, http://www.iet.unipi.it/~luigi/softfec.ps, Jan 1997. + + + + + + + + + + + + + + + + + + + + + + + + + + + +Luby, et. al. Informational [Page 16] + +RFC 3453 FEC in Reliable Multicast December 2002 + + +7. Authors' Addresses + + Michael Luby + Digital Fountain + 39141 Civic Center Drive + Suite 300 + Fremont, CA 94538 + + EMail: luby@digitalfountain.com + + Lorenzo Vicisano + Cisco Systems, Inc. + 170 West Tasman Dr., + San Jose, CA, USA, 95134 + + EMail: lorenzo@cisco.com + + Jim Gemmell + Microsoft Research + 455 Market St. #1690 + San Francisco, CA, 94105 + + EMail: jgemmell@microsoft.com + + Luigi Rizzo + Dip. di Ing. dell'Informazione + Universita` di Pisa + via Diotisalvi 2, 56126 Pisa, Italy + + EMail:luigi@iet.unipi.it + + Mark Handley + ICSI Center for Internet Research + 1947 Center St. + Berkeley CA, USA, 94704 + + EMail: mjh@icir.org + + Jon Crowcroft + Marconi Professor of Communications Systems + University of Cambridge + Computer Laboratory + William Gates Building + J J Thomson Avenue + Cambridge + CB3 0FD + + EMail: Jon.Crowcroft@cl.cam.ac.uk + + + +Luby, et. al. Informational [Page 17] + +RFC 3453 FEC in Reliable Multicast December 2002 + + +8. Full Copyright Statement + + Copyright (C) The Internet Society (2002). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Luby, et. al. Informational [Page 18] + |