diff options
Diffstat (limited to 'doc/rfc/rfc5050.txt')
-rw-r--r-- | doc/rfc/rfc5050.txt | 2803 |
1 files changed, 2803 insertions, 0 deletions
diff --git a/doc/rfc/rfc5050.txt b/doc/rfc/rfc5050.txt new file mode 100644 index 0000000..2a77197 --- /dev/null +++ b/doc/rfc/rfc5050.txt @@ -0,0 +1,2803 @@ + + + + + + +Network Working Group K. Scott +Request for Comments: 5050 The MITRE Corporation +Category: Experimental S. Burleigh + NASA Jet Propulsion Laboratory + November 2007 + + + Bundle Protocol Specification + +Status of This Memo + + This memo defines an Experimental Protocol for the Internet + community. It does not specify an Internet standard of any kind. + Discussion and suggestions for improvement are requested. + Distribution of this memo is unlimited. + +IESG Note + + This RFC is not a candidate for any level of Internet Standard. The + IETF disclaims any knowledge of the fitness of this RFC for any + purpose and in particular notes that the decision to publish is not + based on IETF review for such things as security, congestion control, + or inappropriate interaction with deployed protocols. The RFC Editor + has chosen to publish this document at its discretion. Readers of + this document should exercise caution in evaluating its value for + implementation and deployment. See RFC 3932 for more information. + +Abstract + + This document describes the end-to-end protocol, block formats, and + abstract service description for the exchange of messages (bundles) + in Delay Tolerant Networking (DTN). + + This document was produced within the IRTF's Delay Tolerant + Networking Research Group (DTNRG) and represents the consensus of all + of the active contributors to this group. See http://www.dtnrg.org + for more information. + + + + + + + + + + + + + + +Scott & Burleigh Experimental [Page 1] + +RFC 5050 Bundle Protocol Specification November 2007 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 4 + 3. Service Description . . . . . . . . . . . . . . . . . . . . . 5 + 3.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 5 + 3.2. Implementation Architectures . . . . . . . . . . . . . . . 9 + 3.3. Services Offered by Bundle Protocol Agents . . . . . . . . 11 + 4. Bundle Format . . . . . . . . . . . . . . . . . . . . . . . . 11 + 4.1. Self-Delimiting Numeric Values (SDNVs) . . . . . . . . . . 12 + 4.2. Bundle Processing Control Flags . . . . . . . . . . . . . 13 + 4.3. Block Processing Control Flags . . . . . . . . . . . . . . 15 + 4.4. Endpoint IDs . . . . . . . . . . . . . . . . . . . . . . . 16 + 4.5. Formats of Bundle Blocks . . . . . . . . . . . . . . . . . 17 + 4.5.1. Primary Bundle Block . . . . . . . . . . . . . . . . . 19 + 4.5.2. Canonical Bundle Block Format . . . . . . . . . . . . 22 + 4.5.3. Bundle Payload Block . . . . . . . . . . . . . . . . . 23 + 4.6. Extension Blocks . . . . . . . . . . . . . . . . . . . . . 24 + 4.7. Dictionary Revision . . . . . . . . . . . . . . . . . . . 24 + 5. Bundle Processing . . . . . . . . . . . . . . . . . . . . . . 24 + 5.1. Generation of Administrative Records . . . . . . . . . . . 25 + 5.2. Bundle Transmission . . . . . . . . . . . . . . . . . . . 26 + 5.3. Bundle Dispatching . . . . . . . . . . . . . . . . . . . . 26 + 5.4. Bundle Forwarding . . . . . . . . . . . . . . . . . . . . 27 + 5.4.1. Forwarding Contraindicated . . . . . . . . . . . . . . 28 + 5.4.2. Forwarding Failed . . . . . . . . . . . . . . . . . . 29 + 5.5. Bundle Expiration . . . . . . . . . . . . . . . . . . . . 29 + 5.6. Bundle Reception . . . . . . . . . . . . . . . . . . . . . 30 + 5.7. Local Bundle Delivery . . . . . . . . . . . . . . . . . . 31 + 5.8. Bundle Fragmentation . . . . . . . . . . . . . . . . . . . 32 + 5.9. Application Data Unit Reassembly . . . . . . . . . . . . . 33 + 5.10. Custody Transfer . . . . . . . . . . . . . . . . . . . . . 34 + 5.10.1. Custody Acceptance . . . . . . . . . . . . . . . . . . 34 + 5.10.2. Custody Release . . . . . . . . . . . . . . . . . . . 35 + 5.11. Custody Transfer Success . . . . . . . . . . . . . . . . . 35 + 5.12. Custody Transfer Failure . . . . . . . . . . . . . . . . . 35 + 5.13. Bundle Deletion . . . . . . . . . . . . . . . . . . . . . 36 + 5.14. Discarding a Bundle . . . . . . . . . . . . . . . . . . . 36 + 5.15. Canceling a Transmission . . . . . . . . . . . . . . . . . 36 + 5.16. Polling . . . . . . . . . . . . . . . . . . . . . . . . . 36 + 6. Administrative Record Processing . . . . . . . . . . . . . . . 37 + 6.1. Administrative Records . . . . . . . . . . . . . . . . . . 37 + 6.1.1. Bundle Status Reports . . . . . . . . . . . . . . . . 38 + 6.1.2. Custody Signals . . . . . . . . . . . . . . . . . . . 41 + 6.2. Generation of Administrative Records . . . . . . . . . . . 44 + 6.3. Reception of Custody Signals . . . . . . . . . . . . . . . 44 + + + + + +Scott & Burleigh Experimental [Page 2] + +RFC 5050 Bundle Protocol Specification November 2007 + + + 7. Services Required of the Convergence Layer . . . . . . . . . . 44 + 7.1. The Convergence Layer . . . . . . . . . . . . . . . . . . 44 + 7.2. Summary of Convergence Layer Services . . . . . . . . . . 45 + 8. Security Considerations . . . . . . . . . . . . . . . . . . . 45 + 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 + 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 47 + 10.1. Normative References . . . . . . . . . . . . . . . . . . . 47 + 10.2. Informative References . . . . . . . . . . . . . . . . . . 47 + Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 49 + Appendix B. Comments . . . . . . . . . . . . . . . . . . . . . . 49 + +1. Introduction + + This document describes version 6 of the Delay Tolerant Networking + (DTN) "bundle" protocol (BP). Delay Tolerant Networking 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, BP sits at the + application layer of some number of constituent internets, forming a + store-and-forward overlay network. Key capabilities of BP include: + + o Custody-based retransmission + + o Ability to cope with intermittent connectivity + + o Ability to take advantage of scheduled, predicted, and + opportunistic connectivity (in addition to continuous + connectivity) + + o Late binding of overlay network endpoint identifiers to + constituent internet addresses + + For descriptions of these capabilities and the rationale for the DTN + architecture, see [ARCH] and [SIGC]. [TUT] contains a tutorial-level + overview of DTN concepts. + + This is an experimental protocol, produced within the IRTF's Delay + Tolerant Networking Research Group (DTNRG) and represents the + consensus of all of the active contributors to this group. If this + protocol is used on the Internet, IETF standard protocols for + security and congestion control should be used. + + BP's location within the standard protocol stack is as shown in + Figure 1. BP 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 + + + +Scott & Burleigh Experimental [Page 3] + +RFC 5050 Bundle Protocol Specification November 2007 + + + internetwork protocol suite is termed a "convergence layer adapter". + Figure 1 shows three distinct transport and network protocols + (denoted T1/N1, T2/N2, and T3/N3). + + +-----------+ +-----------+ + | BP app | | BP app | + +---------v-| +->>>>>>>>>>v-+ +->>>>>>>>>>v-+ +-^---------+ + | BP v | | ^ BP v | | ^ BP v | | ^ BP | + +---------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 Bundle Protocol Sits at + the Application Layer of the Internet Model + + This document describes the format of the protocol data units (called + bundles) passed between entities participating in BP communications. + The entities are referred to as "bundle nodes". This document does + not address: + + o Operations in the convergence layer adapters that bundle nodes use + to transport data through specific types of internets. (However, + the document does discuss the services that must be provided by + each adapter at the convergence layer.) + + o The bundle routing algorithm. + + o Mechanisms for populating the routing or forwarding information + bases of bundle nodes. + +2. Requirements Notation + + 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 [RFC2119]. + + + + + + + + + +Scott & Burleigh Experimental [Page 4] + +RFC 5050 Bundle Protocol Specification November 2007 + + +3. Service Description + +3.1. Definitions + + Bundle - A bundle is a protocol data unit of the DTN bundle + protocol. Each bundle comprises a sequence of two or more + "blocks" of protocol data, which serve various purposes. Multiple + instances of the same bundle (the same unit of DTN protocol data) + might exist concurrently in different parts of a network -- + possibly in different representations -- in the memory local to + one or more bundle nodes and/or in transit between nodes. In the + context of the operation of a bundle node, a bundle is an instance + of some bundle in the network that is in that node's local memory. + + Bundle payload - A bundle payload (or simply "payload") is the + application data whose conveyance to the bundle's destination is + the purpose for the transmission of a given bundle. The terms + "bundle content", "bundle payload", and "payload" are used + interchangeably in this document. The "nominal" payload for a + bundle forwarded in response to a bundle transmission request is + the application data unit whose location is provided as a + parameter to that request. The nominal payload for a bundle + forwarded in response to reception of that bundle is the payload + of the received bundle. + + Fragment - A fragment is a bundle whose payload block contains a + fragmentary payload. A fragmentary payload is either the first N + bytes or the last N bytes of some other payload -- either a + nominal payload or a fragmentary payload -- of length M, such that + 0 < N < M. + + Bundle node - A bundle node (or, in the context of this document, + simply a "node") is any entity that can send and/or receive + bundles. In the most familiar case, a bundle node is instantiated + as a single process running on a general-purpose computer, but in + general the definition is meant to be broader: a bundle node might + alternatively be a thread, an object in an object-oriented + operating system, a special-purpose hardware device, etc. Each + bundle node has three conceptual components, defined below: a + "bundle protocol agent", a set of zero or more "convergence layer + adapters", and an "application agent". + + Bundle protocol agent - The bundle protocol agent (BPA) of a node is + the node component that offers the BP services and executes the + procedures of the bundle protocol. The manner in which it does so + is wholly an implementation matter. For example, BPA + functionality might be coded into each node individually; it might + be implemented as a shared library that is used in common by any + + + +Scott & Burleigh Experimental [Page 5] + +RFC 5050 Bundle Protocol Specification November 2007 + + + number of bundle nodes on a single computer; it might be + implemented as a daemon whose services are invoked via inter- + process or network communication by any number of bundle nodes on + one or more computers; it might be implemented in hardware. + + Convergence layer adapters - A convergence layer adapter (CLA) sends + and receives bundles on behalf of the BPA, utilizing the services + of some 'native' internet protocol that is supported in one of the + internets within which the node is functionally located. The + manner in which a CLA sends and receives bundles is wholly an + implementation matter, exactly as described for the BPA. + + Application agent - The application agent (AA) of a node is the node + component that utilizes the BP services to effect communication + for some purpose. The application agent in turn has two elements, + an administrative element and an application-specific element. + The application-specific element of an AA constructs, requests + transmission of, accepts delivery of, and processes application- + specific application data units; the only interface between the + BPA and the application-specific element of the AA is the BP + service interface. The administrative element of an AA constructs + and requests transmission of administrative records (status + reports and custody signals), and it accepts delivery of and + processes any custody signals that the node receives. In addition + to the BP service interface, there is a (conceptual) private + control interface between the BPA and the administrative element + of the AA that enables each to direct the other to take action + under specific circumstances. In the case of a node that serves + simply as a "router" in the overlay network, the AA may have no + application-specific element at all. The application-specific + elements of other nodes' AAs may perform arbitrarily complex + application functions, perhaps even offering multiplexed DTN + communication services to a number of other applications. As with + the BPA, the manner in which the AA performs its functions is + wholly an implementation matter; in particular, the administrative + element of an AA might be built into the library or daemon or + hardware that implements the BPA, and the application-specific + element of an AA might be implemented either in software or in + hardware. + + Bundle endpoint - A bundle endpoint (or simply "endpoint") is a set + of zero or more bundle nodes that all identify themselves for BP + purposes by some single text string, called a "bundle endpoint ID" + (or, in this document, simply "endpoint ID"; endpoint IDs are + described in detail in Section 4.4 below). The special case of an + endpoint that never contains more than one node is termed a + "singleton" endpoint; every bundle node must be a member of at + least one singleton endpoint. Singletons are the most familiar + + + +Scott & Burleigh Experimental [Page 6] + +RFC 5050 Bundle Protocol Specification November 2007 + + + sort of endpoint, but in general the endpoint notion is meant to + be broader. For example, the nodes in a sensor network might + constitute a set of bundle nodes that identify themselves by a + single common endpoint ID and thus form a single bundle endpoint. + *Note* too that a given bundle node might identify itself by + multiple endpoint IDs and thus be a member of multiple bundle + endpoints. + + Forwarding - When the bundle protocol agent of a node determines + that a bundle must be "forwarded" to an endpoint, it causes the + bundle to be sent to all of the nodes that the bundle protocol + agent currently believes are in the "minimum reception group" of + that endpoint. The minimum reception group of an endpoint may be + any one of the following: (a) ALL of the nodes registered in an + endpoint that is permitted to contain multiple nodes (in which + case forwarding to the endpoint is functionally similar to + "multicast" operations in the Internet, though possibly very + different in implementation); (b) ANY N of the nodes registered in + an endpoint that is permitted to contain multiple nodes, where N + is in the range from zero to the cardinality of the endpoint (in + which case forwarding to the endpoint is functionally similar to + "anycast" operations in the Internet); or (c) THE SOLE NODE + registered in a singleton endpoint (in which case forwarding to + the endpoint is functionally similar to "unicast" operations in + the Internet). The nature of the minimum reception group for a + given endpoint can be determined from the endpoint's ID (again, + see Section 4.4 below): for some endpoint ID "schemes", the nature + of the minimum reception group is fixed - in a manner that is + defined by the scheme - for all endpoints identified under the + scheme; for other schemes, the nature of the minimum reception + group is indicated by some lexical feature of the "scheme-specific + part" of the endpoint ID, in a manner that is defined by the + scheme. + + Registration - A registration is the state machine characterizing a + given node's membership in a given endpoint. Any number of + registrations may be concurrently associated with a given + endpoint, and any number of registrations may be concurrently + associated with a given node. Any single registration must at any + time be in one of two states: Active or Passive. A registration + always has an associated "delivery failure action", the action + that is to be taken when a bundle that is "deliverable" (see + below) subject to that registration is received at a time when the + registration is in the Passive state. Delivery failure action + must be one of the following: + + * defer "delivery" (see below) of the bundle subject to this + registration until (a) this bundle is the least recently + + + +Scott & Burleigh Experimental [Page 7] + +RFC 5050 Bundle Protocol Specification November 2007 + + + received of all bundles currently deliverable subject to this + registration and (b) either the registration is polled or else + the registration is in the Active state; or + + * "abandon" (see below) delivery of the bundle subject to this + registration. + + An additional implementation-specific delivery deferral procedure + may optionally be associated with the registration. While the + state of a registration is Active, reception of a bundle that is + deliverable subject to this registration must cause the bundle to + be delivered automatically as soon as it is the least recently + received bundle that is currently deliverable subject to the + registration. While the state of a registration is Passive, + reception of a bundle that is deliverable subject to this + registration must cause delivery of the bundle to be abandoned or + deferred as mandated by the registration's current delivery + failure action; in the latter case, any additional delivery + deferral procedure associated with the registration must also be + performed. + + Delivery - Upon reception, the processing of a bundle that has been + sent to a given node depends on whether or not the receiving node + is registered in the bundle's destination endpoint. If it is, and + if the payload of the bundle is non-fragmentary (possibly as a + result of successful payload reassembly from fragmentary payloads, + including the original payload of the received bundle), then the + bundle is normally "delivered" to the node's application agent + subject to the registration characterizing the node's membership + in the destination endpoint. A bundle is considered to have been + delivered at a node subject to a registration as soon as the + application data unit that is the payload of the bundle, together + with the value of the bundle's "Acknowledgement by application is + requested" flag and any other relevant metadata (an implementation + matter), has been presented to the node's application agent in a + manner consistent with the state of that registration and, as + applicable, the registration's delivery failure action. + + Deliverability, Abandonment - A bundle is considered "deliverable" + subject to a registration if and only if (a) the bundle's + destination endpoint is the endpoint with which the registration + is associated, (b) the bundle has not yet been delivered subject + to this registration, and (c) delivery of the bundle subject to + this registration has not been abandoned. To "abandon" delivery + of a bundle subject to a registration is simply to declare it no + longer deliverable subject to that registration; normally only + registrations' registered delivery failure actions cause + deliveries to be abandoned. + + + +Scott & Burleigh Experimental [Page 8] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Deletion, Discarding - A bundle protocol agent "discards" a bundle + by simply ceasing all operations on the bundle and functionally + erasing all references to it; the specific procedures by which + this is accomplished are an implementation matter. Bundles are + discarded silently; i.e., the discarding of a bundle does not + result in generation of an administrative record. "Retention + constraints" are elements of the bundle state that prevent a + bundle from being discarded; a bundle cannot be discarded while it + has any retention constraints. A bundle protocol agent "deletes" + a bundle in response to some anomalous condition by notifying the + bundle's report-to endpoint of the deletion (provided such + notification is warranted; see Section 5.13 for details) and then + arbitrarily removing all of the bundle's retention constraints, + enabling the bundle to be discarded. + + Transmission - A transmission is a sustained effort by a node's + bundle protocol agent to cause a bundle to be sent to all nodes in + the minimum reception group of some endpoint (which may be the + bundle's destination or may be some intermediate forwarding + endpoint) in response to a transmission request issued by the + node's application agent. Any number of transmissions may be + concurrently undertaken by the bundle protocol agent of a given + node. + + Custody - To "accept custody" upon forwarding a bundle is to commit + to retaining a copy of the bundle -- possibly re-forwarding the + bundle when necessary -- until custody of that bundle is + "released". Custody of a bundle whose destination is a singleton + endpoint is released when either (a) notification is received that + some other node has accepted custody of the same bundle; (b) + notification is received that the bundle has been delivered at the + (sole) node registered in the bundle's destination endpoint; or + (c) the bundle is explicitly deleted for some reason, such as + lifetime expiration. The condition(s) under which custody of a + bundle whose destination is not a singleton endpoint may be + released are not defined in this specification. To "refuse + custody" of a bundle is to decide not to accept custody of the + bundle. A "custodial node" of a bundle is a node that has + accepted custody of the bundle and has not yet released that + custody. A "custodian" of a bundle is a singleton endpoint whose + sole member is one of the bundle's custodial nodes. + +3.2. Implementation Architectures + + The above definitions are intended to enable the bundle protocol's + operations to be specified in a manner that minimizes bias toward any + particular implementation architecture. To illustrate the range of + interoperable implementation models that might conform to this + + + +Scott & Burleigh Experimental [Page 9] + +RFC 5050 Bundle Protocol Specification November 2007 + + + specification, four example architectures are briefly described + below. + + 1. Bundle protocol application server + + A single bundle protocol application server, constituting a + single bundle node, runs as a daemon process on each computer. + The daemon's functionality includes all functions of the bundle + protocol agent, all convergence layer adapters, and both the + administrative and application-specific elements of the + application agent. The application-specific element of the + application agent functions as a server, offering bundle protocol + service over a local area network: it responds to remote + procedure calls from application processes (on the same computer + and/or remote computers) that need to communicate via the bundle + protocol. The server supports its clients by creating a new + (conceptual) node for each one and registering each such node in + a client-specified endpoint. The conceptual nodes managed by the + server function as clients' bundle protocol service access + points. + + 2. Peer application nodes + + Any number of bundle protocol application processes, each one + constituting a single bundle node, run in ad-hoc fashion on each + computer. The functionality of the bundle protocol agent, all + convergence layer adapters, and the administrative element of the + application agent is provided by a library to which each node + process is dynamically linked at run time. The application- + specific element of each node's application agent is node- + specific application code. + + 3. Sensor network nodes + + Each node of the sensor network is the self-contained + implementation of a single bundle node. All functions of the + bundle protocol agent, all convergence layer adapters, and the + administrative element of the application agent are implemented + in simplified form in Application-Specific Integrated Circuits + (ASICs), while the application-specific element of each node's + application agent is implemented in a programmable + microcontroller. Forwarding is rudimentary: all bundles are + forwarded on a hard-coded default route. + + + + + + + + +Scott & Burleigh Experimental [Page 10] + +RFC 5050 Bundle Protocol Specification November 2007 + + + 4. Dedicated bundle router + + Each computer constitutes a single bundle node that functions + solely as a high-performance bundle forwarder. Many standard + functions of the bundle protocol agent, the convergence layer + adapters, and the administrative element of the application agent + are implemented in ASICs, but some functions are implemented in a + high-speed processor to enable reprogramming as necessary. The + node's application agent has no application-specific element. + Substantial non-volatile storage resources are provided, and + arbitrarily complex forwarding algorithms are supported. + +3.3. Services Offered by Bundle Protocol Agents + + The bundle protocol agent of each node is expected to provide the + following services to the node's application agent: + + o commencing a registration (registering a node in an endpoint); + + o terminating a registration; + + o switching a registration between Active and Passive states; + + o transmitting a bundle to an identified bundle endpoint; + + o canceling a transmission; + + o polling a registration that is in the passive state; + + o delivering a received bundle. + +4. Bundle Format + + Each bundle shall be a concatenated sequence of at least two block + structures. The first block in the sequence must be a primary bundle + block, and no bundle may have more than one primary bundle block. + Additional bundle protocol blocks of other types may follow the + primary block to support extensions to the bundle protocol, such as + the Bundle Security Protocol [BSP]. At most one of the blocks in the + sequence may be a payload block. The last block in the sequence must + have the "last block" flag (in its block processing control flags) + set to 1; for every other block in the bundle after the primary + block, this flag must be set to zero. + + + + + + + + +Scott & Burleigh Experimental [Page 11] + +RFC 5050 Bundle Protocol Specification November 2007 + + +4.1. Self-Delimiting Numeric Values (SDNVs) + + The design of the bundle protocol attempts to reconcile minimal + consumption of transmission bandwidth with: + + o extensibility to address requirements not yet identified, and + + o scalability across a wide range of network scales and payload + sizes. + + A key strategic element in the design is the use of self-delimiting + numeric values (SDNVs). The SDNV encoding scheme is closely adapted + from the Abstract Syntax Notation One Basic Encoding Rules for + subidentifiers within an object identifier value [ASN1]. An SDNV is + a numeric value encoded in N octets, the last of which has its most + significant bit (MSB) set to zero; the MSB of every other octet in + the SDNV must be set to 1. The value encoded in an SDNV is the + unsigned binary number obtained by concatenating into a single bit + string the 7 least significant bits of each octet of the SDNV. + + The following examples illustrate the encoding scheme for various + hexadecimal values. + + 0xABC : 1010 1011 1100 + is encoded as + {1 00 10101} {0 0111100} + = 10010101 00111100 + + 0x1234 : 0001 0010 0011 0100 + = 1 0010 0011 0100 + is encoded as + {1 0 100100} {0 0110100} + = 10100100 00110100 + + 0x4234 : 0100 0010 0011 0100 + = 100 0010 0011 0100 + is encoded as + {1 000000 1} {1 0000100} {0 0110100} + = 10000001 10000100 00110100 + + 0x7F : 0111 1111 + = 111 1111 + is encoded as + {0 1111111} + = 01111111 + + Figure 2: SDNV Example + + + + +Scott & Burleigh Experimental [Page 12] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Note: Care must be taken to make sure that the value to be encoded is + (in concept) padded with high-order zero bits to make its bitwise + length a multiple of 7 before encoding. Also note that, while there + is no theoretical limit on the size of an SDNV field, the overhead of + the SDNV scheme is 1:7, i.e., one bit of overhead for every 7 bits of + actual data to be encoded. Thus, a 7-octet value (a 56-bit quantity + with no leading zeroes) would be encoded in an 8-octet SDNV; an + 8-octet value (a 64-bit quantity with no leading zeroes) would be + encoded in a 10-octet SDNV (one octet containing the high-order bit + of the value padded with six leading zero bits, followed by nine + octets containing the remaining 63 bits of the value). 148 bits of + overhead would be consumed in encoding a 1024-bit RSA encryption key + directly in an SDNV. In general, an N-bit quantity with no leading + zeroes is encoded in an SDNV occupying ceil(N/7) octets, where ceil + is the integer ceiling function. + + Implementations of the bundle protocol may handle as an invalid + numeric value any SDNV that encodes an integer that is larger than + (2^64 - 1). + + An SDNV can be used to represent both very large and very small + integer values. However, SDNV is clearly not the best way to + represent every numeric value. For example, an SDNV is a poor way to + represent an integer whose value typically falls in the range 128 to + 255. In general, though, we believe that SDNV representation of + numeric values in bundle blocks yields the smallest block sizes + without sacrificing scalability. + +4.2. Bundle Processing Control Flags + + The bundle processing control flags field in the primary bundle block + of each bundle is an SDNV; the value encoded in this SDNV is a string + of bits used to invoke selected bundle processing control features. + The significance of the value in each currently defined position of + this bit string is described here. Note that in the figure and + descriptions, the bit label numbers denote position (from least + significant ('0') to most significant) within the decoded bit string, + and not within the representation of the bits on the wire. This is + why the descriptions in this section and the next do not follow + standard RFC conventions with bit 0 on the left; if fields are added + in the future, the SDNV will grow to the left, and using this + representation allows the references here to remain valid. + + + + + + + + + +Scott & Burleigh Experimental [Page 13] + +RFC 5050 Bundle Protocol Specification November 2007 + + + 2 1 0 + 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Status Report|Class of Svc.| General | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 3: Bundle Processing Control Flags Bit Layout + + The bits in positions 0 through 6 are flags that characterize the + bundle as follows: + + 0 -- Bundle is a fragment. + + 1 -- Application data unit is an administrative record. + + 2 -- Bundle must not be fragmented. + + 3 -- Custody transfer is requested. + + 4 -- Destination endpoint is a singleton. + + 5 -- Acknowledgement by application is requested. + + 6 -- Reserved for future use. + + The bits in positions 7 through 13 are used to indicate the bundle's + class of service. The bits in positions 8 and 7 constitute a two-bit + priority field indicating the bundle's priority, with higher values + being of higher priority: 00 = bulk, 01 = normal, 10 = expedited, 11 + is reserved for future use. Within this field, bit 8 is the most + significant bit. The bits in positions 9 through 13 are reserved for + future use. + + The bits in positions 14 through 20 are status report request flags. + These flags are used to request status reports as follows: + + 14 -- Request reporting of bundle reception. + + 15 -- Request reporting of custody acceptance. + + 16 -- Request reporting of bundle forwarding. + + 17 -- Request reporting of bundle delivery. + + 18 -- Request reporting of bundle deletion. + + 19 -- Reserved for future use. + + + + +Scott & Burleigh Experimental [Page 14] + +RFC 5050 Bundle Protocol Specification November 2007 + + + 20 -- Reserved for future use. + + If the bundle processing control flags indicate that the bundle's + application data unit is an administrative record, then the custody + transfer requested flag must be zero and all status report request + flags must be zero. If the custody transfer requested flag is 1, + then the sending node requests that the receiving node accept custody + of the bundle. If the bundle's source endpoint ID is "dtn:none" (see + below), then the bundle is not uniquely identifiable and all bundle + protocol features that rely on bundle identity must therefore be + disabled: the bundle's custody transfer requested flag must be zero, + the "Bundle must not be fragmented" flag must be 1, and all status + report request flags must be zero. + +4.3. Block Processing Control Flags + + The block processing control flags field in every block other than + the primary bundle block is an SDNV; the value encoded in this SDNV + is a string of bits used to invoke selected block processing control + features. The significance of the values in all currently defined + positions of this bit string, in order from least significant + position in the decoded bit string (labeled '0') to most significant + (labeled '6'), is described here. + + 0 + 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+ + | Flags | + +-+-+-+-+-+-+-+ + + Figure 4: Block Processing Control Flags Bit Layout + + 0 - Block must be replicated in every fragment. + + 1 - Transmit status report if block can't be processed. + + 2 - Delete bundle if block can't be processed. + + 3 - Last block. + + 4 - Discard block if it can't be processed. + + 5 - Block was forwarded without being processed. + + 6 - Block contains an EID-reference field. + + + + + + +Scott & Burleigh Experimental [Page 15] + +RFC 5050 Bundle Protocol Specification November 2007 + + + For each bundle whose primary block's bundle processing control flags + (see above) indicate that the bundle's application data unit is an + administrative record, the "Transmit status report if block can't be + processed" flag in the block processing flags field of every other + block in the bundle must be zero. + + The 'Block must be replicated in every fragment' bit in the block + processing flags must be set to zero on all blocks that follow the + payload block. + +4.4. Endpoint IDs + + The destinations of bundles are bundle endpoints, identified by text + strings termed "endpoint IDs" (see Section 3.1). Each endpoint ID + conveyed in any bundle block takes the form of a Uniform Resource + Identifier (URI; [URI]). As such, each endpoint ID can be + characterized as having this general structure: + + < scheme name > : < scheme-specific part, or "SSP" > + + As used for the purposes of the bundle protocol, neither the length + of a scheme name nor the length of an SSP may exceed 1023 bytes. + + Bundle blocks cite a number of endpoint IDs for various purposes of + the bundle protocol. Many, though not necessarily all, of the + endpoint IDs referred to in the blocks of a given bundle are conveyed + in the "dictionary" byte array in the bundle's primary block. This + array is simply the concatenation of any number of null-terminated + scheme names and SSPs. + + "Endpoint ID references" are used to cite endpoint IDs that are + contained in the dictionary; all endpoint ID citations in the primary + bundle block are endpoint ID references, and other bundle blocks may + contain endpoint ID references as well. Each endpoint ID reference + is an ordered pair of SDNVs: + + o The first SDNV contains the offset within the dictionary of the + first character of the referenced endpoint ID's scheme name. + + o The second SDNV contains the offset within the dictionary of the + first character of the referenced endpoint ID's SSP. + + This encoding enables a degree of block compression: when the source + and report-to of a bundle are the same endpoint, for example, the + text of that endpoint's ID may be cited twice yet appear only once in + the dictionary. + + + + + +Scott & Burleigh Experimental [Page 16] + +RFC 5050 Bundle Protocol Specification November 2007 + + + The scheme identified by the < scheme name > in an endpoint ID is a + set of syntactic and semantic rules that fully explain how to parse + and interpret the SSP. The set of allowable schemes is effectively + unlimited. Any scheme conforming to [URIREG] may be used in a bundle + protocol endpoint ID. In addition, a single additional scheme is + defined by the present document: + + o The "dtn" scheme, which is used at minimum in the representation + of the null endpoint ID "dtn:none". The forwarding of a bundle to + the null endpoint is never contraindicated, and the minimum + reception group for the null endpoint is the empty set. + + Note that, although the endpoint IDs conveyed in bundle blocks are + expressed as URIs, implementations of the BP service interface may + support expression of endpoint IDs in some internationalized manner + (e.g., Internationalized Resource Identifiers (IRIs); see [RFC3987]). + +4.5. Formats of Bundle Blocks + + This section describes the formats of the primary block and payload + block. Rules for processing these blocks appear in Section 5 of this + document. + + Note that supplementary DTN protocol specifications (including, but + not restricted to, the Bundle Security Protocol [BSP]) may require + that BP implementations conforming to those protocols construct and + process additional blocks. + + The format of the two basic BP blocks is shown in Figure 5 below. + + + + + + + + + + + + + + + + + + + + + + +Scott & Burleigh Experimental [Page 17] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Primary Bundle Block + +----------------+----------------+----------------+----------------+ + | Version | Proc. Flags (*) | + +----------------+----------------+----------------+----------------+ + | Block length (*) | + +----------------+----------------+---------------------------------+ + | Destination scheme offset (*) | Destination SSP offset (*) | + +----------------+----------------+----------------+----------------+ + | Source scheme offset (*) | Source SSP offset (*) | + +----------------+----------------+----------------+----------------+ + | Report-to scheme offset (*) | Report-to SSP offset (*) | + +----------------+----------------+----------------+----------------+ + | Custodian scheme offset (*) | Custodian SSP offset (*) | + +----------------+----------------+----------------+----------------+ + | Creation Timestamp time (*) | + +---------------------------------+---------------------------------+ + | Creation Timestamp sequence number (*) | + +---------------------------------+---------------------------------+ + | Lifetime (*) | + +----------------+----------------+----------------+----------------+ + | Dictionary length (*) | + +----------------+----------------+----------------+----------------+ + | Dictionary byte array (variable) | + +----------------+----------------+---------------------------------+ + | [Fragment offset (*)] | + +----------------+----------------+---------------------------------+ + | [Total application data unit length (*)] | + +----------------+----------------+---------------------------------+ + + + Bundle Payload Block + +----------------+----------------+----------------+----------------+ + | Block type | Proc. Flags (*)| Block length(*) | + +----------------+----------------+----------------+----------------+ + / Bundle Payload (variable) / + +-------------------------------------------------------------------+ + + Figure 5: Bundle Block Formats + + (*) Notes: + + The bundle processing control ("Proc.") flags field in the Primary + Bundle Block is an SDNV and is therefore variable length. A three- + octet SDNV is shown here for convenience in representation. + + The block length field of the Primary Bundle Block is an SDNV and is + therefore variable length. A four-octet SDNV is shown here for + convenience in representation. + + + +Scott & Burleigh Experimental [Page 18] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Each of the eight offset fields in the Primary Bundle Block is an + SDNV and is therefore variable length. Two-octet SDNVs are shown + here for convenience in representation. + + The Creation Timestamp time field in the Primary Bundle Block is an + SDNV and is therefore variable length. A four-octet SDNV is shown + here for convenience in representation. + + The Creation Timestamp sequence number field in the Primary Bundle + Block is an SDNV and is therefore variable length. A four-octet SDNV + is shown here for convenience in representation. + + The Lifetime field in the Primary Bundle Block is an SDNV and is + therefore variable length. A four-octet SDNV is shown here for + convenience in representation. + + The dictionary length field of the Primary Bundle Block is an SDNV + and is therefore variable length. A four-octet SDNV is shown here + for convenience in representation. + + The fragment offset field of the Primary Bundle Block is present only + if the Fragment flag in the block's processing flags byte is set to + 1. It is an SDNV and is therefore variable length; a four-octet SDNV + is shown here for convenience in representation. + + The total application data unit length field of the Primary Bundle + Block is present only if the Fragment flag in the block's processing + flags byte is set to 1. It is an SDNV and is therefore variable + length; a four-octet SDNV is shown here for convenience in + representation. + + The block processing control ("Proc.") flags field of the Payload + Block is an SDNV and is therefore variable length. A one-octet SDNV + is shown here for convenience in representation. + + The block length field of the Payload Block is an SDNV and is + therefore variable length. A two-octet SDNV is shown here for + convenience in representation. + +4.5.1. Primary Bundle Block + + The primary bundle block contains the basic information needed to + route bundles to their destinations. The fields of the primary + bundle block are: + + + + + + + +Scott & Burleigh Experimental [Page 19] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Version: A 1-byte field indicating the version of the bundle + protocol that constructed this block. The present document + describes version 0x06 of the bundle protocol. + + Bundle Processing Control Flags: The Bundle Processing Control + Flags field is an SDNV that contains the bundle processing control + flags discussed in Section 4.2 above. + + Block Length: The Block Length field is an SDNV that contains the + aggregate length of all remaining fields of the block. + + Destination Scheme Offset: The Destination Scheme Offset field + contains the offset within the dictionary byte array of the scheme + name of the endpoint ID of the bundle's destination, i.e., the + endpoint containing the node(s) at which the bundle is to be + delivered. + + Destination SSP Offset: The Destination SSP Offset field contains + the offset within the dictionary byte array of the scheme-specific + part of the endpoint ID of the bundle's destination. + + Source Scheme Offset: The Source Scheme Offset field contains the + offset within the dictionary byte array of the scheme name of the + endpoint ID of the bundle's nominal source, i.e., the endpoint + nominally containing the node from which the bundle was initially + transmitted. + + Source SSP Offset: The Source SSP Offset field contains the offset + within the dictionary byte array of the scheme-specific part of + the endpoint ID of the bundle's nominal source. + + Report-to Scheme Offset: The Report-to Scheme Offset field contains + the offset within the dictionary byte array of the scheme name of + the ID of the endpoint to which status reports pertaining to the + forwarding and delivery of this bundle are to be transmitted. + + Report-to SSP Offset: The Report-to SSP Offset field contains the + offset within the dictionary byte array of the scheme-specific + part of the ID of the endpoint to which status reports pertaining + to the forwarding and delivery of this bundle are to be + transmitted. + + Custodian Scheme Offset: The "current custodian endpoint ID" of a + primary bundle block identifies an endpoint whose membership + includes the node that most recently accepted custody of the + bundle upon forwarding this bundle. The Custodian Scheme Offset + field contains the offset within the dictionary byte array of the + scheme name of the current custodian endpoint ID. + + + +Scott & Burleigh Experimental [Page 20] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Custodian SSP Offset: The Custodian SSP Offset field contains the + offset within the dictionary byte array of the scheme-specific + part of the current custodian endpoint ID. + + Creation Timestamp: The creation timestamp is a pair of SDNVs that, + together with the source endpoint ID and (if the bundle is a + fragment) the fragment offset and payload length, serve to + identify the bundle. The first SDNV of the timestamp is the + bundle's creation time, while the second is the bundle's creation + timestamp sequence number. Bundle creation time is the time -- + expressed in seconds since the start of the year 2000, on the + Coordinated Universal Time (UTC) scale [UTC] -- at which the + transmission request was received that resulted in the creation of + the bundle. Sequence count is the latest value (as of the time at + which that transmission request was received) of a monotonically + increasing positive integer counter managed by the source node's + bundle protocol agent that may be reset to zero whenever the + current time advances by one second. A source Bundle Protocol + Agent must never create two distinct bundles with the same source + endpoint ID and bundle creation timestamp. The combination of + source endpoint ID and bundle creation timestamp therefore serves + to identify a single transmission request, enabling it to be + acknowledged by the receiving application (provided the source + endpoint ID is not "dtn:none"). + + Lifetime: The lifetime field is an SDNV that indicates the time at + which the bundle's payload will no longer be useful, encoded as a + number of seconds past the creation time. When the current time + is greater than the creation time plus the lifetime, bundle nodes + need no longer retain or forward the bundle; the bundle may be + deleted from the network. + + Dictionary Length: The Dictionary Length field is an SDNV that + contains the length of the dictionary byte array. + + Dictionary: The Dictionary field is an array of bytes formed by + concatenating the null-terminated scheme names and SSPs of all + endpoint IDs referenced by any fields in this Primary Block + together with, potentially, other endpoint IDs referenced by + fields in other TBD DTN protocol blocks. Its length is given by + the value of the Dictionary Length field. + + Fragment Offset: If the Bundle Processing Control Flags of this + Primary block indicate that the bundle is a fragment, then the + Fragment Offset field is an SDNV indicating the offset from the + start of the original application data unit at which the bytes + comprising the payload of this bundle were located. If not, then + the Fragment Offset field is omitted from the block. + + + +Scott & Burleigh Experimental [Page 21] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Total Application Data Unit Length: If the Bundle Processing + Control Flags of this Primary block indicate that the bundle is a + fragment, then the Total Application Data Unit Length field is an + SDNV indicating the total length of the original application data + unit of which this bundle's payload is a part. If not, then the + Total Application Data Unit Length field is omitted from the + block. + +4.5.2. Canonical Bundle Block Format + + Every bundle block of every type other than the primary bundle block + comprises the following fields, in this order: + + o Block type code, expressed as an 8-bit unsigned binary integer. + Bundle block type code 1 indicates that the block is a bundle + payload block. Block type codes 192 through 255 are not defined + in this specification and are available for private and/or + experimental use. All other values of the block type code are + reserved for future use. + + o Block processing control flags, an unsigned integer expressed as + an SDNV. The individual bits of this integer are used to invoke + selected block processing control features. + + o Block EID reference count and EID references (optional). If and + only if the block references EID elements in the primary block's + dictionary, the 'block contains an EID-reference field' flag in + the block processing control flags is set to 1 and the block + includes an EID reference field consisting of a count of EID + references expressed as an SDNV followed by the EID references + themselves. Each EID reference is a pair of SDNVs. The first + SDNV of each EID reference contains the offset of a scheme name in + the primary block's dictionary, and the second SDNV of each + reference contains the offset of a scheme-specific part in the + dictionary. + + o Block data length, an unsigned integer expressed as an SDNV. The + Block data length field contains the aggregate length of all + remaining fields of the block, i.e., the block-type-specific data + fields. + + o Block-type-specific data fields, whose format and order are type- + specific and whose aggregate length in octets is the value of the + block data length field. All multi-byte block-type-specific data + fields are represented in network byte order. + + + + + + +Scott & Burleigh Experimental [Page 22] + +RFC 5050 Bundle Protocol Specification November 2007 + + + +-----------+-----------+-----------+-----------+ + |Block type | Block processing ctrl flags (SDNV)| + +-----------+-----------+-----------+-----------+ + | Block length (SDNV) | + +-----------+-----------+-----------+-----------+ + / Block body data (variable) / + +-----------+-----------+-----------+-----------+ + + Figure 6: Block Layout without EID Reference List + + + +-----------+-----------+-----------+-----------+ + |Block Type | Block processing ctrl flags (SDNV)| + +-----------+-----------+-----------+-----------+ + | EID Reference Count (SDNV) | + +-----------+-----------+-----------+-----------+ + | Ref_scheme_1 (SDNV) | Ref_ssp_1 (SDNV) | + +-----------+-----------+-----------+-----------+ + | Ref_scheme_2 (SDNV) | Ref_ssp_2 (SDNV) | + +-----------+-----------+-----------+-----------+ + | Block length (SDNV) | + +-----------+-----------+-----------+-----------+ + / Block body data (variable) / + +-----------+-----------+-----------+-----------+ + + Figure 7: Block Layout Showing Two EID References + +4.5.3. Bundle Payload Block + + The fields of the bundle payload block are: + + Block Type: The Block Type field is a 1-byte field that indicates + the type of the block. For the bundle payload block, this field + contains the value 1. + + Block Processing Control Flags: The Block Processing Control Flags + field is an SDNV that contains the block processing control flags + discussed in Section 4.3 above. + + Block Length: The Block Length field is an SDNV that contains the + aggregate length of all remaining fields of the block - which is + to say, the length of the bundle's payload. + + Payload: The Payload field contains the application data carried by + this bundle. + + That is, bundle payload blocks follow the canonical format of the + previous section with the restriction that the 'block contains an + + + +Scott & Burleigh Experimental [Page 23] + +RFC 5050 Bundle Protocol Specification November 2007 + + + EID-reference field' bit of the block processing control flags is + never set. The block body data for payload blocks is the application + data carried by the bundle. + +4.6. Extension Blocks + + "Extension blocks" are all blocks other than the primary and payload + blocks. Because extension blocks are not defined in the Bundle + Protocol specification (the present document), not all nodes + conforming to this specification will necessarily instantiate Bundle + Protocol implementations that include procedures for processing (that + is, recognizing, parsing, acting on, and/or producing) all extension + blocks. It is therefore possible for a node to receive a bundle that + includes extension blocks that the node cannot process. + + Whenever a bundle is forwarded that contains one or more extension + blocks that could not be processed, the "Block was forwarded without + being processed" flag must be set to 1 within the block processing + flags of each such block. For each block flagged in this way, the + flag may optionally be cleared (i.e., set to zero) by another node + that subsequently receives the bundle and is able to process that + block; the specifications defining the various extension blocks are + expected to define the circumstances under which this flag may be + cleared, if any. + +4.7. Dictionary Revision + + Any strings (scheme names and SSPs) in a bundle's dictionary that are + referenced neither from the bundle's primary block nor from the block + EID reference field of any extension block may be removed from the + dictionary at the time the bundle is forwarded. + + Whenever removal of a string from the dictionary causes the offsets + (within the dictionary byte array) of any other strings to change, + all endpoint ID references that refer to those strings must be + adjusted at the same time. Note that these references may be in the + primary block and/or in the block EID reference fields of extension + blocks. + +5. Bundle Processing + + The bundle processing procedures mandated in this section and in + Section 6 govern the operation of the Bundle Protocol Agent and the + Application Agent administrative element of each bundle node. They + are neither exhaustive nor exclusive. That is, supplementary DTN + protocol specifications (including, but not restricted to, the Bundle + Security Protocol [BSP]) may require that additional measures be + taken at specified junctures in these procedures. Such additional + + + +Scott & Burleigh Experimental [Page 24] + +RFC 5050 Bundle Protocol Specification November 2007 + + + measures shall not override or supersede the mandated bundle protocol + procedures, except that they may in some cases make these procedures + moot by requiring, for example, that implementations conforming to + the supplementary protocol terminate the processing of a given + incoming or outgoing bundle due to a fault condition recognized by + that protocol. + +5.1. Generation of Administrative Records + + All initial transmission of bundles is in response to bundle + transmission requests presented by nodes' application agents. When + required to "generate" an administrative record (a bundle status + report or a custody signal), the bundle protocol agent itself is + responsible for causing a new bundle to be transmitted, conveying + that record. In concept, the bundle protocol agent discharges this + responsibility by directing the administrative element of the node's + application agent to construct the record and request its + transmission as detailed in Section 6 below. In practice, the manner + in which administrative record generation is accomplished is an + implementation matter, provided the constraints noted in Section 6 + are observed. + + Under some circumstances, the requesting of status reports could + result in an unacceptable increase in the bundle traffic in the + network. For this reason, the generation of status reports is + mandatory only in one case, the deletion of a bundle for which + custody transfer is requested. In all other cases, the decision on + whether or not to generate a requested status report is left to the + discretion of the bundle protocol agent. Mechanisms that could + assist in making such decisions, such as pre-placed agreements + authorizing the generation of status reports under specified + circumstances, are beyond the scope of this specification. + + Notes on administrative record terminology: + + o A "bundle reception status report" is a bundle status report with + the "reporting node received bundle" flag set to 1. + + o A "custody acceptance status report" is a bundle status report + with the "reporting node accepted custody of bundle" flag set to + 1. + + o A "bundle forwarding status report" is a bundle status report with + the "reporting node forwarded the bundle" flag set to 1. + + o A "bundle delivery status report" is a bundle status report with + the "reporting node delivered the bundle" flag set to 1. + + + + +Scott & Burleigh Experimental [Page 25] + +RFC 5050 Bundle Protocol Specification November 2007 + + + o A "bundle deletion status report" is a bundle status report with + the "reporting node deleted the bundle" flag set to 1. + + o A "Succeeded" custody signal is a custody signal with the "custody + transfer succeeded" flag set to 1. + + o A "Failed" custody signal is a custody signal with the "custody + transfer succeeded" flag set to zero. + + o The "current custodian" of a bundle is the endpoint identified by + the current custodian endpoint ID in the bundle's primary block. + +5.2. Bundle Transmission + + The steps in processing a bundle transmission request are: + + Step 1: If custody transfer is requested for this bundle + transmission and, moreover, custody acceptance by the source node + is required, then either the bundle protocol agent must commit to + accepting custody of the bundle -- in which case processing + proceeds from Step 2 -- or the request cannot be honored and all + remaining steps of this procedure must be skipped. The bundle + protocol agent must not commit to accepting custody of a bundle if + the conditions under which custody of the bundle may be accepted + are not satisfied. The conditions under which a node may accept + custody of a bundle whose destination is not a singleton endpoint + are not defined in this specification. + + Step 2: Transmission of the bundle is initiated. An outbound + bundle must be created per the parameters of the bundle + transmission request, with current custodian endpoint ID set to + the null endpoint ID "dtn:none" and with the retention constraint + "Dispatch pending". The source endpoint ID of the bundle must be + either the ID of an endpoint of which the node is a member or the + null endpoint ID "dtn:none". + + Step 3: Processing proceeds from Step 1 of Section 5.4. + +5.3. Bundle Dispatching + + The steps in dispatching a bundle are: + + Step 1: If the bundle's destination endpoint is an endpoint of + which the node is a member, the bundle delivery procedure defined + in Section 5.7 must be followed. + + Step 2: Processing proceeds from Step 1 of Section 5.4. + + + + +Scott & Burleigh Experimental [Page 26] + +RFC 5050 Bundle Protocol Specification November 2007 + + +5.4. Bundle Forwarding + + The steps in forwarding a bundle are: + + Step 1: The retention constraint "Forward pending" must be added to + the bundle, and the bundle's "Dispatch pending" retention + constraint must be removed. + + Step 2: The bundle protocol agent must determine whether or not + forwarding is contraindicated for any of the reasons listed in + Figure 12. In particular: + + * The bundle protocol agent must determine which endpoint(s) to + forward the bundle to. The bundle protocol agent may choose + either to forward the bundle directly to its destination + endpoint (if possible) or to forward the bundle to some other + endpoint(s) for further forwarding. The manner in which this + decision is made may depend on the scheme name in the + destination endpoint ID but in any case is beyond the scope of + this document. If the agent finds it impossible to select any + endpoint(s) to forward the bundle to, then forwarding is + contraindicated. + + * Provided the bundle protocol agent succeeded in selecting the + endpoint(s) to forward the bundle to, the bundle protocol agent + must select the convergence layer adapter(s) whose services + will enable the node to send the bundle to the nodes of the + minimum reception group of each selected endpoint. The manner + in which the appropriate convergence layer adapters are + selected may depend on the scheme name in the destination + endpoint ID but in any case is beyond the scope of this + document. If the agent finds it impossible to select + convergence layer adapters to use in forwarding this bundle, + then forwarding is contraindicated. + + Step 3: If forwarding of the bundle is determined to be + contraindicated for any of the reasons listed in Figure 12, then + the Forwarding Contraindicated procedure defined in Section 5.4.1 + must be followed; the remaining steps of Section 5 are skipped at + this time. + + Step 4: If the bundle's custody transfer requested flag (in the + bundle processing flags field) is set to 1, then the custody + transfer procedure defined in Section 5.10.2 must be followed. + + + + + + + +Scott & Burleigh Experimental [Page 27] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Step 5: For each endpoint selected for forwarding, the bundle + protocol agent must invoke the services of the selected + convergence layer adapter(s) in order to effect the sending of the + bundle to the nodes constituting the minimum reception group of + that endpoint. Determining the time at which the bundle is to be + sent by each convergence layer adapter is an implementation + matter. + + To keep from possibly invalidating bundle security, the sequencing + of the blocks in a forwarded bundle must not be changed as it + transits a node; received blocks must be transmitted in the same + relative order as that in which they were received. While blocks + may be added to bundles as they transit intermediate nodes, + removal of blocks that do not have their 'Discard block if it + can't be processed' flag in the block processing control flags set + to 1 may cause security to fail. + + Step 6: When all selected convergence layer adapters have informed + the bundle protocol agent that they have concluded their data + sending procedures with regard to this bundle: + + * If the "request reporting of bundle forwarding" flag in the + bundle's status report request field is set to 1, then a bundle + forwarding status report should be generated, destined for the + bundle's report-to endpoint ID. If the bundle has the + retention constraint "custody accepted" and all of the nodes in + the minimum reception group of the endpoint selected for + forwarding are known to be unable to send bundles back to this + node, then the reason code on this bundle forwarding status + report must be "forwarded over unidirectional link"; otherwise, + the reason code must be "no additional information". + + * The bundle's "Forward pending" retention constraint must be + removed. + +5.4.1. Forwarding Contraindicated + + The steps in responding to contraindication of forwarding for some + reason are: + + Step 1: The bundle protocol agent must determine whether or not to + declare failure in forwarding the bundle for this reason. Note: + this decision is likely to be influenced by the reason for which + forwarding is contraindicated. + + + + + + + +Scott & Burleigh Experimental [Page 28] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Step 2: If forwarding failure is declared, then the Forwarding + Failed procedure defined in Section 5.4.2 must be followed. + Otherwise, (a) if the bundle's custody transfer requested flag (in + the bundle processing flags field) is set to 1, then the custody + transfer procedure defined in Section 5.10 must be followed; (b) + when -- at some future time - the forwarding of this bundle ceases + to be contraindicated, processing proceeds from Step 5 of + Section 5.4. + +5.4.2. Forwarding Failed + + The steps in responding to a declaration of forwarding failure for + some reason are: + + Step 1: If the bundle's custody transfer requested flag (in the + bundle processing flags field) is set to 1, custody transfer + failure must be handled. Procedures for handling failure of + custody transfer for a bundle whose destination is not a singleton + endpoint are not defined in this specification. For a bundle + whose destination is a singleton endpoint, the bundle protocol + agent must handle the custody transfer failure by generating a + "Failed" custody signal for the bundle, destined for the bundle's + current custodian; the custody signal must contain a reason code + corresponding to the reason for which forwarding was determined to + be contraindicated. (Note that discarding the bundle will not + delete it from the network, since the current custodian still has + a copy.) + + Step 2: If the bundle's destination endpoint is an endpoint of + which the node is a member, then the bundle's "Forward pending" + retention constraint must be removed. Otherwise, the bundle must + be deleted: the bundle deletion procedure defined in Section 5.13 + must be followed, citing the reason for which forwarding was + determined to be contraindicated. + +5.5. Bundle Expiration + + A bundle expires when the current time is greater than the bundle's + creation time plus its lifetime as specified in the primary bundle + block. Bundle expiration may occur at any point in the processing of + a bundle. When a bundle expires, the bundle protocol agent must + delete the bundle for the reason "lifetime expired": the bundle + deletion procedure defined in Section 5.13 must be followed. + + + + + + + + +Scott & Burleigh Experimental [Page 29] + +RFC 5050 Bundle Protocol Specification November 2007 + + +5.6. Bundle Reception + + The steps in processing a bundle received from another node are: + + Step 1: The retention constraint "Dispatch pending" must be added + to the bundle. + + Step 2: If the "request reporting of bundle reception" flag in the + bundle's status report request field is set to 1, then a bundle + reception status report with reason code "No additional + information" should be generated, destined for the bundle's + report-to endpoint ID. + + Step 3: For each block in the bundle that is an extension block + that the bundle protocol agent cannot process: + + * If the block processing flags in that block indicate that a + status report is requested in this event, then a bundle + reception status report with reason code "Block unintelligible" + should be generated, destined for the bundle's report-to + endpoint ID. + + * If the block processing flags in that block indicate that the + bundle must be deleted in this event, then the bundle protocol + agent must delete the bundle for the reason "Block + unintelligible"; the bundle deletion procedure defined in + Section 5.13 must be followed and all remaining steps of the + bundle reception procedure must be skipped. + + * If the block processing flags in that block do NOT indicate + that the bundle must be deleted in this event but do indicate + that the block must be discarded, then the bundle protocol + agent must remove this block from the bundle. + + * If the block processing flags in that block indicate NEITHER + that the bundle must be deleted NOR that the block must be + discarded, then the bundle protocol agent must set to 1 the + "Block was forwarded without being processed" flag in the block + processing flags of the block. + + Step 4: If the bundle's custody transfer requested flag (in the + bundle processing flags field) is set to 1 and the bundle has the + same source endpoint ID, creation timestamp, and (if the bundle is + a fragment) fragment offset and payload length as another bundle + that (a) has not been discarded and (b) currently has the + retention constraint "Custody accepted", custody transfer + redundancy must be handled. Otherwise, processing proceeds from + Step 5. Procedures for handling redundancy in custody transfer + + + +Scott & Burleigh Experimental [Page 30] + +RFC 5050 Bundle Protocol Specification November 2007 + + + for a bundle whose destination is not a singleton endpoint are not + defined in this specification. For a bundle whose destination is + a singleton endpoint, the bundle protocol agent must handle + custody transfer redundancy by generating a "Failed" custody + signal for this bundle with reason code "Redundant reception", + destined for this bundle's current custodian, and removing this + bundle's "Dispatch pending" retention constraint. + + Step 5: Processing proceeds from Step 1 of Section 5.3. + +5.7. Local Bundle Delivery + + The steps in processing a bundle that is destined for an endpoint of + which this node is a member are: + + Step 1: If the received bundle is a fragment, the application data + unit reassembly procedure described in Section 5.9 must be + followed. If this procedure results in reassembly of the entire + original application data unit, processing of this bundle (whose + fragmentary payload has been replaced by the reassembled + application data unit) proceeds from Step 2; otherwise, the + retention constraint "Reassembly pending" must be added to the + bundle and all remaining steps of this procedure are skipped. + + Step 2: Delivery depends on the state of the registration whose + endpoint ID matches that of the destination of the bundle: + + * If the registration is in the Active state, then the bundle + must be delivered subject to this registration (see Section 3.1 + above) as soon as all previously received bundles that are + deliverable subject to this registration have been delivered. + + * If the registration is in the Passive state, then the + registration's delivery failure action must be taken (see + Section 3.1 above). + + Step 3: As soon as the bundle has been delivered: + + * If the "request reporting of bundle delivery" flag in the + bundle's status report request field is set to 1, then a bundle + delivery status report should be generated, destined for the + bundle's report-to endpoint ID. Note that this status report + only states that the payload has been delivered to the + application agent, not that the application agent has processed + that payload. + + + + + + +Scott & Burleigh Experimental [Page 31] + +RFC 5050 Bundle Protocol Specification November 2007 + + + * If the bundle's custody transfer requested flag (in the bundle + processing flags field) is set to 1, custodial delivery must be + reported. Procedures for reporting custodial delivery for a + bundle whose destination is not a singleton endpoint are not + defined in this specification. For a bundle whose destination + is a singleton endpoint, the bundle protocol agent must report + custodial delivery by generating a "Succeeded" custody signal + for the bundle, destined for the bundle's current custodian. + +5.8. Bundle Fragmentation + + It may at times be necessary for bundle protocol agents to reduce the + sizes of bundles in order to forward them. This might be the case, + for example, if the endpoint to which a bundle is to be forwarded is + accessible only via intermittent contacts and no upcoming contact is + long enough to enable the forwarding of the entire bundle. + + The size of a bundle can be reduced by "fragmenting" the bundle. To + fragment a bundle whose payload is of size M is to replace it with + two "fragments" -- new bundles with the same source endpoint ID and + creation timestamp as the original bundle -- whose payloads are the + first N and the last (M - N) bytes of the original bundle's payload, + where 0 < N < M. Note that fragments may themselves be fragmented, + so fragmentation may in effect replace the original bundle with more + than two fragments. (However, there is only one 'level' of + fragmentation, as in IP fragmentation.) + + Any bundle whose primary block's bundle processing flags do NOT + indicate that it must not be fragmented may be fragmented at any + time, for any purpose, at the discretion of the bundle protocol + agent. + + Fragmentation shall be constrained as follows: + + o The concatenation of the payloads of all fragments produced by + fragmentation must always be identical to the payload of the + bundle that was fragmented. Note that the payloads of fragments + resulting from different fragmentation episodes, in different + parts of the network, may be overlapping subsets of the original + bundle's payload. + + o The bundle processing flags in the primary block of each fragment + must be modified to indicate that the bundle is a fragment, and + both fragment offset and total application data unit length must + be provided at the end of each fragment's primary bundle block. + + o The primary blocks of the fragments will differ from that of the + fragmented bundle as noted above. + + + +Scott & Burleigh Experimental [Page 32] + +RFC 5050 Bundle Protocol Specification November 2007 + + + o The payload blocks of fragments will differ from that of the + fragmented bundle as noted above. + + o All blocks that precede the payload block at the time of + fragmentation must be replicated in the fragment with the lowest + offset. + + o All blocks that follow the payload block at the time of + fragmentation must be replicated in the fragment with the highest + offset. + + o If the 'Block must be replicated in every fragment' bit is set to + 1, then the block must be replicated in every fragment. + + o If the 'Block must be replicated in every fragment' bit is set to + zero, the block should be replicated in only one fragment. + + o The relative order of all blocks that are present in a fragment + must be the same as in the bundle prior to fragmentation. + +5.9. Application Data Unit Reassembly + + If the concatenation -- as informed by fragment offsets and payload + lengths -- of the payloads of all previously received fragments with + the same source endpoint ID and creation timestamp as this fragment, + together with the payload of this fragment, forms a byte array whose + length is equal to the total application data unit length in the + fragment's primary block, then: + + o This byte array -- the reassembled application data unit -- must + replace the payload of this fragment. + + o The "Reassembly pending" retention constraint must be removed from + every other fragment whose payload is a subset of the reassembled + application data unit. + + Note: reassembly of application data units from fragments occurs at + destination endpoints as necessary; an application data unit may also + be reassembled at some other endpoint on the route to the + destination. + + + + + + + + + + + +Scott & Burleigh Experimental [Page 33] + +RFC 5050 Bundle Protocol Specification November 2007 + + +5.10. Custody Transfer + + The conditions under which a node may accept custody of a bundle + whose destination is not a singleton endpoint are not defined in this + specification. + + The decision as to whether or not to accept custody of a bundle whose + destination is a singleton endpoint is an implementation matter that + may involve both resource and policy considerations; however, if the + bundle protocol agent has committed to accepting custody of the + bundle (as described in Step 1 of Section 5.2), then custody must be + accepted. + + If the bundle protocol agent elects to accept custody of the bundle, + then it must follow the custody acceptance procedure defined in + Section 5.10.1. + +5.10.1. Custody Acceptance + + Procedures for acceptance of custody of a bundle whose destination is + not a singleton endpoint are not defined in this specification. + + Procedures for acceptance of custody of a bundle whose destination is + a singleton endpoint are defined as follows. + + The retention constraint "Custody accepted" must be added to the + bundle. + + If the "request reporting of custody acceptance" flag in the bundle's + status report request field is set to 1, a custody acceptance status + report should be generated, destined for the report-to endpoint ID of + the bundle. However, if a bundle reception status report was + generated for this bundle (Step 1 of Section 5.6), then this report + should be generated by simply turning on the "Reporting node accepted + custody of bundle" flag in that earlier report's status flags byte. + + The bundle protocol agent must generate a "Succeeded" custody signal + for the bundle, destined for the bundle's current custodian. + + The bundle protocol agent must assert the new current custodian for + the bundle. It does so by changing the current custodian endpoint ID + in the bundle's primary block to the endpoint ID of one of the + singleton endpoints in which the node is registered. This may entail + appending that endpoint ID's null-terminated scheme name and SSP to + the dictionary byte array in the bundle's primary block, and in some + case it may also enable the (optional) removal of the current + custodian endpoint ID's scheme name and/or SSP from the dictionary. + + + + +Scott & Burleigh Experimental [Page 34] + +RFC 5050 Bundle Protocol Specification November 2007 + + + The bundle protocol agent may set a custody transfer countdown timer + for this bundle; upon expiration of this timer prior to expiration of + the bundle itself and prior to custody transfer success for this + bundle, the custody transfer failure procedure detailed in + Section 5.12 must be followed. The manner in which the countdown + interval for such a timer is determined is an implementation matter. + + The bundle should be retained in persistent storage if possible. + +5.10.2. Custody Release + + Procedures for release of custody of a bundle whose destination is + not a singleton endpoint are not defined in this specification. + + When custody of a bundle is released, where the destination of the + bundle is a singleton endpoint, the "Custody accepted" retention + constraint must be removed from the bundle and any custody transfer + timer that has been established for this bundle must be destroyed. + +5.11. Custody Transfer Success + + Procedures for determining custody transfer success for a bundle + whose destination is not a singleton endpoint are not defined in this + specification. + + Upon receipt of a "Succeeded" custody signal at a node that is a + custodial node of the bundle identified in the custody signal, where + the destination of the bundle is a singleton endpoint, custody of the + bundle must be released as described in Section 5.10.2. + +5.12. Custody Transfer Failure + + Procedures for determining custody transfer failure for a bundle + whose destination is not a singleton endpoint are not defined in this + specification. Custody transfer for a bundle whose destination is a + singleton endpoint is determined to have failed at a custodial node + for that bundle when either (a) that node's custody transfer timer + for that bundle (if any) expires or (b) a "Failed" custody signal for + that bundle is received at that node. + + Upon determination of custody transfer failure, the action taken by + the bundle protocol agent is implementation-specific and may depend + on the nature of the failure. For example, if custody transfer + failure was inferred from expiration of a custody transfer timer or + was asserted by a "Failed" custody signal with the "Depleted storage" + reason code, the bundle protocol agent might choose to re-forward the + bundle, possibly on a different route (Section 5.4). Receipt of a + "Failed" custody signal with the "Redundant reception" reason code, + + + +Scott & Burleigh Experimental [Page 35] + +RFC 5050 Bundle Protocol Specification November 2007 + + + on the other hand, might cause the bundle protocol agent to release + custody of the bundle and to revise its algorithm for computing + countdown intervals for custody transfer timers. + +5.13. Bundle Deletion + + The steps in deleting a bundle are: + + Step 1: If the retention constraint "Custody accepted" currently + prevents this bundle from being discarded, and the destination of + the bundle is a singleton endpoint, then: + + * Custody of the node is released as described in Section 5.10.2. + + * A bundle deletion status report citing the reason for deletion + must be generated, destined for the bundle's report-to endpoint + ID. + + Otherwise, if the "request reporting of bundle deletion" flag in + the bundle's status report request field is set to 1, then a + bundle deletion status report citing the reason for deletion + should be generated, destined for the bundle's report-to endpoint + ID. + + Step 2: All of the bundle's retention constraints must be removed. + +5.14. Discarding a Bundle + + As soon as a bundle has no remaining retention constraints it may be + discarded. + +5.15. Canceling a Transmission + + When requested to cancel a specified transmission, where the bundle + created upon initiation of the indicated transmission has not yet + been discarded, the bundle protocol agent must delete that bundle for + the reason "transmission cancelled". For this purpose, the procedure + defined in Section 5.13 must be followed. + +5.16. Polling + + When requested to poll a specified registration that is in the + Passive state, the bundle protocol agent must immediately deliver the + least recently received bundle that is deliverable subject to the + indicated registration, if any. + + + + + + +Scott & Burleigh Experimental [Page 36] + +RFC 5050 Bundle Protocol Specification November 2007 + + +6. Administrative Record Processing + +6.1. Administrative Records + + Administrative records are standard application data units that are + used in providing some of the features of the Bundle Protocol. Two + types of administrative records have been defined to date: bundle + status reports and custody signals. + + Every administrative record consists of a four-bit record type code + followed by four bits of administrative record flags, followed by + record content in type-specific format. Record type codes are + defined as follows: + + +---------+--------------------------------------------+ + | Value | Meaning | + +=========+============================================+ + | 0001 | Bundle status report. | + +---------+--------------------------------------------+ + | 0010 | Custody signal. | + +---------+--------------------------------------------+ + | (other) | Reserved for future use. | + +---------+--------------------------------------------+ + + Figure 8: Administrative Record Type Codes + + + +---------+--------------------------------------------+ + | Value | Meaning | + +=========+============================================+ + | 0001 | Record is for a fragment; fragment | + | | offset and length fields are present. | + +---------+--------------------------------------------+ + | (other) | Reserved for future use. | + +---------+--------------------------------------------+ + + Figure 9: Administrative Record Flags + + All time values in administrative records are UTC times expressed in + "DTN time" representation. A DTN time consists of an SDNV indicating + the number of seconds since the start of the year 2000, followed by + an SDNV indicating the number of nanoseconds since the start of the + indicated second. + + The contents of the various types of administrative records are + described below. + + + + + +Scott & Burleigh Experimental [Page 37] + +RFC 5050 Bundle Protocol Specification November 2007 + + +6.1.1. Bundle Status Reports + + The transmission of 'bundle status reports' under specified + conditions is an option that can be invoked when transmission of a + bundle is requested. These reports are intended to provide + information about how bundles are progressing through the system, + including notices of receipt, custody transfer, forwarding, final + delivery, and deletion. They are transmitted to the Report-to + endpoints of bundles. + + +----------------+----------------+----------------+----------------+ + | Status Flags | Reason code | Fragment offset (*) (if + +----------------+----------------+----------------+----------------+ + present) | Fragment length (*) (if present) | + +----------------+----------------+----------------+----------------+ + | Time of receipt of bundle X (a DTN time, if present) | + +----------------+----------------+----------------+----------------+ + | Time of custody acceptance of bundle X (a DTN time, if present) | + +----------------+----------------+----------------+----------------+ + | Time of forwarding of bundle X (a DTN time, if present) | + +----------------+----------------+----------------+----------------+ + | Time of delivery of bundle X (a DTN time, if present) | + +----------------+----------------+----------------+----------------+ + | Time of deletion of bundle X (a DTN time, if present) | + +----------------+----------------+----------------+----------------+ + | Copy of bundle X's Creation Timestamp time (*) | + +----------------+----------------+----------------+----------------+ + | Copy of bundle X's Creation Timestamp sequence number (*) | + +----------------+----------------+----------------+----------------+ + | Length of X's source endpoint ID (*) | Source + +----------------+---------------------------------+ + + endpoint ID of bundle X (variable) | + +----------------+----------------+----------------+----------------+ + + Figure 10: Bundle Status Report Format + + (*) Notes: + + The Fragment Offset field, if present, is an SDNV and is therefore + variable length. A three-octet SDNV is shown here for convenience in + representation. + + The Fragment Length field, if present, is an SDNV and is therefore + variable length. A three-octet SDNV is shown here for convenience in + representation. + + + + + + +Scott & Burleigh Experimental [Page 38] + +RFC 5050 Bundle Protocol Specification November 2007 + + + The Creation Timestamp fields replicate the Creation Timestamp fields + in the primary block of the subject bundle. As such they are SDNVs + (see Section 4.5.1 above) and are therefore variable length. Four- + octet SDNVs are shown here for convenience in representation. + + The source endpoint ID length field is an SDNV and is therefore + variable length. A three-octet SDNV is shown here for convenience in + representation. + + The fields in a bundle status report are: + + Status Flags: A 1-byte field containing the following flags: + + +----------+--------------------------------------------+ + | Value | Meaning | + +==========+============================================+ + | 00000001 | Reporting node received bundle. | + +----------+--------------------------------------------+ + | 00000010 | Reporting node accepted custody of bundle.| + +----------+--------------------------------------------+ + | 00000100 | Reporting node forwarded the bundle. | + +----------+--------------------------------------------+ + | 00001000 | Reporting node delivered the bundle. | + +----------+--------------------------------------------+ + | 00010000 | Reporting node deleted the bundle. | + +----------+--------------------------------------------+ + | 00100000 | Unused. | + +----------+--------------------------------------------+ + | 01000000 | Unused. | + +----------+--------------------------------------------+ + | 10000000 | Unused. | + +----------+--------------------------------------------+ + + Figure 11: Status Flags for Bundle Status Reports + + Reason Code: A 1-byte field explaining the value of the flags in + the status flags byte. The list of status report reason codes + provided here is neither exhaustive nor exclusive; supplementary + DTN protocol specifications (including, but not restricted to, the + Bundle Security Protocol [BSP]) may define additional reason + codes. Status report reason codes are defined as follows: + + + + + + + + + + +Scott & Burleigh Experimental [Page 39] + +RFC 5050 Bundle Protocol Specification November 2007 + + + +---------+--------------------------------------------+ + | Value | Meaning | + +=========+============================================+ + | 0x00 | No additional information. | + +---------+--------------------------------------------+ + | 0x01 | Lifetime expired. | + +---------+--------------------------------------------+ + | 0x02 | Forwarded over unidirectional link. | + +---------+--------------------------------------------+ + | 0x03 | Transmission canceled. | + +---------+--------------------------------------------+ + | 0x04 | Depleted storage. | + +---------+--------------------------------------------+ + | 0x05 | Destination endpoint ID unintelligible. | + +---------+--------------------------------------------+ + | 0x06 | No known route to destination from here. | + +---------+--------------------------------------------+ + | 0x07 | No timely contact with next node on route.| + +---------+--------------------------------------------+ + | 0x08 | Block unintelligible. | + +---------+--------------------------------------------+ + | (other) | Reserved for future use. | + +---------+--------------------------------------------+ + + Figure 12: Status Report Reason Codes + + Fragment Offset: If the bundle fragment bit is set in the status + flags, then the offset (within the original application data unit) + of the payload of the bundle that caused the status report to be + generated is included here. + + Fragment length: If the bundle fragment bit is set in the status + flags, then the length of the payload of the subject bundle is + included here. + + Time of Receipt (if present): If the bundle-received bit is set in + the status flags, then a DTN time indicating the time at which the + bundle was received at the reporting node is included here. + + Time of Custody Acceptance (if present): If the custody-accepted + bit is set in the status flags, then a DTN time indicating the + time at which custody was accepted at the reporting node is + included here. + + Time of Forward (if present): If the bundle-forwarded bit is set in + the status flags, then a DTN time indicating the time at which the + bundle was first forwarded at the reporting node is included here. + + + + +Scott & Burleigh Experimental [Page 40] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Time of Delivery (if present): If the bundle-delivered bit is set + in the status flags, then a DTN time indicating the time at which + the bundle was delivered at the reporting node is included here. + + Time of Deletion (if present): If the bundle-deleted bit is set in + the status flags, then a DTN time indicating the time at which the + bundle was deleted at the reporting node is included here. + + Creation Timestamp of Subject Bundle: A copy of the creation + timestamp of the bundle that caused the status report to be + generated. + + Length of Source Endpoint ID: The length in bytes of the source + endpoint ID of the bundle that caused the status report to be + generated. + + Source Endpoint ID text: The text of the source endpoint ID of the + bundle that caused the status report to be generated. + +6.1.2. Custody Signals + + Custody signals are administrative records that effect custody + transfer operations. They are transmitted to the endpoints that are + the current custodians of bundles. + + Custody signals have the following format. + + Custody signal regarding bundle 'X': + + +----------------+----------------+----------------+----------------+ + | Status | Fragment offset (*) (if present) | + +----------------+----------------+----------------+----------------+ + | Fragment length (*) (if present) | + +----------------+----------------+----------------+----------------+ + | Time of signal (a DTN time) | + +----------------+----------------+----------------+----------------+ + | Copy of bundle X's Creation Timestamp time (*) | + +----------------+----------------+----------------+----------------+ + | Copy of bundle X's Creation Timestamp sequence number (*) | + +----------------+----------------+----------------+----------------+ + | Length of X's source endpoint ID (*) | Source + +----------------+---------------------------------+ + + endpoint ID of bundle X (variable) | + +----------------+----------------+----------------+----------------+ + + Figure 13: Custody Signal Format + + + + + +Scott & Burleigh Experimental [Page 41] + +RFC 5050 Bundle Protocol Specification November 2007 + + + (*) Notes: + + The Fragment Offset field, if present, is an SDNV and is therefore + variable length. A three-octet SDNV is shown here for convenience in + representation. + + The Fragment Length field, if present, is an SDNV and is therefore + variable length. A four-octet SDNV is shown here for convenience in + representation. + + The Creation Timestamp fields replicate the Creation Timestamp fields + in the primary block of the subject bundle. As such they are SDNVs + (see Section 4.5.1 above) and are therefore variable length. Four- + octet SDNVs are shown here for convenience in representation. + + The source endpoint ID length field is an SDNV and is therefore + variable length. A three-octet SDNV is shown here for convenience in + representation. + + The fields in a custody signal are: + + Status: A 1-byte field containing a 1-bit "custody transfer + succeeded" flag followed by a 7-bit reason code explaining the + value of that flag. Custody signal reason codes are defined as + follows: + + + + + + + + + + + + + + + + + + + + + + + + + + +Scott & Burleigh Experimental [Page 42] + +RFC 5050 Bundle Protocol Specification November 2007 + + + +---------+--------------------------------------------+ + | Value | Meaning | + +=========+============================================+ + | 0x00 | No additional information. | + +---------+--------------------------------------------+ + | 0x01 | Reserved for future use. | + +---------+--------------------------------------------+ + | 0x02 | Reserved for future use. | + +---------+--------------------------------------------+ + | 0x03 | Redundant reception (reception by a node | + | | that is a custodial node for this bundle).| + +---------+--------------------------------------------+ + | 0x04 | Depleted storage. | + +---------+--------------------------------------------+ + | 0x05 | Destination endpoint ID unintelligible. | + +---------+--------------------------------------------+ + | 0x06 | No known route to destination from here. | + +---------+--------------------------------------------+ + | 0x07 | No timely contact with next node on route.| + +---------+--------------------------------------------+ + | 0x08 | Block unintelligible. | + +---------+--------------------------------------------+ + | (other) | Reserved for future use. | + +---------+--------------------------------------------+ + + Figure 14: Custody Signal Reason Codes + + Fragment offset: If the bundle fragment bit is set in the status + flags, then the offset (within the original application data unit) + of the payload of the bundle that caused the status report to be + generated is included here. + + Fragment length: If the bundle fragment bit is set in the status + flags, then the length of the payload of the subject bundle is + included here. + + Time of Signal: A DTN time indicating the time at which the signal + was generated. + + Creation Timestamp of Subject Bundle: A copy of the creation + timestamp of the bundle to which the signal applies. + + Length of Source Endpoint ID: The length in bytes of the source + endpoint ID of the bundle to which the signal applied. + + + + + + + +Scott & Burleigh Experimental [Page 43] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Source Endpoint ID text: The text of the source endpoint ID of the + bundle to which the signal applies. + +6.2. Generation of Administrative Records + + Whenever the application agent's administrative element is directed + by the bundle protocol agent to generate an administrative record + with reference to some bundle, the following procedure must be + followed: + + Step 1: The administrative record must be constructed. If the + referenced bundle is a fragment, the administrative record must + have the Fragment flag set and must contain the fragment offset + and fragment length fields. The value of the fragment offset + field must be the value of the referenced bundle's fragment + offset, and the value of the fragment length field must be the + length of the referenced bundle's payload. + + Step 2: A request for transmission of a bundle whose payload is + this administrative record must be presented to the bundle + protocol agent. + +6.3. Reception of Custody Signals + + For each received custody signal that has the "custody transfer + succeeded" flag set to 1, the administrative element of the + application agent must direct the bundle protocol agent to follow the + custody transfer success procedure in Section 5.11. + + For each received custody signal that has the "custody transfer + succeeded" flag set to 0, the administrative element of the + application agent must direct the bundle protocol agent to follow the + custody transfer failure procedure in Section 5.12. + +7. Services Required of the Convergence Layer + +7.1. The Convergence Layer + + The successful operation of the end-to-end bundle protocol depends on + the operation of underlying protocols at what is termed the + "convergence layer"; these protocols accomplish communication between + nodes. A wide variety of protocols may serve this purpose, so long + as each convergence layer protocol adapter provides a defined minimal + set of services to the bundle protocol agent. This convergence layer + service specification enumerates those services. + + + + + + +Scott & Burleigh Experimental [Page 44] + +RFC 5050 Bundle Protocol Specification November 2007 + + +7.2. Summary of Convergence Layer Services + + Each convergence layer protocol adapter is expected to provide the + following services to the bundle protocol agent: + + o sending a bundle to all bundle nodes in the minimum reception + group of the endpoint identified by a specified endpoint ID that + are reachable via the convergence layer protocol; and + + o delivering to the bundle protocol agent a bundle that was sent by + a remote bundle node via the convergence layer protocol. + + The convergence layer service interface specified here is neither + exhaustive nor exclusive. That is, supplementary DTN protocol + specifications (including, but not restricted to, the Bundle Security + Protocol [BSP]) may expect convergence layer adapters that serve BP + implementations conforming to those protocols to provide additional + services. + +8. Security Considerations + + The bundle protocol has taken security into concern from the outset + of its design. It was always assumed that security services would be + needed in the use of the bundle protocol. As a result, the bundle + protocol security architecture and the available security services + are specified in an accompanying document, the Bundle Security + Protocol specification [BSP]; an informative overview of this + architecture is provided in [SECO]. + + The bundle protocol has been designed with the notion that it will be + run over networks with scarce resources. For example, the networks + might have limited bandwidth, limited connectivity, constrained + storage in relay nodes, etc. Therefore, the bundle protocol must + ensure that only those entities authorized to send bundles over such + constrained environments are actually allowed to do so. All + unauthorized entities should be prevented from consuming valuable + resources. + + Likewise, because of the potentially long latencies and delays + involved in the networks that make use of the bundle protocol, data + sources should be concerned with the integrity of the data received + at the intended destination(s) and may also be concerned with + ensuring confidentiality of the data as it traverses the network. + Without integrity, the bundle payload data might be corrupted while + in transit without the destination able to detect it. Similarly, the + data source can be concerned with ensuring that the data can only be + used by those authorized, hence the need for confidentiality. + + + + +Scott & Burleigh Experimental [Page 45] + +RFC 5050 Bundle Protocol Specification November 2007 + + + Internal to the bundle-aware overlay network, the bundle nodes should + be concerned with the authenticity of other bundle nodes as well as + the preservation of bundle payload data integrity as it is forwarded + between bundle nodes. + + As a result, bundle security is concerned with the authenticity, + integrity, and confidentiality of bundles conveyed among bundle + nodes. This is accomplished via the use of three independent + security-specific bundle blocks, which may be used together to + provide multiple bundle security services or independently of one + another, depending on perceived security threats, mandated security + requirements, and security policies that must be enforced. + + The Bundle Authentication Block (BAB) ensures the authenticity and + integrity of bundles on a hop-by-hop basis between bundle nodes. The + BAB allows each bundle node to verify a bundle's authenticity before + processing or forwarding the bundle. In this way, entities that are + not authorized to send bundles will have unauthorized transmissions + blocked by security-aware bundle nodes. + + Additionally, to provide "security-source" to "security-destination" + bundle authenticity and integrity, the Payload Security Block (PSB) + is used. A "security-source" may not actually be the origination + point of the bundle but instead may be the first point along the path + that is security-aware and is able to apply security services. For + example, an enclave of networked systems may generate bundles but + only their gateway may be required and/or able to apply security + services. The PSB allows any security-enabled entity along the + delivery path, in addition to the "security-destination" (the + recipient counterpart to the "security-source"), to ensure the + bundle's authenticity. + + Finally, to provide payload confidentiality, the use of the + Confidentiality Block (CB) is available. The bundle payload may be + encrypted to provide "security-source" to "security-destination" + payload confidentiality/privacy. The CB indicates the cryptographic + algorithm and key IDs that were used to encrypt the payload. + + Note that removal of strings from the dictionary at a given point in + a bundle's end-to-end path, and attendant adjustment of endpoint ID + references in the blocks of that bundle, may make it necessary to re- + compute values in one or more of the bundle's security blocks. + + Bundle security must not be invalidated by forwarding nodes even + though they themselves might not use the Bundle Security Protocol. + In particular, the sequencing of the blocks in a forwarded bundle + must not be changed as it transits a node; received blocks must be + transmitted in the same relative order as that in which they were + + + +Scott & Burleigh Experimental [Page 46] + +RFC 5050 Bundle Protocol Specification November 2007 + + + received. While blocks may be added to bundles as they transit + intermediate nodes, removal of blocks that do not have their 'Discard + block if it can't be processed' flag in the block processing control + flags set to 1 may cause security to fail. + + Inclusion of the Bundle Security Protocol in any Bundle Protocol + implementation is RECOMMENDED. Use of the Bundle Security Protocol + in Bundle Protocol operations is OPTIONAL. + +9. IANA Considerations + + The "dtn:" URI scheme has been provisionally registered by IANA. See + http://www.iana.org/assignments/uri-schemes.html for the latest + details. + +10. References + +10.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [URI] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", RFC 3986, + STD 66, January 2005. + + [URIREG] Hansen, T., Hardie, T., and L. Masinter, "Guidelines and + Registration Procedures for New URI Schemes", RFC 4395, + BCP 115, February 2006. + +10.2. Informative References + + [ARCH] V. Cerf et. al., "Delay-Tolerant Network Architecture", + RFC 4838, April 2007. + + [ASN1] "Abstract Syntax Notation One (ASN.1), "ASN.1 Encoding + Rules: Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished Encoding + Rules (DER)," ITU-T Rec. X.690 (2002) | ISO/IEC 8825- + 1:2002", 2003. + + [BSP] Symington, S., "Bundle Security Protocol Specification", + Work Progress, October 2007. + + [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource + Identifiers (IRIs)", RFC 3987, January 2005. + + + + + +Scott & Burleigh Experimental [Page 47] + +RFC 5050 Bundle Protocol Specification November 2007 + + + [SECO] Farrell, S., Symington, S., Weiss, H., and P. Lovell, + "Delay-Tolerant Networking Security Overview", + Work Progress, July 2007. + + [SIGC] Fall, K., "A Delay-Tolerant Network Architecture for + Challenged Internets", SIGCOMM 2003 . + + [TUT] Warthman, F., "Delay-Tolerant Networks (DTNs): A + Tutorial", <http://www.dtnrg.org>. + + [UTC] Arias, E. and B. Guinot, ""Coordinated universal time UTC: + historical background and perspectives" in Journees + systemes de reference spatio-temporels", 2004. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Scott & Burleigh Experimental [Page 48] + +RFC 5050 Bundle Protocol Specification November 2007 + + +Appendix A. Contributors + + This was an effort of the Delay Tolerant Networking Research Group. + The following DTNRG participants contributed significant technical + material and/or inputs: Dr. Vinton Cerf of Google, Scott Burleigh, + Adrian Hooke, and Leigh Torgerson of the Jet Propulsion Laboratory, + Michael Demmer of the University of California at Berkeley, Robert + Durst, Keith Scott, and Susan Symington of The MITRE Corporation, + Kevin Fall of Intel Research, Stephen Farrell of Trinity College + Dublin, Peter Lovell of SPARTA, Inc., Manikantan Ramadas of Ohio + University (most of Section 4.1), and Howard Weiss of SPARTA, Inc. + (text of Section 8). + +Appendix B. Comments + + Please refer comments to dtn-interest@mailman.dtnrg.org. The Delay + Tolerant Networking Research Group (DTNRG) Web site is located at + http://www.dtnrg.org. + +Authors' Addresses + + Keith L. Scott + The MITRE Corporation + 7515 Colshire Drive + McLean, VA 21102 + US + + Phone: +1 703 983 6547 + Fax: +1 703 983 7142 + EMail: kscott@mitre.org + + + Scott Burleigh + NASA Jet Propulsion Laboratory + 4800 Oak Grove Dr. + Pasadena, CA 91109-8099 + US + + Phone: +1 818 393 3353 + Fax: +1 818 354 1075 + EMail: Scott.Burleigh@jpl.nasa.gov + + + + + + + + + + +Scott & Burleigh Experimental [Page 49] + +RFC 5050 Bundle Protocol Specification November 2007 + + +Full Copyright Statement + + Copyright (C) The IETF Trust (2007). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78 and at www.rfc-editor.org/copyright.html, and + except as set forth therein, the authors retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND + THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights 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; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat 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 implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at + ietf-ipr@ietf.org. + + + + + + + + + + + + +Scott & Burleigh Experimental [Page 50] + |