<?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" ipr="trust200902" docName="draft-ietf-dtn-ipn-update-14" number="9758" category="std" consensus="true" submissionType="IETF" updates="6260, 7116, 9171" obsoletes="" tocInclude="true" sortRefs="true" symRefs="true" version="3" xml:lang="en">
  
  <front>
    <title abbrev="ipn Update">Updates to the 'ipn' URI Scheme</title>
    <seriesInfo name="RFC" value="9758"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    
    <author initials="E." surname="Birrane, III" fullname="Edward J. Birrane, III">
       <organization abbrev="JHU/APL" showOnFrontPage="true">The Johns Hopkins University Applied Physics Laboratory</organization>
      <address>
        <email>Edward.Birrane@jhuapl.edu</email>
      </address>
    </author>
    <date year="2025" month="May"/>
    <area>INT</area>
    <workgroup>dtn</workgroup>
    <keyword>DTN</keyword>
    <keyword>ipn</keyword>
    <keyword>BPv7</keyword>
    <keyword>CBHE</keyword>
    <keyword>Bundle Protocol</keyword>
    <abstract>
      <t>This document updates the specification of the 'ipn' URI scheme
      previously defined in RFC 6260 and the IANA registries established in RFC
      7116. It also updates the rules for the encoding and decoding of these URIs when
      used as an Endpoint Identifier (EID) in the Bundle Protocol version 7 (BPv7)
      as defined in RFC 9171. These updates clarify the structure and behavior
      of the 'ipn' URI scheme, define new encodings of 'ipn' scheme URIs, and
      establish the registries necessary to manage this scheme.</t>
    </abstract>
  </front>
  <middle>

<section anchor="introduction">
      <name>Introduction</name>

      <t>The 'ipn' URI scheme was originally defined in <xref target="RFC6260"/>
      and <xref target="RFC7116"/> as a way to identify network nodes and node
      services using concisely encoded integers that can be processed faster
      and with fewer resources than other verbose identifier schemes. The
      scheme was designed for use with the experimental Bundle Protocol
      version 6 (BPv6) <xref target="RFC5050"/>, and "IPN" was defined as an
      acronym for the term "InterPlanetary Network" in reference to its
      intended use for deep-space networking. Since then, the efficiency
      benefits of integer identifiers make 'ipn' scheme URIs useful for any
      network operating with limited power, bandwidth, and/or compute
      budget. Therefore, the term "IPN" is now used as a non-acronymous
      name.</t>

      <t>Similar to the experimental BPv6, the standardized Bundle Protocol
      version 7 (BPv7) <xref target="RFC9171"/> codifies support for the use
      of the 'ipn' URI scheme for the specification of bundle Endpoint
      Identifiers (EIDs). The publication of BPv7 has resulted in operational
      deployments of BPv7 nodes for both terrestrial and non-terrestrial use
      cases. This includes BPv7 networks operating over the terrestrial
      Internet and BPv7 networks operating in self-contained environments
      behind a shared administrative domain. The growth in the number and
      scale of deployments of BPv7 has been accompanied by a growth in the
      usage of the 'ipn' URI scheme, which has highlighted areas to improve the
      structure, moderation, and management of this scheme.</t>

      <t>By updating <xref target="RFC7116"/> and <xref target="RFC9171"/>,
      this document updates the specification of the 'ipn' URI scheme in a
      backwards-compatible way, in order to provide needed improvements both in the
      scheme itself and in its usage to specify EIDs with BPv7. Specifically,
      this document:</t>
      <ul>
	<li>introduces a hierarchical structure for the assignment of 'ipn' scheme URIs,</li>
	<li>clarifies the behavior and interpretation of 'ipn' scheme URIs,</li>
	<li>defines efficient encodings of 'ipn' scheme URIs, and</li>
	<li>updates/defines the registries associated with this scheme.</li>
      </ul>

      <t>Although originally developed by the deep-space community for use
      with the Bundle Protocol, the 'ipn' URI scheme is sufficiently generic to be
      used in other environments where a concise unique representation of a
      resource on a particular node is required.</t>

      <t>It is important to remember that, like most other URI schemes, the
      'ipn' URI scheme defines a unique identifier of a resource, and it does not
      include any topological information describing how to route messages to
      that resource.</t>
    </section>

    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
        <t>
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>

      <t>For the remainder of this document, the term "ipn URI" is used to refer to a URI that uses the 'ipn' URI scheme.</t>
    </section>
    <section anchor="core-concepts">
      <name>Core Concepts</name>
      <t>Every ipn URI, no matter whether it is expressed with a textual
      representation or a binary encoding, <bcp14>MUST</bcp14> be considered
      as a tuple of the following three components:</t>
      <ul spacing="normal">
        <li>
          <t>The Allocator Identifier</t>
        </li>
        <li>
          <t>The Node Number</t>
        </li>
        <li>
          <t>The Service Number</t>
        </li>
      </ul>

      <t>The Allocator Identifier indicates the entity responsible for
      assigning Node Numbers to individual resource nodes, maintaining
      uniqueness whilst avoiding the need for a single registry for all
      assigned Node Numbers. See <xref
      target="allocator-identifiers"/>.</t>

      <t>The Node Number is a shared identifier assigned to all ipn URIs for
      resources co-located on a single node. See <xref
      target="node-numbers"/>.</t>

      <t>The Service Number is an identifier to distinguish between resources
      on a given node. See <xref target="service-numbers"/>.</t>

      <t>The combination of these three components guarantees that every
      correctly constructed ipn URI uniquely identifies a single resource.
      Additionally, the combination of the Allocator Identifier and the Node
      Number provides a mechanism to uniquely identify the node on which a
      particular resource is expected to exist. See <xref
      target="fqnn"/>.</t>

      <section anchor="null-uri">
        <name>The Null ipn URI</name>
        <t>It has been found that there is value in defining a unique Null
        ipn URI to indicate "nowhere".  This ipn URI is termed the "Null ipn
        URI" and has all three components (the Allocator Identifier, Node Number,
        and Service Number) set to the value zero (0).  No resource identified
        by the Null ipn URI exists, and any destination identified by such a
        resource is therefore by definition unreachable.</t>
      </section>

      <section anchor="allocator-identifiers">
        <name>Allocator Identifiers</name>
        <t>An Allocator is any organization that wishes to assign Node Numbers
        for use with the 'ipn' URI scheme and has the facilities and governance
        to manage a public registry of assigned Node Numbers. The
        authorization to assign these numbers is provided through the
        assignment of an Allocator Identifier by IANA.  Regardless of other
        attributes of an Allocator (such as a name, point of contact, or other
        identifying information), Allocators are identified by Allocator
        Identifiers: unique, unsigned integers in the range 0 to
        2<sup>32-1</sup>.</t>

        <t>The Allocator Identifier <bcp14>MUST</bcp14> be the sole mechanism
        used to identify the Allocator that has assigned the Node Number in an
        ipn URI. An Allocator may have multiple assigned Allocator
        Identifiers, but a given Allocator Identifier <bcp14>MUST</bcp14> only
        be associated with a single Allocator.</t>

        <t>A new IANA registry, "'ipn' Scheme URI Allocator Identifiers", is
        defined for the registration of Allocator Identifiers; see <xref
        target="iana-allocator-identifiers"/>.  Although the uniqueness of Allocator
        Identifiers is required to enforce the uniqueness of ipn URIs, some
        identifiers are explicitly reserved for experimentation or future
        use.</t>

        <t>Each Allocator assigns Node Numbers according to its own policies,
        without risk of creating an identical ipn URI, as permitted by the
        rules in <xref target="node-numbers"/>.
	Other than ensuring that any Node Numbers it
        allocates are unique amongst all Node Numbers it assigns, an Allocator
        does not need to coordinate its allocations with other Allocators.</t>

        <t>If a system does not require interoperable deployment of 'ipn' scheme
        URIs, then the Private Use Node
        Numbers range (<xref target="private-use"/>), reserved by the Default
	Allocator (<xref target="default-allocator"/>) for this purpose,
        is to be used.</t>

        <section anchor="allocator-identifier-ranges">
          <name>Allocator Identifier Ranges</name>

          <t>Some organizations with internal hierarchies may wish to delegate
          the allocation of Node Numbers to one or more of their
          sub-organizations.  Rather than assigning unique Allocator
          Identifiers to each sub-organization on a first-come, first-served
          basis, there are operational benefits in assigning Allocator
          Identifiers to such an organization in a structured way.  This allows
          an external observer to detect that a group of Allocator Identifiers
          is organizationally associated.</t>

          <t>An Allocator Identifier range is a set of consecutive Allocator
          Identifiers associated with the same Allocator. Each individual
          Allocator Identifier in a given range <bcp14>SHOULD</bcp14> be
          assigned to a distinct sub-organization of the Allocator. Assigning
          identifiers in this way allows external observers to both associate
          individual Allocator Identifiers with a single organization and
          usefully differentiate amongst sub-organizations.</t>

          <t>The practice of associating a consecutive range of numbers with a
          single organization is inspired by the Classless Inter-Domain
          Routing (CIDR) assignment of Internet addresses described in <xref
          target="RFC4632"/>. In that assignment scheme, an organization (such
          as an Internet Service Provider (ISP)) is assigned a network prefix such
          that all addresses sharing that same prefix are considered to be
          associated with that organization.</t>

          <t>Each Allocator Identifier range is identified by the first
          Allocator Identifier in the range and the number of consecutive
          identifiers in the range.</t>

          <t>Allocator Identifier ranges differ from CIDR addresses in two important ways:</t>
          <ol spacing="normal" type="1">
	    <li>
              <t>Allocator Identifiers are used to identify organizations and are not, themselves, addresses.</t>
            </li>
            <li>
              <t>Allocator Identifiers may be less than 32 bits in length.</t>
            </li>
          </ol>

          <t>In order to differentiate between Allocator Identifier ranges
          using efficient bitwise operations, all ranges <bcp14>MUST</bcp14>
          be of a size S that is a power of 2, and for a given range of length
          N bits, with S = 2<sup>N</sup>, the least-significant N bits of the
          first Allocator Identifier <bcp14>MUST</bcp14> be all 0.</t>

          <t>An example of the use of Allocator Identifier ranges for four
          organizations (A, B, C, and D) is as follows:</t>

          <table align="center" anchor="tab-air-example">
            <name>Allocator Identifier Range Assignment Example</name>
            <thead>
              <tr>
                <th align="left">Organization</th>
                <th align="left">Range (dec)</th>
                <th align="left">Range (hex)</th>
                <th align="left">Range Length (Bits)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Org A</td>
                <td align="left">974848 .. 974975</td>
                <td align="left">0xEE000 .. 0xEE07F</td>
                <td align="left">7 bits</td>
              </tr>
              <tr>
                <td align="left">Org B</td>
                <td align="left">974976 .. 974991</td>
                <td align="left">0xEE080 .. 0xEE08F</td>
                <td align="left">4 bits</td>
              </tr>
              <tr>
                <td align="left">Org C</td>
                <td align="left">974992 .. 974993</td>
                <td align="left">0xEE090 .. 0xEE091</td>
                <td align="left">1 bit</td>
              </tr>
              <tr>
                <td align="left">Org D</td>
                <td align="left">974994</td>
                <td align="left">0xEE092</td>
                <td align="left">0 bits</td>
              </tr>
            </tbody>
          </table>
          <t>With these assignments, any Allocator Identifier whose
          most-significant 25 bits match 0xEE000 belong to organization
          A. Similarly, any Allocator Identifier whose most-significant 28
          bits match 0xEE080 belong to organization B, and any Allocator
          Identifier whose most-significant 31 bits are 0xEE090 belong to
          organization C.  Organization D has a single Allocator Identifier,
          and hence a range of bit-length 0.</t>
        </section>

        <section anchor="default-allocator">
          <name>The Default Allocator</name>

          <t>As of the publication of <xref target="RFC7116"/>, the only
          organization permitted to assign Node Numbers was the Internet
          Assigned Numbers Authority (IANA), which assigned Node Numbers via
          the "CBHE Node Numbers" registry. This means that all ipn URIs
          created prior to the addition of Allocator Identifiers are assumed
          to have Node Number allocations that comply with the "CBHE Node
          Numbers" registry.</t>

          <t>The presumption that Node Numbers
          are allocated by IANA from a specific registry, unless otherwise specified, 
          is formalized in this
          update to the 'ipn' URI scheme by designating IANA as the Default
          Allocator and by assigning the Allocator Identifier zero (0) in the
          "'ipn' Scheme URI Allocator Identifiers" registry
	  (<xref target="iana-allocator-identifiers"/>) to the Default Allocator.
	  In any case
          where an encoded ipn URI does not explicitly include an Allocator
          Identifier, an implementation <bcp14>MUST</bcp14> assume that the
          Node Number has been allocated by the Default Allocator.</t>

          <t>A new IANA registry, "'ipn' Scheme URI Default Allocator Node
          Numbers", is defined to control the allocation of Node Number
          values by the Default Allocator.  This new registry inherits
          behaviors and existing assignments from the "CBHE Node Numbers"
          registry, and it reserves some other values as defined in <xref
          target="special-node-numbers"/>
          below.</t>
        </section>
      </section>

      <section anchor="node-numbers">
        <name>Node Numbers</name>
        <t>A Node Number identifies a node that hosts a resource in the
        context of an Allocator. A Node Number is an unsigned integer. A
        single Node Number assigned by a single Allocator <bcp14>MUST</bcp14>
        refer to a single node.</t>

        <t>All Node Number assignments, by all Allocators, <bcp14>MUST</bcp14>
        be in the range 0 to 2<sup>32-1</sup>.</t>

        <t>It is <bcp14>RECOMMENDED</bcp14> that Node Number zero (0) not be
        assigned by an Allocator to avoid confusion with the Null ipn URI (<xref
        target="null-uri"/>).</t>

        <section anchor="fqnn">
          <name>Fully Qualified Node Numbers</name>
          <t>One of the advantages of ipn URIs is the ability to easily split
          the identity of a particular service from the node upon which the
          service exists.  For example, a message received from one particular
          ipn URI may require a response to be sent to a different service on
          the same node that sent the original message.  Historically, the
          identifier of the sending node has been colloquially referred to as
          the "node number" or "node identifier".</t>

          <t>To avoid future confusion, when referring to the identifier of a
          particular node, the term "Fully Qualified Node Number" (FQNN)
          <bcp14>MUST</bcp14> be used to refer to the combination of the Node
          Number component and Allocator Identifier component of an ipn URI
          that uniquely identifies a particular node.  In other words, an FQNN
          is the unique identifier of a particular node that supports services
          identified by ipn URIs.</t>

          <t>In the examples in this document, FQNNs are written as (Allocator
          Identifier, Node Number). For example, <tt>(977000,100)</tt> is the FQNN
          for a node assigned Node Number 100 by an Allocator with Allocator
          Identifier 977000.</t>
        </section>
      </section>

      <section anchor="special-node-numbers">
        <name>Special Node Numbers</name>
        <t>Some special-case Node Numbers are defined by the Default
        Allocator; see <xref target="iana-node-numbers"/>.</t>

        <section anchor="the-zero-node-number">
          <name>The Zero Node Number</name>
          <t>The Default Allocator assigns the use of Node Number zero (0)
          solely for identifying the Null ipn
          URI (<xref target="null-uri"/>).</t>
          <t>This means that any ipn URI with a zero (0) Allocator Identifier
          and a zero (0) Node Number, but a non-zero Service Number component,
          is invalid.  Such ipn URIs <bcp14>MUST NOT</bcp14> be composed, and
          processors of such ipn URIs <bcp14>MUST</bcp14> consider them as the
          Null ipn URI.</t>
        </section>

        <section anchor="localnode-uri">
          <name>LocalNode ipn URIs</name>
          <t>The Default Allocator reserves Node Number 2<sup>32-1</sup>
          (0xFFFFFFFFF) to specify resources on the local node, rather than on
          any specific individual node.</t>
          <t>This means that any ipn URI with a zero (0) Allocator Identifier
          and a Node Number of 2<sup>32-1</sup> refers to a service on the
          local bundle node. This form of ipn URI is termed a "LocalNode ipn
          URI".</t>
        </section>

        <section anchor="private-use">
          <name>Private Use Node Numbers</name>
          <t>The Default Allocator provides a range of Node Numbers that are
          reserved for Private Use, as defined in <xref
          target="RFC8126"/>.</t>
          <t>Any ipn URI with a zero (0) Allocator Identifier and a Node
          Number reserved for Private Use is not guaranteed to be unique
          beyond a single administrative domain.  An administrative domain, as
          used here, is defined as the set of nodes that share a unique
          allocation of FQNNs from the Private Use range.  These FQNNs can
          be considered to be functionally similar to private address space
          IPv4 addresses, as defined in <xref target="RFC1918"/>.</t>
          <t>Because of this lack of uniqueness, any implementation of a
          protocol using ipn URIs that resides on the border between
          administrative domains <bcp14>MUST</bcp14> have suitable mechanisms
          in place to prevent protocol units using such Private Use Node
          Numbers to cross between different administrative domains.</t>
        </section>
      </section>

      <section anchor="service-numbers">
        <name>Service Numbers</name>
        <t>A Service Number is an unsigned integer that identifies a
        particular service operating on a node.  A service in this case is
        some logical function that requires its own resource identifier to
        distinguish it from other functions operating on the same node.</t>
      </section>
    </section>

    <section anchor="textual-representation-of-ipn-uris">
      <name>Textual Representation of ipn URIs</name>

      <t>All 'ipn' scheme URIs comply with <xref target="RFC3986"/> and are
      therefore represented by a scheme identifier and a scheme-specific part.
      The scheme identifier is <tt>ipn</tt>, and the scheme-specific parts
      are represented as a sequence of numeric components separated with the
      '<tt>.</tt>' character.  A formal definition is provided below (see
      <xref target="text-syntax"/>) and can be
      informally considered as:</t>

      <artwork><![CDATA[
ipn:[<allocator-identifier>.]<node-number>.<service-number>
]]></artwork>

      <t>To keep the text representation concise, the following rules apply:</t>
      <ol spacing="normal" type="1">
	<li>
          <t>All leading '<tt>0</tt>' characters <bcp14>MUST</bcp14> be
          omitted. A single '<tt>0</tt>' is valid.</t>
        </li>
        <li>
          <t>If the Allocator Identifier is zero (0), then the
          <tt>&lt;allocator-identifier&gt;</tt> and '<tt>.</tt>'
          <bcp14>MAY</bcp14> be omitted.</t>
        </li>
        <li>
          <t>If the Allocator Identifier is zero (0), and the Node Number is
          2<sup>32-1</sup> (i.e., the URI is a LocalNode ipn URI (<xref
          target="localnode-uri"/>)), then the character
          '<tt>!</tt>' <bcp14>SHOULD</bcp14> be used instead of the digits
          <tt>4294967295</tt>, although both forms are valid encodings.</t>
        </li>
      </ol>

      <t>Examples of the textual representation of ipn URIs can be found in
      <xref target="text-examples"/>.</t>

      <section anchor="text-syntax">
        <name>'ipn' URI Scheme Text Syntax</name>

        <t>The text syntax of an ipn URI <bcp14>MUST</bcp14> comply with the
        following ABNF syntax from <xref target="RFC5234"/> and repeats the
        core ABNF syntax rule for DIGIT defined by that specification:</t>

        <sourcecode type="abnf"><![CDATA[
ipn-uri = "ipn:" ipn-hier-part

ipn-hier-part = fqnn "." service-number

fqnn = "!" / allocator-part

allocator-part = [allocator-identifier "."] node-number

allocator-identifier = number

node-number = number

service-number = number

number = "0" / non-zero-number

non-zero-number = (%x31-39 *DIGIT)

DIGIT = %x30-39
]]></sourcecode>

      </section>
    </section>

    <section anchor="usage-of-ipn-uris-with-bpv7">
      <name>Usage of ipn URIs with BPv7</name>
      
     <t>From the earliest days of experimentation with the Bundle Protocol,
      there has been a need to identify the source and destination of a
      bundle.  The IRTF BPv6 experimental specification <xref target="RFC5050"/> termed the logical
      source or destination of a bundle as an "Endpoint" identified by an
      "Endpoint Identifier" (EID). BPv6 EIDs are formatted as URIs. This
      definition and representation of EIDs was carried forward from the IRTF
      BPv6 specification <xref target="RFC5050"/> to the IETF BPv7 specification <xref target="RFC9171"/>. <xref target="RFC9171"/> additionally
      defined an IANA registry called the "Bundle Protocol URI Scheme Types"
      registry, which identifies those URI schemes that might be used to
      represent EIDs.  The 'ipn' URI scheme is one such URI scheme.</t>
      <t>This section identifies the behavior and interpretation of 'ipn' scheme
      URIs that <bcp14>MUST</bcp14> be followed when using this URI scheme to
      represent EIDs in BPv7. An ipn URI used as a BPv7 or BPv6 EID is termed
      an "ipn EID".</t>

      <section anchor="uniqueness-constraints">
        <name>Uniqueness Constraints</name>
        <t>An ipn EID <bcp14>MUST</bcp14> identify a singleton endpoint. The
        bundle processing node that is the sole member of that endpoint
        <bcp14>MUST</bcp14> be the node identified by the FQNN (<xref
        target="fqnn"/>) of the node.</t>
        <t>A single bundle processing node <bcp14>MAY</bcp14> have multiple
        ipn EIDs associated with it. However, all ipn EIDs that share any
        single FQNN <bcp14>MUST</bcp14> refer to the same bundle processing
        node.</t>

        <t>For example, <tt>ipn:977000.100.1</tt>, <tt>ipn:977000.100.2</tt>,
        and <tt>ipn:977000.100.3</tt> <bcp14>MUST</bcp14> all refer to
        services registered on the bundle processing node identified with FQNN
        <tt>(977000,100)</tt>. None of these EIDs could be registered on any
        other bundle processing node.</t>

      </section>

      <section anchor="the-null-endpoint">
        <name>The Null Endpoint</name>
        <t><xref section="3.2" sectionFormat="of" target="RFC9171"/> defines
        the concept of the Null endpoint, which is an endpoint that has no
        members and is identified by a special Null EID.</t>
        <t>Within the 'ipn' URI scheme, the Null EID is represented by the
       Null ipn URI (<xref target="null-uri"/>).  This means that the URIs
        <tt>dtn:none</tt> (<xref section="4.2.5.1.1" sectionFormat="of"
        target="RFC9171"/>), <tt>ipn:0.0</tt>, and <tt>ipn:0.0.0</tt> all
        refer to the BPv7 Null endpoint.</t>
      </section>

      <section anchor="bpv7-node-id">
        <name>BPv7 Node ID</name>
        <t><xref section="4.2.5.2" sectionFormat="of" target="RFC9171"/>
        introduces the concept of a "Node ID" that has the same format as an
        EID and uniquely identifies a bundle processing node.</t>
        <t>Any ipn EID can serve as a "Node ID" for the bundle processing node
        identified by its FQNN (<xref target="fqnn"/>). That is, any ipn EID of the form <tt>ipn:A.B.C</tt> may be used
        as the Source Node ID of any bundle created by the bundle processing
        node identified by the FQNN <tt>(A,B)</tt>.</t>
      </section>

      <section anchor="localnode-ipn-eids">
        <name>LocalNode ipn EIDs</name>

        <t>When a LocalNode ipn URI (<xref target="localnode-uri"/>) is
        used as a BPv6 or BPv7 EID, it is termed a "LocalNode ipn EID".</t>

        <t>Because a LocalNode ipn EID only has meaning on the local bundle
        node, any such EID <bcp14>MUST</bcp14> be considered
        non-routable. This means that any bundle using a LocalNode ipn EID as
        a bundle source or bundle destination <bcp14>MUST NOT</bcp14> be
        allowed to leave the local node.  Equally, all externally received
        bundles featuring LocalNode EIDs as a bundle source or bundle
        destination <bcp14>MUST</bcp14> be discarded as invalid.</t>

        <t>LocalNode ipn EIDs <bcp14>MUST NOT</bcp14> be present in any other
        part of a bundle that is transmitted off of the local node. For
        example, a LocalNode ipn EID <bcp14>MUST NOT</bcp14> be used as a
        Bundle Protocol Security (BPSec) <xref target="RFC9172"/> security
        source for a bundle transmitted from the local bundle node, because
        such a source EID would have no meaning at a downstream bundle
        node.</t>

        <t>LocalNode ipn EIDs <bcp14>MUST NOT</bcp14> be published in any node
        identification directory (such as a DNS registration) or presented as
        part of dynamic peer discovery, as the EID has no valid meaning for
        other nodes.  For example, a LocalNode ipn EID <bcp14>MUST NOT</bcp14>
        be advertised as the peer Node ID during session negotiation in <xref
        target="RFC9174"/>.</t>
      </section>

      <section anchor="private-use-ipn-eids">
        <name>Private Use ipn EIDs</name>

        <t>Bundles destined for EIDs that use an ipn URI with an FQNN (<xref
        target="fqnn"/>) that is within the
        Private Use range of the Default Allocator (<xref target="default-allocator"/>) are not universally unique; therefore, they are only
        valid within the scope of the current administrative domain.  This
        means that any bundle using a Private Use ipn EID as a bundle source
        or bundle destination <bcp14>MUST NOT</bcp14> be allowed to cross
        administrative domains.  All implementations that could be deployed as
        a gateway between administrative domains <bcp14>MUST</bcp14> be
        sufficiently configurable to ensure that this is enforced, and
        operators <bcp14>MUST</bcp14> ensure correct configuration.</t>

        <t>Private Use ipn EIDs <bcp14>MUST NOT</bcp14> be present in any
        other part of a bundle that is destined for another administrative
        domain when the lack of uniqueness prevents correct operation. For
        example, a Private Use ipn EID <bcp14>MUST NOT</bcp14> be used as a
        BPSec <xref target="RFC9172"/> security source for
        a bundle when the bundle is destined for a different administrative
        domain.</t>
      </section>

      <section anchor="well-known-service-numbers">
        <name>Well-Known Service Numbers</name>

        <t>It is convenient for BPv7 services that have a public specification
        and wide adoption to be identified by a pre-agreed default Service
        Number, so that unless overridden by explicit configuration, such services
        can be sensibly assumed to be operating on the well-known Service
        Number on a particular node.</t>

        <t>If a different service uses the number, or the service uses a
        different number, BPv7 will continue to operate, but some
        configuration may be required to make the individual service
        operational.</t>

        <t>A new IANA registry, "'ipn' Scheme URI Well-Known Service Numbers
        for BPv7", is defined for the registration of well-known BPv7 Service
        Numbers; see <xref target="iana-service-numbers"/>.  This registry
        records the assignments of Service Numbers for well-known services
        and also explicitly reserves ranges for both experimentation and
        Private Use.</t>
      </section>

      <section anchor="administrative-endpoints">
        <name>Administrative Endpoints</name>

        <t>The service identified by a Service Number of zero (0)
        <bcp14>MUST</bcp14> be interpreted as the Administrative Endpoint of
        the node, as defined in <xref section="3.2" sectionFormat="of"
        target="RFC9171"/>.</t>
        
	<t>Non-zero Service Numbers <bcp14>MUST NOT</bcp14> be used to
        identify the Administrative Endpoint of a bundle node in an ipn
        EID.</t>
      </section>
    </section>

    <section anchor="cbor-representation-of-ipn-uris-with-bpv7">
      <name>CBOR Representation of ipn URIs with BPv7</name>
      <t><xref section="4.2.5.1" sectionFormat="of" target="RFC9171"/>
      requires that any URI scheme used to represent BPv7 EIDs
      <bcp14>MUST</bcp14> define how the scheme-specific part of the URI
      scheme is encoded with Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>. To meet this
      requirement, this section describes the CBOR encoding and decoding
      approach for ipn EIDs. The formal definition of the CBOR representation
      is specified; see <xref target="cbor-encoding"/>.</t>

      <section anchor="ipn-eid-cbor-encoding">
        <name>ipn EID CBOR Encoding</name>
        <t>Generic URI approaches to encoding ipn EIDs are unlikely to be
        efficient because they do not consider the underlying structure of the
        'ipn' URI scheme. Since the creation of the 'ipn' URI scheme was motivated
        by the need for concise identification and rapid processing, the
        encoding of ipn EIDs maintains these properties.</t>
        <t>Fundamentally, ipn EIDs from <xref target="RFC9171"/> are represented as
        a sequence of identifiers. In the text syntax, the numbers are
        separated with the '<tt>.</tt>' delimiter; in CBOR, this ordered
        series of numbers can be represented by an array. Therefore, when
        encoding ipn EIDs for use with BPv7, the scheme-specific part of an
        ipn URI <bcp14>MUST</bcp14> be represented as a CBOR array of either
        two (2) or three (3) elements. Each element of the array
        <bcp14>MUST</bcp14> be encoded as a single CBOR unsigned integer.</t>
        <t>The structure and mechanisms of the two-element and three-element
        encodings are described below, and examples of the different encodings
        are provided in <xref target="cbor-examples"/>.</t>

        <section anchor="two-encode">
          <name>Two-Element Scheme-Specific Encoding</name>

          <t>In the two-element scheme-specific encoding of an ipn EID, the
          first element of the array is an encoding of the FQNN (<xref
          target="fqnn"/>), and the second
          element of the array is the ipn EID Service Number.</t>

          <t>The FQNN encoding <bcp14>MUST</bcp14> be a 64-bit unsigned
          integer constructed in the following way:</t>

          <ol spacing="normal" type="1"><li>
              <t>The least significant 32 bits <bcp14>MUST</bcp14> represent
              the Node Number associated with the ipn EID.</t>
            </li>
            <li>
              <t>The most significant 32 bits <bcp14>MUST</bcp14> represent
              the Allocator Identifier associated with the ipn EID.</t>
            </li>
          </ol>

          <t>For example, the ipn EID of <tt>ipn:977000.100.1</tt> has an FQNN
          of <tt>(977000,100)</tt>, which would be encoded as
          <tt>0xEE868_00000064</tt>.  The resulting two-element array
          <tt>[0xEE868_00000064, 0x01]</tt> would be encoded in CBOR as the
          following 11-octet sequence:</t>
	  

          <sourcecode type="cbor"><![CDATA[
82                        # 2-Element Endpoint Encoding
   02                     # uri-code: 2 ('ipn' URI scheme)
   82                     # 2-Element ipn EID encoding
      1B 000EE86800000064 # Fully Qualified Node Number
      01                  # Service Number
]]></sourcecode>

          <t>The two-element scheme-specific encoding provides backwards
          compatibility with the encoding provided in <xref
          section="4.2.5.1.2" sectionFormat="of" target="RFC9171"/>. When used
          in this way, the encoding of the FQNN replaces the use of the Node
          Number that was specified in <xref target="RFC9171"/>. When the
          Node Number is allocated by the Default Allocator (<xref
          target="default-allocator"/>), the encoding of
          the FQNN and the encoding of the Node Number from <xref
          target="RFC9171"/> are identical.</t>
        </section>

        <section anchor="three-encode">
          <name>Three-Element Scheme-Specific Encoding</name>
          <t>In the three-element scheme-specific encoding of an ipn EID:</t>

	  <ol>
	    <li>the first element of the array is the Allocator Identifier,</li>
	    <li>the second element of the array is the Node Number, and</li>
	    <li>the third element of the array is the Service Number.</li>
	  </ol>

          <t>For example, the ipn EID of <tt>ipn:977000.100.1</tt> would
          result in the three-element array of <tt>[977000,100,1]</tt>, which
          would be encoded in CBOR as the following 9-octet sequence:</t>

          <sourcecode type="cbor"><![CDATA[
82                # 2-Element Endpoint Encoding
   02             # uri-code: 2 ('ipn' URI scheme)
   83             # 3-Element ipn EID encoding
      1A 000EE868 # Allocator Identifier
      64          # Node Number
      01          # Service Number
]]></sourcecode>

          <t>The three-element scheme-specific encoding allows for a more
          efficient representation of ipn EIDs using smaller Allocator
          Identifiers, and implementations are <bcp14>RECOMMENDED</bcp14> to
          use this encoding scheme unless explicitly mitigating for
          interoperability issues; see <xref target="compatibility"/>.</t>

          <t>When encoding an ipn EID using the Default Allocator (<xref
          target="default-allocator"/>) with this
          encoding scheme, the first element of the array is the value zero
          (0).  In this case, using the equivalent two-element scheme-specific
	  encoding (<xref target="two-encode"/>) will
          result in a more concise CBOR representation; therefore, it is
          <bcp14>RECOMMENDED</bcp14> that implementations use that encoding
          instead.</t>
        </section>
      </section>

      <section anchor="ipn-eid-cbor-decoding">
        <name>ipn EID CBOR Decoding</name>

        <t>The presence of different scheme-specific encodings does not
        introduce any decoding ambiguity.</t>
        <t>An ipn EID CBOR decoder can reconstruct an ipn EID using the
        following logic. In this description, the term <tt>enc_eid</tt> refers
        to the CBOR-encoded ipn EID, and the term <tt>ipn_eid</tt> refers to
        the decoded ipn EID.</t>

        <sourcecode type="pseudocode"><![CDATA[
if enc_eid.len() == 3
{
  ipn_eid.allocator_identifier := enc_eid[0];
  ipn_eid.node_number := enc_eid[1];
  ipn_eid.service_number := enc_eid[2];
}
else if enc_eid.len() == 2
{
  ipn_eid.allocator_identifier := enc_eid[0] >> 32;
  ipn_eid.node_number := enc_eid[0] & (2^(32-1));
  ipn_eid.service_number := enc_eid[1];
}
]]></sourcecode>
      </section>

      <section anchor="cbor-encoding">
        <name>'ipn' URI Scheme CBOR Syntax</name>

        <t>When encoded in CBOR <xref
        target="RFC8949"/>, a BPv7 endpoint identified by an ipn URI
        <bcp14>MUST</bcp14> comply with the following Concise Data Definition
        Language (CDDL) <xref target="RFC8610"/> specification:</t>

        <sourcecode type="cddl"><![CDATA[
eid = $eid .within eid-structure

eid-structure = [
  uri-code: uint,
  SSP: any
]

; ... Syntax for other uri-code values defined in RFC 9171 ...

$eid /= [
  uri-code: 2,
  SSP: ipn-ssp2 / ipn-ssp3
]
ipn-ssp2 = [
  fqnn: uint,  ; packed value
  service-number: uint
]
ipn-ssp3 = [
  allocator-identifier: uint .lt 4294967296,
  node-number: uint .lt 4294967296,
  service-number: uint
]
]]></sourcecode>

        <t>Note: The <tt>node-number</tt> component will be the numeric
        representation of the concatenation of the Allocator Identifier and
        Node Number when the two-element encoding scheme has been used.</t>
      </section>

      <section anchor="ipn-eid-matching">
        <name>ipn EID Matching</name>
        <t>Regardless of whether the two-element or three-element
        scheme-specific encoding is used, ipn EID matching <bcp14>MUST</bcp14>
        be performed on the decoded EID information itself. Different
        encodings of the same ipn EID <bcp14>MUST</bcp14> be treated as
        equivalent when performing EID-specific functions.</t>

        <t>For example, the ipn EID of <tt>ipn:977000.100.1</tt> can be
        represented as either the two-element encoding of
        <tt>0x821B000EE8680000006401</tt> or the three-element encoding of
        <tt>0x831A000EE868186401</tt>. While message integrity and other
        syntax-based checks may treat these values differently, any EID-based
        comparisons <bcp14>MUST</bcp14> treat these values the same: as
        representing the ipn EID <tt>ipn:977000.100.1</tt>.</t>
      </section>
    </section>

    <section anchor="special-considerations">
      <name>Special Considerations</name>

      <t>The 'ipn' URI scheme provides a compact and hierarchical mechanism for
      identifying services on network nodes. There is a significant amount of
      utility in the 'ipn' URI scheme approach to identification. However,
      implementers should take into consideration the following observations
      on the use of the 'ipn' URI scheme, particularly in regard to
      interoperability with implementations that pre-date this
      specification.</t>

      <section anchor="compatibility">
        <name>Scheme Compatibility</name>

        <t>The 'ipn' URI scheme update that has been presented in this document
        preserves backwards compatibility with any 'ipn' URI scheme going back
        to the provisional definition of the 'ipn' scheme in the experimental
        specification "Compressed Bundle Header Encoding (CBHE)" <xref
        target="RFC6260"/> in 2011. This means that any ipn URI that was valid
        prior to the publication of this update remains a valid ipn URI.</t>

        <t>Similarly, the two-element
        scheme-specific encoding (<xref target="two-encode"/>) is also
	backwards compatible with the
        encoding of ipn URIs provided in <xref target="RFC9171"/>. Any
        existing implementation compliant with <xref target="RFC9171"/> will
        produce an ipn URI encoding in compliance with this specification.</t>
        <t>The introduction of optional non-default Allocator Identifiers and
        a three-element scheme-specific encoding does not make this ipn URI
        scheme update forwards compatible. Existing implementations for which
        support of this update is desired <bcp14>MUST</bcp14> be updated to be
        able to process non-default Allocator Identifiers and three-element
        scheme-specific encodings. It is <bcp14>RECOMMENDED</bcp14> that BPv7
        implementations upgrade to process these new features to benefit from
        the scalability provided by Allocator Identifiers and the encoding
        efficiencies provided by the three-element encoding.</t>
      </section>

      <section anchor="cbor-representation-interoperability">
        <name>CBOR Representation Interoperability</name>
        <t>Care must be taken when deploying implementations that default to
        using the three-element encoding in networks that include
        implementations that only support the two-element encoding <xref
        target="RFC9171"/>. Because the existing implementations will reject
        bundles that use the three-element encoding as malformed, correct
        forwarding of semantically valid bundles will fail.  The used
        mitigation for this issue depends on the nature of the
        interoperability required by the deployment. Techniques can
        include:</t>
        <ul spacing="normal">
          <li>
            <t>A configuration option indicating when an implementation must
            use the two-element encoding for all ipn EIDs when processing
            bundles destined to a given endpoint. This would be suitable when
            adding a newer implementation to a network of existing
            implementations.</t>
          </li>
          <li>
            <t>Selective bundle encapsulation, whereby bundles that are known
            to originate from implementations that do not support the
            three-element encoding are tunneled across regions of the network
            that require the three-element encoding. This would utilize
            specially configured "gateway nodes" to perform the tunnel
            encapsulation and decapsulation and would be suitable when
            joining an existing network to a larger network.</t>
          </li>
        </ul>
        <t>Techniques that do not mitigate the problem include:</t>
        <ul spacing="normal">
          <li>
            <t>Heuristic determination of the correct encoding to use when
            responding to a bundle by examining the incoming bundle. It is not
            possible to determine whether the two-element encoding is required
            by the destination when composing a new bundle in response to the
            receipt of a bundle, such as a status report, because ipn EIDs
            assigned by the Default Allocator use the two-element encoding,
            whether or not the implementation supports the three-element encoding.</t>
          </li>
          <li>

            <t>Transcoding bundles at intermediate nodes. <xref
            target="RFC9171"/> requires the bundle primary block to be immutable,
            and even if ipn EIDs in the primary block do not require
            rewriting, other blocks including the payload block may include
            ipn EIDs of which the transcoding node is unaware.

	    Additionally,
            bundle blocks may be covered by bundle
            security blocks or bundle integrity blocks <xref target="RFC9172"/>, making them
            immutable.</t>
          </li>
        </ul>
      </section>

      <section anchor="text-representation-compatibility">
        <name>Text Representation Compatibility</name>
        <t>The textual representation of ipn URIs is not forwards compatible
        with <xref target="RFC9171"/>. Therefore, care must be taken when
        deploying implementations or tooling that use the textural
        representation of ipn URIs and support for non-default Allocator
        Identifiers is required.  For example, <xref section="4.6"
        sectionFormat="of" target="RFC9174"/> specifies that the session
        initialization message "...<bcp14>SHALL</bcp14> contain the UTF-8
        encoded node ID of the entity that sent the SESS_INIT message."  In
        such cases, the considerations that apply to the use of the three-element
        CBOR encoding also apply to the text representation when a non-default
        Allocator Identifier is present.</t>
      </section>

      <section anchor="bundle-protocol-version-6-compatibility">
        <name>Bundle Protocol Version 6 Compatibility</name>
        <t>This document updates the use of ipn EIDs for BPv7; however, the 'ipn'
        URI scheme was originally defined for use with BPv6.  This document does not update any of the behaviors,
        wire-formats, or mechanisms of BPv6.  Therefore, ipn EIDs with
        non-default Allocator Identifiers <bcp14>MUST NOT</bcp14> be used with
        BPv6, and the Allocator Identifier prefix <bcp14>MUST</bcp14> be
        omitted from any textural representation.  It should be noted that
        BPv6 has no concept of LocalNode EIDs and will therefore treat such
        EIDs as routable.</t>
      </section>

      <section anchor="late-binding">
        <name>Late Binding</name>

        <t><xref target="RFC9171"/> mandates the concept of the "late binding" of
        an EID, whereby the address of the destination of a bundle is resolved
        from its identifier hop-by-hop as it transits a BPv7 network.  This
        per-hop binding of identifiers to addresses underlines the fact that
        EIDs are purely names and should not carry any implicit or explicit
        information concerning the current location or reachability of an
        identified node and service.  This removes the need to rename a node
        as its location changes.</t>

        <t>The concept of late binding is preserved in this 'ipn' URI
        scheme. Elements of an ipn URI <bcp14>MUST NOT</bcp14> be regarded as
        carrying information relating to location, reachability, or other
        addressing/routing concerns.</t>

        <t>An example of incorrect behavior would be to assume that a given
        Allocator assigns Node Numbers derived from link-layer addresses and
        to interpret the Node Number component of an ipn URI directly as a
        link-layer address. No matter the mechanism an Allocator uses for the
        assignment of Node Numbers, they remain just numbers, without
        additional meaning.</t>
      </section>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section updates the security considerations from <xref
      section="4.2.5.1.2" sectionFormat="of" target="RFC9171"/> to account for
      the inclusion of Allocator Identifiers in the 'ipn' URI scheme when used
      with BPv7.</t>

      <section anchor="reliability-and-consistency">
        <name>Reliability and Consistency</name>
        <t>None of the BPv7 endpoints identified by ipn EIDs are guaranteed to
        be reachable at any time, and the identity of the processing entities
        operating on those endpoints is never guaranteed by the Bundle
        Protocol itself. Verification of the signature provided by the Block
        Integrity Block (BIB) targeting the bundle's primary block, as defined by
       "Bundle Protocol Security (BPSec)" <xref target="RFC9172"/>, is required for
        this purpose.</t>
      </section>

      <section anchor="malicious-construction">
        <name>Malicious Construction</name>
        <t>Malicious construction of a conformant ipn URI is limited to the
        malicious selection of Allocator Identifiers, Node Numbers, and
        Service Numbers. That is, a maliciously constructed ipn EID could be
        used to direct a bundle to an endpoint that might be damaged by the
        arrival of that bundle or, alternatively, to declare a false source
        for a bundle and thereby cause incorrect processing at a node that
        receives the bundle. In both cases (and indeed in all bundle
        processing), the node that receives a bundle should verify its
        authenticity and validity before operating on it in any way, such as with
        the use of BPSec <xref target="RFC9172"/> and TCP Convergence Layer version 4 (TCPCLv4) with TLS <xref
        target="RFC9174"/>.</t>
      </section>

      <section anchor="back-end-transcoding">
        <name>Back-End Transcoding</name>
        <t>The limited expressiveness of URIs of the 'ipn' scheme effectively
        eliminates the possibility of threats due to errors in back-end
        transcoding.</t>
      </section>

      <section anchor="local-and-private-use-ipn-eids">
        <name>Local and Private Use ipn EIDs</name>
        <t>Both LocalNode (<xref target="localnode-uri"/>) and Private Use (<xref
        target="private-use"/>) ipn URIs present a risk to the
        stability of deployed BPv7 networks.  If either type of ipn URI is
        allowed to propagate beyond the domain in which they are valid, then
        the required uniqueness of ipn URIs no longer holds, and this fact can
        be abused by a malicious node to prevent the correct functioning of
        the network as a whole.</t>
        <t>See Sections <xref target="localnode-ipn-eids" format="counter"/> and
        <xref target="private-use-ipn-eids" format="counter"/> for
        required behaviors to mitigate against this form of abuse.</t>
      </section>

      <section anchor="sensitive-information">
        <name>Sensitive Information</name>
        <t>Because ipn URIs are used only to represent the numeric identities
        of resources, the risk of disclosure of sensitive information due to
        interception of these URIs is minimal. Examination of ipn URIs could
        be used to support traffic analysis; where traffic analysis is a
        plausible danger, bundles should be conveyed by secure
        convergence-layer protocols that do not expose endpoint IDs, such as
        TCPCLv4 <xref target="RFC9174"/>.</t>
      </section>

      <section anchor="semantic-attacks">
        <name>Semantic Attacks</name>
        <t>The simplicity of the 'ipn' URI scheme syntax minimizes the possibility
        of misinterpretation of a URI by a human user.</t>
      </section>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>The following sections detail the creation of
      two new IANA registries and the renaming of an existing IANA registry under the "Uniform Resource Identifier (URI) Schemes" registry group.</t>

      <t>IANA has also updated the reference for the 'ipn' scheme to this document in the
      "Uniform Resource Identifier (URI) Schemes" registry.</t>

      <section anchor="iana-allocator-identifiers">
        <name>'ipn' Scheme URI Allocator Identifiers Registry</name>
        <t>IANA has created a new registry titled "'ipn' Scheme
        URI Allocator Identifiers".  Using terms defined in <xref
        target="RFC8126"/>, the registration procedures for this registry are:</t>


   <table align="center" anchor="tab-ipn-allocator-identifiers-reg">
          <name>Registration Procedures for the 'ipn' Scheme URI Allocator Identifiers Registry</name>
          <thead>
            <tr>
              <th align="left">Range</th>
              <th align="left">Registration Procedures</th>
	      <th align="left">Note</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0..0xFFFF</td>
              <td align="left">Expert Review</td>
	      <td>Single Allocator Identifiers only</td>
            </tr>
            <tr>
              <td align="left">0x10000..0x3FFFFFFF</td>
              <td align="left">Expert Review</td>
	      <td></td>
            </tr>
            <tr>
              <td align="left">0x40000000..0x7FFFFFFF</td>
              <td align="left">Experimental Use</td>
	       <td></td>
            </tr>
            <tr>
              <td align="left">0x80000000..0xFFFFFFFF</td>
              <td align="left">Reserved</td>
	      <td> Future Expansion</td>
            </tr>
            <tr>
              <td align="left">&gt;=0x100000000</td>
              <td align="left">Reserved</td>
	      <td></td>
            </tr>
          </tbody>
        </table>

        <t>Each entry in this registry associates one or more Allocator
        Identifiers with a single organization. Within the registry, the
        organization is identified using the "Name" and "Change Controller"
        fields. It is expected that each identified organization will publish
        some listing of allocated Node Numbers, the pointer to which is
        listed in the "Reference" field of the registry.</t>

        <t>Note that the "Single Allocator Identifiers only" language in
        the registration procedure for this registry indicates that, within the
        indicated range, the allocation of a sequence of consecutive Allocator
        Identifiers to a single organization is prohibited.</t>

        <t>The initial values in the registry are:</t>

        <table align="center" anchor="tab-ipn-allocator-identifiers-vals">
          <name>Initial Values in the 'ipn' Scheme URI Allocator Identifiers Registry</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Range (dec)</th>
              <th align="left">Range (hex)</th>
              <th align="left">Range Length (Bits)</th>
              <th align="left">Reference</th>
              <th align="left">Change Controller</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Default Allocator</td>
              <td align="left">0</td>
              <td align="left">0x0</td>
              <td align="left">0</td>
              <td align="left">RFC 9758, <xref target="default-allocator"/></td>
              <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">Example Range</td>
              <td align="left">974848-978943</td>
              <td align="left">0xEE000-0xEEFFF</td>
              <td align="left">12 bits</td>
              <td align="left">RFC 9758</td>
              <td align="left">IETF</td>
            </tr>
          </tbody>
        </table>
        <t>The "Example Range" is assigned for use in examples in
        documentation and sample code.</t>

        <section anchor="guidance-for-designated-experts">
          <name>Guidance for Designated Experts</name>
          <t>Due to the nature of the CBOR encoding of unsigned integers used
          for Allocator Identifiers with BPv7, Allocator Identifiers with a
          low value number are encoded more efficiently than larger numbers.
          This makes low value Allocator Identifiers more desirable than
          larger Allocator Identifiers; therefore, care must be taken when
          assigning Allocator Identifier ranges to ensure that a single
          applicant is not granted a large swathe of highly desirable numbers
          at the expense of other applicants.  To this end, designated experts
          are strongly recommended to familiarize themselves with the CBOR
          encoding of unsigned integers in <xref target="RFC8949"/>.</t>
        </section>
      </section>

      <section anchor="iana-node-numbers">
        <name>'ipn' Scheme URI Default Allocator Node Numbers Registry</name>

        <t>IANA has renamed the "CBHE Node Numbers" registry
        (defined in <xref section="3.2.1" sectionFormat="of" target="RFC7116"/>)
        to the "'ipn' Scheme URI Default Allocator Node Numbers" registry and moved it to the "Uniform Resource Identifier (URI) Schemes" registry group. IANA has added the following note to the "CBHE Node Numbers" registry:</t>
	
<blockquote>
Note: Renamed "CBHE Node Numbers" as "'ipn' Scheme URI Default Allocator Node Numbers" and moved it to &lt;<eref target="https://www.iana.org/assignments/uri-schemes"/>&gt; per RFC 9758.
</blockquote>

        <t>Using terms defined in <xref target="RFC8126"/>, the registration procedures for this registry are:</t>

        <table align="center" anchor="tab-ipn-node-numbers-reg">
          <name>Registration Procedures for the 'ipn' Scheme URI Default Allocator Node Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Range</th>
              <th align="left">Registration Procedures</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1..0x3FFF</td>
              <td align="left">Private Use</td>
            </tr>
	      <tr>
              <td align="left">0x4000..0xFFFFFFFE</td>
              <td align="left">Expert Review</td>
             </tr>
            <tr>
              <td align="left">&gt;=0x100000000</td>
              <td align="left">Invalid</td>
            </tr>
          </tbody>
        </table>


	<t>IANA has registered the following values in the "'ipn' Scheme URI Default Allocator Node Numbers" registry:</t>

 <table align="center" anchor="tab-ipn-scheme-uri-DA-identifiers">
          <name>New Values in the 'ipn' Scheme URI Default Allocator Node Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
	      <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Reserved for the Null ipn URI</td>
	      <td align="left"><xref target="RFC7116"/> and RFC 9758, <xref target="null-uri"/></td>
            </tr>
	      <tr>
              <td align="left">4294967295</td>
              <td align="left">Reserved for LocalNode ipn URIs</td>
	      <td align="left">RFC 9758, <xref target="localnode-uri"/></td>
              </tr>
          </tbody>
        </table>

        <t>As IANA has only renamed the registry, all existing
        registrations will remain.</t>
	
      </section>

      <section anchor="iana-service-numbers">
        <name>'ipn' Scheme URI Well-Known Service Numbers for BPv7 Registry</name>

        <t>IANA has created a new registry titled "'ipn' Scheme
        URI Well-Known Service Numbers for BPv7".  Using terms defined in
        <xref target="RFC8126"/>, the registration procedures for this registry are:</t>

        <table align="center" anchor="tab-ipn-service-numbers-reg">
          <name>Registration Procedures for the 'ipn' Scheme URI Well-Known Service Numbers for BPv7 Registry</name>
          <thead>
            <tr>
              <th align="left">Range</th>
              <th align="left">Registration Procedures</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1..127</td>
              <td align="left">Private Use</td>
            </tr>
            <tr>
              <td align="left">128..255</td>
              <td align="left">Standards Action</td>
            </tr>
            <tr>
              <td align="left">0x0100..0x7FFF</td>
              <td align="left">Private Use</td>
            </tr>
            <tr>
              <td align="left">0x8000..0xFFFF</td>
              <td align="left">Specification Required</td>
            </tr>
            <tr>
              <td align="left">0x10000..0xFFFFFFFF</td>
              <td align="left">Private Use</td>
            </tr>
            <tr>
              <td align="left">&gt;=0x100000000</td>
              <td align="left">Reserved for future expansion</td>
            </tr>
          </tbody>
        </table>

        <t>The initial values in the registry are:</t>

        <table align="center" anchor="tab-ipn-service-numbers-vals">
          <name>Initial Values in the 'ipn' Scheme URI Well-Known Service Numbers for BPv7 Registry</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">The Administrative Endpoint</td>
              <td align="left">
                <xref target="RFC9171"/> and RFC 9758, <xref target="administrative-endpoints"/></td>
            </tr>
            <tr>
              <td align="left">0xEEE0..0xEEEF</td>
              <td align="left">Example Range</td>
              <td align="left">RFC 9758</td>
            </tr>    
          </tbody>
        </table>
        <t>The "Example Range" is assigned for use in examples in
        documentation and sample code.</t>

        <section anchor="guidance-for-designated-experts-1">
          <name>Guidance for Designated Experts</name>
          <t>This registry is intended to record the default Service Numbers
          for well-known, interoperable services that are available and of use to the
          entire BPv7 community; hence, all ranges not marked for Private Use
          <bcp14>MUST</bcp14> have a corresponding publicly available
          specification describing how one interfaces with the service.</t>
          <t>Services that are specific to a particular deployment or
          co-operation may require a registry to reduce administrative burden,
          but do not require an entry in this registry.</t>
        </section>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6260.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7116.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9171.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml"/>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5050.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4632.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1918.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9172.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9174.xml"/>
      </references>
    </references>

<section anchor="text-examples">
      <name>'ipn' URI Scheme Text Representation Examples</name>
      <t>This section provides some example ipn URIs in their textual representation.</t>

      <section anchor="using-the-default-allocator">
        <name>Using the Default Allocator</name>

        <t>Consider the ipn URI identifying Service Number 2 on Node Number 1
        allocated by the Default Allocator (0) (<xref target="default-allocator"/>).</t>

        <t>The recommended seven-character representation of this URI would be
        as follows:</t>

        <artwork><![CDATA[
ipn:1.2
]]></artwork>

        <t>The nine-character representation of this URI, with the explicit Allocator Identifier, would be as follows:</t>

        <artwork><![CDATA[
ipn:0.1.2
]]></artwork>

      </section>

      <section anchor="using-a-non-default-allocator">
        <name>Using a Non-Default Allocator</name>
        <t>Consider the ipn URI identifying Service Number 3 on Node Number 1 allocated by Allocator 977000.</t>
        <t>The 14-character representation of this URI would be as follows:</t>

        <artwork><![CDATA[
ipn:977000.1.3
]]></artwork>

      </section>

      <section anchor="the-null-ipn-uri">
        <name>The Null ipn URI</name>
        <t>The Null ipn URI (<xref target="null-uri"/>) is represented as:</t>

        <artwork><![CDATA[
ipn:0.0
]]></artwork>

      </section>

      <section anchor="a-localnode-ipn-uri">
        <name>The LocalNode ipn URI</name>

        <t>Consider the ipn URI identifying Service Number 7 on the local
        node.</t>
        
	<t>The recommended seven-character representation of this URI would be
        as follows:</t>

        <artwork><![CDATA[
ipn:!.7
]]></artwork>

        <t>The numeric 16-character representation of this URI would be as follows:</t>

        <artwork><![CDATA[
ipn:4294967295.7
]]></artwork>

      </section>
    </section>
    <section anchor="cbor-examples">
      <name>'ipn' URI Scheme CBOR Encoding Examples</name>
      <t>This section provides some example CBOR encodings of ipn EIDs.</t>
      <section anchor="using-the-default-allocator-1">
        <name>Using the Default Allocator</name>
        <t>Consider the ipn EID <tt>ipn:1.1</tt>. This textual representation
        of an ipn EID identifies Service Number 1 on Node Number 1 allocated
        by the Default Allocator (0) (<xref target="default-allocator"/>).
        </t>
        <t>The recommended five-octet encoding of this EID using the
        two-element scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82       # 2-Element Endpoint Encoding
   02    # uri-code: 2 ('ipn' URI scheme)
   82    # 2-Element ipn EID encoding
      01 # Node Number
      01 # Service Number
]]></sourcecode>

        <t>The six-octet encoding of this EID using the three-element
        scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82       # 2-Element Endpoint Encoding
   02    # uri-code: 2 ('ipn' URI scheme)
   83    # 3-Element ipn EID encoding
      00 # Default Allocator
      01 # Node Number
      01 # Service Number
]]></sourcecode>
      </section>

      <section anchor="using-a-non-default-allocator-1">
        <name>Using a Non-Default Allocator</name>
        <t>Consider the ipn EID <tt>ipn:977000.1.1</tt>.  This textual
        representation of an ipn EID identifies Service Number 1 on Node
        Number 1 allocated by Allocator 977000.</t>

        <t>The recommended 10-octet encoding of this EID using the
        three-element scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82                # 2-Element Endpoint Encoding
   02             # uri-code: 2 ('ipn' URI scheme)
   83             # 3-Element ipn EID encoding
      1A 000EE868 # Allocator Identifier
      01          # Node Number
      01          # Service Number
]]></sourcecode>

        <t>The 13-octet encoding of this EID using the two-element
        scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82                        # 2-Element Endpoint Encoding
   02                     # uri-code: 2 ('ipn' URI scheme)
   82                     # 2-Element ipn EID encoding
      1B 000EE86800000001 # Fully Qualified Node Number
      01                  # Service Number
]]></sourcecode>
      </section>

      <section anchor="the-null-endpoint-1">
        <name>The Null Endpoint</name>
        <t>The Null EID of <tt>ipn:0.0</tt> can be encoded in the following
        ways:</t>
        <t>The recommended five-octet encoding of the Null ipn EID using the
        two-element scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82       # 2-Element Endpoint Encoding
   02    # uri-code: 2 ('ipn' URI scheme)
   82    # 2-Element ipn EID encoding
      00 # Node Number
      00 # Service Number
]]></sourcecode>

        <t>The six-octet encoding of the Null ipn EID using the
        three-element scheme-specific encoding would be as follows:</t>

        <sourcecode type="cbor"><![CDATA[
82       # 2-Element Endpoint Encoding
   02    # uri-code: 2 ('ipn' URI scheme)
   83    # 3-Element ipn EID encoding
      00 # Default Allocator
      00 # Node Number
      00 # Service Number
]]></sourcecode>

      </section>
    </section>

    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The following DTN Working Group participants contributed technical material, use
      cases, and critical technical reviews for this URI scheme update:
      <contact fullname="Scott Burleigh"/> of the IPNGROUP, <contact
      fullname="Keith Scott"/>, <contact fullname="Brian Sipos"/> of the Johns
      Hopkins University Applied Physics Laboratory, <contact fullname="Jorge
      Amodio"/> of LJCV Electronics, and <contact fullname="Ran
      Atkinson"/>.</t>
      <t>Additionally, the authors wish to thank members of the CCSDS SIS-DTN
      Working Group at large who provided useful reviews and commentary on this
      document and its implications for the future of networked space
      exploration.</t>
    </section>
  </back>


</rfc>
