<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
    <!ENTITY rfc2119 PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
]>

<rfc category="info" ipr="trust200902">

<?xml-stylesheet type='text/xsl'
                 href='http://xml.resource.org/authoring/rfc2629.xslt' ?>

<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="no"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>


	<front>
		<title abbrev='Extended FEC Schemes: Problem Position'>
			The Need for Extended Forward Erasure Correction (FEC) Schemes: Problem Position
		</title>

		<author initials='V.' surname="Roca" fullname='Vincent Roca'>
			<organization>INRIA</organization>
			<address>
				<postal>
					<street>655, av. de l'Europe</street>
					<street>Inovallee; Montbonnot</street>
					<city>ST ISMIER cedex</city>
					<code>38334</code>
					<country>France</country>
				</postal>
				<email>vincent.roca@inria.fr</email>
				<uri>http://planete.inrialpes.fr/people/roca/</uri>
			</address>
		</author>
		<author initials='A' surname="Roumy" fullname='Aline Roumy'>
			<organization>INRIA</organization>
			<address>
				<postal>
					<street>Campus Universitaire de Beaulieu</street>
					<city>RENNES Cedex</city>
					<code>35042</code>
					<country>France</country>
				</postal>
				<email>aline.roumy@inria.fr</email>
				<uri>http://www.irisa.fr/prive/Aline.Roumy/</uri>
			</address>
		</author>
		<author initials='B' surname="Sayadi" fullname='Bessem Sayadi'>
			<organization>Alcatel-Lucent, Bell Labs</organization>
			<address>
				<postal>
					<street></street>
					<city></city>
					<code></code>
					<country>France</country>
				</postal>
				<email>bessem.sayadi@alcatel-lucent.com</email>
			</address>
		</author>
		<date day="30" month="July" year="2012"/>
		<area>Transport</area>
		<workgroup>RMT</workgroup>
		<keyword>Forward Error Correction</keyword>
		<keyword>FEC</keyword>

		<abstract>
<t>
This document discusses the limits of [RFC5052]-compliant traditional FEC schemes, and in particular
for two use-cases that are not efficiently addressed, namely Unequal Erasure Protection (UEP) of subsets
of an object and file bundle protection.
This document defines the problem but not the potential solutions. This is left to companion documents.
</t>
		</abstract>
	</front>

<!-- ================================================================================================= -->

	<middle>


<section anchor="Introduction" title="Introduction: traditional FEC Schemes, as per [RFC5052]">
<!-- =========================================== -->

<t>The use of Forward Error Correction (FEC) codes is a classic solution to improve the
reliability of unicast, multicast and broadcast Content Delivery Protocols (CDP) and applications
<xref target="RFC3453"/>.
The <xref target="RFC5052"/> document describes a generic framework to use FEC schemes
with objects (e.g., files) delivery applications based on the ALC  <xref target="RFC5775"/>
(e.g. FLUTE <xref target="FLUTE"/>) and NORM <xref target="RFC5740"/> reliable multicast
transport protocols.
</t>

<t>More specifically, the <xref target="RFC5053"/>/<xref target="RFC6330"/> (Raptor/RaptorQ)
and <xref target="RFC5170"/>
(LDPC-Staircase) FEC schemes introduce erasure codes based on sparse parity check matrices
for object delivery protocols like ALC and NORM.
Similarly, the <xref target="RFC5510"/> document introduces Reed-Solomon codes based on
Vandermonde matrices for these object delivery protocols.
Finally <xref target="RFC5445"/> introduces the Compact No-Code FEC Scheme that is not
attached to any FEC code but behaves as if it was the case.
This No-Code FEC Scheme can be very useful when an object is small enough to be sent within
a single source symbol, since robustness can be achieved by repeating it, relying on a No-Code
FEC Scheme for signaling considerations.
</t>

<t>
Let us consider a source object, submitted by the CDP or application, that needs to be FEC protected
by one of the FEC schemes mentioned before.
This FEC scheme, the underlying FEC code or the associated codec (i.e. a concrete implementation of
the FEC code) defines a maximum number of source symbol that can be considered together for FEC encoding.
If the object size, in terms of number of source symbols, is superior to this maximum size, 
this object is partitioned into multiple smaller blocks, of approximately equal size
(<xref target="RFC5052"/>, section 9.1, "Block Partitioning Algorithm").
FEC encoding is then applied independently to each block, and repair symbols are produced.
The same process is then applied to each source object submitted by the CDP or application.
</t>

<t>
We see that with these FEC schemes, FEC encoding is directly applied on the source objects.
Although natural, this approach leads to serious limits as we will detail.
The goal of the present document is to discuss these limits.
However this document does not define any solution to actually bypass these limits.
This is the role of companion documents, like <xref target="GOE-RS"/> and <xref target="GOE-LDPC"/>,
that decouples FEC protection from the natural object boundaries,
and <xref target="UOD-RaptorQ"/> that relies on a specific packetization technique.
</t>

</section>


<section anchor="Terminology" title="Terminology">
<!-- =========================================== -->

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>


	<section anchor="DefinitionsNotationsandAbbreviations" title="Definitions, Notations and Abbreviations">
	<!-- =========================================== -->

		<section anchor="Definitions" title="Definitions">
		<!-- =========================================== -->

<t>This document uses the following terms and definitions.
Some of them are FEC scheme specific and are in line with <xref target="RFC5052"/>:
<list style="hanging">
<t hangText="Source Packet:">	a data packet containing only source symbols, that is
				sent over the packet erasure channel. Most of the time
				a source packet will contain a single source symbol.</t>

<t hangText="Repair Packet:">	a data packet containing only repair symbols, that is
				sent over the packet erasure channel. Most of the time
				a repair packet will contain a single repair symbol.</t>

<t hangText="Packet Erasure Channel:"> 
				a communication path where packets are either
				dropped (e.g., by a congested router, or because the
				number of transmission errors exceeds the correction
				capabilities of the physical layer codes) or
				received. When a packet is received, it is assumed
				that this packet is not corrupted.</t>

<!--
<t hangText="Systematic code:">	FEC code in which the source symbols are part
				of the encoding symbols. The Reed-Solomon codes
				introduced in this document are systematic.</t>

<t hangText="Code rate:">	the k/n ratio, i.e., the ratio between the number
				of source symbols and the number of encoding symbols.
				By definition, the code rate is such that: 0 &lt; code rate &le; 1.
				A code rate close to 1 indicates that a small number of repair
				symbols have been produced during the encoding process.</t>
-->

<t hangText="Object:">		the object (e.g., file) submitted to the CDP by the
				user.</t>

<t hangText="Source symbol:">	unit of data used during the encoding process.
				In this specification, there is always one source symbol per ADU.</t>

<t hangText="Encoding symbol:">	unit of data generated by the encoding process.
				With systematic codes, source symbols are part
				of the encoding symbols.</t>

<t hangText="Repair symbol:">	encoding symbol that is not a source symbol.</t>

<t hangText="Source block:">	a block of k source symbols that are considered
				together for the encoding.</t>
</list>
</t>

		</section>


		<section anchor="Notations" title="Notations">
		<!-- =========================================== -->

<t>This document uses the following notations:
<list style="hanging" hangIndent="7">
<t hangText="k">	denotes the number of source symbols in a source block.</t>
<!-- <t hangText="max_k">	denotes the maximum number of source symbols for any source block.</t>-->
<!-- <t hangText="n_r">	denotes the number of repair symbols generated for a source block.</t> -->
<t hangText="n">	denotes the number of encoding symbols generated for a source block.</t>
<!--			Therefore: n = k + n_r.</t> -->
<!--
<t hangText="max_n">	denotes the maximum number of encoding symbols generated for any source block.</t>
<t hangText="E">	denotes the encoding symbol length in bytes.</t>
-->
<t hangText="CR">	denotes the "code rate", i.e., the k/n ratio.</t>
</list>
</t>
		</section>


		<section anchor="Abbreviations" title="Abbreviations">
		<!-- =========================================== -->

<t>This document uses the following abbreviations:
<list style="hanging" hangIndent="7">
<!--
<t hangText="ADU">	stands for Application Data Unit.</t>
<t hangText="TOI">	stands for Transmission Object Identifier.</t>
<t hangText="SBN">	stands for Source Block Number, i.e., a block identifier.</t>
<t hangText="ESI">	stands for Encoding Symbol ID.</t>
-->
<t hangText="FEC">	stands for Forward Error (or Erasure) Correction code.</t>
<t hangText="LDPC">	stands for Low Density Parity Check.</t>
<t hangText="RS">	stands for Reed-Solomon.</t>
<!--
<t hangText="MDS">	stands for Maximum Distance Separable code.</t>
-->
<t hangText="UEP">	stands for Unequal Erasure Protection.</t>
<!--
<t hangText="FEC OTI">	stands for FEC Object Transmission Information.</t>
-->
</list>
</t>
		</section>

	</section>

</section>


<!-- ================================================================================================= -->


<section anchor="use-cases" title="Use-Cases not Correctly Addressed by [RFC5052]-compliant FEC Schemes">
<!-- =========================================== -->

<t>
We now list two major use-cases, namely UEP and file bundle protection.
Those are the two use-cases that any Extended FEC scheme MUST support.
Further, optional to support, use-cases may be added.
</t>

	<section anchor="use-case-1" title="Major use-Case 1: Unequal Protection of Parts of an Object">
	<!-- =========================================== -->

<t>
This first use-case defines a situation where some subsets of an object deserve a higher erasure protection
than the others.
The traditional FEC Schemes, as per <xref target="RFC5052"/>, lead to apply the same FEC encoding
to all the blocks of a given object, i.e., the whole object is encoded using
the same FEC scheme, with the same target code rate, resulting in an equivalent protection.
</t>

<t>
There is no way to bypass this limit within the traditional <xref target="RFC5052"/>-compliant FEC Schemes.
However the CDP or the application may decide to split the original object into say two sub-objects,
one per important class, and to submit each sub-object separately to the FEC Scheme.
Modifying the CDP specifications, e.g., FLUTE/ALC, to do that is clearly non appropriate:
some of these CDP have been widely deployed and modifying deeply the specifications to address
this new requirement is not desired.
Modifying the application to do that does not require any modification of the specifications,
but requires extra logic to manage scattering/gathering within the application.
Additionally, each application has to be modified: there is no factorization
of the functionality within a common underlying layer, in our case the FEC Scheme.
</t>

<t>
TODO: concrete example where UEP improves object delivery.
</t>
	</section>


	<section anchor="use-case-2" title="Major use-Case 2: File Bundle Protection">
	<!-- =========================================== -->

<t>
This second use-case defines a situation where a set of objects need to be reliably transferred
within a given CDP session with the same amount of protection.
All the receivers are also supposed to recover the full set of objects.
With traditional FEC schemes, efficiency problems arise when this set is large and the objects
are small (i.e., composed of a few source symbols each).
For instance, if we consider the case where each object is composed of a single source symbol
and a code rate one half is applied, each object contributes to two encoding symbols 
(in practice we use a No-Code FEC scheme and repeat each source symbol twice).
If the two encoding symbols of an object are lost, a receiver will not be able to recover these
erasures.
</t>
<t>
With traditional FEC schemes, efficiency problems also arise when objects of largely varying
sizes need to be transferred within the same session.
Indeed, large objects benefit from a higher number of encoding symbols than small ones (since the
code rate is kept constant, the higher the number of source symbols, k, the higher the number of
encoding symbols, n = k / CR).
Therefore large objects will be more robust in front of erasure bursts of a given length than
small objects.
</t>

<t>
In these two examples, interleaving techniques can be used to reduce the probability of
losing many symbols of a given object, due to erasure bursts.
However, if long packet interleaving strategies can reduce the impacts of packet erasure bursts,
they do not solve the fundamental problem.
</t>

<t>
There is no way to bypass this limit within the traditional <xref target="RFC5052"/>-compliant FEC Schemes.
However the CDP or the application may decide to create an archive that contains all the objects
and to submit this archive in place of each individual object.
Here also, modifying the CDP specifications, e.g., FLUTE/ALC, to do that is clearly non appropriate
(same reasons).
Similarly, modifying the application to do that requires extra logic, and there is no factorization
of the functionality within a common underlying layer.
</t>

<t>
TODO: concrete example where UEP improves object delivery.
</t>

	</section>

</section>


<!-- ================================================================================================= -->


<section anchor="requirements" title="Requirements and Good Properties for an Extended FEC Scheme">
<!-- ==================================== -->

<t>
This section defines requirements (mandatory to support) and properties for any Extended FEC scheme.
</t>

	<section anchor="mandatory_requirements" title="Mandatory to Support Functional Requirements">
	<!-- =========================================== -->

<t>
The following are functional requirements that an Extended FEC scheme MUST provide:
<list style="symbols">
<t> the use of an Extended FEC scheme MUST NOT require conflicting modifications of the CDP specifications
	(when applicable).
	Of course supporting an additional FEC scheme will require some extra logic within the CDP,
	but the modifications are limited to the implementations of the CDP, without any conflicting
	impact on the signaling mechanism (or any other mechanism) defined by the CDP.</t>

<t> it MUST be possible, within a single CDP session, to include objects protected
	with one or several Extended FEC schemes and at the same time objects protected with one or several
	traditional FEC schemes.
	The use of Extended and traditional FEC Schemes MUST not be exclusive with one another.</t>

<t> an Extended FEC scheme MUST support the use-cases 1 and 2 detailed in <xref target="use-cases"/>.
	These two use-cases form the minimum set of functionalities required for any Extended FEC scheme.</t>
</list>
</t>

	</section>


	<section anchor="additional_properties" title="Additional Properties">
	<!-- =========================================== -->

<t>
Several additional properties may be considered.
Some of them concern performance.
For instance what is the performance in terms of unequal protection (e.g., is the protection
differentiation actually achieved?), erasure recovery (e.g., does the Extended FEC scheme
perform well in recovering from lost packets?), predictability (e.g., is the Extended FEC scheme
behavior predictable or not?).
</t>

<t>
Some of them concern algorithm agility.
For instance does the distribution of objects (i.e., total number and individual size) in a bundle
impact performance with the file bundle protection use-case?
Or does the Extended FEC scheme enable priority classes to be freely defined, with possible overlapping
of data chunks (e.g., can subset1, of highest priority, be either independent from subset2, of lower
priority, or at the opposite be part of subset2 so that repair symbols for subset2 also help in recovering
erased symbols from subset1?) and gaps (e.g., a very low importance subset of an object might
not be FEC encoded at all).
Another aspect is the possibility to use different kinds of underlying FEC code in an Extended scheme.
Finally, backward compatibility with receivers that do not support the Extended FEC scheme can also be
useful in situations where the set of receivers is largely heterogeneous: backward compatibility could
enable a legacy receiver to benefit from source symbols even if repair symbols will be disposed, by lack
of the required logic to process them.
</t>

<t>
This list is far from exhaustive and is only for informative purposes (e.g., to compare the pros/cons
of several Extended FEC schemes).
</t>

	</section>


</section>


<!-- ================================================================================================= -->


<section anchor="SecurityConsiderations" title="Security Considerations">
<!-- ==================================== -->

<t>
TBD
</t>

</section>


<section anchor="Acknowledgments" title="Acknowledgments">
<!-- =============================================== -->

<t>
TBD
</t>

</section>

	</middle>

	<back>

		<references title="Normative References">
		<!-- ==================================== -->
			<reference anchor="RFC2119">
				<front>
					<title>Key words for use in RFCs to Indicate Requirement Levels</title>
					<author initials="S." surname="Bradner" fullname="Scott Bradner">
						<organization/>
					</author>
					<date year=""/>
				</front>
				<seriesInfo name="RFC" value="2119"/>
			</reference>


		</references>

		<references title="Informative References">
		<!-- ==================================== -->

			<?rfc include='reference.RFC.3453'?>
			<?rfc include='reference.RFC.5445'?> 	<!-- Basic FEC Schemes -->

			<reference anchor="RFC5052">
				<front>
					<title>Forward Error Correction (FEC) Building Block</title>
					<author initials="M." surname="Watson"> <organization/> </author>
					<author initials='M.' surname='Luby'> <organization /> </author>
					<author initials='L.' surname='Vicisano'> <organization /> </author>
					<date month="August" year="2007"/>
				</front>
				<seriesInfo name="RFC" value="5052"/>
			</reference>

			<reference anchor="RFC5510">
				<front>
				<title>Reed-Solomon Forward Error Correction (FEC) Schemes</title>
					<author initials="J." surname="Lacan" fullname="Jerome Lacan">
						<organization></organization> </author>
					<author initials="V." surname="Roca" fullname="Vincent Roca">
						<organization></organization> </author>
					<author initials="J." surname="Peltotalo" fullname="Jani Peltotalo">
						<organization></organization> </author>
					<author initials="S." surname="Peltotalo" fullname="Sami Peltotalo">
						<organization></organization> </author>
					<date month="April" year="2009" />
				</front>
				<seriesInfo name="RFC" value="5510" />
			</reference>

			<reference anchor="RFC5170">
				<front>
					<title>Low Density Parity Check (LDPC) Forward Error Correction</title>
					<author initials="V." surname="Roca"> <organization/> </author>
					<author initials="C." surname="Neumann"> <organization /> </author>
					<author initials="D." surname="Furodet"> <organization /> </author>
					<date month="June" year="2008"/>
				</front>
				<seriesInfo name="RFC" value="5170"/>
			</reference>

			<reference anchor="RFC5053">
				<front>
					<title>Raptor Forward Error Correction Scheme</title>
					<author initials="M." surname="Luby" fullname="M. Luby"> <organization/> </author>
					<author initials="A" surname="Shokrollahi" fullname="A. Shokrollahi"> <organization/> </author>
					<author initials="M" surname="Watson" fullname="M.  Watson"> <organization/> </author>
					<author initials="T" surname="Stockhammer" fullname="T. Stockhammer"> <organization/> </author>
					<date month="June" year="2007"/>
				</front>
				<seriesInfo name="RFC" value="5053"/>
			</reference>

			<?rfc include='reference.RFC.6330'?> 	<!-- RaptorQ -->

			<?rfc include='reference.RFC.5740'?> 	<!-- NORM -->

			<?rfc include='reference.RFC.5775'?> 	<!-- ALC -->

			<reference anchor="FLUTE">
				<front>
					<title>FLUTE - File Delivery over Unidirectional Transport</title>
					<author initials='T.' surname='Paila'>
						<organization />
					</author>
					<author initials="R." surname="Walsh">
						<organization/>
					</author>
					<author initials='M.' surname='Luby'>
						<organization />
					</author>
					<author initials='V.' surname='Roca'>
						<organization />
					</author>
					<author initials='R.' surname='Lehtonen'>
						<organization />
					</author>
					<date month="June" year="2012"/>
				</front>
				<seriesInfo name="Work in" value="Progress"/>
			</reference>

<!--
			<reference anchor="GOE.RR7699">
				<front>
					<title>Unequal Erasure Protection and Object Bundle Protection with the Generalized Object Encoding Approach</title>
					<author initials="A." surname="Roumy" fullname="Aline Roumy"><organization/></author>
					<author initials="V." surname="Roca" fullname="Vincent Roca"><organization/></author>
					<author initials="S." surname="Bessem" fullname="Sayadi Bessem"><organization/></author>
					<author initials="R." surname="Imad" fullname="Rodrigue Imad"><organization/></author>
					<date month="July" year="2011"/>
				</front>
				<seriesInfo name="INRIA Research Report RR-7699," value="http://hal.inria.fr/inria-00612583_v1/en/"/>
				<format type='HTML' target='http://hal.inria.fr/inria-00612583_v1/en/' />
			</reference>
-->

			<reference anchor="GOE-RS">
				<front>
					<title>The Generalized Object Encoding (GOE) Approach for the Forward Erasure Correction (FEC) Protection of Objects and its Application to Reed-Solomon Codes over GF(2^^8)</title>
					<author initials="V." surname="Roca" fullname="Vincent Roca"><organization/></author>
					<author initials="A." surname="Roumy" fullname="Aline Roumy"><organization/></author>
					<author initials="S." surname="Bessem" fullname="Sayadi Bessem"><organization/></author>
					<date month="July" year="2012"/>
				</front>
				<seriesInfo name="Work in progress" value="draft-roca-rmt-goe-fec"/>
			</reference>

			<reference anchor="GOE-LDPC">
				<front>
					<title>The Generalized Object Encoding (GOE) LDPC-Staircase FEC Scheme</title>
					<author initials="V." surname="Roca" fullname="Vincent Roca"><organization/></author>
					<author initials="A." surname="Roumy" fullname="Aline Roumy"><organization/></author>
					<author initials="S." surname="Bessem" fullname="Sayadi Bessem"><organization/></author>
					<date month="July" year="2012"/>
				</front>
				<seriesInfo name="Work in progress" value="draft-roca-rmt-goe-fec"/>
			</reference>

			<reference anchor="UOD-RaptorQ">
				<front>
					<title>Universal Object Delivery using RaptorQ</title>
					<author initials="M." surname="Luby" fullname="Michael Luby"><organization/></author>
					<author initials="T." surname="Stockhammer" fullname="Thomas Stockhammer"><organization/></author>
					<date month="September" year="2011"/>
				</front>
				<seriesInfo name="Work in progress" value="draft-luby-uod-raptorq"/>
			</reference>

			<!-- =================================================== -->


		</references>


	</back>

</rfc>
