One document matched: draft-irtf-dtnrg-bundle-spec-00.txt


   Delay Tolerant Networking Research Group                    K. Scott 
   Internet Draft                                 The MITRE Corporation 
   <draft-irtf-dtnrg-bundle-spec-00.txt>                    S. Burleigh 
   March 2003                                 Jet Propulsion Laboratory 
   Expires: September 2003                                              
                                                                         
    
    
                       Bundle Protocol Specification 
    
    
    
Status of this Memo 
    
   This document is an Internet-Draft and is in full conformance with 
   all provisions of Section 10 of RFC2026.  
    
   Internet-Drafts are working documents of the Internet Engineering 
   Task Force (IETF), its areas, and its working groups.  Note that 
   other groups may also distribute working documents as 
   Internet-Drafts. 
    
   Internet-Drafts are draft documents valid for a maximum of six 
   months and may be updated, replaced, or obsoleted by other 
   documents at any time.  It is inappropriate to use Internet- 
   Drafts as reference material or to cite them other than as 
   "work in progress." 
    
   The list of current Internet-Drafts can be accessed at 
   http://www.ietf.org/1id-abstracts.html 
    
   The list of Internet-Draft Shadow Directories can be accessed at 
   http://www.ietf.org/shadow.html 
    
    
Abstract 
    
   This document describes the end-to-end protocol, header formats, and 
   abstract service description for the exchange of messages (bundles) 
   in Delay Tolerant Networking (DTN).   
    
Conventions used in this document 
    
   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 [1]. 
 



 
 
K. Scott and S. Burleigh    Expires - September 2003          [Page 1] 





Internet Draft      Bundle Protocol Specification          March 2003 
 
 
Table of Contents 
    
   1.          Introduction.........................................2 
   2.          Service Description..................................4 
      2.1      Definitions..........................................4 
      2.2      Services at the User Interface.......................4 
      2.3      Summary of Primitives................................4 
      2.4      Summary of Parameters................................5 
      2.5      Bundling Service Primitives..........................6 
   3.          Bundle Message Format...............................11 
      3.1      General Bundle Header Format........................15 
      3.2      Tuples..............................................15 
      3.3      Primary and Variable-Length Immutable Portion Headers16 
      3.4      Current Custodian Header............................19 
      3.5      Bundle Status Report Header.........................20 
      3.6      Bundle Payload Header...............................21 
      3.7      Subsequent Bundle Payload Header....................21 
      3.8      Authentication Header...............................22 
      3.9      16-bit Extended Offset Header.......................23 
      3.10     Rules Governing the Appearance and Order of Headers.23 
   4.          Bundle Processing...................................24 
      4.1      Bundles received from applications via the API......24 
      4.2      Bundles received from other bundle agents...........24 
      4.3      Bundle Fragmentation and Reassembly.................27 
   Security Considerations.........................................28 
   Informative References..........................................28 
   Acknowledgements................................................29 
   Author's Addresses..............................................29 
    
    
1. Introduction 
    
   Delay Tolerant Networking (DTN) is an end-to-end architecture 
   providing communications in and/or through highly stressed 
   environments.  Stressed networking environments include those with 
   intermittent connectivity, large and/or variable delays, and high bit 
   error rates.  To provide its services, the DTN protocols, also known 
   as bundle protocols, sit at the application layer of the constituent 
   internets, forming a store-and-forward overlay network.  Key 
   capabilities of the bundling protocols include: 
    
     o  Custody-based reliability 
     o  Ability to cope with intermittent connectivity 
     o  Ability to take advantage of scheduled and opportunistic 
         connectivity (in addition to 'always-up' connectivity) 
     o  Late binding of names to addresses 
    


 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 2] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   For descriptions of these capabilities and rationale for the DTN 
   architecture, see  [2].  [3] contains a tutorial-level overview of 
   DTN concepts. 
    
   The bundle protocols sit at the application layer of the constituent 
   internets as shown in Figure 1.  Bundling uses the 'native' internet 
   protocols for communications within a given internet.  Note that 
   'internet'  in the preceding is used in a general sense and does not 
   necessarily refer to TCP/IP.  The interface between the common bundle 
   protocol and a specific internetwork protocol suite is known as a 
   convergence layer.  Figure 1 shows three distinct transport and 
   network protocols (denoted T1/N1, T2,N2, and T3/N3). 
    
    
   +-----------+                                         +-----------+  
   | BundleApp |                                         | BundleApp |  
   +---------v-|   +->>>>>>>>>>v-+     +->>>>>>>>>>v-+   +-^---------+  
   |  Bundle v |   | ^  Bundle v |     | ^  Bundle v |   | ^ Bundle  |  
   +---------v-+   +-^---------v-+     +-^---------v-+   +-^---------+  
   | Trans1  v |   + ^  T1/T2  v |     + ^  T2/T3  v |   | ^  Trans3 |  
   +---------v-+   +-^---------v-+     +-^---------v +   +-^---------+  
   | Net1    v |   | ^  N1/N2  v |     | ^  N2/N3  v |   | ^  Net3   |  
   +---------v-+   +-^---------v +     +-^---------v-+   +-^---------+  
   |         >>>>>>>>^         >>>>>>>>>>^         >>>>>>>>^         |  
   +-----------+   +------------+      +-------------+   +-----------+  
    
   |                     |                    |                      |  
   |<--  An Internet --->|                    |<--- An Internet  --->|  
   |                     |                    |                      | 
    
   Figure 1: The bundling protocol sits at the application layer of the 
              Internet model. 
    
   This document describes the format of the messages (called bundles) 
   passed between entities participating in bundle communications.  The 
   entities are referred to as bundle nodes or bundle agents.  This 
   document does not address: 
    
     o  The mechanisms bundle agents use to transport data through a 
         specific Internet, called convergence layers, or the bundle 
         agent to convergence layer API. 
    
     o  The bundle routing algorithm or mechanisms for populating the 
         routing or forwarding information bases of bundle nodes. 
    
    



 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 3] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
2. Service Description 
    
2.1 Definitions 
    
   Communications Endpoint ID û A Communications Endpoint ID or 
   'Communications endpoint' corresponds to a 'tuple' in [2].  A 
   communications endpoint is identified by a DTN region identifier and 
   an administrative part that is opaque to the bundle system outside 
   the destination region. 
    
   Passive bundle reception û A bundle application is said to be in a 
   period of passive bundle reception if it expects the bundle agent to 
   asynchronously notify it of new bundles.  This assumes that the 
   application has registered a Communications Endpoint ID and a 
   callback mechanism with a bundle agent. 
    
   Send token binding, registration token binding û A token passed from 
   a bundle application to the bundle agent when sending a bundle / 
   registering to receive bundles.  This token is used to associate an 
   opaque token returned by the bundle agent with a specific bundle / 
   registration. 
    
2.2 Services at the User Interface 
    
2.2.1 The bundling protocol SHALL provide the following services to 
      bundling applications: 
    
      a) sending a bundle to an identified communications endpoint; 
      b) canceling a previously submitted request to send a bundle 
      c) beginning a period of passive bundle reception; 
      d) ending a period of passive bundle reception; 
      e) actively requesting delivery of a bundle. 
    
2.3 Summary of Primitives 
    
2.3.1 The bundling service SHALL consume the following request 
      primitives: 
    
      a) Send.request; 
      b) Cancel.request 
      c) Register.request; 
      d) Deregister.request; 
      e) Poll.request; 
    





 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 4] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
2.3.2 The Bundling service SHALL deliver the following indication 
      primitives: 
    
      a) Bundle.indication; 
      b) SendError.indication 
      c) SendToken.indication 
      d) RegistrationToken.indication 
    
2.4 Summary of Parameters 
    
   NOTE  û  The availability and use of parameters for each primitive 
   are indicated in section 2.5, where optional parameters are 
   identified with square brackets [thus].  The following definitions 
   apply. 
    
2.4.1 Destination Communications endpoint ID 
    
   The destination communications endpoint ID parameter identifies the 
   communications endpoint to which the bundle is to be sent. One can 
   think of a DTN communications endpoint as an application, but in 
   general the definition is meant to be broader.  For example, elements 
   of a sensor network might register with a local bundle agent to 
   receive information about certain topics of interest.  A 
   communications endpoint could thus refer to a process running on a 
   general-purpose processor, a special-purpose hardware device, an 
   object in an object-oriented operating system, etc.   
    
2.4.2 Source Communications endpoint ID 
    
   The source communications endpoint ID parameter shall uniquely 
   identify the communications endpoint from which the bundle was sent. 
    
2.4.3 Reply Communications endpoint ID 
    
   The reply communications endpoint ID parameter shall identify the 
   communications endpoint to which any bundle status reports pertaining 
   to the bundle, including end-to-end acknowledgments, should be sent. 
    
2.4.4 Class of Service Parameter 
    
   The class of service parameter shall indicate which class of standard 
   procedures shall be followed when transmitting and delivering the 
   bundle.  Its value shall be one of the following: 
      o Bulk 
      o Normal 
      o Expedited 
    


 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 5] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
2.4.5 Delivery Options Parameter 
    
   The delivery options parameter shall indicate what optional 
   procedures shall additionally be followed when transmitting and 
   delivering the bundle.  Its value shall be a combination of zero or 
   more of the following: 
      o Custody transfer 
      o Return receipt 
      o Delivery record received 
      o Delivery record custody taken 
      o Security requirements 
         - Confidentiality 
         - Integrity 
         - Authentication 
    
2.4.6 Lifespan parameter 
    
   The lifespan parameter shall indicate the length of time, following 
   initial transmission of a bundle, after which bundling agents shall 
   no longer store or forward the bundle.  The sum of the bundle's 
   transmission time and lifespan is its delivery deadline, the moment 
   at which it will be deleted from the DTN network if it has not 
   already been delivered to its destination communications endpoint. 
    
2.4.7 Application Data Unit Parameter 
    
   The application data unit parameter shall indicate the location (in 
   memory or non-volatile storage, a local implementation matter) of the 
   application data conveyed by the bundle. 
    
2.4.8 Delivery Failure Action Parameter 
    
   The delivery failure action parameter shall indicate what action is 
   to be taken when a bundle arrives for delivery at a moment when its 
   destination communications endpoint is not currently in a period of 
   passive bundle reception.  Its value shall be one of the following: 
      o Defer delivery until the entity either actively requests 
         delivery of the bundle or else begins a period of passive 
         bundle reception. 
      o Abort delivery of the bundle. 
      o Execute a specified procedure, where the expression of the 
         procedure to be executed is a matter of local implementation. 
    
2.5 Bundling Service Primitives 
    




 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 6] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
2.5.1 SEND.REQUEST 
    
   The Send.request primitive shall be used by the application to 
   request transmission of an application data unit from the source 
   communications endpoint to a destination communications endpoint. 
    
   Semantics: Send.request shall provide parameters as follows: 
      Send.request(  source communications endpoint ID, 
                     destination communications endpoint ID, 
                     reply communications endpoint ID, 
                     class of service, 
                     delivery options, 
                     lifespan, 
                     send token binding, 
                     application data unit) 
    
   When Generated: Send.request is generated by the source Bundling 
   application at any time. 
    
   Effect on Receipt: Receipt of Send.request shall cause the Bundling 
   agent to initiate bundle transmission procedures.  In addition, the 
   agent will generate a SendToken.indication for the application.  The 
   SendToken.indication returns to the application the send token 
   binding and a token that the application can later use to refer to 
   this bundle. 
    
   Additional Comments: None. 
    
2.5.2 CANCELBUNDLE.REQUEST 
    
   The CancelBundle.request primitive shall be used by the application 
   to request that a bundle previously sent via a Send.request be 
   cancelled. 
    
   Semantics: CancelBundle.request shall provide parameters as follows: 
      Cancel.request (  send token ) 
    
   When Generated: CancelBundle.request MAY be generated by the 
   application after sending a bundle via the Send.request and after 
   receiving a reference token for the bundle via a 
   SendToken.indication.  A CancelBundle.request should be sent if the 
   application no longer wished to send the bundle referenced by the 
   send token. 
    
   Effect on Receipt: Receipt of CancelBundle.request shall cause the 
   Bundling agent to cease attempts to transmit the given bundle.  If 
   the bundle agent is the current custodian, then retransmission 
   resources, including any retransmission timers, associated with the 
   bundle will be released. 
 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 7] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    
   Additional Comments: None. 
    
    
2.5.3 REGISTER.REQUEST 
    
   The Register.request primitive shall be used to notify the Bundling 
   agent of the start of a period of passive bundle reception. 
    
   Semantics: Register.request shall provide parameters as follows: 
      Register.request( delivery failure action, 
                        registration token binding, 
                        destination communications endpoint ID) 
    
   When Generated: Register.request is generated by any Bundling 
   application at any time when not currently in a period of passive 
   bundle reception. 
    
   Effect on Receipt: Receipt of Register.request shall cause the 
   Bundling agent to deliver to the Bundling application any bundles 
   destined for the application that (a) arrived in the past and were 
   deferred or (b) arrive during the new period of passive bundle 
   reception.  Receipt of Register.request will also cause the agent to 
   deliver a RegisterToken.indication to the application.  The 
   RegisterToken.indication contains a token that the application can 
   use to refer to this registration. 
    
   Additional Comments: There are currently no provisions for multipoint 
   delivery of bundles.  Bundle agents MAY prohibit multiple 
   applications from registering for passive bundle reception with the 
   same destination communications endpoint ID.  The behavior of the 
   bundle agent when multiple applications register with the same 
   communications endpoint ID is undefined.  The registration token 
   binding is currently unused but included in anticipation of being 
   useful for multipoint delivery. 
 
2.5.4 DEREGISTER.REQUEST 
    
   The Deregister.request primitive shall be used to notify the Bundling 
   agent of the end of a period of passive bundle reception. 
 
   Semantics: Deregister.request shall provide parameters as follows: 
      Deregister.request(destination communications endpoint id) 
    
   When Generated: Deregister.request is generated by any Bundling 
   application at any time when the application is currently in a period 
   of passive bundle reception. 
    

 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 8] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   Effect on Receipt: Receipt of Deregister.request shall cause the 
   Bundling agent to dispatch any subsequently arriving bundles destined 
   for the application in accord with the delivery failure action 
   specified by the most recent Register.request primitive issued by 
   this application. 
    
   Additional Comments: None. 
    
2.5.5 POLL.REQUEST 
    
   The Poll.request primitive shall be used to request immediate 
   delivery of a bundle. 
    
   Semantics: Poll.request shall provide parameters as follows: 
      Poll.request(destination communications endpoint id) 
    
   When Generated: Poll.request is generated by any Bundling application 
   at any time when not currently in a period of passive bundle 
   reception. 
    
   Effect on Receipt: Receipt of Poll.request shall cause the Bundling 
   Agent to deliver to the Bundling application the least recently 
   received bundle, destined for the communications endpoint ID, for 
   which delivery was deferred. 
    
   Additional Comments: There are currently no provisions for multipoint 
   bundle delivery.  If multiple distinct applications poll for delivery 
   of bundles using the same communications endpoint ID, each 
   application may receive some subset of the bundles that the agent has 
   received destined for that ID. 
    
2.5.6 BUNDLE.INDICATION 
    
   The Bundle.indication primitive shall be used to deliver the content 
   of a bundle to the bundle's destination communications endpoint. 
    
   Semantics: Bundle.indication shall provide parameters as follows: 
      Bundle.indication (  source communications endpoint ID, 
                           destination communications endpoint ID, 
                           reply communications endpoint ID, 
                           class of service, 
                           delivery options, 
                           lifespan, 
                           application data unit) 
    
   When Generated: Bundle.indication shall be generated on receipt of a 
   Poll.request primitive from a Bundling application or on arrival of a 
   bundle destined for the application at a time when the application is 
   in a period of passive bundle reception. 
 
 
K. Scott and S. Burleigh      Expires - August 2003           [Page 9] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    
   Effect on Receipt: The effect on receipt of Bundle.indication by a 
   Bundling application is undefined. 
    
   Additional Comments: None. 
    
2.5.7 SENDERROR.INDICATION 
    
   The SendError.indication primitive shall be used to deliver 
   information about bundles that the agent cannot accept from the 
   application. 
    
   Semantics: SendError.indication shall provide parameters as follows: 
      SendError.indication (  source communications endpoint ID, 
                              destination communications endpoint ID, 
                              reply communications endpoint ID, 
                              class of service, 
                              delivery options, 
                              lifespan, 
                              application data unit) 
    
   When Generated: SendError.indication shall be generated when a bundle 
   sent by an application cannot be accepted by the agent. 
    
   Effect on Receipt: The effect on receipt of SendError.indication by a 
   Bundling application is undefined. 
    
   Additional Comments: None. 
    
2.5.8 SENDTOKEN.INDICATION 
    
   The SendToken.indication primitive shall be used to deliver a token 
   to the application that it can use to refer to a particular bundle 
   sent via s Send.request primitive. 
    
   Semantics: SendToken.indication shall provide parameters as follows: 
      SendToken.indication (  send token binding, 
                              send token) 
    
   When Generated: SendToken.indication shall be generated when a bundle 
   is accepted by the agent for transmission.  The send token binding 
   parameter is the same as that supplied with the Send.indication, and 
   the send token can be supplied to refer to the particular bundle. 
    
   Effect on Receipt: The effect on receipt of SendToken.indication by a 
   Bundling application is undefined. 
    
   Additional Comments: None. 
    
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 10] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
2.5.9 REGISTRATIONTOKEN.INDICATION 
    
   The RegistrationToken.indication primitive shall be used to deliver a 
   token to the application that it can use to refer to a particular 
   registration invoked with the Register.request primitive. 
    
   Semantics: RegistrationToken.indication shall provide parameters as 
   follows: 
      RegistrationToken.indication  (  registration token binding, 
                                       registration token) 
    
   When Generated: RegistrationToken.indication shall be generated when 
   a registration.request primitive is serviced by the agent. 
    
   Effect on Receipt: The effect on receipt of 
   RegistrationToken.indication by a Bundling application is undefined. 
    
   Additional Comments: The Registration.indication is currently unused.  
   It is expected that it will be useful when multipoint delivery is 
   implemented. 
    
    
3. Bundle Message Format 
    
   The DTN protocols use a chained header format reminiscent of IPv6 
   headers.  Each bundle header consists of at least a primary bundle 
   header and a variable-length Immutable Portion (VLIP) header.  Other 
   header types can be chained after the VLIP to support additional 
   functionality such as authentication, bundle segmentation, etc. 
    
   This section describes the format of the different bundle headers.  
   Rules for processing bundle headers appear in section 4 of this 
   document. 
    
   The currently defined headers are: 
    
                     Table 1: Bundle Header Types 
   +--------------------+------+---------------------------------------+ 
   |       Header       | Type |              Comment                  | 
   +====================+======+=======================================+ 
   |                    | 0x00 |  Reserved                             | 
   +--------------------+------+---------------------------------------+ 
   |  Primary bundle    | 0x01 |  Must appear before any other bundle  | 
   |  header            |      |  header.                              | 
   +--------------------+------+---------------------------------------+ 
   |  Variable Length   | 0x02 |  (VLIP) contains source, destination, | 
   |  Immutable Portion |      |  and reply-to tuples.                 | 
   +--------------------+------+---------------------------------------+ 

 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 11] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   |  Current Custodian | 0x03 |  Indicates current bundle custodian.  | 
   |                    |      |  Present only if the custody transfer | 
   |                    |      |  service is requested.                | 
   +--------------------+------+---------------------------------------+ 
   |  Bundle Status     | 0x04 |  Used to report bundle receipt,       | 
   |  Report            |      |  forwarding, and custody actions.     | 
   +--------------------+------+---------------------------------------+ 
   |  Bundle Payload    | 0x05 |  Identifies actual bundle content.    | 
   +--------------------+------+---------------------------------------+ 
   |  Subsequent Bundle | 0x06 |  Used when more than one bundle is    | 
   |  Payload Header    |      |  transmitted under a single primary   | 
   |                    |      |  header.                              | 
   +--------------------+------+---------------------------------------+ 
   |  Authentication    | 0x07 |  Content depends on the type of       | 
   |                    |      |  authentication used.                 | 
   +--------------------+------+---------------------------------------+ 
   |  16-bit Extended   | 0x08 |  Provides extended reference          | 
   |  Offset            |      |  capabilities when the combination of | 
   |                    |      |  source, dest, and reply-to tuples in | 
   |                    |      |  the VLIP precludes their reference   | 
   |                    |      |  by -byte offsets.                    | 
   +--------------------+------+---------------------------------------+ 
   |  Bundle Fragment   | 0x09 |  This bundle is a fragment of a       | 
   |                    |      |  larger one. 
   +--------------------+------+---------------------------------------+ 
   |               All other values reserved for future use.           | 
   +--------------------+------+---------------------------------------+ 
    
   The format of the various headers is shown in Figure 2 below. 
    
    
   Primary Bundle Header 
   +----------------+----------------+----------------+----------------+    
   |    Version     |  Next Header   |  Destination   |    Source      |    
   +----------------+----------------+----------------+----------------+    
   |  Reply-To      | Cur. Custodian |   COS Flags    | Authentication |    
   +----------------+----------------+----------------+----------------+    
   |                                                                   |    
   +             Creation Timestemp (8 bytes)                          +    
   |                                                                   |    
   +---------------------------------+---------------------------------+    
   |                         Expiration Time                           |    
   +----------------+----------------+---------------------------------+    
    
 




 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 12] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   Variable Length Immutable Portion Header 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   |  Total Length  | Destination Tuple (variable)    | 
   +----------------+----------------+                                 | 
   /                                                                   / 
   /                                                                   / 
   +----------------+----------------+----------------+----------------+ 
   | Source Tuple (variable)                                           | 
   /                                                                   / 
   /                                                                   / 
   +----------------+----------------+----------------+----------------+ 
   | Reply-To Tuple (variable)                                         | 
   /                                                                   / 
   /                                                                   / 
   +----------------+----------------+----------------+----------------+ 
    
    
   Current Custodian Header 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   | Current custodian tuple (variable)               | 
   +----------------+----------------+----------------+----------------+ 
    
    
   Bundle Status Report Header for bundle 'X' 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   |  Length        |  Status Flags  |  Fragment          
   +----------------+----------------+----------------+----------------+ 
     offset (4 bytes, if present)                     |  Fragment 
   +--------------------------------------------------+----------------+ 
     length (4 bytes, if present)                     |  Copy of       | 
   +--------------------------------------------------+                | 
   |         X's Creation Timestamp (8 bytes)                          | 
   +                                                  +----------------+ 
   |                                                  |  Time of         
   +----------------+----------------+----------------+                | 
   |   Receipt of Bundle 'X' (8 Bytes, if present)                       
   +                                                  +----------------+ 
   |                                                  |  Time of       | 
   +----------------+----------------+----------------+                | 
   |   Forwarding of Bundle 'X' (8 bytes, if present)                  | 
   +                                                  +----------------- 
   |                                                  |  Copy of X's   | 
   +--------------------------------------------------+                | 
   |    Source Tuple  (variable)                                       | 
   +-------------------------------------------------------------------+ 
 



 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 13] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    
   Bundle Payload Header 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   |  Length of bundle payload (4 bytes)                
   +----------------+----------------+----------------+----------------+ 
                    |                                                  | 
   +----------------+                                                  | 
   |                           Bundle Payload (variable)               | 
   |                                                                   | 
   /                                                                   / 
   /                                                                   / 
   |                                                                   | 
   +-------------------------------------------------------------------+ 
 
 
   Bundle Fragment Header 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   |  Length of original bundle payload (4 bytes) 
   +----------------+----------------+----------------+----------------+ 
                    |  Offset of this bundle fragment (4 bytes)         
   +----------------+--------------------------------------------------+ 
                    | 
   -----------------+ 
 
 
   Subsequent Bundle Payload Header 
   +----------------+----------------+----------------+----------------+ 
   |  Next Header   |  Length of subsequent bundle payload (4 bytes)     
   +----------------+----------------+----------------+----------------+ 
                    |             Creation Timestamp (8 bytes)         | 
   +----------------+                                                  | 
   |                                                                   | 
   +                +--------------------------------------------------+ 
   |                |                                                  | 
   +----------------+                                                  | 
   |                           Bundle Payload (variable)               + 
   +                                                                   | 
   /                                                                   / 
   /                                                                   / 
   |                                                                   | 
   +-------------------------------------------------------------------+ 
    
    






 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 14] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   16-bit Extended Offset Header 
   +----------------+----------------+----------------+----------------+    
   |  Next Header   |         Destination             |    Source           
   +----------------+----------------+----------------+----------------+    
                    |      Reply-To                   | Cur. Custodian   
   +----------------+----------------+----------------+----------------+    
                    | 
   +----------------+ 
    
    
   Authentication 
   +----------------+----------------+----------------+----------------+    
   |  Next Header   |   Length       | Auth. information (variable)           
   +----------------+----------------+----------------+----------------+    
    
                 Figure 2:   Bundle header formats. 
    
3.1 General Bundle Header Format 
    
   In most cases a bundle header begins with a one-octet next header 
   type field.  This field identifies the type of the header following 
   the one the field is part of.  The exception to this rule is the 
   primary bundle header, which must appear before any other bundle sub-
   headers.  The primary bundle header begins with a 1-byte version 
   field that identifies the version of the bundling protocols used to 
   create the current bundle, followed by a 1-byte next header type 
   field. 
    
   All multi-byte fields are transmitted in network byte order.  Note 
   that the class of service in the primary bundle header is not a 
   single two-byte field but instead the functional concatenation of two 
   one-byte fields. 
    
3.2 Tuples 
    
   Communicating entities in the DTN are referred to via name tuples.  A 
   name tuple contains a routing part that identifies the entity's DTN 
   region, and an administrative part that identifies the entity within 
   that region.  The routing part of a DTN name tuple must be globally 
   parsable throughout the DTN.  The administrative part is opaque 
   outside of the destination region, but must be parsable anywhere in 
   the destination region.  Note that the administrative part of a DTN 
   name tuple may include information about a specific machine as well 
   as a specific application or process on that machine. 
    
   The representation of a tuple contains a 1-byte length subfield 
   indicating the total length of the tuple, including the length 
   subfield, followed by the routing and administrative parts of the 

 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 15] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   tuple.  Note that in Figure 1 above, the length fields of tuples are 
   explicitly shown. 
    
3.3 Primary and Variable-Length Immutable Portion Headers 
    
   The primary bundle header together with the variable length Immutable 
   Portion header contains the basic information needed to route bundles 
   to their destinations.  The main goal in separating the primary 
   bundle header from the variable length Immutable Portion header is to 
   make processing simpler. 
    
   Section 3.3.1 describes the fields of the primary bundle header, and 
   section 3.3.2 the fields of the variable-length Immutable Portion 
   header.  The processing rules for the primary and variable-length 
   Immutable Portion headers are described in sections 4.2 (Bundle 
   Routing) and 4.3 (Current Custodian Header Fields). 
    
3.3.1 Primary Bundle Header 
    
   The field of the primary bundle header are: 
    
   Version. A 1-byte field indicating the version of the bundling 
          protocol that generated this header. 
    
   Next Header Type.    The Next Header Type field is a 1-byte field 
          that indicates the type of the header that immediately follows 
          this one.  Header types are listed in Table 1 above. 
    
   Destination Tuple Offset.  This 1-byte field contains the offset of 
          the beginning of the destination name tuple, in bytes, from 
          the beginning of the primary bundle header.  The format of a 
          tuple is described in section 3.3.2.1. 
    
   Source Tuple Offset.    A 1-byte field containing the offset of the 
          beginning of the source name tuple, in bytes, from the 
          beginning of the primary bundle header.  If  the source and 
          destination tuples are the same, then the source tuple offset 
          may equal the destination tuple offset.  In this case the 
          length of the source tuple in the VLIP header (described 
          below) will be 1 (i.e. the length will include only the 1-byte 
          length field). 
    
   Reply-To Tuple Offset.  A 1-byte field containing the offset of the 
          beginning of the reply-to name tuple, in bytes, from the 
          beginning of the primary bundle header.  Note that if the 
          reply-to tuple is the same as the source tuple (that is, the 
          source wants replies sent to it), then the reply-to offset may 
          be the same as the source offset.  In this case the length of 
          the reply-to tuple in the VLIP header (described below) will 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 16] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
          be 1 (i.e. the length will include only the 1-byte length and 
          no tuple). 
    
   Current custodian Tuple Offset.  A 1-byte field containing the offset 
          of the beginning of the current custodian name tuple, in 
          bytes, from the beginning of the primary bundle header.  
          Bundles requiring custodial delivery must contain a current 
          custodian header, and the current custodian tuple offset 
          points to the current custodian tuple in that header, even if 
          the current custodian is the source. 
    
   Class of Service. The class of service is the concatenation of two 1-
          byte fields that contains a number of class-of-service related 
          parameters and flags.  The COS consists of a 1-bit custody 
          switch followed by four (4) bits of priority, three (3) bits 
          of delivery record request flags, and an 8-bit 'authentication 
          present & type' field.  If the custody bit is 1 then the 
          sender requests custodial transfer of the bundle.  The four-
          bit priority field indicates the bundle's priority, with 
          higher values being of higher priority.  The priorities are 
          strict in that all bundles with higher priorities should be 
          transmitted before any bundles of lower priorities.  The 
          interpretation of the delivery record request flags is as 
          follows. 
    
         Table 2: Delivery Record Request Flag Meanings 
    
         +---------+--------------------------------------------+ 
         |  Value  |                  Meaning                   | 
         +=========+============================================+ 
         |   000   |  No delivery records requested.            | 
         +---------+--------------------------------------------+ 
         |   001   |  Request custody transfer reporting        | 
         +---------+--------------------------------------------+ 
         |   010   |  Request reporting of bundle reception.    | 
         +---------+--------------------------------------------+ 
         |   100   |  Request end-to-end return receipt.        | 
         +---------+--------------------------------------------+ 
    
   The Authentication Present (&Type) field indicates whether or not 
   bundle authentication is present and, if so, the authentication type.  
   The values for this field are: 
    






 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 17] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
         Table 3: Authentication Values in the Primary Bundle Header 
    
         +---------+--------------------------------------------+ 
         |  Value  |                  Meaning                   | 
         +=========+============================================+ 
         |   0x00  |  No bundle authentication present.         | 
         +---------+--------------------------------------------+ 
         |   0x01  |  Authentication with DSA.                  | 
         +---------+--------------------------------------------+ 
         |   0x02  |  Authentication with DES-MAC               | 
         +---------+--------------------------------------------+ 
         |   0x03  |  Authentication with other                 | 
         +---------+--------------------------------------------+ 
         | All     |  Reserved.                                 | 
         |  Others |                                            | 
         +---------+--------------------------------------------+ 
    
   Creation Timestamp.  The creation timestamp is an 8-byte field 
          containing the time the bundle was first accepted for 
          transmission by the source bundle agent, formatted as an NTP 
          timestamp. 
    
   Expiration Time.  The four-byte expiration time field indicates the 
          time at which the bundle's data will no longer be useful, 
          encoded as the number of seconds past the creation timestamp.  
          When the current time is greater than the creation timestamp 
          plus the expiration time, bundles may be discarded. 
    
   The reason that the creation timestamp has higher granularity than 
   the expiration time is because the creation timestamp together with 
   the source tuple make up the bundle identifier, which must be unique 
   to every bundle in the system. 
    
3.3.2 Variable Length Immutable Portion (VLIP) Header 
    
   The variable length Immutable Portion header follows the primary 
   bundle header if all of the source, destination, reply-to, and 
   current custodian offsets can be accommodated by the primary bundle 
   header's one-byte offset fields.  If any of the offsets cannot be 
   accommodated by the primary bundle header's 1-byte offset fields, 
   then a 16-bit Extended Offset Header will separate the primary bundle 
   header from the VLIP.  If the 16-bit Extended Offset Header is 
   present, the source, destination, reply-to, and current custodian 
   offsets in the primary bundle header must all be zero. 
    
   The fields of the variable length immutable portion header are: 
    


 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 18] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   Next Header Type.    The Next Header Type field is a 1-byte field 
          that indicates the type of the header that immediately follows 
          this one.  Header types are listed in Table 1 above. 
    
   Total Length.  A 1-byte field indicating the total length, in bytes, 
          of the Variable Length Immutable Portion header, including the 
          next header type field.  If the sum of the dest, source, and 
          reply-to tuples is too long for the total length field of the 
          variable-length Immutable Portion header then the tuples are 
          split into multiple VLIPHes.  In this case a 16-bit extended 
          offset header will be required after the primary bundle header 
          to convey the offsets of the various tuples. 
    
   Destination Tuple.   The destination tuple indicates the intended 
          recipient(s) of the bundle. The format of a tuple is described 
          in section 3.3.2.1. 
    
   Source Tuple.  The source tuple indicates the sender of the bundle.  
          The format of a tuple is described in section 3.3.2.1. 
    
   Reply-To Tuple.   The reply-to tuple identifies the communicating 
          entity that is to receive bundle status reports associated 
          with the current bundle.  Messages that are sent to the reply-
          to tuple include any bundle status reports requested in this 
          bundle's class of service field and any end-to-end error 
          messages associated with the bundle. The format of a tuple is 
          described in section 3.3.2.1. 
    
   The combination of the source tuple and the creation timestamp 
   constitute the bundle identifier, or bundleID.  BundleIDs are used by 
   the network to differentiate bundles, and must therefore be unique 
   throughout a DTN.  Thus a source may not send two bundles with the 
   same creation timestamp. 
    
3.4      Current Custodian Header 
    
   Custody transfer provides a means of reliable bundle transfer.  The 
   rationale behind custody transfers is discussed in detail in [2].  
   The rules for processing custodial bundles are described in section 
   4.5 below. 
    
   The fields of the current custodian header are: 
    
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Current Custodian Tuple.   The DTN name tuple of the bundle agent 
          that is the current custodian of the bundle. 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 19] 



Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    
    
    
3.5      Bundle Status Report Header 
    
   This section describes the fields in a bundle status report header.  
   Rules for processing delivery record requests are described in 
   section 4.3. 
    
   The fields in a bundle status report header are: 
    
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Length.  A 1-byte field indicating the total length, in bytes, of the 
          Bundle Status Report Header, including the next header type 
          field. 
    
   Status Flags.  A 1-byte field containing the following flags: 
    
         Table 4: Status Flags for Bundle Status Report Headers 
    
         +---------+--------------------------------------------+ 
         |  Value  |                  Meaning                   | 
         +=========+============================================+ 
         |  0x01   |  Reporting node correctly received bundle. | 
         +---------+--------------------------------------------+ 
         |  0x02   |  Reporting node took custody of bundle.    | 
         +---------+--------------------------------------------+ 
         |  0x04   |  Reporting node has forwarded the bundle.  | 
         +---------+--------------------------------------------+ 
         |  0x08   |  Reserved for future use. 
         +---------+--------------------------------------------+ 
         |  0x10   |  Time of receipt (TOR) field present.      | 
         +---------+--------------------------------------------+ 
         |  0x20   |  Time of forward (TOR) field present.      | 
         +---------+--------------------------------------------+ 
         |  0x40   |  Report is for a bundle fragment; fragment | 
         |         |  offset and length fields are present.     | 
         +---------+--------------------------------------------+ 
         |  0x80   |  Reserved for future use.                  | 
         +---------+--------------------------------------------+ 
    
   Send Timestamp For Reported Bundle. A copy of the send timestamp of 
          the bundle that caused the status report to be generated. 
    
   Time of Receipt (if present).    If the TOR present bit is set in the 
          status flags, then a timestamp indicating the time at which 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 20] 



Internet Draft      Bundle Protocol Specification          March 2003 
 
 
          the bundle was received by the reporting node is included 
          here.  The timestamp is 8 bytes long, formatted as an NTP 
          timestamp. 
    
   Time of Forward (if present). If the TOF present bit is set in the 
          status flags, then a timestamp indicating the time at which 
          the bundle was first forwarded by the reporting node is 
          included here.  The timestamp is 8 bytes long, formatted as an 
          NTP timestamp. 
    
   Reported Bundle's Source Tuple.  The source tuple of the bundle that 
          caused the status report to be generated. 
    
   The combination of the reported bundle's send timestamp and source 
   tuple constitute the bundle identifier.  This uniquely identifies the 
   bundle to the reportee. 
    
   Discussion of delivery record requests and bundle status reports 
   appears in section 4.3 below. 
    
3.6      Bundle Payload Header 
    
   The fields of the bundle payload header are: 
    
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Length.  A 4-byte field indicating the total length, in bytes, of the 
          Bundle Payload (data-carrying portion of the bundle).  This 
          length does NOT include the lengths of the header elements of 
          this bundle payload header. 
    
   Payload.    The bundle payload.  This is the application data. 
    
3.7      Subsequent Bundle Payload Header 
    
   It may be desirable to combine several payloads to the same 
   destination, provided that the information in their primary, 
   variable-length immutable portion, current custodian, and 
   authentication headers are compatible.  The subsequent bundle payload 
   header provides a mechanism to include additional bundle payloads 
   after the primary payload. 
    
   To be compatible, the following must be true of all bundles combined 
   under a single primary bundle header: 
    o They all have the same version, source, destination, reply-to (if 
      any), and current custodian (if any). 
    o Their 'custody required' bits must be the same. 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 21] 


Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    o Their priorities must be the same. 
    o Compatibility of various authentication methods is currently 
      undefined.  Bundles that are not using authentication (i.e. the 
      "Authentication Present & Type" field in their primary bundle 
      headers are all 0x00) are compatible. 
    o The difference between the maximum and minimum expiration times 
      (in absolute seconds) must be less than a TBD value. 
    
   If multiple compatible bundles are combined under a single primary 
   bundle header, a single expiration time must be chosen to cover them 
   all.  In this case, the expiration time in the primary bundle header 
   is set to the maximum of the expiration times of the constituent 
   bundle payloads.  Note that because the expiration time is expressed 
   as a delta from the send timestamp, the various expiration times must 
   be added to the 'seconds' portions of their send timestamps.  This 
   yields a list of bundle expiration times in absolute seconds. 
    
3.7.1 The fields of the Subsequent bundle payload header are: 
     
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Length.  A 4-byte field indicating the total length, in bytes, of the 
          Bundle Payload (data-carrying portion of the bundle).  This 
          length does NOT include the lengths of the header elements of 
          this bundle payload header. 
    
   Creation Timestamp.  The creation timestamp of this payload, an 8-
          byte object formatted as an NTP timestamp.  This is necessary 
          because the combination of the creation timestamp and the 
          source tuple uniquely identify a bundle. 
    
   Payload. The bundle payload.  This is the user data. 
    
3.8 Authentication Header 
    
   The fields of the authentication header are: 
    
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Length.  The length of the authentication header depends on the 
          algorithm used, but can be determined from the algorithm type. 
    
   Authentication.   Authentication is achieved by the source generating 
          a hash over the immutable portion header and the immutable 
          payload then running the hash through a signature algorithm û 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 22] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
          e.g., sign using sender's private key.  Authentication when 
          the bundle agent is physically separated from the bundle 
          applications using it is an open question 
    
3.9 16-bit Extended Offset Header 
    
   The 16-bit extended offset header immediately follows the primary 
   bundle header whenever any of the destination, source, or reply-to 
   tuple offsets are greater than the 1-byte offset fields in the 
   primary bundle header allow (i.e. 255).  Recall that the tuple 
   offsets are defined as the indices of the starts of the various 
   tuples relative to the beginning of the primary bundle header. 
    
   The fields of the 16-bit Extended Offset Header are: 
    
   Next Header Type. The Next Header Type field is a 1-byte field that 
          indicates the type of the header that immediately follows this 
          one.  Header types are listed in Table 1 above. 
    
   Destination Tuple Offset.  The byte offset of the beginning of the 
          destination name tuple, in bytes, from the beginning of the 
          primary bundle header.  The format of a tuple is described in 
          section 3.3.2.1.  This is a 16-bit field. 
    
   Source Tuple Offset.    The byte offset of the beginning of the 
          source name tuple, in bytes, from the beginning of the primary 
          bundle header.  This is a 16-bit field. 
    
   Reply-To Tuple Offset.  The byte offset of the beginning of the 
          reply-to name tuple, in bytes, from the beginning of the 
          primary bundle header.  This is a 16-bit field.  Note that if 
          the reply-to tuple is the same as the source tuple (that is, 
          the source wants replies sent to it), then the reply-to offset 
          may be the same as the source offset.  In this case the length 
          of the reply-to tuple in the variable-length Immutable Portion 
          header (described 3.3.2.1) will be 1 (i.e. the length will 
          include only the 1-byte length and no tuple). 
    
3.10 Rules Governing the Appearance and Order of Headers 
    
   The following rules apply to the order and presence of DTN headers: 
      o The primary bundle header must appear first, followed by either 
         the 16-bit extended offset header (if present) or the variable 
         length Immutable Portion header. 
      o The only headers allowed after a bundle payload header are 
         subsequent bundle payload headers and (possibly) their 
         associated authentication headers.  In cases where a subsequent 
         bundle payload requires authorization, the payload's 
         authorization header will immediately precede the payload. A 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 23] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
         bundle payload header must appear before any subsequent bundle 
         payload headers. 
      o Rules regarding the order of appearance of other header types 
         have not yet been established, though we expect to formulate 
         such rules soon. 
    
    
4. Bundle Processing 
    
   There are currently no provisions for multipoint delivery of bundles. 
    
4.1 Bundles received from applications via the API 
    
   Step 1: Permissions checking.  Bundle agents MAY enforce policy that 
      restricts the permissions of applications.  Such policy could, 
      for example, limit the rate at which particular applications are 
      allowed to inject traffic, or limit the CoS options that 
      particular applications are allowed to use.  Bundles that do not 
      meet the policy criteria MAY be silently dropped by the bundle 
      agent, though some indication SHOULD be provided to the 
      application via the API. 
    
   Step 2: If the bundle is accepted for transmission, then processing 
      proceeds from Step 3 of section 4.2. 
    
4.2 Bundles received from other bundle agents 
    
   The steps in processing bundles received from other bundle agents 
   are: 
    
   Step 1: Bundle Authentication:  The bundle must first be 
      authenticated as described in section 3.13 of [2].  The purpose 
      of this authentication is to protect the bundle transmission 
      infrastructure, not to provide security services to the bundle 
      per se.  If the authentication fails then the bundle is silently 
      discarded. 
    
   Step 2: Generate a bundle status report, if requested.  If the bundle 
      class of service requests that a bundle status report be 
      generated when the bundle is received, a bundle status report 
      SHOULD be generated.  For bundles requesting only bundle receipt 
      notification, the bundle status report can be immediately queued 
      for transmission to the bundle's reply-to address.  If the bundle 
      requests custody transfer reporting, a single bundle status 
      report MAY be generated after the agent decides whether or not to 
      take custody of the bundle. 
    


 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 24] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
   Step 3: Local bundle delivery processing.  The steps described here 
      are carried out ONLY if the bundle's destination tuple matches 
      one of the bundle agent's interfaces. 
    
   Step 3a: Reassembly.  If the received bundle contains a fragmentation 
      header, it MUST be combined with the rest of the fragments that 
      make up the entire original bundle before the content can be 
      further processed. 
    
   Step 3b: Processing custody acknowledgements.  A custody 
      acknowledgement is a bundle status report directed to the current 
      agent indicating that a downstream agent has taken custody of the 
      bundle.  Custody acknowledgements may be for entire bundles or 
      for fragments of bundles.  This bundle agent must examine the 
      bundle status report and the saved state associated with the 
      bundle to determine how much of the bundle is acknowledged by the 
      report.  If the report covers only a portion of a bundle, the 
      bundle agent SHOULD mark that piece of the bundle as being 
      acknowledged.  The bundle agent SHOULD maintain the 
      retransmission timer for any pieces of the bundle NOT covered by 
      the status report.  When status reports have been received taking 
      custody of the entire bundle, the bundle agent SHOULD stop any 
      retransmission timers and free all retransmission resources 
      associated with the bundle. 
    
   Step 3c: If an application has registered with the bundle agent with 
      the bundle's destination communication endpoint ID and is in a 
      period of passive bundle reception, the bundle SHALL be delivered 
      to the application. 
    
   Step 3d: If the bundle class of service requests that and end-to-end 
      return receipt be sent, such a receipt SHOULD be generated once 
      the bundle has been delivered to the application.  Note that this 
      return receipt only states that the bundle has been delivered to 
      the application, not that the application has processed the 
      content. 
    
   Step 4: Bundle forwarding. 
    
   Step 4a: Test for bundle expiration.  If the bundle has expired then 
      it SHOULD be silently discarded.  A bundle has expired if the 
      current time is greater than the bundle's creation time plus its 
      lifetime as specified in the primary bundle header. 
    
   Step 4b: Custody transfer processing.  If the bundle class of service 
      requests custodial transfer, the bundle agent has to decide 
      whether or not to take custody of the bundle.  The decision as to 
      whether or not to take custody of a bundle may involve both 
      resource and policy considerations.  If the agent elects to NOT 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 25] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
      take custody of the bundle, it SHOULD forward the bundle as if it 
      did not request custodial service.  In particular, if the bundle 
      agent does not take custody of the bundle then it MUST NOT modify 
      the bundle's current custodian header. 
       
      If the bundle requests custodial transfer and the agent elects to 
      take custody of the bundle, then it MUST take the following 
      actions: 
    
         o  If the bundle requests custody transfer reporting, a bundle 
             status report indicating that the current agent is taking 
             custody of the bundle SHOULD be generated.  This report MAY 
             be combined with a record of the bundle's reception, if 
             such a report was not already generated and queued for 
             transmission above.  It is important to note that this 
             bundle status report is addressed to the bundle's 'REPLY-
             TO' address; the bundle status report effecting the 
             custodial acknowledgement is handled below. 
    
             If the received bundle is a fragment (i.e. it contains a 
             fragment header) the bundle status report MUST contain the 
             Fragment flag and the fragment offset and fragment length 
             fields. 
    
         o  The agent generates a bundle status report for the bundle, 
             destined for the bundle's current custodian.  This is the 
             custodial acknowledgment that allows the previous custodian 
             to release resources associated with the bundle.  The 
             bundle status report MUST contain the status flag 
             indicating that the bundle agent has taken custody of the 
             bundle.  The status report MUST be sent with the CoS flag 
             requesting custodial delivery set. 
              
             If the received bundle is a fragment (i.e. it contains a 
             fragment header) the bundle status report MUST contain the 
             Fragment flag and the fragment offset and fragment length 
             fields. 
    
         o  The bundle agent then modifies the bundle's current 
             custodian header, setting itself as the bundle's current 
             custodian. 
    
         o  The bundle agent MUST keep a copy of the bundle, and this 
             copy SHOULD be in persistent storage if at all possible. 
 
         o  The bundle agent MUST set a retransmission timer so that 
             the bundle will be retransmitted if a custody 
             acknowledgement is not received.  The value of the 
             retransmission timer is up to the bundle agent. 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 26] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
    
         o  After the above, the normal bundle forwarding processing is 
             resumed. 
    
   Step 4c: Determine next hop for bundle.   
     
         o  If the bundle agent does NOT have an interface in the 
             bundle's destination region, then it MUST determine the 
             bundle's next hop using ONLY the bundle's destination 
             region.  The information in the bundle's endpoint 
             identifier is NOT used at this time.  In this case, the 
             agent consults a region routing table to determine the next 
             hop bundle agent to which the bundle will be transmitted.  
             The agent then schedules the bundle for transmission. 
    
         o  If the bundle agent contains an interface in the bundle's 
             destination region, then the bundle's next hop depends on 
             whether the region is a DIRECT or an INDIRECT region. 
              
             For DIRECT regions, the bundle can be transmitted directly 
             to the communications entity specified in the 
             administrative part of the bundle's destination tuple. 
              
             For INDIRECT regions, the bundle agent consults a separate 
             routing table to determine the 'care-of' host to which the 
             bundle should be transmitted. 
    
   Step 5: Forward the bundle.  At this point the bundle agent can 
      schedule the bundle for transmission via an appropriate 
      convergence layer. 
 
4.3 Bundle Fragmentation and Reassembly 
    
   It may be necessary for bundle agents to break bundles into smaller 
   units in order to forward them.  This might be the case, for example, 
   if the next hop destination is available only via intermittent 
   contacts, and no upcoming contact is long enough to support sending 
   the entire bundle.  The process of breaking bundles into smaller 
   units is called fragmentation.  Reassembly of bundle fragments occurs 
   at the ultimate destination. 
    
4.3.1 Bundle Fragmentation 
    
   Bundle fragments are themselves bundles, and are individually 
   routable.  When breaking a bundle into fragments, the following WILL 
   be true: 
    
     o  All fragments will contain the same headers as the original 
         bundle.  In particular, the creation timestamps of all bundle 
 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 27] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
         fragments MUST be the same as that of the original bundle.  
         Recall that the pair (source tuple, creation timestamp) is 
         unique for each bundle.  This allows the destination to 
         associate the bundle fragments with a single reconstructed 
         bundle.  The payload headers of the fragments MUST be modified 
         to reflect the actual lengths of the fragments. 
      
     o  In addition to the original headers, each fragment MUST contain 
         a fragment header identifying the original bundle's length and 
         the fragment's position and length within the original bundle.  
         Note that if a bundle fragment is further fragmented, the 
         original bundle length from the fragment header is used in 
         subsequent fragments.  That is, there is only one 'level' of 
         fragmentation (as in IP fragmentation). 
 
   After fragmentation, the fragments are individually forwarded. 
    
4.3.2 Bundle Reassembly 
    
   Each bundle fragment contains a fragment header.  The fragment header 
   contains the original bundle's length as well as the fragment's 
   offset within the original bundle.  The fragment's bundle payload 
   header contains the length of the current fragment.  This information 
   is enough for the receiving bundle agent to reconstruct the original 
   bundle from the fragments. 
    
Security Considerations 
    
   Section 3.13 of [2] describes the general methods for protecting the 
   DTN infrastructure.  In summary, bundle applications must present 
   credentials to bundle agents before the agents will accept bundles 
   from the applications.  Agents sign all bundles they transmit, and 
   receiving bundle agents discard any bundles whose signatures are not 
   valid. 
    
Informative References 
                     
   [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement 
        Levels", BCP 14, RFC 2119, March 1997 
    
   [2] V. Cerf, et. al., "Delay-Tolerant Network Architecture," work in 
        progress, draft-irtf-dtnrg-arch-02.txt, March 2003. 
    
   [3] F. Warthman, "Delay-Tolerant Networks (DTNs): A Tutorial", 
        Wartham Associates, Available from http://www.dtnrg.org 
    
    


 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 28] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
Acknowledgements 
 
   The authors gratefully acknowledge the contributions of Dr. Vint Cerf 
   of Worldcom, Dr. Kevin Fall of Intel Corporation, Adrian Hooke and 
   Leigh Torgerson of the Jet Propulsion Laboratory, and Howard Weiss of 
   SPARTA, Inc. 
    
Author's Addresses 
    
   Dr. Keith L. Scott              Scott C. Burleigh 
   The MITRE Corporation           Jet Propulsion Laboratory 
   1820 Dolley Madison Blvd.       4800 Oak Grove Drive 
   M/S H300                        M/S: 179-206 
   McLean, VA 22102                Pasadena, CA 91109-8099 
   Telephone +1 (703) 883-6547     Telephone +1 (818) 393-3353 
   FAX +1 (703) 883-7142           FAX +1 (818) 354-1075 
   Email kscott@mitre.org          Email Scott.Burleigh@jpl.nasa.gov 
                                 
    
Intellectual Property Notices 
    
   The IETF takes no position regarding the validity or scope of 
   any intellectual property or other rights that might be claimed 
   to  pertain to the implementation or use of the technology 
   described in this document or the extent to which any license 
   under such rights might or might not be available; neither does 
   it represent that it has made any effort to identify any such 
   rights.  Information on the IETF's procedures with respect to 
   rights in standards-track and standards-related documentation 
   can be found in BCP-11.  Copies of claims of rights made 
   available for publication and any assurances of licenses to 
   be made available, or the result of an attempt made 
   to obtain a general license or permission for the use of such 
   proprietary rights by implementors or users of this 
   specification can be obtained from the IETF Secretariat. 
 
   The IETF invites any interested party to bring to its 
   attention any copyrights, patents or patent applications, or 
   other proprietary rights which may cover technology that may be 
   required to practice this standard.  Please address the 
   information to the IETF Executive Director. 
    
    






 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 29] 




Internet Draft      Bundle Protocol Specification          March 2003 
 
 
Copyright 
    
   "Copyright (C) The Internet Society (2003). 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 implmentation 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." 



















 
 
K. Scott and S. Burleigh      Expires - August 2003          [Page 30] 






PAFTECH AB 2003-20262026-04-23 23:29:29