One document matched: draft-irtf-dtnrg-zinky-erasure-coding-extension-00.xml


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc1112 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1112.xml'>
<!ENTITY rfc2119 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc3171 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3171.xml'>
<!ENTITY rfc3376 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3376.xml'>
<!ENTITY rfc3927 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3927.xml'>
<!ENTITY rfc4122 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4122.xml'>
<!ENTITY rfc4838 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4838.xml'>
<!ENTITY rfc5050 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5050.xml'>
<!ENTITY rfc5052 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5052.xml'>
<!ENTITY rfc5053 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5053.xml'>
<!ENTITY rfc5170 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5170.xml'>
<!ENTITY rfc5445 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5445.xml'>
<!ENTITY rfc5510 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5510.xml'>
<!ENTITY rfc6256 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6256.xml'>
<!ENTITY rfc6257 PUBLIC '' 
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6257.xml'>
]>
<rfc category="exp" ipr="trust200902" docName="draft-irtf-dtnrg-zinky-erasure-coding-extension-00">
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
  <?rfc toc="yes" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc iprnotified="no" ?> 
  <?rfc strict="no" ?>

  <front>
    <title abbrev="DTN-EC-Arch">Bundle Protocol Erasure Coding Extension</title>

    <author initials='J. A.' surname="Zinky" fullname='John Zinky'>
      <organization>
	Raytheon BBN Technologies
      </organization>
      <address>
	<postal>
          <street>10 Moulton St.</street>
          <city>Cambridge</city> <region>MA</region>
          <code>02138</code>
          <country>US</country>
	</postal>
	<email>jzinky@bbn.com</email>
      </address>
    </author>

    <author initials='A.' surname="Caro" fullname='Armando Caro'>
      <organization>
	Raytheon BBN Technologies
      </organization>
      <address>
	<postal>
          <street>10 Moulton St.</street>
          <city>Cambridge</city> <region>MA</region>
          <code>02138</code>
          <country>US</country>
	</postal>
	<email>acaro@bbn.com</email>
      </address>
    </author>

    <author initials='G.' surname='Stein' fullname='Gregory Stein'>
      <organization>
	Laboratory for Telecommunications Sciences
      </organization>
      <address>
	<postal>
          <street>8080 Greenmead Drive</street>
          <city>College Park</city> <region>MD</region>
          <code>20740</code>
          <country>US</country>
	</postal>
	<email>gstein@ece.umd.edu</email>
      </address>
    </author>

    <date/>
    <abstract>
      <t>
	This document describes an extension to the Delay and
	Disruption Tolerant Networking (DTN) Bundle Protocol
	specification <xref target="RFC5050"/> which describes a
	protocol that enables the transfer of relatively large Data
	Objects over disrupted networks.  The Erasure Coding Extension
	is a mechanism that extends the ability of the existing DTN
	bundle fragmentation mechanism to handle situations where
	bundles have a high probability of being dropped.  An example
	use case is a situation where no communication contact period
	will ever be long enough to send the whole Data Object.  In
	this case the object must be partitioned into smaller chunks
	and these chunks are sent in multiple bundles.  The Erasure
	Coding Extension provides a recovery mechanism that allows
	many of these bundles to be dropped and still allow the whole
	Data Object to be successfully sent.
      </t>
      <t>
	This document describes an Erasure Coding Extension Block and
	a framework for integrating Forward Error Correction (FEC)
	into the bundle protocol. The Erasure Coding Extension is
	designed to support multiple FEC schemes and content object
	types. This is the framework document for a series of
	documents about erasure coding for DTN. Companion documents
	describe specific FEC schemes <xref target="RandBinary"/> and
	specific Data Object types <xref target="EcObjects"/>.
      </t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>
	Delay and Disruption Tolerant Networks (DTNs) <xref
	target="RFC4838"/> have extreme communication
	constraints. DTNs can include high link delays, such as hours
	to reach another planet, or no guarantee of a contemporaneous
	end-to-end path between source-destination pairs, such as a
	bus with a DTN Bundle Protocol Agent ferrying data to a remote
	village.  These constraints limit the timeliness of feedback
	that can be sent from the receiver back to the sender to
	acknowledge receipt or to control the data flow. Forward Error
	Correction (FEC) techniques are a potentially 
	important mechanism for DTN
	networks, especially if a large Data Object must be
	partitioned into multiple bundles <xref
	target="Erasure_Wang"/>.  While the base Bundle Protocol <xref
	target="RFC5050"/> has a fragmentation feature to partition a
	large bundle into multiple smaller bundles, there is no
	support for FEC, i.e. all bundle fragments must be received to
	reconstruct the original bundle.
      </t>
      <t>
	To correct for this lack, this document describes an extension
	to the Bundle Protocol to support FEC mechanisms.  The
	extension allows for large Data Objects to be partitioned into
	smaller Chunks.  A FEC coding scheme is used
	to encode the Chunks into Encoding Bundles. Redundant
	Encoding Bundles are transmitted to allow
	recovery of Bundles that where dropped. The specification
	allows for different tradeoffs in the level of protection,
	overhead, and computation needed to encode and decode large Data
	Objects, based on the kind of FEC coding scheme, the network
	characteristics, and the type of Data Object.
      </t>
      <t>
        This document describes a FEC framework for the encoding, decoding,
        forwarding, and recoding within a DTN network. A
	Bundle Protocol Extension Block is defined to send the
        parameters needed for several FEC coding schemes. The Erasure
        Coding extension is flexible and supports multiple FEC coding
        schemes and Data Object types.  Separate documents define how
        specific FEC coding schemes <xref target="RandBinary"/> and
        Data Object formats <xref target="EcObjects"/> support this
        extension. Future documents will describe protocols for
        erasure coding flow control, routing, and recoding.
      </t>
      <t>
        This document assumes familiarity with Forward Error
        Control techniques and the FEC framework described in
        "Forward Error Correction (FEC) Building Blocks" <xref
        target="RFC5052"/>, this paper uses the Bundle Protocol as a
        "Content Delivery Protocol" that will use FEC schemes to
        insure reliable delivery of Data Objects. Many FEC coding
        schemes MAY be supported, such as Random Binary Codes <xref
        target="RandBinary"/>, block-oriented parity <xref
        target="RFC5445"/>, Raptor Codes <xref target="RFC5053"/>,
        Reed-Solomon <xref target="RFC5510"/>, and Low Density Parity
        Check (LDPC) <xref target="RFC5170"/>. The exact coding scheme
        used depends on the DTN network environment, as no one coding
        scheme works optimally in all situations.  The Erasure Coding
        extension could also support Network Coding techniques.
      </t>
    </section>
    <section title="Terminology">
      <t>
	The following definitions describe terms used in the Bundle
	Protocol Erasure Coding Extension.  The terminology for
	Delay and Disruption Tolerant Networks (DTNs) follows <xref
	target="RFC4838"/>,<xref target="RFC5050"/>, and Forward Error
	Coding (FEC) terminology follows <xref target="RFC5052"/>.
      </t>
      <section title="Definitions">
	<t>
	  Terms are grouped by a common domain. Terms within a domain
	  have relationships with other terms in that domain and
	  not with other domains.
	</t>
	<section title="Delay and Disruption Tolerant Network Terms">
	  <t>
	    <list style="hanging">
	      <t hangText=" Delay and Disruption Tolerant Networks">
		(DTNs) use the bundle protocol suite <xref
		target="RFC5050"/> to send data over networks with
		extreme constraints, such as high-delay space channels
		with propagation delays in hours or networks with no
		contemporaneous end-to-end path.
	      </t>
	      <t hangText="Bundle"> 
		is a DTN protocol data unit (PDU) as defined in 
		<xref target="RFC5050"/>.
	      </t>
	      <t hangText="Bundle Node"> 
		is any entity that can send and/or receive
		bundles as defined in <xref target="RFC5050"/>.  In the
		context of this document, a Bundle Node may be either a
		DTN Application or a Bundle Protocol Agent.
	      </t>
	      <t hangText=" Bundle Protocol Agent">
		(BPA) offers DTN services and executes the procedures
		of the bundle protocol. A BPA performs a store and
		forward function, receives, processes, and sends
		bundles as defined in <xref target="RFC5050"/>. A BPA
		may have any Erasure Coding process, e.g. Encoder,
		Decoder, Intermediary Regulator or an Intermediary
		Recoder.
	      </t> 
	      <t hangText="DTN Application"> 
		generates and receives bundles in order to
		create an end-user application. A DTN application may
		have only an Erasure Coding Encoder or Decoder process.
	      </t>
	    </list>
	  </t>
	</section>
	<section title="Forward Error Correcting Terms">
	  <t>
	    <list style="hanging">

	      <t hangText="Data Object">
		is an ordered sequence of octets that is
		transferred as a single unit as defined in the FEC
		Framework <xref target="RFC5052"/>. The object has a
		defined format, such as a file, a large bundle, a stream,
		or a mime type.  A Data Object has a UUID, which marks
		all Encodings that belong to the same Data Object.
	      </t>
	      <t hangText="Chunks"> 
		are ordered pieces of a Data Object before it
		is encoded.  All Chunks are the same length with the
		last Chunk being padded when necessary. A Chunk is
		called a Source Symbol in the FEC Framework<xref
		target="RFC5052"/> .
	      </t>
	      <t hangText="Encoding Vector"> 
		is the coefficients for the coding formula used to create an Encoding.  An
		Encoding Vector carries the FEC Payload ID as defined
		in the FEC framework <xref target="RFC5052"/>.
	      </t>
	      <t hangText="Encoding Data"> is the result of applying a
		coding formula to the Chunks of a Data Object. The
		Encoding Data is the same length as the Chunks. An
		Encoding Data may carry either a Source Symbol or a
		Repair Symbol as defined in the FEC framework
		<xref target="RFC5052"/>.
	      </t>
	      <t hangText="Encoding"> contains the corresponding
		Encoding Vector and Encoding Data, with a Transfer
		Specification.
	      </t>
	      <t hangText="Encoding Set"> 
		is a group of Encodings that all belong
		to the same Data Object (same UUID). The Encodings in
		an Encoding Set represent a set of linear equations.
		When the rank of the Encoding Set is equal to the
		number of Chunks in the Data Object, the Encoding Set
		linear equations can be solved to decode ALL of the
		Chunks for the Object.
	      </t>
	      <t hangText="Innovative Encoding:"> 
		When an Encoding is added to an Encoding Set, the
		Encoding is said to be "Innovative" relative to the
		Encoding Set, if the new Encoding adds new information
		to the Encoding Set (i.e., increases the Encoding Set's
		rank).
	      </t>
	      <t hangText="Redundant Encoding:"> 
		When an Encoding is added to an Encoding Set, the
		Encoding is said to be "Redundant" relative to the
		Encoding Set if the new Encoding does not add new
		information to the Encoding Set (i.e., the Encoding
		Set's rank stays the same).
	      </t>
	      <t hangText="Duplicate Encoding:"> Two Encodings are
		equivalent or duplicate, if they belong to the same
		Data Object (same UUID) and have the same Encoding
		Vector and hence the same Encoding Data.
	      </t>
	    </list>
	  </t>
	</section>
	<section title="Erasure Coding Protocol Terms">
	  <t>
	    <list style="hanging">
	      <t hangText="Encoding Bundle"> 
		contains the information necessary to send an Encoding
		using the Bundle Protocol. Some information is put in
		the bundle primary block, such as the Data Object's
		Transfer Specification. Some information is put in the
		Erasure Coding Extension Block, such as the Encoding
		Vector. Some information is put in the Bundle payload,
		such as the Encoding Data.
	      </t>
	      <t hangText="Erasure Coding Extension Block"> 
		exposes Encoding information that is needed by
		Intermediate Regulators. Specifically, it includes the
		Encoding Vector and Handling Specification.
	      </t>
	      <t hangText="Erasure Payload"> 
		stores the part of an Encoding that is not exposed to
		Intermediate Regulators. Specifically, it includes the
		Encoding Data.
	      </t>
	      <t hangText="Handling Specification"> 
		defines the importance of forwarding Encoding Bundles
		relative to its Encoding Set or other Encoding Sets.
		The Handling Specification MAY change the order,
		priority, or rate for sending Encoding Bundles.
	      </t>

	    </list>
	  </t>
	</section>
      </section>
      <section title="Abbreviations">
	<t>
	  <list>
	    <t> 
	      BPA: Bundle Protocol Agent,  see <xref target="RFC5050"/>
	    </t>
	    <t > 
	      DTN: Delay and Disruption Tolerant Network, see <xref
	      target="RFC5050"/>
	    </t>
	    <t > 
	      EID: End-point Identifier, see <xref target="RFC5050"/>
	    </t>
	    <t > 
	      FEC: Forward Error Correction, see <xref target="RFC5052"/>
	    </t>
	    <t > 
	      UUID: Universally Unique Identifier, see <xref target="RFC4122"/>
	    </t>
	    <t > 
	      SDNV: Self-Delimiting Numeric Values, see <xref target="RFC6256"/>
	    </t>
	  </list>
	</t>
      </section>
      <section title="Requirements Notation">
	<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 <xref target="RFC2119"/>.
	</t>
      </section>
    </section>
    <section title="Erasure Coding Architecture">
      <t>
	The goal of the Erasure Coding extension is to enable the
	transfer of large Data Objects over disrupted links.  The
	Erasure Coding Architecture defines protocol layers, protocol
	functions, and components that achieve this goal in a modular
	and extensible manner.  Besides defining terms and
	relationships, when realized the architecture forms a
	distributed system that executes at multiple locations, cross
	cuts multiple protocol layers, and reuses services from
	external components in a DTN network.
      </t>
      <t>
	Erasure Coding happens at multiple locations across a DTN. At
	the end points, Data Objects are divided into Chunks, which
	are Encoded at the sender and Decoded at the receiver. Along
	the way between the sender and the receiver Intermediate
	Regulator, Intermediate Recoders and Bundle Forwarders may
	process the Encoding Bundles to ensure the end-to-end delivery
	of a Data Object, despite the poor communication channel
	between the sender and receiver.
      </t>
      <t>
	This section describes the end-to-end Erasure Coding process,
	including the functions that need to be performed and the
	layers at which they are performed. This section also
	describes several configuration use cases and how the
	components carry out their roles.  Subsequent sections
	describe each of the protocol layers: Data Object Content
	Layer, the Coding Layer, the Intermediate Regulating Layer,
	and the Bundle Forwarding Layer.
      </t>
      
      <section title="Erasure Coding Process" anchor="Process">
	<t>
	  A Data Object goes through a series of transformations as it
	  is transmitted using the Erasure Coding protocol: from a
	  Data Object to Encodings to Bundles and back again from
	  Bundles, to Encodings, to a copy of the Data Object at the
	  receiver.  The transmission process has the following steps:
	  <list style='format Step %d:'>
	    <t>
	      A Data Object has content that needs to be transferred
	      across a DTN as a single whole. If any part of the
	      content is missing the Data Object is not considered
	      transferred.
	    </t>
	    <t>
	      The Data Object's list of Octets is divided into Chunks
	      of equal length. The last Chunk MUST be padded so that
	      it is the same length as the other Chunks. The order of
	      the Chunks MUST be preserved to retain the ordering of
	      the Data Object octets. The ordered list of Chunks that
	      represent the Data Object is given an unique identifier
	      (UUID).
	    </t>
	    <t>
	      Chunks are coded into an Encoding. Some Combination of
	      Chucks are combined using one of serval possible FEC
	      schemes. The coefficients of the coding formula are
	      stored in an Encoding Vector. The results of the
	      combination are stored in an Encoding Data, which is an
	      ordered list of octets that is the same length as a
	      Chunk. Together the Encoding Data, Encoding Vector, the
	      coding scheme, and the Data Object UUID form an
	      Encoding.  All Bundle FEC coding schemes MUST create
	      Encodings with this structure.
	    </t>
	    <t>
	      All the Encodings generated for a Data Object share the
	      same UUID and may be grouped into an Encoding Set. A
	      Full Encoding Set has enough Encodings to extract the
	      Data Object. Note that an Encoding Set may have
	      Redundant Encodings so that not all the Encodings in the
	      set need to be received. The level of redundancy is
	      determined by the FEC scheme, the application Quality of
	      Service requirements, and the expected transmission
	      characteristic across the DTN.
	    </t>
	    <t>
	      Each Encoding is placed in an Encoding Bundle. The
	      Encoding Vector, UUID, and FEC Scheme are formatted into
	      the Erasure Coding Extension Block defined in this
	      document. The Encoding Data is formatted into the Bundle
	      Payload.
	    </t>
	    <t>
	      Transfer specification is added to the Encoding Bundle
	      to help resolve trade offs in the transfer of this
	      Encoding Bundle relative to other bundles.  The transfer
	      specification cross cuts multiple layers by adding
	      parameters to the bundle header, extension blocks, and
	      Data Object's internal metadata.
	    </t>
	    <t>
	      When Encoding Bundles arrive at a destination, they are
	      added to a Encoding Set based on their UUID. Duplicate
	      Encodings have the same Encoding Vector as an Encoding
	      already in the set and should be dropped. Redundant
	      Encodings do not add any new information to the Encoding
	      Set and may be dropped by the Decoder, but may be used by
	      Recoders.
	    </t>
	    <t>
	      The Data Object is reconstructed at a destination as an
	      array of octets from the decoded Chunks.  When an
	      Encoding Set has enough Encodings to decode some of the
	      Chunks. The Chunks are extracted and sent to the
	      application. Some FEC schemes may decode some Chunks as
	      Encodings arrive, but other FEC schemes may not be able
	      to decode any Chunks until nearly all Encodings have
	      arrived. For some FEC schemes, the decode operation may
	      consume substantial cpu and memory resources.
	    </t>
	  </list>
	</t>
      </section>
      <section title="Erasure Coding Functions">
	<t> 
	  The Erasure Coding process performs several functions that
	  happen at different protocol layers and may happen at
	  different locations within the DTN network.
	  <list style='hanging'>
	    <t hangText=" Encoder">
	      converts a Data Object into Encodings Bundles and sends
	      the bundles into the DTN. The Encoder is
	      responsible for converting the Data Object into Chunks,
	      coding the Chunks into Encodings, packing the Encoding
	      into a Bundle, and setting the Bundle header parameters,
	      to meet the transfer specification requirement. The
	      Encoder MUST send enough Encodings to allow a Decoder to
	      reconstruct the Data Object.
	    </t>
	    <t hangText="Decoder">
	      receives Encodings Bundles, extracts Encodings, and
	      stores the Encodings into an Encoding Set.  The Decoder
	      solves the coding equations to reconstruct Chunks for
	      the Data Object.  When enough Encodings arrive to solve
	      the Encoding Set, the resulting Chunks are given to the
	      consumer of the Data Object.  Note, some FEC schemes may
	      allow solving for some Chunks before solving for all
	      Chunks. In this case, the Chunks MAY be delivered as
	      they are solved or as a complete Data Object.
	    </t>
	    <t hangText="Intermediate Regulator"> 
	      is a process on the path between the Encoder and
	      Decoder.  It may change the order of Encoding Bundles to
	      give one Data Object priority over other Data
	      Objects. It may manipulate how Encoding Bundles are sent
	      between BPAs, based on fields in the Encoding Extension
	      Block, such as UUID, handling spec, and Encoding
	      Vector. Also, it may round-robin through Encoding
	      Bundles in a Encoding Set to increase the diversity of
	      Encodings being forwarded during different
	      contacts. Some forwarding rules may depend on not
	      sending Redundant Encodings to neighbors that have been
	      met on previous contacts.
	    </t>
	    <t hangText="Intermediate Recoder"> 
	      is a source of Redundant Encodings that may be
	      manipulated and forwarded by the Intermediate
	      Regulator. The Intermediate Recoder creates new
	      Encodings from an Encoding Set held within the
	      Intermediate Node.  The new Encodings are redundant, but
	      not duplicate to the other Encodings in the Encoding
	      Set. The Intermediate Regulator MAY send these Redundant
	      Encodings across different paths to the destination.
	      Note that the Intermediate Recoder does not have to solve the
	      Encoding Set. A generated Encoding is created by
	      just combining multiple Encodings from the Encoding Set.
	    </t>
	    <t hangText="Bundle Forwarder"> 
	      is a legacy DTN BPA that does not understand the Erasure
	      Coding Extension. It routes and forwards Bundles based on
	      fields in the standard Bundle primary block header.
	    </t>
	  </list>
	  These functions are grouped into four layers.  The Data
	  Object Content layer is the external consumer of the DTN
	  services and is concerned with transferring a Data Object
	  from the source to the destination(s).  The Coding Layer
	  encodes and decodes the Data Object into Encodings
	  Bundles. The Intermediate Regulating Layer regulates the
	  Encoding Bundle flows across the DTN. The Bundle Forwarding
	  Layer routes and forwards the Bundles along the path from
	  the source to the destination(s).
	</t>
      </section>
      <section title="Erasure Coding Component Configurations">
	<t>
	  Erasure Coding architectural components are locations that
	  execute the Erasure Coding functions. The architectural
	  components are contained inside either DTN Applications or
	  DTN Bundle Protocol Agents (BPAs). The end-to-end Encoders
	  and Decoders may be located in either DTN Applications or
	  DTN BPAs. Intermediate Regulators and Intermediate Recoders
	  may only be located in DTN BPAs. The links between
	  components are either through internal interfaces or across
	  a DTN.
	</t>
	<t>
	  Different configurations of the Erasure Coding Components
	  allow for the creation of distributed systems that meet
	  different end-user application requirements, within the
	  constraints of the DTN.  These configurations help integrate
	  legacy DTN applications and BPAs with Erasure Coding
	  Components, selectively adding or removing functionality
	  depending on availability.
	  <list style='hanging'>
	    <t hangText="Erasure Coding-aware DTN Applications">
	      preform the Encoding and Decoding functions with in the
	      application itself.  The application has knowledge of
	      the end-to-end transfer specification and sets the fields
	      in the Bundle primary block and Handling Specification
	      to best meet the requirements. Also, if the FEC scheme
	      allows for decoding some Chunks before all Chunks are
	      ready, these early Chunks may be consumed by the
	      application.
	    </t>
	    <t hangText="Legacy DTN Applications">
	      that send large bundles, the Encoding functions may be
	      located in the BPA. In this case, a large Bundle is
	      encapsulated as a Data Object and sent to the
	      destination BPA where the large Bundle is decoded and
	      reinserted into the DTN routing layer.
	    </t>
	    <t hangText="Erasure Coding-aware BPAs">
	      The use of Intermediate Regulators and Intermediate
	      Recoders enables traffic shaping based on the UUID,
	      detection of Redundant Encodings, and changing the order
	      of Bundle transmission. The use of intermediate Recoders
	      allows sending more diverse Encodings, substantially
	      reducing the number of Encoding Bundles that need to be
	      received before the Encoding Set can be solved for a
	      Data Object.
	    </t>
	    <t hangText="Legacy BPAs">
	      are not aware of the Erasure Coding Extension, but they
	      may still forward bundles. No Erasure Coding specific
	      processing may be done along the path to improve the
	      importance and urgency of the transfer. Only the
	      existing Bundle-layer Quality of Service mechanisms may
	      be used, such as lifetime, priority, and duplicate 
	      detection.
	    </t>
	    </list>
	    All combinations are possible including running Erasure
	    Coding-aware Applications over Erasure Coding Aware BPAs
	    with Encoders and Decoders. In this case, the BPA MUST
	    check for the Erasure Encoding Extension Block on all
	    Bundles inserted by the application. The BPA MUST NOT
	    attempt to encode an Bundle that has already been encoded
	    by the application.
	</t>
      </section>
    </section>
    <section title="Data Object Content Layer">
      <t>
	The goal of the Data Object Content Layer is to transfer a
	Data Object from a source to a destination within some
	application specific Quality of Service requirements.  It uses
	the DTN Bundle protocol with Erasure Coding Extension to
	accomplish the transfer.
      </t>
      <t> 
	The Data Object Content Layer is concerned with Data Objects
	and a Transfer Specification for that Data Object. The Erasure
	Coding Extension expects to transfer an ordered array of
	octets across a DTN. The job of the Data Object layer is to
	map the Data Object and its Transfer Specification into the
	mechanisms available from the Erasure Coding Extension. This
	mapping is complex and very application and Data Object type
	specific, but mappings share some common features described
	in this section. 
      </t>
      <t> 
	The Data Object type defines the internal representation of a
	Data Object's content and meta data as an ordered array of
	bytes. Many Data Object types are supported. A companion
	document <xref target="EcObjects"/> defines the Data Object
	types for files and large bundles.
      </t>
      <t> 
	The Data Object layer has to interact with all three other
	layers.
      </t>
      <t>
	For the Bundle Forwarding Layer, the Data Object layer MUST
	set Bundle service delivery parameters, such as lifetime and
	priority, so that all Encoding Bundles for a Data Object have the
	same value. We do not recommend requesting delivery
	notifications, especially custody notification as these
	administrative services generate feedback traffic at the Bundle
	Layer and not at the Coding Layer.  The destination is
	specified in the form of an DTN EID.  The transfer
	specification may require multiple destinations, which may be
	satisfied by some configurations of the DTN BPAs routing
	protocols. For example epidemic routing attempts to flood
	Bundles to all nodes in the DTN or alternatively Geo-role
	routing forwards Bundles to all nodes playing a role within
	a geographic region. The Bundle Destination EID is used to
	specify the routing protocol and its parameters.  Features
	from other DTN extensions may be used by the Data Object Layer.
	For example, the Bundle Security Protocol MAY be used to
	protect the authenticity of the Bundle extension blocks and
	payload.
      </t>
      <t> 
	For the Coding Layer, the Data Object and its meta data MUST
	be converted into an ordered array of octets.  The Transfer
	Specification MAY have meta data that needs to be sent
	end-to-end with the Data Object. The representation of the
	meta data depends on the Data Object type.  Likewise, some
	Data Object types may want control over how Chunks are made
	and whether Chunks are delivered early. For example, a video
	Data Object may want to align Chunks on video frame
	boundaries and may want to have the key frames delivered
	early. These Data Object format issues are addressed by
	companion documents for each Data Object Type, such as <xref
	target="EcObjects"/>
      </t>
      <t> 
	For the Intermediate Regulating Layer, the Data Object Layer SHOULD
	set parameter values to the Handling
	Specification. Intermediate Regulators MAY use the parameters
	to tradeoff resource consumption and delivered service among
	competing Data Objects.
      </t>

    <section title="Data Object Transfer Specification">
      <t>
	The transfer specification is an abstract representation for
	<spanx style='emph'>how</spanx> a Data Object should be
	transferred from the source to the destination. It gives hints
	to the Erasure Coding architectural components on how to
	create, combine, transfer, and decode Encoding Bundles.  The
	transfer specification takes end-to-end quality of service
	requirements and translates them into the Bundle Protocol
	mechanisms necessary to meet those requirements.  A transfer
	specification MAY be manifested physically in an Erasure Coding
	implementation, but its main role is to illustrate the control
	points available at each protocol layer and how they interact.
      </t>
      <t> 
	The transfer specification is not monolithic. It cross cuts
	different protocol layers and its content is spread among
	different fields in the bundle header, extension block, and
	the bundle payload. At the bundle layer, it specifies how
	Encoding Bundles are handled relative to other DTN traffic. At
	the Regulating layer, it specifies how Encoding Bundles are
	handled relative to other Encodings Bundles for the same Data
	Object UUID or relative to other Data Object UUIDs. Finally at
	the Data Object layer, it specifies the properties of a copy
	of the Data Object at the destination.
      </t>
      <t>
	In the current state of the Bundle Protocol, the BPA has no
	means for advertising its constraints to the Erasure Coding
	components and the components can not make active measurements
	of these constraints because the poor quality of the
	communication channel makes any measurements obsolete before
	enough samples can be collected. The process of choosing
	transfer parameters, such as Chunk Size, is thus an open loop
	process and depends on external oracles to predict the
	transfer constraints. As the Bundle Protocol evolves and adds
	capabilities for detecting and advertising its environmental
	constraints, the transfer specification will become more
	powerful and more formal. For example, the Bundle Security
	Protocol <xref target="RFC6257"/> should be used to meet the
	Erasure Coding requirement to authenticate the creator of
	Encoding Bundles. The functionality should be reused by the
	Erasure Coding extension and their is no need to redefine it
	here.
      </t>
      <t>
	The following table lists some transfer specification
	parameters that are actionable in the context of the current
	Bundle Protocol <xref target="RFC5050"/> and the Erasure
	Coding extension.
      </t>   
      <texttable anchor='transfer_spec' title='Transfer Specification'>
	<ttcol align='left' > 
	  Parameter 
	</ttcol>
	<ttcol align='center' > 
	  Type
	</ttcol>
	<ttcol align='center' > 
	  Header
	</ttcol>
	<ttcol align='center' > 
	  Field
	</ttcol>
	<ttcol align='left'  > 
	  Description
	</ttcol>
	<c> Destination </c>
	<c> EID </c>
	<c> Bundle</c>
	<c> Destination </c>
	<c> 
	  DTN endpoint destination(s) for Data Object. 
	  The endpoint may be a singleton or have multiple destinations. 
	</c>

	<c>Class of Service</c>
	<c>Flags  </c>
	<c>Bundle  </c>
	<c>Priority  </c>
	<c>Priority relative to other Data Objects  </c>

	<c>Life Time </c>
	<c>SDNV  </c>
	<c>Bundle </c>
	<c>Life Time  </c>
	<c>Time when the Data Object should be deleted, if not delivered  </c>

	<c>Report Progress </c>
	<c> Flags </c>
	<c>Bundle  </c>
	<c>Processing Control </c>
	<c>Quality of Service feedback for Data Object  </c>

	<c>UUID  </c>
	<c>Id </c>
	<c> Extension </c>
	<c> Unique Id </c>
	<c> A Universally Unique Identifier that is associated with the Data
	Object transfer.
	</c>

	<c>Number of Chunks  </c>
	<c> SDNV  </c>
	<c> Extension </c>
	<c> Number of Chunks </c>
	<c> The number of Chunks that the Data Object was divided into.
	Fewer Chunks reduce the reassembly time at destination.
	</c>

	<c>Chunk Length  </c>
	<c> SDNV</c>
	<c>Payload  </c>
	<c>Length  </c>
	<c> The size of the Chunks that the Data Object was divided into. 
	Smaller Chunks reduce chance of bundle-layer
	fragmentation. </c>

	<c>Handling Spec  </c>
	<c>Flags  </c>
	<c>Extension  </c>
	<c>Handling Spec  </c>
	<c>Handling hints for Intermediate Regulators for this bundle
	relative to other Encoding Bundles with same Data Object UUID
	</c>

	<c>Authentication  </c>
	<c>ID  </c>
	<c>Bundle Security Extension </c>
	<c>Signing </c>
	<c>The level of trust in the Encoding components. </c>

	<c>Data Object Metadata  </c>
	<c>Flags  </c>
	<c>Payload  </c>
	<c>Data Object Header in first Chunk</c>
	<c>Meta Data about Data Object's systemic properties, such as
	authenticity, validity, and permissions
	</c>
      </texttable>
    </section>
    <section anchor='chunk' title="Creating Chunks">
     <t> 
	The Data Object Layer formats the Data Object and meta data as
	an octet array that is used as input to the Coding Layer. The
	Data Object octet array is divided into an ordered array of
	equal length Chunks. Chunks are identified with an
	index. The Chunk with the index of '0' contains the octet with
	index '0'.
      </t>
      <t> 
	The Data Object Layer must add padding octets to the last
	Chunk, so that all Chunks are the same length.  The Data
	Object Layer is responsable for storing the exact length of
	the Data Object without padding, because the Coding Layer
	does not have a field for the Data Object Length.
      </t>
      <t> 
	The exact number_of_chunks is determined at transfer time
	and is based on the Data Object Layer Transfer Specification
	and path characteristics of the DTN network. Decoders SHALL
	handle any number_of_chunks, but practical limits MAY be in
	the 1000's of Chunks.  The chunk_length SHOULD be a multiple
	of 8. This will allow efficient octet array operations to be
	performed when encoding and decoding Chunks and Encoding
	Data.
      </t>
    </section>

    </section>
    <section title="Coding Layer">
      <t>
	The goal of the Coding Layer is to divide a Data Object that
	is formated as an ordered array of octets into a group of
	Encodings. The Encodings MUST form a full Encoding Set and MAY
	have Redundant Encodings. The <xref target='Process'> Erasure
	Coding Process</xref> is followed to encode Data Objects into
	Encodings and to decode an Encoding Set back into a Data
	Object.  In this process, a FEC scheme is applied to the Chunks
	of a Data Object to form an Encoding.  The
	FEC scheme uses a coding formula to convert the Chunks to an
	Encoding Data.  The coefficients for the coding formula are
	stored in the Encoding Vector. The Encoding Vector and
	Encoding Data together form the Encoding. The exact format of
	the Encoding Vector and Encoding Data is defined by the FEC
	scheme. The Erasure Coding Extension supports multiple FEC
	schemes, such as the Random Binary FEC scheme defined in the
	companion document <xref target="RandBinary"/>.
      </t>
     <t>
       An Encoding is packed into an Encoding Bundle. In order for
       Intermediate Regulators to detect Redundant Encodings and group
       Encoding Bundles into Encodings Sets, some Encoding parameters
       are exposed in the <xref target='Block'>Erasure Coding
       Extension Block</xref>, such as the Encoding Vector and Data
       Object UUID. The Encoding Data is not needed by Intermediate
       Regulators and is put into the Bundle Payload.  Intermediate
       Recoders need access to the content of both the Erasure Coding
       Extension Block and the Bundle Payload in order to generate new
       Encodings.
     </t>

    <section title="Erasure Coding Extension Block" anchor="Block">
      <t>
	The Erasure Coding Extension Block marks the Bundle containing
	an Encoding. The format of the Erasure Coding Extension
	Block is as follows:
      </t>
      
      <texttable anchor='extension_block' title='Erasure Coding Extension Block'>
	<ttcol width='20%' align='left' > 
	  Field 
	</ttcol>
	<ttcol align='center' > 
	  Type 
	</ttcol>
	<ttcol align='left'  > 
	  Description
	</ttcol>
	<c> Block Type </c>
	<c> Octet=0xEC </c>
	<c> Bundle Protocol Extension Block Type is the constant 0xEC. </c>
	<c> Block Processing Flags </c>
	<c> SDNV </c>
	<c>  See Section 4.3 of <xref target="RFC5050"/> for bit settings </c>

	<c> Block Length </c>
	<c>  SDNV </c>
	<c> Length of extension block data, not including the padding. </c>

	<c> Version  </c>
	<c> SDNV  </c>
	<c> Erasure Coding Extension Block version that increments
	with newer versions </c>

	<c> Data Object Format Type </c>
	<c>  SDNV </c>
	<c> Type number for the format of Data Object. Defines format
	for decoded Chunks, see <xref
	target="EcObjects"/>.</c>

	<c>  Data Object UUID</c>
	<c> UUID (128bits) </c>
	<c> Universally Unique ID for a specific Data Object
	transfer. The UUID SHOULD be in the format specified in <xref
	target="RFC4122"/>. The Data Object Format specification MAY
	define a hash function to map the Data Object's name to a
	UUID.  [NOTE: The reference implementation uses two SVDN
	fields to pack the upper and lower 64 bits.]
	</c>

	<c> Handling Specification Length </c>
	<c>  SDNV </c>
	<c> Number of SDNV Parameters in the Handling Specification.
	As the Erasure Protocol matures, parameters will be added to
	the Handling Specification. Version 1 of the Erasure Coding
	Extension does not define any Handling Specification parameters,
	so this field value is 0. Version 1 implementations MUST treat
	this field as a length of the next field, even though the content
	SHOULD be ignored.
	</c>
	<c> Handling Specification Parameters</c>
	<c>  SDNV List</c>
	<c> Hints on how Intermediate Regulators should order,
	prioritize, limit rate, or drop this Encoding relative to
	other Encoding bundles with the same Data Object UUID. No
	Handling Specification Parameters are defined for Version 1,
	so this field is null.</c>

	<c> Number of Chunks   </c>
	<c> SDNV  </c>
	<c> Number of Chunks that the Data Object was divided into. </c>

	<c> FEC Scheme Type  </c>
	<c>  SDNV   </c>
	<c> The type number of the FEC Scheme used to interpret Coding
	Scheme Parameters, for example see <xref
	target="RandBinary"/>. </c>

	<c>  FEC Scheme Parameters </c>
	<c>  Octets </c>
	<c> Format of the octet array is determined by FEC Scheme. 
	This field ends at the
	Block Length of the extension block data. </c>

	<c>  Padding </c>
	<c>   Octets </c>
	<c> Extra octets so that the total length the whole extension block
	is a multiple of 4 octets.</c>
      </texttable>
      <t>
	The Data Object UUID field identifies the Data Object for the
	Encoding Bundle. The UUID MUST be unique in the DTN network
	over the life time of the bundle. While the UUID is treated just
	as a number, the UUID SHOULD be in the format specified in
	<xref target="RFC4122"/>. All the received Encoding Bundles
	with the same UUID form an Encoding Set for a Data Object.
      </t>
      <t>
	The Data Object Format Type specifies the format used at the
	Data Object Layer. A Data Object format MUST define the
	headers and padding for the decoded Data Object. A Data Object
	format MAY define a format for the bundle payload, but by
	default the bundle payload contains just the Encoding
	Data. Several Data Object formats are defined in <xref
	target="EcObjects"/> and future documents.
      </t>
      <t>
	The Handling Specification gives hints on how Intermediate
	Coders SHOULD process this bundle relative to other bundles in
	the same Encoding Set. For example, how many Redundant
	Encoding Bundles should be forwarded or what order to send
	Encoding Bundles across multiple contact points. The values of
	Handling Specification depend on both the type of FEC scheme
	and the characteristics of the expected DTN communication
	path. The parameters (flags) of the Handling Specification
	MUST be actionable by Intermediate Regulators. For Version #1
	of the Erasure Coding Extension Block, this handling
	parameters are undefined and Handling Specification Length
	MUST be zero (0).
      </t>
      <t>
	The Encoding Vector is part of the extension block because
	Intermediate Regulators MAY want to determine the rank of an
	Encoding Set to detect Redundant Encodings. Calculating the
	rank is a less computationally expensive operation than
	decoding the Encoding Set for its Chunks. Calculating the rank
	only needs the Encoding Vector sand not the Encoding
	Data. Decoding needs to XOR multiple Encoding Datas together
	to decode each Chunk, a computationally expensive
	operation. The format of the Encoding Vector depends on the
	type of FEC scheme used. The common field among all FEC
	schemes is the Number of Chunks in the Data Object. The other
	two fields specify the type of FEC scheme and the bytes for
	the Encoding Vector itself. Several FEC schemes are defined in
	<xref target="RandBinary"/> and future documents.
      </t>
      <t>
	More than one Erasure Coding Extension Block MAY be present in
	the same bundle. The interpretation of multiple extension
	blocks is to treat them as a composite formula that are
	merging Chunks from multiple Data Objects. The merged
	Encoding Vector adds the coefficients from the component
	Encoding Vectors. The merged Encoding Data (bundle payload) is
	the XOR of the composite Encoding Data. Intermediate Regulators
	MAY use the handling specification from either extension block
	to determine the handling procedures. The Handling
	Specification SHOULD be equivalent for all Erasure Coding
	Extension blocks in the bundle.  The multiple extension block
	option supports experimentation in Network Coding.
      </t>
    </section>
  </section>
    <section title="Intermediate Regulating Layer">
      <t>
	The goal of the Intermediate Regulating layer is to control
	the flow of Encoding Bundles as they move from the source to
	the destination.  Intermediate Regulators decide on which
	Encoding Bundles should be sent next during a contact period
	with a neighbor BPA. Given the dynamic and complex nature of
	DTN topologies and the tradeoffs between competing DTN traffic
	flows, the traditional first come first serve queueing
	discipline is rarely adequate.  Also, in the most general case
	the traffic shaping function in the Intermediate Regulators
	needs to work without feedback from neighbors or the
	end-to-end destinations.
      </t>
      <t>
	<spanx style='strong'>Note:</spanx> No reference
	implementation of the Intermediate Regulator have been
	completed at the time of this document publication. More
	research is necessary to determine the functionality of the
	Handling Specification and the policies used by Intermediate
	Regulators.  This section is a place holder and lays out the
	issues. A future version of this section will capture the
	conclusions of the future research results. 
      </t>

      <section title="Traffic Shaping">
	<t>
	  Traffic Shaping MAY improve the efficiency of resource
	  consumption and the fairness between DTN traffic flows in
	  the case where feedback is impractical between neighbors or
	  between the destination and the source. Traffic shaping may
	  determine when to stop forwarding Encoding Bundles from a
	  Data Object, limit the rate, redundancy, or the order between
	  bundles. The traffic shaping parameters may be calculated
	  per Data Object UUID, per neighbor, or per contact.
	</t>
	<t>
	  A basic no feedback traffic shaper MAY be based on the
	  following policy and parameters.  During a contact the
	  candidate Data Objects are ordered by importance (priority
	  field in Bundle Primary Block) and urgency (lifetime in
	  Bundle Primary Block). The highest priority with the
	  earliest expiration is sent first.  Sending a Data Object is
	  divided into two phases; an Innovative Send Phase and a
	  Redundant Send Phase.  The Innovative Send phase sends only
	  enough Encodings to form a full Encoding Set at the
	  Receiver, while the Redundant Send Phase sends extra
	  Redundant Encodings for FEC purposes. 
	</t>
	<t>
	  Each phase has a limit on the number of Encodings in that
	  phase and a limit on the rate for which Encodings are sent during
	  that phase.  Encoding Bundles are sent in Data Object order,
	  sending all the Innovative Encoding Bundles for <spanx
	  style='emph'>all</spanx> the Data Objects and then starting
	  the redundant phase.  While sending a Data Object during a
	  phase, the next Data Object will start when the Max Number
	  of Encodings for that phase is exceeded or the rate is
	  exceeded. When all the Redundant Encoding Bundles have been
	  sent for all Data Objects, transmission stops.
	</t>
	<t>
	  The following are basic traffic shaping parameters that MAY
	  be put into the Handling Specification. Version 1 of the
	  Handling Specification does not allow these parameters to be
	  specified dynamically, but defines a default Handling
	  Specification based on these parameters.
	  <list style='hanging'>
	    <t hangText="Encoding Order">
	      defines the order to send Encodings for the same Data
	      Object. The order may be changed based on the
	      requirements of the transmission specification. The
	      order MAY be Oldest First, Oldest Last, Round-Robin, or
	      Random.
	    </t>
	    <t  hangText="Send State">
	      defines the level of detail for sending a Data Object
	      across contacts. For example, the encoding order MAY be
	      be maintained for each time a Data Object is sent to
	      a unique neighbor, or for each contact regardless of the
	      neighbor, or no send state is maintained at all (Random).
	    </t>
	    <t  hangText="Max Number of Innovative Encodings">
	      defines the number of Encodings in the Innovative
	      Phase. For example, this limit MAY be greater than the
	      Number of Chunks, if some Redundant Encodings should be
	      included in the Innovative Send Phase. Conversely, the limit
	      MAY be lower, if the contact periods are very short and
	      Data Objects are expected to be sent over multiple
	      contacts.
	    </t>
	    <t  hangText="Max Number of Redundant Encodings">
	      defines the number of Encoding Bundles in the
	      Redundant Phase.
	    </t>
	    <t  hangText="Rate Limit for Innovative Encoding">
	      defines a limit on how quickly Encodings are sent rate limit
	      during the Innovative phase.  The rate MAY be specified
	      using leaky bucket parameters, such as input period and
	      initial fullness. Alternatively, a processor sharing
	      model parameter MAY limit the maximum number Encodings
	      to send before moving to the next Data Object with the
	      same priority.
	    </t>
	    <t  hangText="Rate Limit for Redundant Encodings">
	      defines a rate limit during the Redundant phase.
	    </t>
	  </list>
	</t>
      </section>
      <section title="Handling Specification">
	<t> 
	  The Handling Specification is a field in the Erasure Coding
	  Extension Block that defines the parameters for traffic
	  shaping and feedback messages. The format of this field is
	  that of a length followed by a list of parameters with
	  'length' entries.  The length and parameters are SDNV
	  values, making the entire Handling Specification field have
	  variable length.  As Version #1 of the Erasure Coding
	  Extension does not define any Handling Specification
	  Parameters, the length MUST currently be zero (0) for Version #1
	  and the parameter list null.  As the Erasure Coding Extension
	  matures, parameters will be added to the Handling
	  Specification.  The Handling Specification Length has the
	  dual role of determining the number of parameters and as
	  version indicator for the meaning of each parameter.
	</t>
	<t>
	  When the Handling Specification Length is zero (0), then the
	  Intermediate Regulator and Recoder MAY use the following
	  default policy. The order of sending Data Objects is based
	  on the Priority and Lifetime fields in the Bundle Primary
	  Block, with the highest priority first, then the earliest
	  expiration.  The order of sending Encodings within a
	  specific Data Object is Round-Robin between
	  contacts. The send state for a Data Object is saved
	  for the whole Data Object regardless of neighbors.  The
	  maximum number of Encodings in the Innovative Phase is equal
	  to the Number of Chunks. The maximum number of Encodings in
	  the Redundant Phase should be the maximum of 10 and the
	  square root of the Number of Chunks. There is no rate limit
	  for sending Innovative Encodings or Redundant Encodings.
	</t> 
      </section>
 
      <section title="Feedback Messages" anchor='feedback_messages'>
	<t>
	  Feedback messages MAY be defined to increase the efficiency
	  of resource usage for the case where feedback is possible
	  between neighbors or between the destination and the source.
	  The following types of feedback messages would enhance the
	  exchange protocol.
	  <list style='hanging'>
	    <t  hangText="Stop or End-to-End Acknowledgement">
	      messages that are sent back from the Destination Decoder to
	      the Source Encoder to indicate that the Data Object has
	      been received. The Source Encoder may use this
	      acknowledgement to stop sending Redundant
	      Encodings. Also, this could prompt the sending of a
	      PURGE message, that is signed by the Encoder.  The Stop
	      message MUST expire no later than the original Data
	      Object.
	    </t>
	    <t hangText="Purge">
	      messages to indicate that intermediate routers may remove
	      all Encoding Bundles for a Data Object UUID. Encoding
	      Bundles are valid until the Lifetime of the Bundle
	      expires. The Purge mechanism allows for the early
	      removal of Encoding Bundles to save storage and
	      transmission resources in Intermediate Regulators. Purge
	      messages MAY be ignored by Intermediate Routers, without
	      loss of correct transmission. Purge messages may be
	      initiated either by the Encoder or Decoder and travel
	      along the path from the message sender to the message
	      destination. Because the DTN path form the Encoder to
	      Decoder may be different than the path from Decoder to
	      Encoder, initiating Purge messages only from the Decoder
	      may not be adequate to reach all the Intermediate
	      Encoders that have a copy of the Encoding Bundles for a
	      Data Object. Purge messages MUST be authenticated before
	      triggering the removal of Encoding Bundles, in order to
	      avoid denial of service attacks.  The Purge message MUST
	      expire not later than the original Data Object.
	    </t>
	    <t hangText="Data Object Status">
	      messages that are exchanged between neighbors to
	      indicate the availability of Encoding Bundles for Data
	      Objects. During a contact in an opportunistic DTN
	      network topology, neighbors must quickly determine which
	      Bundles to exchange. Erasure Encoding helps this
	      process, by allowing reasoning about a group of bundles
	      based on Data Object UUID. The existence of a Data
	      Object, rank of it's Encoding Set, and level of
	      redundancy may be exchanged between neighbors. This
	      information may be used to increase the efficiency of
	      the exchange. For example, the following exchange
	      policies MAY be enacted. If the neighbor already has the
	      full Data Object, no bundles from that group need to be
	      exchanged. Likewise, if the rank of the Encoding Set is
	      almost full, then only missing Encoding Bundles need to
	      be sent during the Innovative Send Phase.  Redundant
	      Encoding Bundles may be delayed until after other Data
	      Objects are completed their Innovative Send Phase.
	    </t>
	  </list>
	</t>
      </section>

      <section title="Intermediate Recoder">
	<t>
	  Early research suggests that sending Encodings that are
	  Redundant but not Duplicates will increase the probability
	  of receiving a full Encoding Set at the destination.  In the
	  case where the DTN topology is highly dynamic with contact
	  transmissions much smaller than a whole Data Object, the
	  interactions along the intermediate path mixes and copies
	  Encodings in flight so that receiving Duplicates is
	  common. The overall receive process can be similar to a
	  random draw from the senders Encoding Set with replacement.
	  Avoiding Duplicates being propagated on alternate paths
	  avoids the "coupon collector problem" at the receiver. That
	  is, there is a low probability of getting the last missing
	  coupon that is not a duplicate of a previous coupon. If
	  Duplicates are allowed to propagate on intermediate paths,
	  many Encodings must be received before the Encoding Set can
	  be solved, thus wasting bandwidth. The goal of the
	  Intermediate Recoder is to introduce Redundant Encodings on
	  the intermediate paths that are not Duplicates.
	</t>
	<t>
	  An Intermediate Recoder includes all of the functionality of
	  an Intermediate Regulator. The Recoder adds the
	  functionality of generating additional Encoding Bundles for
	  Data Objects.  Intermediate Recoders do not directly forward
	  Encodings that they receive, but would produce a new
	  Encoding from all of the previously received Encodings for
	  the same Data Object. This new Encoding would be Redundant
	  relative to the previously received Encoding Set, but it
	  would not be a Duplicate of any Encoding in the Encoding
	  Set. Thus as the Encodings for a Data Object are propagated
	  over the DTN, few if any Duplicates would be present over
	  the whole DTN. In other words, if Intermediate BPAs
	  transmitted copies of received Encoding Bundles, then
	  Bundles that took different paths might be Duplicates. If
	  two Duplicates are received, then at least one will be
	  Redundant. But if two Recoded Encodings are receive, even if
	  they come from the same partial Encoding Set, there is a
	  chance that both will be Innovative.
	</t>
	<t>
	  Some FEC schemes allow the generation of Redundant Encodings
	  from previously received Encodings.  The exact mechanism for
	  the generation is FEC scheme dependent, but the basic
	  mechanism is to linearly combine multiple Encodings to form
	  a new Recoded Encoding. The Recoded Encoding will always be
	  Redundant relative to the Encoding Set. It adds no
	  innovative information about the Data Object's
	  Chunks. Instead the Recoded Encoding is not a Duplicate of
	  previous Encodings.
	</t>
	<t>
	  More research is necessary to determine the mechanisms for
	  Recoding. The Erasure Coding Extension supports this
	  research by defining the architectural functions and basic
	  policies for Recoding. Some issues to be addressed include:
	  how to recode without raising the hamming weight; how to
	  reduce the number of Encoding Data XORs during generation of
	  a new Encoding; how to reduce the XORs during solving the
	  Encoding Set; and how to generate a new Encoding that can
	  be authenticated as if it is coming from the original Encoder.
      </t>
    </section>
  </section>

  <section title="Bundle Forwarding Layer">
    <t>
      The goal of the Bundle Forwarding Layer is to transfer Bundles
      using all the DTN features and services available to the BPA.
      Legacy BPAs that are not aware of the Erasure Coding Extension
      MUST still forward Bundles between components, ignoring the
      Erasure Coding Extension, but adhering to Bundle forwarding
      procedures.  DTN Bundle Forwarding is adequately defined and
      characterized in other documents and does not have too be
      defined here.
    </t>
    <t>
     
      In order to meet the Transfer Specification at the Data Object
      layer, the special characteristics of the particular DTN network
      must be taken into account.  DTN can support networks that have
      extreme communication models, including the following: Besides
      the high delay-bandwidth products found in space networks and
      the non-contemporaneous end-to-end paths found in opportunistic
      mobile networks, DTN can support transmission to selective
      destinations.  The DTN transmission links between coding
      components can be either unicast or multicast.  DTN supports
      bundles being delivered to multiple destinations. DTN also
      supports multiple routing protocols, that can flood bundles
      through out the DTN network. These DTN features may be used by
      Erasure Coding to support a wide variety of end-user
      applications. For example, reliable multicast of large Data
      Objects over a DTN is an illustrative use case for Erasure
      Coding, because FEC is an effective technique for overcoming the
      difficulty of feedback between the multiple receivers and the
      sender, and FEC may exploit the ability of the DTN to deliver
      Encoding Bundles among peers.
    </t>
  
  </section>
    
  <section title="Security Considerations">
    <t>
	The basic Erasure Coding protocol does not provide
	authentication for the Encoding Vector or the Encoding
	Data. This means that a rogue entity on the path between the
	sender and the receiver could view, delete, reorder, copy,
	modify, and inject new Encoding Bundles into the bundle
	flow. In this section we describe how to overcome this issue
	using the Bundle Security Protocol (BSP) <xref
	target="RFC6257"/>.
      </t>
      <t>
	The Encoding Vector is stored in the Erasure Coding Extension
	Block and the Encoding Data is stored in the Payload
	Block. The only method available in BSP to authenticate both
	the Payload Block and an Extension Block is through the use of
	a Bundle Authentication Block (BAB). This is a symmetric
	key-based algorithm, meaning both parties must share a secret
	bit-string that is not known to any other entities. BSP does
	not specify the method in which this secret bit-string should
	be established.
      </t>
      <t>
	It should be noted that the Extension Security Block (ESB)
	option in BSP does not provide authentication of an Extension
	Block. Since ESB utilizes AES in Galois/Counter Mode (GCM), it
	does provide data integrity. If the AES-GCM key was the output
	of a key agreement protocol that authenticated the sender of
	the bundle, then AES-GCM encryption may provide implicit
	authentication. However, the ESB-RSA-AES128-EXT cipher suite
	that ESB utilizes does not provide this authentication.
      </t>
      <t>
	Another issue is guaranteeing the authenticity of <xref
	target='feedback_messages'>feedback messages</xref> generated
	in by the destination. This issue is not resolved because the
	actual need and format of the feedback messages is not defined
	in this document.
      </t>
  </section>

    <section title="Refinement of the Erasure Coding Extension">

      <t>
	This document defines the framework for an Erasure Coding
	Extension for DTN.  The document defines the terms, function,
	architectural components, and the extension block format. Some
	details of some features have be purposely left out, because
	we expect that the Erasure Coding Extension will have multiple
	options for these features. Specifically, a FEC scheme has not
	been defined in this document. The companion document <xref
	target="RandBinary"/> defines the specification for the Random
	Binary Forward Error Correcting Scheme.  Other FEC schemes
	will be added in the future. Also, the format for Data Objects
	has not been defined in this document. The companion document
	<xref target="EcObjects"/> defines the specification of File
	and Large Bundle Data Objects. Other Data Object formats will
	be added in the future and each will have its own document.
	We also anticipate a refinement of the Handling Specification
	and the forwarding and traffic shaping policies of Intermediate
	Regulators. While this document recommends default policies,
	other Handling Specification definition will be added in the
	future and each will have their own document.
      </t>
    </section>



    <section title="IANA Considerations">
      <t>
	Erasure Coding extension defines the following well known numbers:
	<list>
	  <t> 
	    Bundle Protocol extension block number is the constant 0xEC.
	  </t>
	  <t> 
	    Identifier numbers for FEC schemes in extension block are defined
	    in <xref target="RandBinary"/> and future FEC scheme documents.
	  </t>
	  <t>
	    Identifier numbers for Data Object Format type in
	    extension block are defined in <xref target="EcObjects"/>
	    and future Data Object Format documents.
	  </t>
	</list>
      </t>
    </section>

  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;
      &rfc4838; 
      &rfc5050;
      &rfc5052;
      &rfc6256;
    </references>
    
    <references title="Informative References">
      &rfc4122;
      &rfc5053;
      &rfc5170;
      &rfc5445;
      &rfc5510;
      &rfc6257;

      <reference anchor='RandBinary'>
        <front>
          <title>Random Binary Coding Scheme for Bundle Protocol</title>
          <author initials='J.' surname='Zinky'
                  fullname='John Zinky'>
            <organization abbrev='BBN'>
              Raytheon BBN Technologies
            </organization>
          </author>
          <author initials='A.' surname='Caro'
                  fullname='Armando Caro'>
            <organization abbrev='BBN'>
              Raytheon BBN Technologies
            </organization>
          </author>
          <author initials='G.' surname='Stein'
                  fullname='Gregory Stein'>
            <organization abbrev='LTS'>
              Laboratory for Telecommunications Sciences
            </organization>
          </author>
          <date month='Aug' year='2012' />
        </front>
        <seriesInfo name='Internet-Draft' value='draft-irtf-dtnrg-zinky-random-binary-fec-scheme-00' />
      </reference>

      <reference anchor='EcObjects'>
        <front>
          <title>Bundle Protocol Erasure Coding Basic Objects</title>
          <author initials='J.' surname='Zinky'
                  fullname='John Zinky'>
            <organization abbrev='BBN'>
              Raytheon BBN Technologies
            </organization>
          </author>
           <author initials='A.' surname='Caro'
                  fullname='Armando Caro'>
            <organization abbrev='BBN'>
              Raytheon BBN Technologies
            </organization>
          </author>
          <author initials='G.' surname='Stein'
                  fullname='Gregory Stein'>
            <organization abbrev='LTS'>
              Laboratory for Telecommunications Sciences
            </organization>
          </author>
         <date month='Aug' year='2012' />
        </front>
        <seriesInfo name='Internet-Draft' value='draft-irtf-dtnrg-zinky-erasure-coding-objects-00' />
      </reference>

      <reference anchor='Erasure_Wang'>
        <front>
          <title>Erasure-coding based routing for opportunistic networks</title>
          <author initials='Y.' surname='Wang'
                  fullname='Yong Wang'>
          </author>
          <author initials='S.' surname='Jain'
                  fullname='Sushant Jain'>
          </author>
          <author initials='M.' surname='Martonosi'
                  fullname=' Margaret Martonosi'>
          </author>
          <author initials='K.' surname='Fall'
                  fullname='Kevin Fall'>
          </author>
  
          <date month='Aug' year='2005' />
        </front>
        <seriesInfo name='ACM SIGCOM' value='Workshop on Delay-tolerant networking (WDTN 05)' />
      </reference>

    </references>
  </back>

  
</rfc>

PAFTECH AB 2003-20262026-04-24 10:43:44