<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-taylor-dtn-btpu-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="BTPU">Bundle Transfer Protocol - Unidirectional</title>
    <seriesInfo name="Internet-Draft" value="draft-taylor-dtn-btpu-00"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="25"/>
    <keyword>DTN</keyword>
    <keyword>BPv7</keyword>
    <keyword>Bundle Protocol</keyword>
    <abstract>
      <?line 76?>

<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>
  </front>
  <middle>
    <?line 84?>

<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 Adaptors (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 underlying link-layer protocols to transfer bundles between BPAs.</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 set 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 the receiver in its entirety or not at all. Frames may be of fixed or variable length.</t>
        </li>
        <li>
          <t>They are point-to-point: although the medium over which the data transfer occurs may be broadcast in nature, the link-layer protocol provides an uncontested point-to-point communication channel between a single sender and a single receiver.</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 CLA, 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.</t>
      <t>The driving use-case of the protocol has been the transfer of BPv7 formatted Bundles, however it is equally capable of transferring any kind of binary data, but includes no explicit discriminator of the type of a particular Bundle. If multiple different types of Bundle are to be transferred by a single implementation, this specification considers the differentiation between different Bundle types to be a matter for the implementation. For example, both BPv6 (<xref target="RFC5050"/>) formatted Bundles 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 Bundle formats that do not support some form of fragmentation.</t>
      <t>Although designed for any link-layer protocol that shares the characteristics defined in <xref target="introduction"/>, 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>
    </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 from sender to receiver 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 sequence number, starting at zero (0).  In addition to a sequence number, 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 sequence 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>The receiver reassembles the transferred Bundle by concatenating the Segments that share a common Transfer number in the order of their sequence number.  When all the Segments have been received and concatenated, the receiver is assumed to pass the recombined Bundle to an upper layer for further processing.</t>
      <t>Transfer numbers are encoded using 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" via 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.  The 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>The 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 both receiver and sender, 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>The 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 sequence number; 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>The provided protection mechanisms are logically separate from any facilities the underlying link-layer protocol may have to protect against information loss through redundancy and erasure coding, and may be used as required by a deployment.  If a link-layer protocol receives a duplicate transmission frame, 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"/>, expressed 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, expressed 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 Sequence Number                                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    ... 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 Sequence Number:</dt>
          <dd>
            <t>The sequence number of the Segment, 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 Sequence Number.</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 Sequence Number                                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    ... 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 Sequence Number:</dt>
          <dd>
            <t>The non-zero sequence number 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 Sequence Number.</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 the 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.  A receiver <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.  Although there may be link-layer mechanisms to protect the transmission of frames against over-hearing and interference, transport-layer security is considered out of scope for the protocol. Mechanisms such as BPSec, defined in <xref target="RFC9172"/>, <bcp14>MUST</bcp14> be used to provide integrity and protection at the Bundle layer as required.</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 point-to-point channel, 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, or a higher 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".  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 421?>

<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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
pVbf6c5/AwRR0eCKfQAA

-->

</rfc>
