<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-taylor-dtn-btpu-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="BTPU">Bundle Transfer Protocol - Unidirectional</title>
    <seriesInfo name="Internet-Draft" value="draft-taylor-dtn-btpu-01"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="16"/>
    <area>INT</area>
    <workgroup>Delay/Disruption Tolerant Networking</workgroup>
    <keyword>DTN</keyword>
    <keyword>BPv7</keyword>
    <keyword>Bundle Protocol</keyword>
    <abstract>
      <?line 72?>

<t>This document defines a protocol for the unidirectional transfer of large binary objects, typically Bundle Protocol version 7 bundles, between two nodes connected by a unidirectional, unreliable, frame-based link-layer protocol, without requiring IP services.</t>
      <t>The protocol does not require a return path for acknowledgements, but instead supports data repetition as a mechanism to protect against data loss.  It fully supports the disaggregation of flows of bundles of different priority, preventing head-of-line blocking impacting performance.</t>
      <t>The binary wire format of the protocol is designed to enable performant implementation in hardware or software, with the aim of enabling protocol implementations to run at the line-rate of the underlying link-layer protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ricktaylor.github.io/btpu/draft-taylor-dtn-btpu.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-taylor-dtn-btpu/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Delay/Disruption Tolerant Networking Working Group mailing list (<eref target="mailto:dtn@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dtn/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dtn/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ricktaylor/btpu"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Bundle Protocol version 7 (BPv7) is defined in terms a layered logical architecture, detailed in <xref target="RFC9171"/>, wherein the responsibility for the storing and routing of bundles lies with the Bundle Processing Agent (BPA), and the BPA relies upon Convergence Layer Protocols (CLAs) to provide bundle transport between nodes. CLAs provide a unified interface to the BPA, allowing BPAs to be link-layer agnostic, but still use a diverse range of Convergence Layer Protocols to transfer bundles between BPAs over underlying link-layer protocols.</t>
      <t>In the realm of near- and deep-space communication there are a number of standardized link-layer protocols, including <xref target="USLP"/>, <xref target="TM"/>, <xref target="AOS"/>, <xref target="DVB-S2X"/>, that share a pair of common properties:</t>
      <ul spacing="normal">
        <li>
          <t>They are unidirectional: data transfer occurs in one direction only, there is no in-band return path for data.</t>
        </li>
        <li>
          <t>They are frame-based: the link-layer protocol will guarantee that a frame of data is either delivered to a receiver in its entirety or not at all. Frames may be of fixed or variable length.</t>
        </li>
      </ul>
      <t>These characteristics provide a common baseline that allows the definition of a lightweight protocol for transferring BPv7 bundles meeting the requirements of a BPv7 Convergence Layer Protocol, and this document describes such a protocol, Bundle Transfer Protocol - Unidirectional (BTPU), suitable for implementation over any link-layer protocol that shares these characteristics.  The protocol is applicable to other link-layer technologies which share these characteristics beyond those commonly used for space communication, for example 5G Unstructured PDUs <xref target="_5G"/>, or <xref target="IEEE.802.3"/>, without requiring underlying IP services.  Although designed for any link-layer protocol that shares the characteristics above, additional specification or profiling may be required to map the constructs of the link-layer protocol to the mechanisms defined in this specification.</t>
      <figure anchor="fig-stack">
        <name>The location of BTPU in relation to the Bundle Protocol and a Link-layer protocol</name>
        <artwork align="center"><![CDATA[
+----------------------+
|  DTN Application     |
+----------------------+
|  BPv7 / BPv6         |
+----------------------+
|  BTPU               |
+----------------------+
|  Link-layer Protocol |
+----------------------+
]]></artwork>
      </figure>
      <t>The driving use-case of the protocol has been the transfer of BPv7 Bundles, however it is equally capable of transferring any kind of binary data, but includes no explicit discriminator of the format of a particular block of binary data. If multiple different types of binary data are to be transferred by a single implementation, this specification considers the differentiation between different types of binary data to be a matter for the implementation. For example, both BPv6 Bundles (<xref target="RFC5050"/>) and BPv7 Bundles can be multiplexed without issue, as the different formats can be distinguished by simple examination of the initial octets of a received bundle by an implementation.  Additionally, the segmentation mechanism enables the use of this protocol with binary data formats that do not natively support some form of fragmentation.</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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>Within the scope of this document, the following terms have specific meaning:</t>
        <dl>
          <dt>Bundle:</dt>
          <dd>
            <t>A higher-layer protocol data unit, typically a BPv7 Bundle as defined in <xref target="RFC9171"/>.</t>
          </dd>
          <dt>Link-layer PDU:</dt>
          <dd>
            <t>The protocol data unit, excluding any link-layer protocol specific headers or metadata, that makes up a complete transmission unit or frame, as defined by the link-layer protocol specification.</t>
          </dd>
          <dt>Message:</dt>
          <dd>
            <t>A single protocol data item, see <xref target="message-definitions"/>.</t>
          </dd>
          <dt>Transfer:</dt>
          <dd>
            <t>The context in which the transmission of the Segments of a single Bundle occurs, see <xref target="transfers"/>.</t>
          </dd>
          <dt>Segment:</dt>
          <dd>
            <t>In order to transfer a Bundle larger than a Link-layer PDU, Bundles may be subdivided into Segments in order to fit within a Link-layer PDU, see <xref target="transfers"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>The purpose of the protocol is to transfer a series of Bundles between two nodes. Because a Bundle is of variable length, which is unlikely to be exactly the same size as a Link-layer PDU, the protocol defines a mechanism to divide Bundles into Segments as required, such that each Link-layer PDU is efficiently filled with data, and one or more Bundles can be transferred in a minimal number of Link-layer PDUs, described in more detail in <xref target="transfers"/>.</t>
      <t>This segmentation is unrelated to BPv7 bundle fragmentation as defined in <xref section="5.8" sectionFormat="of" target="RFC9171"/>.  Although BPv7 bundle fragmentation may be used to sub-divide oversized BPv7 bundles, the required duplication of metadata blocks can result in inefficiencies or fail to generate BPv7 bundle fragment small enough to fit in a single Link-layer PDU.</t>
      <t>As a sender may prioritize the transfer of each Bundle differently, the protocol allows for the multiplexing of Bundle transfers, so that the transfer of higher priority Bundles may interrupt the transfer of other Bundles, avoiding "head of line blocking", see <xref target="interleaving-transfers"/> for more detail.</t>
      <section anchor="messages">
        <name>Messages</name>
        <t>The basic primitive of the protocol is the Message, a self-describing unit of protocol control information of variable length. The sender is responsible for composing one or more Messages as required, and packing them into a Link-layer PDU, such that a single PDU is optimally filled.  The receiving node parses the contained Messages from each received Link-layer PDU, and then processes them as individual control signals.  This sequence of Messages is the logical control-plane used by the protocol.  This document uses the verb "emit" to describe to the writing of a new Message to a Link-layer PDU ready for transmission, to differentiate from the the transmission of the Link-layer PDU itself, as many Messages may emitted prior to the transmission of the containing PDU.</t>
        <t>See <xref target="message-definitions"/> for detail of each type of Message.</t>
      </section>
      <section anchor="padding">
        <name>Padding</name>
        <t>Because the size of a Bundle is not expected to exactly match the size of a Link-layer PDU, an implementation will likely need to add padding to the PDU so that the Link-layer PDU size requirements are met.  Two Messages are available for this purpose: The <xref target="definite-padding-message">Definite Padding Message</xref> and the <xref target="indefinite-padding-message">Indefinite Padding Message</xref>.  Padding Messages are valid at any point within a Link-layer PDU.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that implementations use the Definite Padding Message to add padding to a Link-layer PDU, except when less than four octets of padding are required, as the minimum length of the Definite Padding Message is four octets.</t>
        <t>When the link-layer protocol provides variable length Link-layer PDUs, implementations <bcp14>SHOULD</bcp14> take into account the mechanisms used by the link-layer protocol to support variable length Link-layer PDUs, and emit Link-layer PDUs of a suitable size for the underlying protocol. For example, if variable length Link-layer PDUs are implemented by the link-layer protocol using a sub-framing mechanism, then emitting Link-layer PDUs of a single, or whole number of sub-frames may increase reliability.</t>
        <t>The algorithm used to pad and pack Messages efficiently into Link-layer PDUs is an implementation matter.</t>
      </section>
    </section>
    <section anchor="transfers">
      <name>Segmentation and Transfers</name>
      <t>As described in the <xref target="protocol-overview">Protocol Overview</xref>, in order to transfer Bundles larger than a single Link-layer PDU into multiple PDUs, Bundles are be divided into a sequence of Segments by the sender and each Segment is emitted in its own a Message. However, if a complete Bundle can fit in the next Link-layer PDU, then the Bundle <bcp14>SHOULD</bcp14> be transferred without segmentation, see the <xref target="bundle-message">Bundle Message</xref>.</t>
      <t>Each Segment is assigned a monotonically increasing integral Segment Index, starting at zero (0), that indicates the relative position of the Segment within the total sequence of Segments.  In addition to a Segment Index, every Segment is associated with a Transfer that provides context to the sequence of Segments to enable the correct reassembly of the original Bundle. Each Transfer is assigned a number as an identifier, with each identified Transfer mapping to the segmentation of a single Bundle.</t>
      <t>The transfer of a sequence of Segments of a Bundle a sender <bcp14>MUST</bcp14> be emitted via a series of <xref target="transfer-segment-message">Transfer Segment Messages</xref> carrying the same Transfer identifier.  The end of a sequence of Segments <bcp14>MUST</bcp14> be indicated by emitting a <xref target="transfer-end-message">Transfer End Message</xref>, including the final Segment and the identifier of the Transfer that is now complete.</t>
      <t>A receiver reassembles the transferred Bundle by concatenating the Segments that share a common Transfer number in the order of their Segment Index.  When all the Segments have been received and concatenated, a receiver is expected to pass the recombined Bundle to an upper layer for further processing.</t>
      <t>Transfer numbers are expressed as 32-bit unsigned integers. A sending implementation <bcp14>SHOULD</bcp14> choose a random value between 0 and 2^32-1 for the first Transfer number, and each subsequent Transfer <bcp14>MUST</bcp14> use the next numeric value in the sequence.  To avoid placing a limit on the total number of Transfers between peers, numbers are allowed to "roll-over" to zero and repeat, i.e. the next number in the sequence is the previous number incremented by one, modulo 2^32.</t>
      <section anchor="interleaving-transfers">
        <name>Interleaving Transfers</name>
        <t>In order to support the transmission of Bundles with different priorities, Transfer Messages associated with different Transfers, i.e. with different Transfer numbers, <bcp14>MAY</bcp14> be interleaved.  This allows senders to interrupt the emission of a sequence of Segments associated with one Transfer with one or more Segments of another Transfer, preventing a large lower priority Transfer blocking a higher priority Transfers.</t>
      </section>
      <section anchor="cancelled">
        <name>Cancelling Transfers</name>
        <t>A Transfer may be aborted by the sender while a Transfer is in progress by the emitting of a <xref target="transfer-cancel-message">Transfer Cancel Message</xref> containing the identifier of the Transfer to cancel.  A receiver of a Transfer Cancel Message <bcp14>SHOULD</bcp14> discard any cached segments already received and <bcp14>MUST</bcp14> ignore any further Messages associated with the Transfer.</t>
      </section>
    </section>
    <section anchor="transfer-window">
      <name>Transfer Window</name>
      <t>Because Messages may be lost in transmission due to the loss of Link-layer PDUs, and a sender may emit duplicate Messages as a defense against loss, see <xref target="repetition"/>, a sender <bcp14>MUST</bcp14> maintain a sliding Transfer Window that defines the maximum number of Transfers that can be simultaneously in progress.  As Transfers are identified by a monotonically increasing number, the size of the Transfer Window also strictly defines the range of identifiers of Transfers in progress.</t>
      <t>The sender <bcp14>MUST</bcp14> maintain a reference to the greatest Transfer number used in any emitted Message, and <bcp14>MUST NOT</bcp14> emit any Message with a Transfer number less than or equal to the latest minus the size of the Transfer Window, taking into account the modulo 2^32 roll-over.</t>
      <t>Each receiver <bcp14>MUST</bcp14> maintain a reference to the greatest Transfer number received in any Message.  When a Transfer Message is received with a Transfer number greater than the greatest previously received, the new Transfer number is considered the greatest Transfer number, and Transfers with number less than or equal to the latest minus the size of the Transfer Window <bcp14>MUST</bcp14> be considered <xref target="cancelled"/>.  Because of Transfer number roll-over, half the number space of 2^32 and window size is used to determine if a number is older or newer than the latest Transfer number.  Pseudocode for the algorithm is given in <xref target="fig-windowing"/>.</t>
      <t>The size of the Transfer Window <bcp14>SHOULD</bcp14> be the same at the sender and all receivers, and <bcp14>MUST</bcp14> be configured via some out-of-band mechanism.  The Transfer Window size <bcp14>MUST</bcp14> be at least 4, <bcp14>MUST</bcp14> be less than 2^12, and is <bcp14>RECOMMENDED</bcp14> to be 16. <cref anchor="_1">These are entirely arbitrary numbers, and need discussing by the WG.</cref></t>
      <figure anchor="fig-windowing">
        <name>A receiver's algorithm for determining Transfer number validity and sliding window</name>
        <artwork type="pseudocode"><![CDATA[
const WINDOW_SIZE  # Configured transfer window size
var GREATEST = NIL # Greatest received transfer number, initially NIL

# Function to check if a transfer is valid within the current window
FUNCTION isTransferValid(T):
    # Ensure Transfer T is within the
    #  sliding window defined by WINDOW_SIZE
    RETURN ((GREATEST - T + 2^32) MOD 2^32) < WINDOW_SIZE

# Function to check if the transfer is considered a "new" transfer
FUNCTION isNewTransfer(T):
    IF GREATEST IS NIL THEN
        # The first transfer is always considered new
        RETURN TRUE
    # Check if the transfer is within the valid window range
    #  (half of the number space + window size)
    RETURN ((T - GREATEST + 2^32) MOD 2^32) <
                     (2^32 / 2) + (WINDOW_SIZE / 2)

# Main function to process a transfer and manage the sliding window
FUNCTION processTransfer(T):
    IF isNewTransfer(T) THEN
        # New transfer, update the greatest received transfer number
        GREATEST ← T
        # Cancel transfers that are now outside the window
        CANCEL_OUTDATED_TRANSFERS()
    ELSE IF isTransferValid(T) THEN
        # Transfer is in progress, continue handling it
        CONTINUE_PROCESSING(T)
    ELSE
        # Transfer is invalid (outside the window), ignore it
        IGNORE_MESSAGE(T)
]]></artwork>
      </figure>
    </section>
    <section anchor="repetition">
      <name>Handling Link-layer PDU Loss</name>
      <t>Due to the unreliable nature of the link-layer protocol, Link-layer PDUs may be lost in transmission, resulting in the loss of the contained Messages.  Because the underlying link-layer is assumed to be unidirectional, the protocol does not include a mechanism to trigger the retransmission of lost Messages; instead the protocol allows the sender to repeat the transmission of Messages.</t>
      <t>A sender <bcp14>MAY</bcp14> emit any Message multiple times in different Link-layer PDUs.  Although every Link-layer PDU transmitted may contain different Messages, any repeated Message <bcp14>MUST</bcp14> be an exact copy of an already emitted Message.  When segmenting bundles, not all Messages in a Transfer need be repeated the same number of times, and different Transfers may repeat Messages differently.</t>
      <t>Although it is <bcp14>RECOMMENDED</bcp14> that <xref target="transfer-segment-message">Transfer Segment Messages</xref> are emitted in ascending order of Segment Index; once emitted, any Message <bcp14>MAY</bcp14> be repeated any number of times, in any order.  The number of repetitions of a particular Message is an implementation matter that can be influenced by many factors, including:</t>
      <ul spacing="normal">
        <li>
          <t>Offline analysis of the deployed environment may require a certain amount of Message repetition to reach some required certainty of transfer.</t>
        </li>
        <li>
          <t>A higher 'reliability' factor associated with a particular Bundle may result in more copies of each associated Transfer Message being emitted.</t>
        </li>
        <li>
          <t>Signalling from the link-layer protocol, or some other out-of-band mechanism, may trigger increased repetition of a subset Messages, to protect against some temporary spike in Link-layer PDU loss rate.</t>
        </li>
      </ul>
      <t>Message replication is logically separate from any facilities the underlying link-layer protocol may have to protect against information loss through redundancy and/or erasure coding, and may be used as required by a deployment.  If a link-layer protocol receives a duplicate Link-layer PDU, it <bcp14>SHOULD</bcp14> be delivered to this protocol only once.</t>
    </section>
    <section anchor="message-definitions">
      <name>Message Definitions</name>
      <t>All protocol Messages except the <xref target="indefinite-padding-message">Indefinite Padding Message</xref> follow the common "Type-Length-Value" formatting pattern, with each Message being identified by a four octet header that encodes the type of the Message, and the length of the content of the Message.</t>
      <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type          | Length (24-bit unsigned integer)              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       ... Content ...                         :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <dl>
        <dt>Type:</dt>
        <dd>
          <t>The type of the Message, allocated from IANA "BTPU Message Types" registry, see <xref target="iana-considerations"/>, encoded as a 8-bit unsigned integer in network byte order.</t>
        </dd>
        <dt>Length:</dt>
        <dd>
          <t>The length of the Message in octets, excluding the 4 octets of the header itself, encoded as a 24-bit unsigned integer in network byte order.</t>
        </dd>
        <dt>Content:</dt>
        <dd>
          <t>A sequence of octets of data of variable length determined by the corresponding Length field value, encoded according to the type of the Message.</t>
        </dd>
      </dl>
      <section anchor="bundle-message">
        <name>Bundle Message</name>
        <t>The Bundle Message is used to encapsulate an entire Bundle, and <bcp14>SHOULD</bcp14> be used by an implementation when a Bundle will fit in its entirety in a single Link-layer PDU to avoid the overhead of segmentation, and reducing the risk of the total loss of a Bundle if one or more unnecessary segments of a Bundle is lost.</t>
        <t>A Bundle Message has a type of 2. The Message Content <bcp14>MUST</bcp14> be a valid Bundle.</t>
        <t>Emitting a Bundle Message with a Length field value of zero (0), i.e no Bundle content, only adds control-plane overhead and <bcp14>SHOULD NOT</bcp14> be used as an alternative form of padding.</t>
      </section>
      <section anchor="transfer-segment-message">
        <name>Transfer Segment Message</name>
        <t>The Transfer Segment Message is used to encapsulate a segment of a multi-segment Bundle Transfer.</t>
        <t>A Transfer Segment Message has a type of 3. The Message Content field is formatted as follows:</t>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Segment Index                                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    ... Segment Data ...                       :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the Transfer that this Segment is part of, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Segment Index:</dt>
          <dd>
            <t>The position of the Segment within the sequence of all Segments of a Transfer, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Segment Data:</dt>
          <dd>
            <t>The octets of a Segment of the Transfer, with the length calculated as the Message content length excluding the eight (8) octets of the Transfer Number and Segment Index.</t>
          </dd>
        </dl>
        <t>Transfer Segment Messages <bcp14>SHOULD NOT</bcp14> have zero octets of Segment Data, i.e. the total length of the Message <bcp14>SHOULD</bcp14> be greater than 12 octets.  Such Messages only add control-plane overhead and <bcp14>SHOULD NOT</bcp14> be used as an alternative form of padding.</t>
      </section>
      <section anchor="transfer-end-message">
        <name>Transfer End Message</name>
        <t>The Transfer End Message is used to encapsulate the last segment of a multi-segment Bundle Transfer, and complete the Transfer.</t>
        <t>A Transfer End Message has a type of 4. The Message Content field is formatted as follows:</t>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Segment Index                                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    ... Segment Data ...                       :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the <xref target="transfer-window">in-progress</xref> Transfer that is completing, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Segment Index:</dt>
          <dd>
            <t>The non-zero Segment Index of the final Segment, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Segment Data:</dt>
          <dd>
            <t>The octets of the final Segment of the Transfer, with the length calculated as the Message content length excluding the eight (8) octets of the Transfer Number and Segment Index.</t>
          </dd>
        </dl>
        <t>Transfer End Messages <bcp14>SHOULD NOT</bcp14> have zero octets of Segment Data, i.e. the total length of the Message <bcp14>SHOULD</bcp14> be greater than 12 octets.  Such Messages only add control-plane overhead and <bcp14>SHOULD NOT</bcp14> be used as an alternative form of padding.</t>
      </section>
      <section anchor="transfer-cancel-message">
        <name>Transfer Cancel Message</name>
        <t>The Transfer Cancel Message is used to indicate that the indicated Transfer is being aborted, and any prior or later received Segments associated with the Transfer <bcp14>MUST</bcp14> be discarded by a receiver.</t>
        <t>A Transfer Cancel Message has a type of 5. The Message Content field is formatted as follows:</t>
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Number                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Transfer Number:</dt>
          <dd>
            <t>The numeric identifier of the <xref target="transfer-window">in-progress</xref> Transfer that is cancelled, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
        </dl>
        <t>The Transfer Cancel Message has no content, and hence has a fixed length of 4 octets.</t>
        <t>A peer that receives a Transfer Cancel Message with a Transfer Number field value that does not match the numeric identifier of an <xref target="transfer-window">in-progress</xref> Transfer <bcp14>MUST</bcp14> ignore the Message.</t>
      </section>
      <section anchor="definite-padding-message">
        <name>Definite Padding Message</name>
        <t>The Definite Padding Message is used to add padding to a Link-layer PDU.</t>
        <t>A Definite Padding Message has a type of 1. Any content it contains has no semantic meaning, and a sender <bcp14>SHOULD</bcp14> set the content to a sequence of zero (0) octets.  Receivers <bcp14>MUST</bcp14> ignore any Message content.</t>
        <t>It is valid for this Message to have no content, i.e. a Length field value of zero (0), adding a total of four (4) octets of padding to the Link-layer PDU.</t>
      </section>
      <section anchor="indefinite-padding-message">
        <name>Indefinite Padding Message</name>
        <t>An Indefinite Padding Message has a type of zero (0), and in order to support padding with a minimum total length of one octet, the Message does not include an explicit Length or Content field, and hence has the following layout:</t>
        <artwork><![CDATA[
 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| Type          |
+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Type:</dt>
          <dd>
            <t>The type of the Message: zero (0).</t>
          </dd>
        </dl>
        <t>The Indefinite Padding Message type field is followed by a sequence of zero or more zero (0) octets, ending at the first non-zero octet, or the end of the fixed-length Link-layer PDU.  The content of the Message has no meaning, and <bcp14>MUST</bcp14> be ignored by a receiver.</t>
        <t>Note: When a Indefinite Padding Message terminates with a non-zero octet, the non-zero octet is the first octet of the subsequent Message.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This protocol does not define any measures to protect Messages or their content.  There may be link-layer mechanisms to protect the transmission of frames against over-hearing and interference, and upper layer mechanisms, such as BPSec defined in <xref target="RFC9172"/>, can be used to provide integrity and protection at a higher layer.  Therefore transport-layer security is considered out of scope for the protocol, and lower and/or upper layer mechanisms <bcp14>MUST</bcp14> be used to provide security.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>The following caveats should be considered before deploying instances of this protocol:</t>
      <ol spacing="normal" type="1"><li>
          <t>It is unreliable. Although there may be a link-layer protocol mechanism for a receiver to be notified that a frame has been lost in transmission, due to the unidirectional nature of the link-layer there is no in-band return path suitable for higher-layer acknowledgement of transfer success.  Any acknowledgement system designed to provide reliability <bcp14>MUST</bcp14> use a logically separate path from receiver back to sender.</t>
        </li>
        <li>
          <t>It does not provide congestion control or signalling. The underlying link-layer is expected to provide an uncontested channel between sender and receivers, and hence such mechanisms are considered to be out of scope. The protocol <bcp14>MUST NOT</bcp14> be deployed in environments where congestion may occur, such as the public Internet, when the underlying link-layer does not provide suitable congestion control.</t>
        </li>
        <li>
          <t>It requires an out-of-band mechanism for configuration. This can either be via pre-placed static configuration, a parallel dynamic control-plane protocol, or some other mechanism beyond the scope of this specification.</t>
        </li>
      </ol>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to create a new registry entitled "BTPU Message Types", in the existing "Bundle Protocol" registry group.  The registration policy for this registry, using terms defined in <xref target="RFC8126"/>, is:</t>
      <table align="left" anchor="tab-message-types-reg">
        <name>BTPU Message Types registration policies</name>
        <thead>
          <tr>
            <th align="center">Values</th>
            <th align="left">Registration Policy</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="center">0..0x6F</td>
            <td align="left">Standards Action</td>
          </tr>
          <tr>
            <td align="center">0x70..0x7F</td>
            <td align="left">Private Use</td>
          </tr>
          <tr>
            <td align="center">0x80..0xFF</td>
            <td align="left">Reserved for future expansion</td>
          </tr>
        </tbody>
      </table>
      <t>The initial values for the registry are:</t>
      <table align="left" anchor="tab-message-types-vals">
        <name>BTPU Message Types initial values</name>
        <thead>
          <tr>
            <th align="center">Type</th>
            <th align="left">Message</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="center">0</td>
            <td align="left">
              <xref target="indefinite-padding-message">Indefinite Padding Message</xref></td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="center">1</td>
            <td align="left">
              <xref target="definite-padding-message">Definite Padding Message</xref></td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="center">2</td>
            <td align="left">
              <xref target="bundle-message">Bundle Message</xref></td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="center">3</td>
            <td align="left">
              <xref target="transfer-segment-message">Transfer Segment Message</xref></td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="center">4</td>
            <td align="left">
              <xref target="transfer-end-message">Transfer End Message</xref></td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="center">5</td>
            <td align="left">
              <xref target="transfer-cancel-message">Transfer Cancel Message</xref></td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9171">
          <front>
            <title>Bundle Protocol Version 7</title>
            <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
            <author fullname="K. Fall" initials="K." surname="Fall"/>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <date month="January" year="2022"/>
            <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9172">
          <front>
            <title>Bundle Protocol Security (BPSec)</title>
            <author fullname="E. Birrane, III" initials="E." surname="Birrane, III"/>
            <author fullname="K. McKeever" initials="K." surname="McKeever"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document defines a security protocol providing data integrity and confidentiality services for the Bundle Protocol (BP).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9172"/>
          <seriesInfo name="DOI" value="10.17487/RFC9172"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="USLP" target="https://public.ccsds.org/Pubs/732x1b3e1.pdf">
          <front>
            <title>Unified Space Data Link Protocol (USLP)</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="June"/>
          </front>
          <seriesInfo name="CCSDS" value="732.1-B-3"/>
        </reference>
        <reference anchor="TM" target="https://public.ccsds.org/Pubs/132x0b3.pdf">
          <front>
            <title>Telemetry (TM) Space Data Link Protocol</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="October"/>
          </front>
          <seriesInfo name="CCSDS" value="132.0-B-3"/>
        </reference>
        <reference anchor="AOS" target="https://public.ccsds.org/Pubs/132x0b3.pdf">
          <front>
            <title>Advanced Orbiting Systems (AOS) Space Data Link Protocol</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="October"/>
          </front>
          <seriesInfo name="CCSDS" value="732.0-B-4"/>
        </reference>
        <reference anchor="DVB-S2X" target="https://www.etsi.org/deliver/etsi_en/302300_302399/30230702/01.04.01_60/en_30230702v010401p.pdf">
          <front>
            <title>Digital Video Broadcasting (DVB); Second generation framing structure, channel coding and modulation systems for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications; Part 2: DVB-S2 Extensions (DVB-S2X)</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="ETSI" value="EN 302 307-2"/>
        </reference>
        <reference anchor="_5G" target="https://www.3gpp.org/ftp/Specs/archive/23_series/23.501/23501-i00.zip">
          <front>
            <title>System architecture for the 5G System (5GS)</title>
            <author>
              <organization abbrev="3GPP">3rd Generation Partnership Project</organization>
              <address>
                <postal>
                  <country>France</country>
                  <city>Sophia Antipolis Cedex</city>
                </postal>
              </address>
            </author>
            <author fullname="CHANDRAMOULI, Devaki">
              <organization>Nokia Germany</organization>
            </author>
            <date day="21" month="December" year="2022"/>
          </front>
        </reference>
        <reference anchor="IEEE.802.3">
          <front>
            <title>IEEE Standard for Ethernet</title>
            <author>
              <organization/>
            </author>
            <date month="July" year="2022"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2022.9844436"/>
          <seriesInfo name="ISBN" value="[&quot;9781504487252&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="RFC5050">
          <front>
            <title>Bundle Protocol Specification</title>
            <author fullname="K. Scott" initials="K." surname="Scott"/>
            <author fullname="S. Burleigh" initials="S." surname="Burleigh"/>
            <date month="November" year="2007"/>
            <abstract>
              <t>This document describes the end-to-end protocol, block formats, and abstract service description for the exchange of messages (bundles) in Delay Tolerant Networking (DTN).</t>
              <t>This document was produced within the IRTF's Delay Tolerant Networking Research Group (DTNRG) and represents the consensus of all of the active contributors to this group. See http://www.dtnrg.org for more information. This memo defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5050"/>
          <seriesInfo name="DOI" value="10.17487/RFC5050"/>
        </reference>
      </references>
    </references>
    <?line 414?>

<section anchor="examples">
      <name>Examples</name>
      <section anchor="segmentation-of-a-sequence-of-bundles-of-equal-priority">
        <name>Segmentation of a sequence of Bundles of equal priority</name>
        <t>An example of the transmission of three Bundles of varying sizes and equal priority in three Link-layer PDUs is shown in <xref target="fig-sequential"/>.</t>
        <figure anchor="fig-sequential">
          <name>Segmentation of a sequence of Bundles of equal priority</name>
          <artwork><![CDATA[
+---------------------------+------------+-----------------+
| Bundle A                  | Bundle B   | Bundle C        |
+---------------------------+------------+-----------------+

:                           :            :                 :

+----------------------+----+------------+----+------------+---------+
| Transfer 1           | T1 |  Complete  | T2 | Transfer 2 | Padding |
| Segment 0            | S1 |  Bundle    | S0 | Segment 1  |         |
+----------------------+----+------------+----+------------+---------+

:                      :                      :                      :

+----------------------+----------------------+----------------------+
| Link-layer PDU N     | Link-layer PDU N + 1 | Link-layer PDU N + 2 |
+----------------------+----------------------+----------------------+
]]></artwork>
        </figure>
        <t>Bundle A is transferred as two Segments, included in the first and second Link-layer PDU, as Transfer 1.  Bundle B fits completely in the second Link-layer PDU, and is therefore transferred without segmentation.  Bundle C is transferred as two Segments split between the second and third PDU, but padding is required to fill the third PDU.  An alternative algorithm could have selected to not segment Bundle C, but to pad the second PDU and include Bundle C without segmentation in the third PDU, without changing the semantics, as an implementation preference.</t>
      </section>
      <section anchor="segmentation-of-a-sequence-of-bundles-of-different-priority">
        <name>Segmentation of a sequence of Bundles of different priority</name>
        <t>An example of the transmission of three Bundles of varying sizes and different priority in three Link-layer PDUs is shown in <xref target="fig-interleaved"/>.</t>
        <figure anchor="fig-interleaved">
          <name>Interleaved segmentation of a sequence of Bundles of different priority</name>
          <artwork><![CDATA[
        +---------------------------+
        | Bundle B                  |  High Priority
        +---------------------------+
+--------------+-----------------+
| Bundle A     | Bundle C        |     Low Priority
+--------------+-----------------+


+----------------------+------------+----+----+------------+---------+
| T1    | Transfer 2   | Transfer 2 | T1 | T3 | Transfer 3 | Padding |
| S0    | Segment 0    | Segment 1  | S1 | S0 | Segment 1  |         |
+----------------------+------------+----+----+------------+---------+

:                      :                      :                      :

+----------------------+----------------------+----------------------+
| Link-layer PDU N     | Link-layer PDU N + 1 | Link-layer PDU N + 2 |
+----------------------+----------------------+----------------------+
]]></artwork>
        </figure>
        <t>TODO: Rework this diagram to be a bit clearer, currently Bundle B arrives during the first frame processing.</t>
      </section>
      <section anchor="message-repetition">
        <name>Message repetition</name>
        <t>TODO: Add an example of repetitions</t>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
      <t>EK, Brian Sipos &amp; TCPCL authors, Chloe He</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
fyQclPfZIi+1+kH3/j+oxnvEg30AAA==

-->

</rfc>
