2804 lines
118 KiB
Plaintext
2804 lines
118 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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]
|
|||
|
|