<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" docName="draft-blanchet-dtn-bp-application-framework-00" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
  <front>
    <title abbrev="Bundle Protocol Application Framework">Delay-Tolerant Networking (DTN) Bundle Protocol Application Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-blanchet-dtn-bp-application-framework-00"/>
    <author initials="M." surname="Blanchet" fullname="Marc Blanchet">
      <organization>Viagenie</organization>
      <address>
        <email>Marc.Blanchet@viagenie.ca</email>
        <uri>http://viagenie.ca</uri>
      </address>
    </author>
    <abstract>
      <t>The current Bundle Protocol specifications define the syntax of service identifiers but do not identify how to make them interoperable. For example, there are currently no way to map a service identifier to a specific Bundle payload format for an application agent. This document proposes an application framework enabling interoperable implementations and deployments of the Bundle Protocol. It also creates a service identifier registry for the Bundle Protocol. Warning: this draft was initially done in 2012 against RFC5050 in DTNRG; some parts may need to be updated.</t>
    </abstract>
  </front>
  <middle>
    <section>
      <name>Problem Statement</name>
      <section>
        <name>No BP Payload Format Standardization</name>
        <t>The Bundle Protocol (BP) <xref target="RFC5050"/> specifies how to carry bundles over a delay and disruption tolerant network. Up to now, the various BP implementations have defined their own payload format for the applications they support, without any specification. Therefore, between two implementations, there is no garantee that the payloads will be properly processed. This prohibits interoperability between application agents of the various implementations.</t>
      </section>
      <section>
        <name>No Service Identifier Centralized Assignments</name>
        <t>The Bundle Protocol <xref target="RFC5050"/> uses Endpoint Identifiers to specify the destination of the bundles. Up to now, two types of identifiers have been defined:
</t>
        <ul spacing="normal">
          <li>dtn: uri scheme defined in <xref target="RFC5050"/></li>
          <li>ipn scheme defined in <xref target="RFC6260"/> using the CBHE extension header</li>
        </ul>
        <t> Both schemes syntax carry the service identifier so that the bundle payload is sent to the right application agent and that application agent knows how to process it. Up to now, no definition of these service identifiers exist, therefore, each implementation does not know to which application agent it should send the received bundle payload.</t>
      </section>
      <section>
        <name>Need for an Application Framework</name>
        <t>From the point of view of implementations and end-users, the service identifier shall be common to both types of identifiers and the payload format should be identical for the same service identifiers. Therefore, there is a need to normalize the service identifiers as well as the payload formats. This is similar to service and port numbers registry for IP protocols and applications protocols specifications.</t>
        <t>As with IP application protocols specifications, some applications require services at the IP layer, such as IPsec. In such cases, the application specification defines the usage and requirements of IPsec for carrying the application packets. Similarly, Bundle protocol applications may require specific bundle protocol services, such as custody, security, quality of service or else.</t>
        <t>This document defines a framework by which Bundle Protocol applications should be specified, what bundle services they require and a registry of service identifiers. All together, implementations will interoperate at the application level, instead of just at the bundle forwarding level. Moreover, deployments will be eased by normalized behaviors of BP protocol stacks and applications.</t>
      </section>
    </section>
    <section>
      <name>Bundle Protocol Application Framework</name>
      <t>The BP Application framework is specified as following:
      </t>
      <ul spacing="normal">
        <li>A requirement for BP application protocol specifications.</li>
        <li>A registry of BP service identifiers</li>
      </ul>
      <section>
        <name>Bundle Protocol Application Protocol Specification</name>
        <t>A BP application is defined by a protocol and a bundle payload format. When a BP  application protocol is specified in a document, it should be specified with the following information:
</t>
        <ul spacing="normal">
          <li>Bundle payload format</li>
          <li>Bundle services and extension headers required, such as security, custody or else. The context in which these services and extensions are used must be fully defined to enable interoperability between implementations.</li>
          <li>Service identifier for the dtn: scheme</li>
          <li>Service identifier for the ipn scheme</li>
          <li>Request to register the service identifiers in the registries described in this document.</li>
        </ul>
      </section>
      <section>
        <name>Service Identifier Syntax</name>
        <t>While the generic syntax of the dtn: uri is defined, the usage up to now in trials, deployments and implementations has been dtn:node_identifier/service_identifier. For the ipn scheme, the syntax is ipn:node_identifier.service_identifier.  This document registers the service_identifier part values but makes no recommendation on the node identifier part.</t>
      </section>
      <section>
        <name>Bundle Protocol Service Identifiers Registry</name>
        <t>For implementations and for interoperability between various BP network deployments, it is highly preferable that the service identifiers are identical for all deployments and all implementations.</t>
        <t>This document requests IANA to create a registry for the service identifiers for both the ipn and the dtn: space. The common service identifiers will be identical for both schemes and for all deployments. The structure of the registry is:
</t>
        <ul spacing="normal">
          <li>
            <t>Structure (aka columns):
            </t>
            <ul spacing="normal">
              <li>dtn: service identifier. The dtn: service identifier syntax is defined in section 4.4 of <xref target="RFC5050"/>. </li>
              <li>ipn service identifier. The ipn service identifier syntax is defined in section 2.1 of <xref target="RFC6260"/>. </li>
              <li>Specification Reference: The referenced specification should describe the bundle payload content.</li>
            </ul>
          </li>
          <li>Service identifiers must be registered for both schemes at the same time. If it can not be done, the specification must detail why and the expert should review the rationale before accepting that registration.</li>
          <li>
            <t>Registration Policy:
            </t>
            <ul spacing="normal">
              <li>CCSDS book or IETF RFC required. Any other specification must be reviewed by an nominated expert.</li>
              <li>For ipn number space, the XX range is delegated to CCSDS registry service (SANA <eref target="http://sanaregistry.org"/>), therefore not allocated by IANA. In the registry, IANA should point this range to the corresponding SANA registry.</li>
            </ul>
          </li>
        </ul>
        <t>The registry should contain the following initial values:
</t>
        <ul spacing="normal">
          <li>dtn: service identifier "none" shall be assigned. The semantic is described in RFC5050</li>
          <li>ipn service identifier of value "0" shall be assigned for the same semantic as dtn:none</li>
          <li>Specification Reference: RFC5050</li>
          <li>Mandatory Bundle Protocol service: none.</li>
        </ul>
      </section>
      <section>
        <name>The Bundle Protocol Ping Service</name>
        <t>This section is requesting a registration for the above registry. It also serves as a simple example on how registration requests should be done.</t>
        <t>The Ping service is similar to the IP ICMP Echo request/reply service where a source node sends a simple query to the destination node and the destination node replies. 
  This helps troubleshooting the network and knowing if a node is reachable and up.</t>
        <t>The ping service has the following Bundle Protocol payload format: TBD.</t>
        <t>This document request the registration of the ping service in the above registry as follows:
</t>
        <ul spacing="normal">
          <li>dtn: service identifier "ping" shall be assigned to the ping service.</li>
          <li>ipn service identifier of value "1" shall be assigned to the ping service.</li>
          <li>Specification Reference: TBD.</li>
          <li>Mandatory Bundle Protocol service: none.</li>
        </ul>
      </section>
      <section>
        <name>CCSDS Reserved Range</name>
        <t>For the purpose of space networking, the <eref target="http://www.ccsds.org">CCSDS SDO</eref> needs service identifier assignments for its own deployments. 
    For the management of these assignments, registries for  the node and service identifier part of the 
  ipn scheme are managed by the CCSDS Registry Authority,  <eref target="http://sanaregistry.org">Space Assigned Number Authority (SANA)</eref>. 
  This CCSDS registry of node and service identifiers is specific to space networks. However, for implementations and for interoperability between various network deployments, 
  it is highly preferable that the service identifiers are identical for all deployments. Therefore, this document requests IANA to set aside a range of ipn service identifiers 
  to be used by CCSDS and managed by its registry authority SANA.</t>
      </section>
      <section>
        <name>Re-use of the IP Service Names and Transport Port Registry</name>
        <t>The IP Services Names and Port Registry (IPSNPR) is used to list the service and port identifiers for IP packets. Within some DTN deployments, 
  some IP protocols such as HTTP and SMTP have been transported inside the Bundle Protocol payloads. Some other DTN deployments are using non IETF protocols. 
  Therefore, there is some overlap but also some specific DTN applications. The number of IP protocols that will be carried directly as BP payloads are most likely very small, 
  and would not include the vast majority of the port numbers found in the IPSNPR. Therefore, it is proposed to start a new registry from scratch instead of 
  trying to overload or sync with the IPSNPR.
</t>
      </section>
    </section>
    <section>
      <name>Security Considerations</name>
      <t>Establishing a registry of service identifiers so that implementations and deployments can interoperate does not bring any specific security concerns and does not add any security.  As with the IP services and port registry, the existence of such registry have not brought any security concerns.</t>
    </section>
    <section>
      <name>IANA Considerations</name>
      <t>IANA is requested to create a registry as specified in this document.</t>
    </section>
    <section>
      <name>Acknowledgements</name>
      <t>The editor would like to thank the following people who have provided comments and suggestions to this document, in no specific order: Stephen Farrell, Keith Scott, Scott Burleigh.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC5050" target="https://www.rfc-editor.org/info/rfc5050" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5050.xml">
        <front>
          <title>Bundle Protocol Specification</title>
          <author fullname="K. Scott" initials="K." surname="Scott"/>
          <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
          <date month="November" year="2007"/>
          <abstract>
            <t>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).</t>
            <t>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. This memo defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5050"/>
        <seriesInfo name="DOI" value="10.17487/RFC5050"/>
      </reference>
      <reference anchor="RFC6260" target="https://www.rfc-editor.org/info/rfc6260" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6260.xml">
        <front>
          <title>Compressed Bundle Header Encoding (CBHE)</title>
          <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
          <date month="May" year="2011"/>
          <abstract>
            <t>This document describes a convention by which Delay-Tolerant Networking (DTN) Bundle Protocol (BP) "convergence-layer" adapters may represent endpoint identifiers in a compressed form within the primary blocks of bundles, provided those endpoint identifiers conform to the structure prescribed by this convention.</t>
            <t>Compressed Bundle Header Encoding (CBHE) compression is a convergence-layer adaptation. It is opaque to bundle processing. Therefore, it has no impact on the interoperability of different Bundle Protocol implementations, but instead affects only the interoperability of different convergence-layer adaptation implementations.</t>
            <t>This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group. No objections to its publication as an RFC were raised. This document defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6260"/>
        <seriesInfo name="DOI" value="10.17487/RFC6260"/>
      </reference>
    </references>
  </back>
</rfc>
