<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.28 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc docName="draft-johnson-dtn-ipnd-00" category="std" ipr="trust200902">

  <front>
    <title>DTN IP Neighbor Discovery (IPND)</title>

    <author initials="D." surname="Ellard" fullname="Daniel Ellard">
      <organization>Raytheon BBN</organization>
      <address>
        <postal>
          <street>10 Moulton St.</street>
          <city>Cambridge</city>
          <code>MA 02138</code>
          <country>US</country>
        </postal>
        <email>dan.ellard@rtx.com</email>
      </address>
    </author>
    <author initials="R." surname="Altman" fullname="Richard Altmann">
      <organization>Visionist, Inc.</organization>
      <address>
        <postal>
          <street>9861 Broken Land Parkway, Suite 400</street>
          <city>Columbia</city>
          <code>MD 21046</code>
          <country>US</country>
        </postal>
        <email>raltmann@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Gladd" fullname="Alex Gladd">
      <organization></organization>
      <address>
        <email>argladd86@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Brown" fullname="Daniel Brown">
      <organization>Crowdstrike</organization>
      <address>
        <email>danbrown9725@gmail.com</email>
      </address>
    </author>
    <author initials="R." surname="in 't Velt" fullname="Ronald in 't Velt">
      <organization>TNO</organization>
      <address>
        <postal>
          <street>Anna van Buerenplein 1</street>
          <city>Den Haag</city>
          <code>2595 DA</code>
          <country>The Netherlands</country>
        </postal>
        <email>Ronald.intVelt@tno.nl</email>
      </address>
    </author>
    <author initials="S." surname="Johnson" fullname="Scott M. Johnson">
      <organization>Spacely Packets, LLC</organization>
      <address>
        <postal>
          <street>46 High Ridge Road</street>
          <city>Ormond Beach</city>
          <code>FL 32117</code>
          <country>US</country>
        </postal>
        <email>scott@spacelypackets.com</email>
      </address>
    </author>

    <date year="2023" month="October" day="07"/>

    <area>Transport</area>
    <workgroup>Delay-Tolerant Networking</workgroup>
    <keyword>DTN</keyword>

    <abstract>


<t>Delay and Disruption Tolerant Networking (DTN) IP Neighbor Discovery (IPND), is
a method for otherwise oblivious nodes to learn of the existence,
availability, and addresses of other DTN participants.  IPND both
sends and listens for small IP UDP announcement “beacons.”  Beacon
messages are addressed to an IP unicast, multicast, or broadcast
destination to discover specified or unspecified remote neighbors,
or unspecified local neighbors in the topology, e.g. within wireless
range.  IPND beacons advertise neighbor availability by including the
DTN node’s canonical endpoint identifier.  IPND beacons optionally 
include service availability and parameters.  In this way, neighbor 
discovery and service discovery may be coupled or decoupled as required.
Once discovered, new neighbor pairs use advertised availabilities to
connect, exchange routing information, etc. This document describes
DTN IPND.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Delay and Disruption Tolerant Networks (DTNs)<xref target="RFC4838"/> make no
presumptions about network topology, routing, or availability.  DTNs
therefore attempt to provide communication in challenged environments
where, for instance, contemporaneous end-to-end paths do not exist.
Examples of such DTNs arise in a variety of contexts including mobile
social networks, space communications, rural message delivery,
military networks, etc.</t>

<t>In many DTN scenarios, the identity and meeting schedule of
participating nodes is not known in advance.  Therefore, an important
primitive is Neighbor Discovery (ND), or the ability to dynamically
discover other DTN nodes.  This document specifies Internet Protocol
Neighbor Discovery (IPND).  In contrast to link or physical layer
discovery, IPND enables a general form of neighbor discovery across a
heterogeneous range of links, as are often found in DTN networks.
IPND is particularly useful in mobile, ad hoc DTN environments where
meeting opportunities are not known a priori and connections may
appear or disappear without warning.  For example, two mobile nodes
might come into radio distance of each other, discover the new
connection, and move data along that connection before physically
disconnecting.</t>

<t>In addition to discovering neighbors, it is often valuable to
simultaneously discover services available from that neighbor.
Examples of DTN services include a neighbor’s available Convergence
Layer Adapters (CLAs) and their parameters (e.g. TCP CLA <xref target="RFC9174"/>),
available routers (e.g. PRoPHET <xref target="RFC6693"/>), tunnels, etc.  Newly
discovered nodes will then typically participate in bundle <xref target="RFC9171"/>
routing and delivery.</t>

<t>In other situations it is useful to decouple service discovery from
neighbor discovery for efficiency and generality.  For example, upon
discovering a neighbor, a DTN node might initiate a separate
negotiation process to establish 1-hop connectivity via a particular
convergence layer, perform routing setup, exchange availability
information, etc.</t>

<t>IPND beacons thus optionally advertise a node’s available services
while maintaining the ability to decouple node and service discovery
as necessary.  This flexibility is important to various DTN use
scenarios where connection opportunities may be limited (thus
necessitating an atomic message for all availability information),
bandwidth might be scarce (thus implying that service discovery
should be an independent negotiation to lower beacon overhead), or
connections have very large round-trip-times (service negotiation is
therefore too costly with respect to time).</t>

<t>DTN IPND is designed to be simple, efficient, and general.</t>

<t>Although this document describes a neighbor discovery protocol in
terms of IP, the principles and basic mechanisms used in this
protocol may also be expressed in terms of other datagram protocols.</t>

<t>The remainder of this document describes DTN IPND.</t>

<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in 
<xref target="RFC2119"/>.</t>

<t>The following terminology is used for describing DTN IPND.</t>

<t><list style="hanging">
  <t hangText='Bundle'>
  A PDU as defined in <xref target="RFC9171"/>.</t>
  <t hangText='Node'>
  A DTN entity in the network that receives and processes
bundles.</t>
  <t hangText='Beacon message'>
  An IPND-specific message, defined in this document, used to
announce the presence of a DTN node and parameters with
which to connect to that node.</t>
  <t hangText='Convergence layer adapter'>
  A convergence layer adapter (CLA) sends and receives bundles on 
behalf of a node by providing the conversion between bundles and 
a transport protocol such as TCP or UDP.</t>
</list></t>

</section>
</section>
<section anchor="protocol-description" title="Protocol Description">

<t>Nodes use DTN IPND beacons, small UDP messages in the IP underlay, to
advertise presence.  Similarly, IPND beacons received from other
nodes serve to detect the availability of DTN neighbors.  Nodes
SHOULD both send and receive beacons. When the IP underlay is based on the 
the IPv4 protocol, these beacon messages, detailed in 
<xref target="beacon-message-format"/>, may be sent as UDP datagrams in either unicast,
multicast, or broadcast packets. When the IP underlay uses IPv6, the beacon
messages may be sent as either unicast or multicast packets. The beacon
message content is agnostic to the underlying transport mode.</t>

<t>Broadcast beacons are designed to reach unknown neighbors in
neighborhoods within the local network broadcast domain. IPv4 multicast
<xref target="RFC1112"/> or IPv6 multicast <xref target="RFC4291"/> beacons extend the scope of beacon 
dissemination to potentially include multiple networks across routed boundaries. On
broadcast media such as Ethernet or wireless, multicast and broadcast
beacons are sent as link-layer broadcast messages.</t>

<t>Broadcast and multicast discovery are described in <xref target="unknown-neighbors"/>. In
contrast, unicast beacons are sent only to explicitly known and
enumerated neighbors as described in <xref target="enumerated-neighbors"/>.</t>

<t>Upon discovering a neighbor and its services, IPND can establish a
connection to the new neighbor via an IP-based Convergence Layer
Adapter (CLA), for example the TCP <xref target="RFC9174"/> or Datagram <xref target="RFC7122"/> CLA.
The CLA then negotiates the connection per its individual specification
and installs the appropriate next-hop routing information in the
local node.</t>

<section anchor="beacon-period" title="Beacon Period">

<t>An IPND node SHOULD send beacons periodically. The time interval
between beacons SHOULD be appropriate for the conditions of the
network and MAY be configurable.</t>

<t>An IPND node MAY make use of the OPTIONAL Beacon Period field in the
beacon message to explicitly inform neighbors of the interval on
which to expect future beacons.  The Beacon Period is not fixed for a
given sender and MAY change with each beacon message.  If the Beacon
Period is included and set to zero, then it SHALL be interpreted as
negating any expectation for future beacons.</t>

<t>A receiving node SHOULD either know the expected beacon interval of
neighbors or extract the interval from the Beacon Period field of
arriving messages.  The beacon interval along with the existence and
receive time of beacons SHOULD be used to determine the state of the
sender’s ability to transmit to the receiver (i.e. the up or down
state of the sender-to-receiver link). The exact algorithm for
determining the link status based on received beacons is
implementation-defined.</t>

</section>
<section anchor="unknown-neighbors" title="Unknown Neighbors">

<t>In the general case, the IP addresses of potential neighbors are not
known in advance. To discover unknown neighbors, IPND beacon
messages are sent as IP packets with either multicast or broadcast
destination addresses. An IPND node MUST support multicast IP
destination addresses <xref target="RFC1112"/> <xref target="RFC4291"/> and multicast IGMP / MLD
group membership <xref target="RFC3376"/> <xref target="RFC2710"/> <xref target="RFC3810"/>. A node MAY
support IP broadcast destinations. IPv4 multicast addresses for IPND
SHOULD be from the IANA assigned local network control block 224.0.0/24
<xref target="RFC5771"/>. This block of multicast addresses is intentionally
scoped to the local network to prevent dissemination to the wider Internet.
Likewise, IPv6 multicast addresses for IPND should have link-local scope
<xref target="RFC4291"/> <xref target="RFC7346"/>.</t>

<t>An IPND node MAY also use other multicast addresses as required, such
as IPv4 multicast addresses from the IANA assigned Internetwork Control
Block <xref target="RFC5771"/> or IPv6 multicast addresses with wider scope than 
link-local. One use case for this would be a mobile ad hoc network
(MANET) environment which includes nodes that are not DTN-capable, but do 
support IP multicast forwarding, e.g. by means of SMF <xref target="RFC6621"/>. Those
nodes that are DTN-capable would then be able to discover each other
over multiple IP hops.</t>

<t>In all multicast addressing cases, a node MUST support a configurable
IPv4 time-to-live value or IPv6 Hop Limit value for all beacon messages.</t>

</section>
<section anchor="enumerated-neighbors" title="Enumerated Neighbors">

<t>An IPND node SHOULD support unicast beacons.  Since multicast or
broadcast discovery may not always be feasible over internetworks,
the IP addresses of potential neighbors reachable only across
multiple underlay hops must be explicitly enumerated for discovery.
While the neighbor’s address is therefore known, the availability of
that neighbor is not known.  IPND thus permits DTN nodes to discover
available remote neighbors across multiple IP underlay hops when
provided with the addresses of those neighbors. In this way, IPND
can be used to bridge IP-based DTNs while detecting disconnections
among and between the DTNs.</t>

</section>
<section anchor="allowing-data-to-substitute-for-beacons" title="Allowing Data to Substitute for Beacons">

<t>Sending data to an IP address matching a configured beacon
destination SHOULD suppress the generation of beacon messages to that
destination for a period of time up to but no longer than the beacon
sending interval. This suppression SHOULD NOT occur if the
parameters of a new beacon message would differ from the preceding
beacon including the advertised services (<xref target="services"/>) or the
Neighborhood Bloom Filter (NBF) (<xref target="neighborhood-bloom-filter"/>).</t>

<t>Upon receiving a data packet from a neighbor where the packets do not
represent a beacon, a node SHOULD behave as if a beacon had been
received from that neighbor, as follows. If the data packet is
addressed to this node via a unicast address, then the behavior
SHOULD be as if the implied received beacon contains a Neighborhood
Bloom Filter advertisement which indicates the membership of the
receiving node in the sender’s 1-hop neighborhood.  Otherwise, if the
destination address is multicast or broadcast, then the receiving
node should presume that the link is bidirectional if and only if its
state was bidirectional prior to receiving the data packet
(<xref target="discovering-bidirectional-links"/>). The sender’s advertised services
and beacon period are presumed to be unchanged since the sender’s last
received beacon.  If no beacons have previously been received from such
a neighbor, then it is presumed that there are no services associated
with the sender.</t>

</section>
<section anchor="discovering-bidirectional-links" title="Discovering Bidirectional Links">

<t>Many routing protocols work correctly only when links are bi-
directional. In wired IP networks, link bi-directionality can often
be presumed.  For other types of networks, such as Mobile Ad Hoc
Networks (MANETs) this assumption often does not hold. If a link to
a neighbor is said to be “up” only because one or more beacon
messages have been received from that neighbor over a wireless
medium, it is not generally safe to assume that the link is
bidirectional. In practice, MANETs often have links that are only
unidirectional due to differences in antennae, transmit power,
hardware variability, multi-path effects, etc.</t>

<t>To discover the bi-directionality of links, an IPND Neighborhood
Bloom Filter (NBF) (<xref target="neighborhood-bloom-filter"/>) facility MAY be
employed in which each node advertises a Bloom filter representation
of the set of neighbors from whom it has received enough recent beacons
to be considered “up”. Upon receiving a beacon from an “up” neighbor that
advertises an NBF which represents a set containing the receiving
node’s ID, the link SHOULD then be considered bi-directional.</t>

</section>
<section anchor="beacon-message-format" title="Beacon Message Format">

<t><xref target="figure1"/> depicts the format of beacon messages.  Note that IPND
follows the DTN convention of using Self-Delimiting Numeric Values
(SDNVs) <xref target="RFC6256"/> to represent variable length integers.  An IPND
node MUST use UDP checksums to ensure correctness.</t>

<figure title="Beacon Message Format" anchor="figure1"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Version    |     Flags     |     Beacon Sequence Number    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          EID Len  (*)         |   Canonical EID (variable)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   /                    Service Block (optional)                   /
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Beacon Period (*) (optional) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<t>The beacon message is comprised of the following fields:</t>

<t><list style="symbols">
  <t>Version: An 8-bit field indicating the version of IPND that
constructed this beacon. The present document describes version
0x04 of IPND. This version field is incremented for IPND if
either the IPND protocol is modified or the Bundle Protocol
version is incremented. In this way the field can also be used to
determine the BP version supported by a potential DTN neighbor.</t>
  <t>Flags: An 8-bit field indicating IPND processing flags. Four
flags are currently defined. 0x00 indicates that no special
processing should be performed on the beacon. If more than one of
the Flags bits is set, then the associated structures will appear
in the beacon message according to their bit order (Bit 0 is
first).  Semantics of bits are described here from least
significant (LSb) to most significant (MSb).  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
      Bit 0  Source EID present: iff set, indicates that
          the source node's EID is present in the beacon.
          If the EID is present, it is preceded by an 
          SDNV indicating its length. An IPND node SHOULD
          include its EID in all beacons, therefore
          this flag SHOULD always be set.

      Bit 1  Service Block present: iff set, indicates 
          that a service block is present.

      Bit 2  Neighborhood Bloom Filter present: iff set,
          indicates that a Neighbor Bloom Filter is present
          within the Service Block.

      Bit 3  Beacon Period present: iff set, indicates that
          a Beacon Period field is present.

      Bits 4-7  Reserved.
]]></artwork></figure>
  </t>
  <t>Beacon sequence number: A two-octet unsigned integer value
incremented once for each beacon transmitted to a particular IP
address.</t>
  <t>EID Length: The byte length of the canonical EID contained in the
beacon. The EID length field is an SDNV and is therefore variable
length. A two-octet length is shown for convenience of representation.</t>
  <t>Canonical EID: The canonical end node identifier of the neighbor
advertised by the beacon message. The canonical EID is variable
length and represented as a Uniform Resource Identifier <xref target="RFC3986"/>.</t>
  <t>Service Block: Optional announced services (<xref target="service-block"/>) in the
beacon. Services MAY include CLAs (<xref target="services"/>), routing
parameters, a Neighborhood Bloom Filter (<xref target="neighborhood-bloom-filter"/>),
and other implementation-dependent services.</t>
  <t>Beacon Period: Optional field indicating the sender’s current
beacon interval in seconds. A value of zero indicates that the
beacon period is undefined. The Beacon Period is an SDNV and is
therefore variable length. A two-octet length is shown for
convenience of representation.</t>
</list></t>

<section anchor="service-block" title="Service Block">

<t>As described previously, beacon messages may optionally include a
block of service availability information. The service block is
intended to contain representations of available CLAs, routers, a
Neighborhood Bloom Filter, etc., but is sufficiently general to
accommodate implementation-specific services provided by the
advertising node.</t>

<t>For example, the source IP address of a received beacon suffices to
identify the remote node at the IP level. However, the IP address
alone does not inform other processes via which transport mechanism
(e.g.  TCP or UDP) or via which transport port the remote node is
offering a connection. Similarly, nodes do not know which routers
(e.g. PRoPHET <xref target="RFC6693"/>) are running on a remote node in order to
inform bundle exchange.  Therefore, a beacon MAY contain a service
block which serves to notify nodes about the availability of these
services.</t>

<t>The format of a service block is given in <xref target="figure2"/>.</t>

<figure title="Service Block Format" anchor="figure2"><artwork><![CDATA[
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Number of Services N (*)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   \          Service Definition 0 (IPND-SD-TLV encoded)           \
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   \                              ...                              \
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   \         Service Definition N-1 (IPND-SD-TLV encoded)          \
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<t>A service block is comprised of the following fields:</t>

<t><list style="symbols">
  <t>Number of services: The number of services described in the block.
The number of services is an SDNV and is therefore variable length.</t>
  <t>Service Definition(s): A list of service definitions encoded
according to the IPND Service Definition TLV encoding
(Section 2.6.2) specification.</t>
</list></t>

</section>
<section anchor="ipnd-service-definition-tlv-encoding" title="IPND Service Definition TLV Encoding">

<t>The IPND Service Definition TLV encoding scheme (IPND-SD-TLV)
provides for the standardization of service definitions using a
format that focuses on simplicity, flexibility, and efficiency.
IPND-SD-TLV borrows many ideas from from the <xref target="ASN1-BER">ASN.1 Basic Encoding
Rules (BER) specification</xref>. Like ASN.1 BER, IPND-SD-TLV
structures are generally composed of three distinct parts:</t>

<t><list style="numbers">
  <t>Tag: A numeric token which identifies the structure (REQUIRED).</t>
  <t>Length: A numeric value which specifies the size of the content
block (sometimes REQUIRED).</t>
  <t>Value: The content block, which contains the value(s) described
by the tag (REQUIRED).</t>
</list></t>

<t>IPND-SD-TLV tags SHALL be 8-bit values, providing IPND a range of 256
possible tag numbers. Tag assignments are designed to provide a
basic, standard set of building blocks while remaining flexible
enough to allow the implementation of unforeseen specifications. The
first 128 tag numbers (i.e. 0-127) SHALL be reserved for standard
definitions; the remaining tags (i.e. 128-255) MAY be used for
implementation-specific (private) definitions. This design allows a
node to inspect the most significant bit (bit-7, zero-indexed) of the
tag to determine whether it is a reserved or private value.</t>

<t>IPND-SD-TLV defines two classes of data types: Primitive and
Constructed (the difference between these data types is discussed
below). Reserved tag numbers are designed such that the class of a
data type can be determined by examining the second-most significant
bit (bit-6, zero-indexed) of the tag.  If this bit is not set, the
data type is primitive, otherwise it is constructed.  As a result of
this design, reserved primitive types SHALL be assigned tag numbers
0-63, while reserved constructed types SHALL be assigned tag numbers
64-127.</t>

<t>Private tag numbers are always expected to represent constructed data
types, therefore private (implementation-specific) constructed types
(if in use by IPND) SHALL be assigned tag numbers 128-255.</t>

<t>The construction of IPND-SD-TLV tags is depicted in <xref target="figure3"/></t>

<figure title="IPND-SD-TLV Tags" anchor="figure3"><artwork><![CDATA[
   +-----------------------------------+
   |             Reserved              |
   +-------+---+---+-------------------+
   |  Bit  | 7 | 6 |        5-0        |
   |-------+---+---+-------------------+
   |       | 0 | 0 |    Tag Number     |  Reserved Primitive Types
   + Value +---+---+-------------------+
   |       | 0 | 1 | (Tag Number) - 64 |  Reserved Constructed Types
   +-------+---+---+-------------------+

   +-----------------------------------+
   |             Private               |
   +-------+---+-----------------------+
   |  Bit  | 7 |         6-0           |
   +-------+---+-----------------------+
   | Value | 1 |  (Tag Number) - 128   |  Private Constructed Types
   +-------+---+-----------------------+
]]></artwork></figure>

<t>In order to keep encoded services simple and compact, IPND-SD-TLV
SHALL omit the length field in cases where the content’s length is
always fixed (e.g. an IP address) or described in-place (e.g. an SDNV
value). In the cases where an explicit length field is required
(e.g. string content), an IPND node SHALL SDNV encode the length
values.  Additionally, a length field MUST be included in constructed
types immediately following the tag value which describes the length,
in bytes, of the structure’s content block. This constraint allows a
node to skip constructed types that are unrecognized while reading a
received Service Block. An IPND node SHALL SDNV encode these length
values.</t>

<t>Again, IPND-SD-TLV defines two classes of data types: Primitive and
Constructed.  Primitive types represent fundamental data types such
as integers or strings.  An IPND node MUST support the primitive data
types specified in <xref target="figure4"/>. Note that primitive types use one of
three distinct length specifiers:</t>

<t><list style="symbols">
  <t>Fixed: The content always has a fixed length and SHALL NOT include
a length field. Fixed length numeric values (including floating
point numbers) SHALL be written in network byte order.</t>
  <t>Variable: The content is variable length but is encoded as an
SDNV, therefore it SHALL NOT include a length field.</t>
  <t>Explicit: The content is variable and does not describe its own
length, therefore it MUST include a length field immediately
following the tag value.</t>
</list></t>

<figure title="IPND-SD-TLV Primitive Types" anchor="figure4"><artwork><![CDATA[
   +---------------------------------------------------+
   |TAG #   Definition  Length Type   Content Length   |
   |                                  (unencoded bytes)|
   +---------------------------------------------------+
   |    0   boolean     Fixed                     1    |
   |    1   uint64      Variable                1-8*   |
   |    2   sint64      Variable                1-8*   |
   |    3   fixed16     Fixed                     2    |
   |    4   fixed32     Fixed                     4    |
   |    5   fixed64     Fixed                     8    |
   |    6   float       Fixed                     4    |
   |    7   double      Fixed                     8    |
   |    8   string      Explicit                1-N    |
   |    9   bytes       Explicit                1-N    |
   |10-63   UNASSIGNED                                 |
   +---------------------------------------------------+
    *Denotes content that is SDNV encoded
]]></artwork></figure>

<t>Note that a special case exists for representing the empty string and
the empty byte array for the “string” and “bytes” data types,
respectively. In both cases, “empty” is represented by an explicit
length value of 1 and content of a single null byte.</t>

<t>Constructed data types represent structures that are composed of
other data types.  As described earlier, reserved constructed types
SHALL be assigned tag numbers 64-127.  Additionally, nodes MAY assign
tag numbers 128-255 to private constructed types in order to allow
for implementation-specific constructed types.  An IPND node SHALL
use constructed types to specify service definitions as described in
Section 2.6.3.</t>

<t>It is important to note that the order in which other types are
composed within a constructed type need not be explicitly stated.
Ordering only becomes an issue in the case where a constructed type
(not representing an array structure) contains multiple instances of
the same data type. In order to defeat this issue, implementations
MUST create data type wrappers in order to differentiate identical
types. This design allows IPND to be order-agnostic when it comes to
reading data types that compose a constructed type. Appendix B
describes an example where data type wrappers are used to
differentiate identical fundamental types.</t>

</section>
<section anchor="services" title="Services">

<t>A service is an IPND-SD-TLV structure that represents an
advertisement for a DTN-related resource available on the beacon
source node.  Each service type SHALL have a unique tag number in
order to identify it within the service block. Nodes SHALL use the
initial set of tag assignments described in <xref target="figure5"/> (the rationale
for tag numbering is described in <xref target="ipnd-service-definition-tlv-encoding"/>).</t>

<figure title="IPND-SD-TLV Constructed Services" anchor="figure5"><artwork><![CDATA[
   +------------------------------------------------------------+
   |  TAG #   Definition   Construction                         |
   +------------------------------------------------------------+
   |     64   CLA-TCP-v4   {IP (fixed32), Port (fixed16)}       |
   |     65   CLA-UDP-v4   {IP (fixed32), Port (fixed16)}       |
   |     66   CLA-TCP-v6   {IP (bytes), Port (fixed16)}         |
   |     67   CLA-UDP-v6   {IP (bytes), Port (fixed16)}         |
   |     68   CLA-TCP-HN   {Hostname (string), Port (fixed16)}  |
   |     69   CLA-UDP-HN   {Hostname (string), Port (fixed16)}  |
   |     70   CLA-DCCP-v4  {IP (fixed32), Port (fixed16),       | 
   |                          Servicecode (fixed32)}            |
   |     71   CLA-DCCP-v6  {IP (bytes), Port (fixed16),         | 
   |                          Servicecode (fixed32)}            |
   |     72   CLA-DCCP-HN  {Hostname (string), Port (fixed16),  |
   |                          Servicecode (fixed32)}            |
   | 73-125   UNASSIGNED                                        |
   |    126   NBF-Hashes   Hash IDs (bytes)                     |
   |    127   NBF-Bits     Bit Array (bytes)                    |
   |128-255   PRIVATE USE                                       |
   +------------------------------------------------------------+
]]></artwork></figure>

<t>An IPND node MUST support the service definitions for CLA-TCP-v6 and
CLA-UDP-v6; that is, a node MUST support the standard definitions for
TCP CLA advertisements and UDP CLA advertisements, respectively (both
supporting IPv6 128-bit addresses). An example bitwise representation
of the CLA-TCP-v6 service is depicted in {{figure6}. Note that the
format of the CLA-UDP-v6 service is identical except for the initial
tag number, which would instead be 67 (hex 0x43).</t>

<figure title="CLA-TCP-v6 Service Format" anchor="figure6"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x42    | Len 0x15 (*)  |   Tag 0x09    | Len 0x10 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IPv6 Address                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x03    |          Port Number          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<t>An IPND node MAY support the CLA-TCP-v4, CLA-UDP-v4, CLA-TCP-HN, 
CLA-UDP-HN, CLA-DCCP-v4, CLA-DCCP-v6 and CLA-DCCP-HN service definitions.
Bitwise representations of the CLA-UDP-v4, CLA-TCP-HN and CLA-DCCP-v6 services
are depicted in Appendix A. Additionally, a node MAY support the Neighborhood
Bloom Filter services (NBF-Hashes and NBF-Bits). These services are described
below (<xref target="neighborhood-bloom-filter"/>). Lastly, a node MAY support any
implementation-specific services with tag numbers 128-255.
Appendix B describes an example of an implementation-specific service
that makes use of private tag number assignments.</t>

</section>
<section anchor="neighborhood-bloom-filter" title="Neighborhood Bloom Filter">

<t>In order to efficiently determine link bi-directionality, a node
represents the set of its 1-hop neighbors using a Bloom filter
referred to as the Neighborhood Bloom Filter (NBF). Upon receiving a
beacon from a neighbor that contains NBF service information, a node
can quickly determine whether it is in the neighbor’s NBF set, and
thereby determine whether the link is bidirectional.</t>

<t>Every node that might operate in an environment where discovered
links may not be bidirectional SHOULD include NBF service
advertisements in its multicast or broadcast beacons which describe
the membership of its 1-hop neighbor set. This is especially true if
a node’s routing protocol presumes that links are bidirectional.</t>

<t>An NBF need not be included within every beacon, but one SHOULD be
present within at least one broadcast or multicast beacon following a
change in the 1-hop neighborhood of the node.  An NBF advertisement
MAY be present in every broadcast or multicast beacon.</t>

<t>In order to advertise an NBF, an IPND node MUST include two distinct
services in the Service Block of some (or all) of its beacons: NBF-
Hashes, which describes the hash algorithms used to compute the NBF
bit array; and NBF-Bits, which contains the actual bit array of the
NBF. The bits set in the NBF-Bits structure MUST be defined by
computing hashes on the canonical EID of each 1-hop neighbor
considered to be “up”. Each hash algorithm used to compute the NBF
bit array MUST be identified in the NBF-Hashes structure (using
numerical identifiers; one byte per identifier). Exemplary bitwise
formats of fictional NBF-Hashes and NBF-Bits structures are depicted
in <xref target="figure7"/> and <xref target="figure8"/>, respectively. Note that the NBF bit array
in the NBF-Bits structure must be byte-aligned, and SHALL be padded
with zero bits at the end of the bit array to achieve byte-alignment.</t>

<figure title="Fictional NBF-Hashes Service Format" anchor="figure7"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x7E    | Len 0x05 (*)  |   Tag 0x09    | Len 0x03 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Hash 0 ID   |   Hash 1 ID   |   Hash 2 ID   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<figure title="Fictional NBF-Bits Service Format" anchor="figure8"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x7F    | Len 0x06 (*)  |   Tag 0x09    | Len 0x04 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Byte 0    |     Byte 1    |     Byte 2    |     Byte 3    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<t>Different networks naturally have distinct requirements, tolerance
for overhead, and node computing resources, so the parameters of the
Bloom Filter such as the bit array length, and the number and types
of hash algorithms, are not mandated by IPND. However, all nodes
participating in such a DTN SHOULD be aware of the same set of hash
algorithms and their respective identifiers used in NBF-Hashes
structures.</t>

<t>NBF services, if present, MAY be ignored by a receiving IPND node if
its implementation does not provide for it, or if the parameters of
the Bloom filter cannot be determined with certainty (e.g. if the
hash function identifiers are not recognized).</t>

</section>
</section>
<section anchor="ipnd-and-clas" title="IPND and CLAs">

<t>IP-based CLAs are generally expected to depend on an IPND
implementation module for their discovery service. A CLA MAY opt not
to use IPND, either because that CLA does not require discovery or
provides its own.</t>

<t>Once IPND discovers a new neighbor it MUST inform all CLAs which
depend on IPND of the neighbor’s existence and the discovered
parameters.  The exact means by which IPND communicates with the CLAs
is implementation dependent.</t>

<t>Similarly, once IPND determines that a link has gone down, it MUST
inform all dependent CLAs of the link down event.</t>

</section>
<section anchor="disconnection" title="Disconnection">

<t>Note that an IPND node SHOULD maintain state over all existing
neighbors in order to prevent CLAs from needlessly attempting to
establish connections between nodes that are already connected.  To
maintain the current neighbor set, IPND removes stale neighbors after
the defined neighbor receive timeout period elapses without receiving
any beacon messages from a particular neighbor.</t>

<t>Upon detecting a neighbor that is no longer available, IPND MAY
provide hints to the CLAs that the neighbor is gone. Note that some
CLAs themselves provide keepalive-type functionality and therefore
IPND is not necessarily required to detect down neighbors.  However,
relying on IPND to provide both discovery and availability
information provides a single, coherent point in the system design to
maintain neighbor information.</t>

</section>
</section>
<section anchor="relation-to-other-discovery-protocols" title="Relation to Other Discovery Protocols">

<t>A variety of discovery protocols exist in other contexts and domains.
These discovery protocols include the ability to discover available
neighbors and services.  For example, the IETF zero configuration
working group <xref target="RFC3927"/>, the <xref target="BONJOUR">Bonjour protocol</xref>, and the OLSRv2
neighborhood discovery protocol(NHDP)<xref target="RFC6130"/> all provide similar
functionality.</t>

<t>Other rendezvous mechanisms are possible that allow a node to find a
neighbor of a particular type or with particular properties.  For
example, the Domain Name System (DNS) or Distributed Hash Tables
(DHTs) could be used to find a neighbor that provides an inter-
planetary gateway.  Such advanced rendezvous schemes are beyond the
scope of this document.</t>

<t>In contrast, DTN-IPND is designed to be DTN-specific, efficient, and
extremely lightweight.  For instance, DTN-IPND is capable of
supporting arbitrary length DTN EIDs, and may include CLA information
in order to maximize the utility of each beacon message without
requiring multiple round-trip transmissions in order to perform
complex protocol negotiation.</t>

<t>While DTN-IPND MAY be used in non-DTN environments, its use is
RECOMMENDED only in DTNs.</t>

</section>
<section anchor="implementation-experience" title="Implementation Experience">

<t>Raytheon BBN Technologies (BBN) developed an implementation of DTN
IPND which has been added to the bundle protocol reference
implementation, DTN2, as an experimental build option.</t>

<t>BBN has also implemented and deployed an earlier version of DTN IPND
as part of the <xref target="SPINDLE"></xref> project.</t>

<t>An earlier version of this specification has also been implemented
as part of the <xref target="IBR-DTN"></xref> project at Technical University
of Braunschweig, Germany.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>Neighbor discovery may be perceived as an impediment to security
because it advertises a potential target for attacks.  Discovering
the existence of a particular node is orthogonal to securing the
services of that node.  Nodes that desire or require higher-levels of
security SHOULD disable the broadcast IPND beacons and rely instead
on static neighbor configuration.</t>

<t>Further, neighbor discovery represents a potential source of network
congestion and contention.  Therefore, careful consideration should
be made to the frequency and TTL / Hop Limit scope of beacons when
setting implementation-specific parameters, particularly when a setting
affects larger regions of the network.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="port-number" title="Port Number">
<t>Port number is requested to be assigned by IANA as the default UDP port for IPND, 
prior to publication if this draft is approved for publication as an RFC.</t>

<t>Service Name:  dtn-ipnd</t>

<t>Transport Protocol(s):  UDP</t>

<t>Assignee:  Scott Johnson (scott@spacelypackets.com)</t>

<t>Contact:  Scott Johnson (scott@spacelypackets.com)</t>

<t>Description:  DTN IP Neighbor Discovery Protocol</t>

<t>Reference:  (This document)</t>

<t>Port Number:  TBD</t>

</section>
<section anchor="tag-numbers" title="Tag numbers">
<t>A new IANA registry should be created to document the standard tag
number assignments for IPND Service Definition TLV structures.  The
registry shall define a single numberspace with values representing
the IPND-SD-TLV tag numbers as described in Section 2.6.2.</t>

<t>The registration policy for this new registry shall be:</t>

<t>0-63: Expert Review. Specifications in this subset must
    only be for primitive datatypes, and the specification must
    describe which “length type” will be used for the new datatype as
    well as the unencoded content length (see <xref target="figure4"/>). New
    registrations shall only be approved for datatypes reasonably
    expected to have a use case applicable throughout the community.</t>

<t>64-127: Expert Review. Specifications in this subset must
    only be for constructed datatypes, and the specification must
    describe the composition of the new datatype using references to
    existing datatypes (as in <xref target="figure5"/>). New registrations shall only
    be approved for datatypes reasonably expected to have a use case
    applicable throughout the community.</t>

<t>128-255: Private or Experimental use. No assignment by IANA.</t>

<t>The value range is: unsigned 8-bit integer.</t>

<figure title="IANA IPND-SD-TLV Tag Number Assignments" anchor="figure9"><artwork><![CDATA[
   +-------------------------------------------------------+
   |  Value   Description                    Reference     |
   +-------------------------------------------------------+
   |      0   Primitive boolean tag          This Document |
   |      1   Primitive uint64 tag           This Document |
   |      2   Primitive sint64 tag           This Document |
   |      3   Primitive fixed16 tag          This Document |
   |      4   Primitive fixed32 tag          This Document |
   |      5   Primitive fixed64 tag          This Document |
   |      6   Primitive float tag            This Document |
   |      7   Primitive double tag           This Document |
   |      8   Primitive string tag           This Document |
   |      9   Primitive byte array tag       This Document |
   |  10-63   Unassigned (primitive only)                  |
   |     64   CLA-TCP-v4 service tag         This Document |
   |     65   CLA-UDP-v4 service tag         This Document |
   |     66   CLA-TCP-v6 service tag         This Document |
   |     67   CLA-UDP-v6 service tag         This Document |
   |     68   CLA-TCP-HN service tag         This Document |
   |     69   CLA-UDP-HN service tag         This Document |
   |     70   CLA-DCCP-v4 service tag        This Document |
   |     71   CLA-DCCP-v6 service tag        This Document |
   |     72   CLA-DCCP-HN service tag        This Document |
   | 73-125   Unassigned (constructed only)                |
   |    126   NBF-Hashes service tag         This Document |
   |    127   NBF-Bits service tag           This Document |
   |128-255   Private/Experimental Use                     |
   +-------------------------------------------------------+
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference  anchor='RFC9171' target='http://www.rfc-editor.org/info/rfc9171'>
<front>
<title>Bundle Protocol Version 7</title>
<author initials='K.' surname='Scott' fullname='K. Scott'><organization /></author>
<author initials='S.' surname='Burleigh' fullname='S. Burleigh'><organization /></author>
<date year='2022' month='January' />
<abstract><t>This document presents a specification for the Bundle Protocol, adapted from the experimental Bundle Protocol specification developed by the Delay-Tolerant Networking Research Group of the Internet Research Task Force and documented in RFC 5050.</t></abstract>
</front>
<seriesInfo name='RFC' value='9171'/>
<seriesInfo name='DOI' value='10.17487/RFC9171'/>
</reference>

<reference  anchor='RFC9174' target='http://www.rfc-editor.org/info/rfc9174'>
<front>
<title>Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4</title>
<author initials='B.' surname='Sipos' fullname='B. Sipos'><organization /></author>
<author initials='M.' surname='Demmer' fullname='M. Demmer'><organization /></author>
<author initials='J.' surname='Ott' fullname='J. Ott'><organization /></author>
<author initials='S.' surname='Perreault' fullname='S. Perreault'><organization /></author>
<date year='2022' month='January' />
<abstract><t>This document describes a TCP convergence layer (TCPCL) for Delay-Tolerant Networking (DTN).  This version of the TCPCL protocol resolves implementation issues in the earlier TCPCL version 3 as defined in RFC 7242 and provides updates to the Bundle Protocol (BP) contents, encodings, and convergence-layer requirements in BP version 7 (BPv7).  Specifically, TCPCLv4 uses BPv7 bundles encoded by the Concise Binary Object Representation (CBOR) as its service data unit being transported and provides a reliable transport of such bundles. This TCPCL version also includes security and extensibility mechanisms.</t></abstract>
</front>
<seriesInfo name='RFC' value='9174'/>
<seriesInfo name='DOI' value='10.17487/RFC9174'/>
</reference>



<reference  anchor='RFC2119' target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor='RFC1112' target='http://www.rfc-editor.org/info/rfc1112'>
<front>
<title>Host extensions for IP multicasting</title>
<author initials='S.E.' surname='Deering' fullname='S.E. Deering'><organization /></author>
<date year='1989' month='August' />
<abstract><t>This memo specifies the extensions required of a host implementation of the Internet Protocol (IP) to support multicasting.  Recommended procedure for IP multicasting in the Internet.  This RFC obsoletes RFCs 998 and 1054.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='5'/>
<seriesInfo name='RFC' value='1112'/>
<seriesInfo name='DOI' value='10.17487/RFC1112'/>
</reference>



<reference  anchor='RFC4291' target='http://www.rfc-editor.org/info/rfc4291'>
<front>
<title>IP Version 6 Addressing Architecture</title>
<author initials='R.' surname='Hinden' fullname='R. Hinden'><organization /></author>
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></author>
<date year='2006' month='February' />
<abstract><t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol.  The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t><t>This document obsoletes RFC 3513, &quot;IP Version 6 Addressing Architecture&quot;.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4291'/>
<seriesInfo name='DOI' value='10.17487/RFC4291'/>
</reference>



<reference  anchor='RFC3376' target='http://www.rfc-editor.org/info/rfc3376'>
<front>
<title>Internet Group Management Protocol, Version 3</title>
<author initials='B.' surname='Cain' fullname='B. Cain'><organization /></author>
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></author>
<author initials='I.' surname='Kouvelas' fullname='I. Kouvelas'><organization /></author>
<author initials='B.' surname='Fenner' fullname='B. Fenner'><organization /></author>
<author initials='A.' surname='Thyagarajan' fullname='A. Thyagarajan'><organization /></author>
<date year='2002' month='October' />
</front>
<seriesInfo name='RFC' value='3376'/>
<seriesInfo name='DOI' value='10.17487/RFC3376'/>
</reference>



<reference  anchor='RFC2710' target='http://www.rfc-editor.org/info/rfc2710'>
<front>
<title>Multicast Listener Discovery (MLD) for IPv6</title>
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></author>
<author initials='W.' surname='Fenner' fullname='W. Fenner'><organization /></author>
<author initials='B.' surname='Haberman' fullname='B. Haberman'><organization /></author>
<date year='1999' month='October' />
<abstract><t>This document specifies the protocol used by an IPv6 router to discover the presence of multicast listeners (that is, nodes wishing to receive multicast packets) on its directly attached links, and to discover specifically which multicast addresses are of interest to those neighboring nodes.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2710'/>
<seriesInfo name='DOI' value='10.17487/RFC2710'/>
</reference>



<reference  anchor='RFC3810' target='http://www.rfc-editor.org/info/rfc3810'>
<front>
<title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
<author initials='R.' surname='Vida' fullname='R. Vida' role='editor'><organization /></author>
<author initials='L.' surname='Costa' fullname='L. Costa' role='editor'><organization /></author>
<date year='2004' month='June' />
<abstract><t>This document updates RFC 2710, and it specifies Version 2 of the ulticast Listener Discovery Protocol (MLDv2).  MLD is used by an IPv6 router to discover the presence of multicast listeners on directly attached links, and to discover which multicast addresses are of interest to those neighboring nodes.  MLDv2 is designed to be interoperable with MLDv1.  MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='3810'/>
<seriesInfo name='DOI' value='10.17487/RFC3810'/>
</reference>



<reference  anchor='RFC7346' target='http://www.rfc-editor.org/info/rfc7346'>
<front>
<title>IPv6 Multicast Address Scopes</title>
<author initials='R.' surname='Droms' fullname='R. Droms'><organization /></author>
<date year='2014' month='August' />
<abstract><t>This document updates the definitions of IPv6 multicast scopes and therefore updates RFCs 4007 and 4291.</t></abstract>
</front>
<seriesInfo name='RFC' value='7346'/>
<seriesInfo name='DOI' value='10.17487/RFC7346'/>
</reference>



<reference  anchor='RFC3986' target='http://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='T. Berners-Lee'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<date year='2005' month='January' />
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="ASN1-BER" >
  <front>
    <title>ITU-T Rec. X.690, Abstract Syntax Notation One (ASN.1), Encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER), ISO/IEC 8825-1:2002</title>
    <author >
      <organization></organization>
    </author>
    <date year="2002"/>
  </front>
</reference>
<reference anchor="BONJOUR" >
  <front>
    <title>Bonjour</title>
    <author initials="S." surname="Cheshire" fullname="Stuart Cheshire">
      <organization></organization>
    </author>
    <date year="2005" month="April"/>
  </front>
</reference>
<reference anchor="SPINDLE" >
  <front>
    <title>Survivable Policy-Influenced Networking: Disruption-tolerance through Learning and Evolution</title>
    <author initials="R." surname="Krishnan">
      <organization></organization>
    </author>
    <date year="2006" month="October"/>
  </front>
</reference>
<reference anchor="IBR-DTN" >
  <front>
    <title>IBR-DTN: A lightweight, modular and highly portable Bundle Protocol implementation</title>
    <author initials="S." surname="Schildt" fullname="Sebastian Schildt">
      <organization></organization>
    </author>
    <author initials="J." surname="Morgenroth" fullname="Johannes Morgenroth">
      <organization></organization>
    </author>
    <author initials="W-B." surname="Poettner" fullname="Wolf-Bastian Poettner">
      <organization></organization>
    </author>
    <author initials="L." surname="Wolf" fullname="Lars Wolf">
      <organization></organization>
    </author>
    <date year="2011" month="January"/>
  </front>
  <seriesInfo name="in" value="Electronic Communicatios of the EASST, Vol. 37, pages 1-11"/>
</reference>




<reference  anchor='RFC4838' target='http://www.rfc-editor.org/info/rfc4838'>
<front>
<title>Delay-Tolerant Networking Architecture</title>
<author initials='V.' surname='Cerf' fullname='V. Cerf'><organization /></author>
<author initials='S.' surname='Burleigh' fullname='S. Burleigh'><organization /></author>
<author initials='A.' surname='Hooke' fullname='A. Hooke'><organization /></author>
<author initials='L.' surname='Torgerson' fullname='L. Torgerson'><organization /></author>
<author initials='R.' surname='Durst' fullname='R. Durst'><organization /></author>
<author initials='K.' surname='Scott' fullname='K. Scott'><organization /></author>
<author initials='K.' surname='Fall' fullname='K. Fall'><organization /></author>
<author initials='H.' surname='Weiss' fullname='H. Weiss'><organization /></author>
<date year='2007' month='April' />
<abstract><t>This document describes an architecture for delay-tolerant and disruption-tolerant networks, and is an evolution of the architecture originally designed for the Interplanetary Internet, a communication system envisioned to provide Internet-like services across interplanetary distances in support of deep space exploration.  This document describes an architecture that addresses a variety of problems with internetworks having operational and performance characteristics that make conventional (Internet-like) networking approaches either unworkable or impractical.  We define a message- oriented overlay that exists above the transport (or other) layers of the networks it interconnects.  The document presents a motivation for the architecture, an architectural overview, review of state management required for its operation, and a discussion of application design issues.  This document represents the consensus of the IRTF DTN research group and has been widely reviewed by that group.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='4838'/>
<seriesInfo name='DOI' value='10.17487/RFC4838'/>
</reference>



<reference  anchor='RFC6693' target='http://www.rfc-editor.org/info/rfc6693'>
<front>
<title>Probabilistic Routing Protocol for Intermittently Connected Networks</title>
<author initials='A.' surname='Lindgren' fullname='A. Lindgren'><organization /></author>
<author initials='A.' surname='Doria' fullname='A. Doria'><organization /></author>
<author initials='E.' surname='Davies' fullname='E. Davies'><organization /></author>
<author initials='S.' surname='Grasic' fullname='S. Grasic'><organization /></author>
<date year='2012' month='August' />
<abstract><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.</t><t>This document defines PRoPHET, a Probabilistic Routing Protocol using History of Encounters and Transitivity.  PRoPHET is a variant of the epidemic routing protocol for intermittently connected networks that operates by pruning the epidemic distribution tree to minimize resource usage while still attempting to achieve the \%best-case routing capabilities of epidemic routing.  It is intended for use in sparse mesh networks where there is no guarantee that a fully connected path between the source and destination exists at any time, rendering traditional routing protocols unable to deliver messages between hosts.  These networks are examples of networks where there is a disparity between the latency requirements of applications and the capabilities of the underlying network (networks often referred to as delay and disruption tolerant).  The document presents an architectural overview followed by the protocol specification. This document defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6693'/>
<seriesInfo name='DOI' value='10.17487/RFC6693'/>
</reference>



<reference  anchor='RFC7122' target='http://www.rfc-editor.org/info/rfc7122'>
<front>
<title>Datagram Convergence Layers for the Delay- and Disruption-Tolerant Networking (DTN) Bundle Protocol and Licklider Transmission Protocol (LTP)</title>
<author initials='H.' surname='Kruse' fullname='H. Kruse'><organization /></author>
<author initials='S.' surname='Jero' fullname='S. Jero'><organization /></author>
<author initials='S.' surname='Ostermann' fullname='S. Ostermann'><organization /></author>
<date year='2014' month='March' />
<abstract><t>This document specifies the preferred method for transporting Delay- and Disruption-Tolerant Networking (DTN) protocol data over the Internet using datagrams.  It covers convergence layers for the Bundle Protocol (RFC 5050), as well as the transportation of segments using the Licklider Transmission Protocol (LTP) (RFC 5326).  UDP and the Datagram Congestion Control Protocol (DCCP) are the candidate datagram protocols discussed.  UDP can only be used on a local network or in cases where the DTN node implements explicit congestion control.  DCCP addresses the congestion control problem, and its use is recommended whenever possible.  This document is a product of the Delay-Tolerant Networking Research Group (DTNRG) and represents the consensus of the DTNRG.</t></abstract>
</front>
<seriesInfo name='RFC' value='7122'/>
<seriesInfo name='DOI' value='10.17487/RFC7122'/>
</reference>



<reference  anchor='RFC5771' target='http://www.rfc-editor.org/info/rfc5771'>
<front>
<title>IANA Guidelines for IPv4 Multicast Address Assignments</title>
<author initials='M.' surname='Cotton' fullname='M. Cotton'><organization /></author>
<author initials='L.' surname='Vegoda' fullname='L. Vegoda'><organization /></author>
<author initials='D.' surname='Meyer' fullname='D. Meyer'><organization /></author>
<date year='2010' month='March' />
<abstract><t>This document provides guidance for the Internet Assigned Numbers Authority (IANA) in assigning IPv4 multicast addresses.  It obsoletes RFC 3171 and RFC 3138 and updates RFC 2780.  This memo documents an  Internet Best Current Practice.</t></abstract>
</front>
<seriesInfo name='BCP' value='51'/>
<seriesInfo name='RFC' value='5771'/>
<seriesInfo name='DOI' value='10.17487/RFC5771'/>
</reference>



<reference  anchor='RFC6621' target='http://www.rfc-editor.org/info/rfc6621'>
<front>
<title>Simplified Multicast Forwarding</title>
<author initials='J.' surname='Macker' fullname='J. Macker' role='editor'><organization /></author>
<date year='2012' month='May' />
<abstract><t>This document describes a Simplified Multicast Forwarding (SMF) mechanism that provides basic Internet Protocol (IP) multicast forwarding suitable for limited wireless mesh and mobile ad hoc network (MANET) use.  It is mainly applicable in situations where efficient flooding represents an acceptable engineering design trade-off. It defines techniques for multicast duplicate packet detection (DPD), to be applied in the forwarding process, for both IPv4 and IPv6 protocol use.  This document also specifies optional mechanisms for using reduced relay sets to achieve more efficient multicast data distribution within a mesh topology as compared to Classic Flooding. Interactions with other protocols, such as use of information provided by concurrently running unicast routing protocols or interaction with other multicast protocols, as well as multiple deployment approaches are also described.  Distributed algorithms for selecting reduced relay sets and related discussion are provided in the appendices.  Basic issues relating to the operation of multicast MANET border routers are discussed, but ongoing work remains in this area and is beyond the scope of this document.  This document defines an  Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6621'/>
<seriesInfo name='DOI' value='10.17487/RFC6621'/>
</reference>



<reference  anchor='RFC6256' target='http://www.rfc-editor.org/info/rfc6256'>
<front>
<title>Using Self-Delimiting Numeric Values in Protocols</title>
<author initials='W.' surname='Eddy' fullname='W. Eddy'><organization /></author>
<author initials='E.' surname='Davies' fullname='E. Davies'><organization /></author>
<date year='2011' month='May' />
<abstract><t>Self-Delimiting Numeric Values (SDNVs) have recently been introduced as a field type in proposed Delay-Tolerant Networking protocols. SDNVs encode an arbitrary-length non-negative integer or arbitrary- length bitstring with minimum overhead.  They are intended to provide protocol flexibility without sacrificing economy and to assist in future-proofing protocols under development.  This document describes formats and algorithms for SDNV encoding and decoding, along with notes on implementation and usage.  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 is not an Internet Standards Track specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6256'/>
<seriesInfo name='DOI' value='10.17487/RFC6256'/>
</reference>



<reference  anchor='RFC3927' target='http://www.rfc-editor.org/info/rfc3927'>
<front>
<title>Dynamic Configuration of IPv4 Link-Local Addresses</title>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'><organization /></author>
<author initials='B.' surname='Aboba' fullname='B. Aboba'><organization /></author>
<author initials='E.' surname='Guttman' fullname='E. Guttman'><organization /></author>
<date year='2005' month='May' />
<abstract><t>To participate in wide-area IP networking, a host needs to be configured with IP addresses for its interfaces, either manually by the user or automatically from a source on the network such as a Dynamic Host Configuration Protocol (DHCP) server.  Unfortunately, such address configuration information may not always be available. It is therefore beneficial for a host to be able to depend on a useful subset of IP networking functions even when no address configuration is available.  This document describes how a host may automatically configure an interface with an IPv4 address within the 169.254/16 prefix that is valid for communication with other devices connected to the same physical (or logical) link.</t><t>IPv4 Link-Local addresses are not suitable for communication with devices not directly connected to the same physical (or logical) link, and are only used where stable, routable addresses are not available (such as on ad hoc or isolated networks).  This document does not recommend that IPv4 Link-Local addresses and routable addresses be configured simultaneously on the same interface.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='3927'/>
<seriesInfo name='DOI' value='10.17487/RFC3927'/>
</reference>



<reference  anchor='RFC6130' target='http://www.rfc-editor.org/info/rfc6130'>
<front>
<title>Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)</title>
<author initials='T.' surname='Clausen' fullname='T. Clausen'><organization /></author>
<author initials='C.' surname='Dearlove' fullname='C. Dearlove'><organization /></author>
<author initials='J.' surname='Dean' fullname='J. Dean'><organization /></author>
<date year='2011' month='April' />
<abstract><t>This document describes a 1-hop and symmetric 2-hop neighborhood discovery protocol (NHDP) for mobile ad hoc networks (MANETs).  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6130'/>
<seriesInfo name='DOI' value='10.17487/RFC6130'/>
</reference>




    </references>


<section anchor="additional-figures" title="Additional Figures">

<figure title="CLA-UDP-v4 Service Format" anchor="figure10"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x41    | Len 0x08 (*)  |   Tag 0x04    | IPv4 Address  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              IPv4 Address (cont)              |   Tag 0x03    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Port Number          |
   +-+-+-+-+-+-+-+-++-+-+-+-+-++-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<figure title="CLA-TCP-HN Service Format" anchor="figure11"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x44    | Len 0x0F (*)  |   Tag 0x08    | Len 0x0A (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Hostname ("dtnfoo.net")                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                Hostname ("dtnfoo.net") (cont)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Hostname ("dtnfoo.net") (cont) |   Tag 0x03    |   Port Num    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Port Num (cont)|
   +-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

<figure title="CLA-DCCP-v6 Service Format" anchor="figure12"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x47    | Len 0x1A (*)  |   Tag 0x09    | Len 0x10 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IPv6 Address                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv6 Address (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x03    |          Port Number          |   Tag 0x04    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      DCCP Service Code                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

</section>
<section anchor="fictional-private-service-example" title="Fictional Private Service Example">

<t>The following describes a fictional implementation-specific routing
service in order to demonstrate the use of IPND-SD-TLV encoding
rules. <xref target="figure13"/> defines the construction of the service structure
using tag numbers out of the private tag assignment space. Note the
use of “wrapper” data types in order to differentiate between what
would otherwise be identical data types within the composition of the
router service’s definition.</t>

<figure title="Fictional Router Definition" anchor="figure13"><artwork><![CDATA[
   +-----------------------------------------------+
   | TAG #   Definition   Construction             |
   +-----------------------------------------------+
   |   128   FooRouter    {Seed (SeedVal),         |
   |                       BaseWeight (WeightVal), |
   |                       RootHash (bytes)}       |
   |   129   SeedVal      Value (fixed16)          |
   |   130   WeightVal    Value (fixed16)          |
   +-----------------------------------------------+
]]></artwork></figure>

<t><xref target="figure14"/> depicts the bitwise representation of an IPND-SD-TLV
encoded FooRouter service using fictional content values. Note that
the ordering of the service’s composition does not exactly match the
definition; this should not be an issue for a receiving node with
knowledge of the FooRouter service.</t>

<figure title="Fictional FooRouter Format" anchor="figure14"><artwork><![CDATA[
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x80    | Len 0x11 (*)  |   Tag 0x82    | Len 0x03 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x03    |  Weight Value (e.g. 0x123F)   |   Tag 0x09    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Len 0x05 (*)  |   Byte 0xDE   |   Byte 0xAD   |   Byte 0xBE   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Byte 0xEF   |   Byte 0x04   |   Tag 0x81    | Len 0x03 (*)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Tag 0x03    |   Seed Value (e.g. 0xB4A1)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    (*) Denotes the use of SDNV encoding
]]></artwork></figure>

</section>


  </back>
</rfc>

