<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dtn-btpu-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="BTPU">Bundle Transfer Protocol - Unidirectional</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dtn-btpu-05"/>
    <author fullname="Rick Taylor">
      <organization>Aalyria Technologies</organization>
      <address>
        <email>rtaylor@aalyria.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="15"/>
    <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 binary objects of different priority, preventing head-of-line blocking impacting performance.</t>
      <t>The 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-ietf-dtn-btpu.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-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 (CLPs) 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 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 a receiver in its entirety or not at all. Frames can be of fixed or variable length.</t>
        </li>
        <li>
          <t>They provide a single logical channel: the communication between a sender and one or more receivers of frames can be logically separated from other communication over the link-layer by an implementation, perhaps by the use of channel identifiers, circuit identifiers, or tuples of source and destination address information.</t>
        </li>
      </ul>
      <t>These characteristics provide a common baseline that allows the definition of a lightweight mechanism 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 Ethernet <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 might 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>Segment:</dt>
          <dd>
            <t>In order to transfer a Bundle larger than a Link-layer PDU, Bundles can be subdivided into Segments in order to fit within a Link-layer PDU, see <xref target="transfers"/>.</t>
          </dd>
          <dt>Session:</dt>
          <dd>
            <t>The context, identified by a Session ID announced by the sender in a <xref target="session-start-message">Session Start Message</xref>, within which Transfer numbers are meaningful, see <xref target="sessions"/>.</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>Transfer Message:</dt>
          <dd>
            <t>One of the <xref target="transfer-segment-message">Transfer Segment</xref>, <xref target="transfer-end-message">Transfer End</xref>, and <xref target="transfer-cancel-message">Transfer Cancel</xref> Messages, which carry the Transfer number of the Transfer with which they are associated, or any other Message that another specification defines to be a Transfer Message.</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 can 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 can prioritize the transfer of each Bundle differently, the protocol allows for the multiplexing of Bundle transfers, so that the transfer of higher priority Bundles can interrupt the transfer of other Bundles, avoiding "head of line blocking", see <xref target="interleaving-transfers"/> for more detail.  The bundle transfers are expected to occur over the same logical channel, rather than using a separate channel for each bundle or group of bundles that share priority.  This does not preclude using multiple logical channels, but each channel is expected to be an independent instance of the protocol.</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 can be 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 can 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, a complete Bundle that can fit in the next Link-layer PDU can instead 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 that indicates the relative position of the Segment within the total sequence of Segments, with zero (0) indicating the first segment; i.e. Segments are ordered 0 to N, where N is the Segment Index in the Transfer End Message.</t>
      <t>The Segments of a Bundle, other than the final Segment, <bcp14>MUST</bcp14> be emitted by the sender as a series of <xref target="transfer-segment-message">Transfer Segment Messages</xref> carrying the same Transfer identifier, starting with Segment Index zero (0).  The end of a transfer <bcp14>MUST</bcp14> be indicated by emitting a <xref target="transfer-end-message">Transfer End Message</xref>, including the index and data of the final Segment.  A Transfer always consists of at least two Segments, as a Bundle that would fit in a single Segment is transferred in a <xref target="bundle-message">Bundle Message</xref> instead.</t>
      <t>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>Transfer numbers are expressed as 32-bit unsigned integers. A sender <bcp14>MAY</bcp14> choose any value for the first Transfer number of a <xref target="sessions">Session</xref>, 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>
      <t>A receiver reassembles the transferred Bundle by concatenating the Segments that share a common Transfer number in the ascending order of their Segment Index.  The Segment Index in the Transfer End Message indicates the final Segment Index (N); a transfer is complete when Segments with indices 0 through N have been received.  Once all the Segments have been received and concatenated, a receiver is expected to pass the recombined Bundle to an upper layer for further processing.  A receiver <bcp14>MUST NOT</bcp14> commit resources for reassembly on the basis of values declared by the sender, such as the Segment Index of a Transfer End Message or a <xref target="bundle-length-hint">Bundle Length Hint</xref>, beyond its own local limits.</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="cancelling-transfers">
        <name>Cancelling Transfers</name>
        <t>A Transfer can be aborted by the sender while a Transfer is in progress by emitting a <xref target="transfer-cancel-message">Transfer Cancel Message</xref> containing the identifier of the Transfer to cancel.  A Transfer is also considered cancelled when its Transfer number leaves the receiver's <xref target="transfer-window">Transfer Window</xref>, or when a new <xref target="sessions">Session</xref> starts or the current Session ends.  A receiver <bcp14>MAY</bcp14> also consider any Transfer cancelled in order to protect its resources, for example to enforce local limits on reassembly memory, on the size of a Bundle, or on the time for which a Transfer can remain incomplete.  When a Transfer is cancelled, a receiver <bcp14>MUST</bcp14> discard any Segments of the Transfer already received, and <bcp14>MUST</bcp14> ignore any further Messages associated with the Transfer, so that the Bundle is not delivered to an upper layer unless the Transfer was already complete.</t>
      </section>
    </section>
    <section anchor="transfer-window">
      <name>Transfer Window</name>
      <t>Because Messages can be lost in transmission due to the loss of Link-layer PDUs, and a sender <bcp14>MAY</bcp14> 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 Transfer 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>A receiver applies the algorithm described below to every Transfer Message it receives, except an <xref target="invalid-messages">invalid</xref> Transfer Message, which is discarded, and any Transfer Message received while the receiver has no current <xref target="sessions">Session</xref>, which <bcp14>MUST</bcp14> be ignored.  The algorithm <bcp14>MUST</bcp14> be applied, advancing the Transfer Window if required, before the content of the Message is processed, and the Message <bcp14>MUST</bcp14> be ignored if its Transfer is not then in progress.  A Transfer is in progress at a receiver while its Transfer number is within the receiver's Transfer Window, whether or not any Messages associated with the Transfer have been received.</t>
      <t>Each receiver <bcp14>MUST</bcp14> maintain a reference to the greatest Transfer number of the current Session, which is initialized when the Session starts, see <xref target="sessions"/>.  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="cancelling-transfers">cancelled</xref>.  Because of Transfer number roll-over, a Transfer number T is greater than the greatest previously received Transfer number G if (T - G) modulo 2^32 is non-zero and less than 2^31 minus the size of the Transfer Window.  This is serial number arithmetic, as defined in <xref target="RFC1982"/> with a SERIAL_BITS value of 32, with the range reduced by the size of the Transfer Window, so that no Transfer number that was within the Transfer Window before an advance of the greatest Transfer number can be considered greater than the new greatest Transfer number.  Using half the number space allows a receiver that has experienced a temporary loss of signal to correctly resume processing, distinguishing genuinely new Transfers from those that have wrapped around the number space and are obsolete.  Pseudocode for the algorithm is given in <xref target="fig-windowing"/>.</t>
      <t>The size of the Transfer Window is chosen by the sender, and announced to receivers in the <xref target="session-start-message">Session Start Message</xref>; a receiver <bcp14>MUST</bcp14> use the announced size for the duration of the Session.  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">16 is an arbitrary number, and needs discussing by the WG.</cref></t>
      <figure anchor="fig-windowing">
        <name>A receiver's algorithm for managing the sliding Transfer Window</name>
        <artwork type="pseudocode"><![CDATA[
var WINDOW_SIZE  # Transfer window size, set when the session starts
var GREATEST     # Greatest transfer number, set when the session starts

# Function to check if a transfer is in progress
FUNCTION isTransferInProgress(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 T = GREATEST THEN
        # A repeated Message for the greatest transfer
        #  is in progress, not new
        RETURN FALSE
    # Check if the transfer is ahead of GREATEST by less than
    #  half of the number space, less the window size
    RETURN ((T - GREATEST + 2^32) MOD 2^32) <
                     (2^32 / 2) - WINDOW_SIZE

# Main function, called for every Transfer Message received
#  that is not invalid, to manage the sliding window and
#  process the Message
FUNCTION processTransferMessage(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()
    IF isTransferInProgress(T) THEN
        # Transfer is in progress, continue handling it
        CONTINUE_PROCESSING(T)
    ELSE
        # Transfer is not in progress (outside the window),
        #  ignore it
        IGNORE_MESSAGE(T)
]]></artwork>
      </figure>
      <section anchor="sessions">
        <name>Sessions</name>
        <t>Transfer numbers, and the state a receiver holds for each Transfer, are only meaningful within a Session.  A sender starts a Session by emitting a <xref target="session-start-message">Session Start Message</xref>, which carries a Session ID that identifies the Session, the Transfer number of the next Transfer the sender will start, and the size of the sender's Transfer Window, which <bcp14>MUST NOT</bcp14> change during the Session.</t>
        <t>A sender <bcp14>MUST</bcp14> start a new Session each time it starts or restarts, and <bcp14>MUST</bcp14> emit a Session Start Message before any Transfer Message of the Session, either earlier in the same Link-layer PDU or in an earlier Link-layer PDU.  A sender <bcp14>MAY</bcp14> also start a new Session at other times, for example to change the size of its Transfer Window, but doing so causes receivers to cancel any Transfers in progress.  A sender <bcp14>SHOULD</bcp14> choose the Session ID of each new Session at random, so that it differs from the Session ID of any previous Session with high probability, without requiring the sender to retain state across restarts.</t>
        <t>As the Transfer Messages of a new Session could be misinterpreted by a receiver that has not received its Session Start Message, a sender <bcp14>SHOULD</bcp14> repeat the Session Start Message in several Link-layer PDUs at the start of a Session, each time preceding any Transfer Messages in the same PDU.  A sender <bcp14>SHOULD</bcp14> also emit a Session Start Message periodically throughout the Session, so that a receiver that missed the start of the Session, for example because it started or restarted after the sender, can join the Session; such Messages can often be emitted in space in a Link-layer PDU that would otherwise be filled with padding.  The Next Transfer Number in a Session Start Message reflects the state of the sender when the Message is emitted, so a Session Start Message emitted later in a Session is not necessarily an exact copy of an earlier one.</t>
        <t>On receipt of a Session Start Message, a receiver <bcp14>MUST</bcp14> ignore the Message if it carries the Session ID of the receiver's current Session, or of the Session that the receiver most recently saw end with a <xref target="session-end-message">Session End Message</xref>, as the Message is then a repetition.  Otherwise, the receiver <bcp14>MUST</bcp14> start the new Session: it considers all Transfers of any previous Session <xref target="cancelling-transfers">cancelled</xref>; adopts the Session ID and Transfer Window size carried in the Message; and sets its greatest Transfer number to the Next Transfer Number minus one, modulo 2^32, so that the next Transfer started by the sender is considered new.  As Transfer numbers are only meaningful within a Session, any Transfer Message subsequently received is associated with a Transfer of the new Session, even if its Transfer number matches that of a Transfer of a previous Session.</t>
        <t>As a receiver ignores any Session Start Message for its current Session, it only processes the <xref target="hint-items">Hint Items</xref> of the Session Start Message that started the Session.  Hint Types valid in the Session Start Message therefore <bcp14>SHOULD</bcp14> carry information that does not change during a Session.</t>
        <t>A sender <bcp14>MAY</bcp14> end a Session gracefully, for example before shutting down, by emitting a <xref target="session-end-message">Session End Message</xref> carrying the Session ID of the Session.  A sender <bcp14>MUST NOT</bcp14> emit any Transfer Message of a Session after emitting a Session End Message for it, and <bcp14>SHOULD</bcp14> emit the Session End Message only after the last Messages of the Session, including any repetitions, that it intends receivers to process.  As Link-layer PDUs can be lost, a sender <bcp14>SHOULD</bcp14> repeat the Session End Message in several Link-layer PDUs.</t>
        <t>On receipt of a Session End Message carrying the Session ID of its current Session, a receiver <bcp14>MUST</bcp14> consider all Transfers of the Session <xref target="cancelling-transfers">cancelled</xref>, and then has no current Session, so that it ignores Transfer Messages until a new Session starts.  A receiver <bcp14>MUST</bcp14> ignore a Session End Message carrying any other Session ID.  A receiver that receives no Session End Message, for example because every copy was lost, retains the state of the Session until a new Session starts, or until it cancels Transfers to protect its resources.</t>
        <t>A Session Start Message from a previous Session that is received after one from the current Session, for example due to the reordering of Link-layer PDUs, causes a receiver to restart the previous Session, cancelling the Transfers in progress of the current Session, until it receives a further Session Start Message of the current Session.  This is expected to be rare, as it requires Link-layer PDUs emitted before a sender restart to be delivered after those emitted following it.</t>
      </section>
    </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 can 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 <bcp14>MAY</bcp14> contain different Messages, any repeated Message <bcp14>MUST</bcp14> be an exact copy of an already emitted Message.  A receiver <bcp14>MAY</bcp14> ignore any duplicate Message already received for an in-progress Transfer, and <bcp14>MUST</bcp14> ignore any Message associated with a Transfer that it has already completed, so that a Bundle is not delivered to an upper layer more than once.  When segmenting bundles, not all Messages in a Transfer need be repeated the same number of times, and different Transfers can repeat Messages differently.</t>
      <t>Although it is <bcp14>RECOMMENDED</bcp14> that segments 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 might 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 could 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, might trigger increased repetition of a subset of 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 might have to protect against information loss through redundancy and/or erasure coding, and <bcp14>MAY</bcp14> 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-format">
      <name>Message Format</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      | Flags |    Length (20-bit unsigned int)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 ... Optional Hint Items ...                   :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       ... 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>Flags:</dt>
        <dd>
          <t>A 4-bit field for flags, see <xref target="message-flags"/>.</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 20-bit unsigned integer in network byte order. This length includes both the optional <xref target="hint-items">Hint Items</xref> and the Content.</t>
        </dd>
        <dt>Content:</dt>
        <dd>
          <t>A sequence of octets of data. Its length is the main Message <tt>Length</tt> minus the total length of any present Hint Items. The content is encoded according to the <tt>Type</tt> of the Message.</t>
        </dd>
      </dl>
      <section anchor="message-flags">
        <name>Message Flags</name>
        <t>The Message Flags field is a 4-bit <cref anchor="_2">4 bits is considered enough, as it allows a 20-bit Message Length field, and many additional flags could be better expressed with Hint Items.</cref> field, formatted as follows:</t>
        <artwork><![CDATA[
 0 1 2 3
+-+-+-+-+
|H| RFU |
+-+-+-+-+
]]></artwork>
        <dl>
          <dt>H:</dt>
          <dd>
            <t>The 'H' (Hint) flag. If this bit is set to 1, it indicates that one or more Hint Items are present immediately following the Message header.</t>
          </dd>
          <dt>RFU (Reserved for Future Use):</dt>
          <dd>
            <t>These 3 bits are unassigned. They <bcp14>MUST</bcp14> be set to zero by the sender and <bcp14>MUST</bcp14> be ignored by the receiver.</t>
          </dd>
        </dl>
      </section>
      <section anchor="hint-items">
        <name>Hint Items</name>
        <t>To allow the transfer of optional additional information, Messages can carry extra information in the form of Hint Items. Because Messages can be lost in transmission, a Hint Item provides additional information about the entity to which the containing Message relates, for example the Transfer of a Transfer Message, the Bundle carried by a Bundle Message, or the Session started by a Session Start Message, rather than information particular to the containing Message itself, and <bcp14>MAY</bcp14> be repeated in multiple different or repeated Messages.  The definition of each Hint Type specifies the Message types in which it is valid, and the definition of a Message type can specify additional Hint Types that are valid in it, see <xref target="invalid-messages"/>.</t>
        <t>If the 'H' flag is set in the Message header, the header is followed by one or more Hint Items. Each item is encoded in a Type-Length-Value format, with a 2-octet header followed by a variable-length value. This format intentionally omits a flags field to prevent nested metadata.</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hint Type   |H|    Length     |       ... Value ...           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Hint Type:</dt>
          <dd>
            <t>A 7-bit identifier for the Hint Item, allocated from the "BTPU Hint Types" IANA registry, see <xref target="iana-considerations"/>, encoded as a 7-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>H:</dt>
          <dd>
            <t>The 'H' (Hint) flag. If this bit is set to 1, it indicates that another Hint Item immediately follows this Hint Item.  If this bit is set to 0, then the Message content immediately follows the Hint Item.</t>
          </dd>
          <dt>Length:</dt>
          <dd>
            <t>An 8-bit unsigned integer specifying the length of the <tt>Value</tt> field in octets. This limits the value of a single Hint Item to 255 octets.</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>The payload of the Hint Item.</t>
          </dd>
        </dl>
      </section>
      <section anchor="unrecognized-types">
        <name>Unrecognized Messages and Hint Items</name>
        <t>Because all Messages, except the Indefinite Padding Message, follow the common Message format, a Message can be skipped by a receiver without knowledge of its Type-specific semantics.  A receiver that parses a Message with a Type value that it does not recognize, other than the value 6 or a value in the range 0x80..0x9F, <bcp14>MUST</bcp14> ignore the Message by skipping the number of octets indicated by the Length field, and continue processing any subsequent Messages in the Link-layer PDU.  This applies to every unrecognized Type value, including any allocated in the future from the range reserved for future expansion, allowing Message types defined in future documents to be introduced into deployments where not all receivers have been updated to recognize them.</t>
        <t>The Type value 6 and Type values in the range 0x80..0x9F indicate that the octets encountered are not a Message at all, but an encapsulated bundle in its native format: 6 is the initial octet of a BPv6 bundle, and 0x80..0x9F are the possible initial octets of the CBOR array of a BPv7 bundle, see <xref target="iana-considerations"/>.  Both bundle formats are self-delimiting, so a receiver that implements the corresponding format can determine the extent of the bundle, handle it as it would the content of a <xref target="bundle-message">Bundle Message</xref>, and continue processing any subsequent Messages in the Link-layer PDU.  A receiver that does not implement the corresponding bundle format, or that otherwise cannot determine the extent of the bundle, for example because it is malformed, cannot distinguish the end of the bundle from any subsequent Messages or padding, and <bcp14>MUST</bcp14> discard the remainder of the Link-layer PDU, including the bundle.  A sender <bcp14>SHOULD</bcp14> therefore encapsulate a Bundle in a <xref target="bundle-message">Bundle Message</xref>, rather than emitting it in its native format, unless it is known, for example by configuration, that every receiver implements the format of the Bundle.</t>
        <t>Similarly, a receiver that parses a Hint Item with a Hint Type that it does not recognize <bcp14>MUST</bcp14> ignore the Hint Item by skipping the number of octets indicated by the Hint Item Length field, and continue processing any subsequent Hint Items and the Message Content.  Hint Items are therefore only suitable for carrying optional information that can be safely ignored by a receiver.</t>
      </section>
      <section anchor="invalid-messages">
        <name>Invalid Messages and Hint Items</name>
        <t>A Message is invalid if:</t>
        <ul spacing="normal">
          <li>
            <t>it is truncated, i.e. the Link-layer PDU ends before the end of the four octet Message header, or before the end of the Message as indicated by its Length field;</t>
          </li>
          <li>
            <t>the 'H' flag is set, and its Hint Items extend beyond the end of the Message as indicated by its Length field;</t>
          </li>
          <li>
            <t>its Message Content is too short to contain the fields defined for its Message type, or otherwise does not meet the length requirements defined for its Message type; or</t>
          </li>
          <li>
            <t>the definition of its Message type identifies it as invalid for any other reason.</t>
          </li>
        </ul>
        <t>A receiver <bcp14>MUST</bcp14> discard an invalid Message, and continue processing any subsequent Messages in the Link-layer PDU.</t>
        <t>A Hint Item is invalid if it is carried in a Message of a type in which its Hint Type is not valid, or if it does not meet the other requirements defined for its Hint Type.  An invalid Hint Item <bcp14>MUST</bcp14> be ignored by a receiver as if it were an unrecognized Hint Item, and does not make the containing Message invalid.</t>
      </section>
    </section>
    <section anchor="message-definitions">
      <name>Message Definitions</name>
      <t>The following standard protocol Messages are defined:</t>
      <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.  A Bundle that is emitted in its entirety in a single Message <bcp14>MUST</bcp14> be emitted in a Bundle Message: a sender <bcp14>MUST NOT</bcp14> emit a Transfer consisting of a single Segment.</t>
        <t>Because it conveys a complete Bundle, a Bundle Message is not a Transfer: it has no Transfer number and is not subject to the <xref target="transfer-window">Transfer Window</xref>, which bounds only the number of segmented Transfers that can be simultaneously in progress.  A receiver therefore processes a Bundle Message whether or not a <xref target="sessions">Session</xref> has started.</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 that indicates no Bundle content (e.g., a length of 0 if no metadata is present) only adds control-plane overhead and <bcp14>SHOULD NOT</bcp14> be used as an alternative form of padding.</t>
      </section>
      <section anchor="session-start-message">
        <name>Session Start Message</name>
        <t>The Session Start Message is used by a sender to start a <xref target="sessions">Session</xref>, and to announce the parameters of the Session to receivers.</t>
        <t>A Session Start Message has a type of 7. 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Session ID                                                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Transfer Number                                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transfer Window Size          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Session ID:</dt>
          <dd>
            <t>The identifier of the Session, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Next Transfer Number:</dt>
          <dd>
            <t>The Transfer number of the next Transfer the sender will start, at the time the Message is emitted, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
          <dt>Transfer Window Size:</dt>
          <dd>
            <t>The size of the sender's <xref target="transfer-window">Transfer Window</xref> for the Session, encoded as a 16-bit unsigned integer in network byte order.</t>
          </dd>
        </dl>
        <t>The Message Content of a Session Start Message, excluding any Hint Items, is exactly 10 octets in length.  A Session Start Message with Message Content of any other length, or with a Transfer Window Size that does not meet the requirements of <xref target="transfer-window"/>, is invalid, see <xref target="invalid-messages"/>.</t>
      </section>
      <section anchor="session-end-message">
        <name>Session End Message</name>
        <t>The Session End Message is used by a sender to end a <xref target="sessions">Session</xref> gracefully.</t>
        <t>A Session End Message has a type of 8. 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Session ID                                                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Session ID:</dt>
          <dd>
            <t>The Session ID of the Session that is ending, encoded as a 32-bit unsigned integer in network byte order.</t>
          </dd>
        </dl>
        <t>The Message Content of a Session End Message, excluding any Hint Items, is exactly 4 octets in length.  A Session End Message with Message Content of any other length is invalid, see <xref target="invalid-messages"/>.</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 indicate the completion of a multi-segment Bundle Transfer, and encapsulate the final segment.</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 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>
        <t>As a Transfer always consists of at least two Segments, see <xref target="bundle-message"/>, a Transfer End Message with a Segment Index of zero (0) is invalid, see <xref target="invalid-messages"/>.</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 that any Segments associated with the Transfer, whether received before or after the Transfer Cancel Message, are to be discarded by a receiver, as described in <xref target="cancelling-transfers"/>.</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 Message Content of a Transfer Cancel Message, excluding any Hint Items, is exactly 4 octets in length.  A Transfer Cancel Message with Message Content of any other length is invalid, see <xref target="invalid-messages"/>.</t>
        <t>Like any Transfer Message, a Transfer Cancel Message is processed as described in <xref target="transfer-window"/>, so a Transfer Cancel Message received before any Segment of the Transfer it cancels still cancels the Transfer.</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
 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 (0)      |                  ... Padding ...              :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></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 an 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="standard-hint-items">
      <name>Standard Hint Items</name>
      <t>The following Hint Items are defined in this document:</t>
      <section anchor="bundle-length-hint">
        <name>Bundle Length Hint</name>
        <t>The Bundle Length Hint Item is used to signal the total length of a bundle that is being transferred in segments. This allows a receiver to pre-allocate memory to reassemble the complete bundle, within the limits described in <xref target="transfers"/>.</t>
        <t>This Hint Item is valid in Transfer Segment and Transfer End Messages.</t>
        <t>The Hint Item has a Hint Type of 0, and its layout is 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type (0)  |H|    Length     |  ... Bundle Length ...        :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <dl>
          <dt>Length:</dt>
          <dd>
            <t>The length of the <tt>Bundle Length</tt> field. This <bcp14>MUST</bcp14> be one of 1, 2, 4, or 8.</t>
          </dd>
          <dt>Bundle Length:</dt>
          <dd>
            <t>The total length of the bundle being transferred, encoded as an unsigned integer in network byte order, with a size corresponding to the <tt>Length</tt> field.</t>
          </dd>
        </dl>
        <t>A sender <bcp14>SHOULD</bcp14> choose the smallest possible length that can accommodate the total bundle length. For example, a bundle of 2000 octets should be encoded with a <tt>Length</tt> of 2, and a <tt>Value</tt> of 2000 encoded as a 16-bit unsigned integer.</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 might 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>
      <t>A receiver commits resources, principally memory, to each Transfer in progress until the Transfer completes or is cancelled.  Although the <xref target="transfer-window">Transfer Window</xref> bounds the number of Transfers that can be in progress at once, it does not bound their size or duration: a sender, or any entity able to inject Link-layer PDUs, could start Transfers and never complete them, or declare very large Bundles via a Bundle Length Hint or the Segment Index of a Transfer End Message, in order to exhaust the resources of a receiver.  For this reason a receiver is permitted to cancel any Transfer to protect its resources, see <xref target="cancelling-transfers"/>, and must not commit resources on the basis of values declared by the sender beyond its own local limits, see <xref target="transfers"/>.  Limits on the time for which a Transfer can remain incomplete need to take account of the expected duration of disruption of the link.</t>
      <t>Similarly, an injected Transfer Cancel, Session Start, or Session End Message can cause a receiver to cancel Transfers in progress.  Protection against the injection of Link-layer PDUs relies on the link-layer mechanisms described above.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>The following caveats are to be considered before deploying instances of this protocol:</t>
      <ol spacing="normal" type="1"><li>
          <t>It is unreliable. Although there might 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 might 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>
      <section anchor="btpu-message-types-registry">
        <name>BTPU Message Types Registry</name>
        <t>IANA is requested to create a new registry entitled "BTPU Message Types", in the existing "Bundle Protocol" registry group.  The registration procedures 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 Procedure</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">0xA0..0xFF</td>
              <td align="left">Reserved for future expansion</td>
            </tr>
          </tbody>
        </table>
        <t>Specifications defining new Message Types, including any future allocation from the range reserved for future expansion, <bcp14>MUST</bcp14> use the common Message format defined in <xref target="message-format"/>, so that receivers that do not recognize the new Type value can process the containing Link-layer PDU as described in <xref target="unrecognized-types"/>.</t>
        <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>
            <tr>
              <td align="center">6</td>
              <td align="left">Reserved to avoid clash with BPv6</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="center">7</td>
              <td align="left">
                <xref target="session-start-message">Session Start Message</xref></td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="center">8</td>
              <td align="left">
                <xref target="session-end-message">Session End Message</xref></td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="center">0x80..0x9F</td>
              <td align="left">Reserved to avoid clash with BPv7 Bundle (CBOR array)</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>The initial value of 6 is reserved to ensure that a Link-layer PDU containing a single Bundle Protocol version 6 bundle can be distinguished from BTP-U Messages.</t>
      </section>
      <section anchor="btpu-hint-types-registry">
        <name>BTPU Hint Types Registry</name>
        <t>IANA is requested to create a new registry entitled "BTPU Hint Types", in the existing "Bundle Protocol" registry group. The registration procedures for this registry, using terms defined in <xref target="RFC8126"/>, is:</t>
        <t>Specifications defining new Hint Types <bcp14>MUST</bcp14> specify the Message types in which the Hint is valid, see <xref target="invalid-messages"/>.</t>
        <table align="left" anchor="tab-metadata-types-reg">
          <name>BTPU Hint Types registration policies</name>
          <thead>
            <tr>
              <th align="center">Values</th>
              <th align="left">Registration Procedure</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>
          </tbody>
        </table>
        <t>The initial values for the registry are:</t>
        <table align="left" anchor="tab-metadata-types-vals">
          <name>BTPU Hint Types initial values</name>
          <thead>
            <tr>
              <th align="center">Type</th>
              <th align="left">Hint</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0</td>
              <td align="left">
                <xref target="bundle-length-hint">Bundle Length</xref></td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="btpu-message-flags-registry">
        <name>BTPU Message Flags Registry</name>
        <t>IANA is requested to create a new registry entitled "BTPU Message Flags", in the existing "Bundle Protocol" registry group. This registry governs the 4-bit Message Flags field. The registration procedures for this registry, using terms defined in <xref target="RFC8126"/>, is Standards Action.</t>
        <t>The initial values for the registry are:</t>
        <table align="left" anchor="tab-message-flags-vals">
          <name>BTPU Message Flags initial values</name>
          <thead>
            <tr>
              <th align="center">Bit</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0 (0x8)</td>
              <td align="left">H (Hint)</td>
              <td align="left">Indicates presence of Hint Items</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="center">1-3</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>Bit 0 is the most significant bit.</t>
      </section>
    </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://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://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://ccsds.org/Pubs/732x0b4.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-h70.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>
        <reference anchor="RFC1982">
          <front>
            <title>Serial Number Arithmetic</title>
            <author fullname="R. Elz" initials="R." surname="Elz"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <date month="August" year="1996"/>
            <abstract>
              <t>The DNS has long relied upon serial number arithmetic, a concept which has never really been defined, certainly not in an IETF document, though which has been widely understood. This memo supplies the missing definition. It is intended to update RFC1034 and RFC1035. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1982"/>
          <seriesInfo name="DOI" value="10.17487/RFC1982"/>
        </reference>
      </references>
    </references>
    <?line 640?>

<section anchor="examples">
      <name>Examples</name>
      <t>The following sections has examples of an implementation emitting Bundles into Link-layer PDUs.  Although the examples demonstrate the core principles, for example Bundle Segmentation with priority, the algorithm used to pack Messages into Link-layer PDUs is just for example purposes.  An implementation can use an alternate algorithm that meets this specification but suits its overall architecture, and where this is applicable is noted in each example.</t>
      <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 B  | S0 | Segment 1  |         |
+----------------------+----+------------+----+------------+---------+

:                      :                      :                      :

+----------------------+----------------------+----------------------+
| Link-layer PDU N     | Link-layer PDU N + 1 | Link-layer PDU N + 2 |
+----------------------+----------------------+----------------------+
]]></artwork>
        </figure>
        <t>Bundle A is emitted 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 emitted without segmentation.  Bundle C is emitted 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 C                  |  High Priority
                       +---------------------------+
+--------------+-----------------+
| Bundle A     | Bundle B        |                    Low Priority
+--------------+-----------------+

                       :                           :
:              :                 :

+--------------+-------+----------------------+----+----------+------+
| Complete     | T1    | Transfer 2           | T2 | T1       | Pad  |
| Bundle A     | S0    | Segment 0            | S1 | S1       |      |
+--------------+-------+----------------------+----+----------+------+

:                      :                      :                      :

+----------------------+----------------------+----------------------+
| Link-layer PDU N     | Link-layer PDU N + 1 | Link-layer PDU N + 2 |
+----------------------+----------------------+----------------------+
]]></artwork>
        </figure>
        <t>Bundle A is emitted without segmentation, and the Bundle B is segmented to fill the first Link-layer PDU. During the preparation of the next Link-layer PDU high priority Bundle C is queued for emission. Therefore the further emission of Bundle B is paused, and Bundle C is emitted as two Segments, with the third Link-layer PDU containing the second Segments of both Bundle B and C, plus padding.  The order of emission of the second Segments of Bundle B and C makes no semantic difference.</t>
      </section>
      <section anchor="repetition-of-bundle-segments">
        <name>Repetition of Bundle Segments</name>
        <t>An example of the transmission of two Bundles of differing required repetition in three Link-layer PDUs is shown in <xref target="fig-repetition"/>.</t>
        <figure anchor="fig-repetition">
          <name>Repetition of some Bundles within a sequence of Segments</name>
          <artwork><![CDATA[
+--------------+
| Bundle A     |                              2x repetition required
+--------------+

           +-------------------------------+
           | Bundle B                      |  No repetition required
           +-------------------------------+

:              :
           :                               :

+--------------+-------+--------------+-------+---------------+------+
| Complete     | T1    | Complete     | T1    | Transfer 1    | Pad  |
| Bundle A     | S0    | Bundle A     | S1    | Segment 2     |      |
+--------------+-------+--------------+-------+---------------+------+

:                      :                      :                      :

+----------------------+----------------------+----------------------+
| Link-layer PDU N     | Link-layer PDU N + 1 | Link-layer PDU N + 2 |
+----------------------+----------------------+----------------------+
]]></artwork>
        </figure>
        <t>Bundle A is required by some higher-layer loss protection policy to be repeated twice in two separate Link-layer PDUs.  Bundle A does not require additional loss protection, and can therefore be transmitted once.  As Bundle A can fit in its entirety in a single Link-layer PDU, it is emitted as a Complete Bundle Message, with Bundle B emitted as a Segment Messages sized to fill the remainder of each PDU.  The Complete Bundle Message of Bundle A is repeated in the second Link-layer PDU, with the remainder of the second PDU filled with the next Segment of Bundle B.  The third Link-layer PDU contains the last Segment of Bundle B and padding.  An alternate implementation could have segmented both Bundles, and repeated the Segments of Bundle A whilst interleaving the Segments of Bundle B.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank Erik Kline, Brian Sipos, and Chloe He for their invaluable feedback and discussion of the protocol, and this work would not exist without the excellent prior work by the TCP-CLv4 authors.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+197XbcxrHgfz4FLv0j4vXMiKRkSabj5FIiJfGsTHFFKt6s
TmJjZjAkIgwwATCkGEl/9/c+wj7LPso+ydZnd3UDMyJl+d6cHDMnFjkDdFdX
V9d3VQ+Hw42NNm+LbC95vCynRZac1WnZzLI6OamrtppURTJMXpf5NK+zSZtX
ZVpspONxnV3CG2cnrzcmaZudV/X1XtK0042NaTUp0zkMN63TWTvMs3Y2nLbl
cNwulsPtbzaa5XieNw0M1F4v4LGjw7OnyVdJWjTVXrKZl9NskcF/ynZzkGxm
07yt6jwt8I+j/cfwT1XDb6/Onm5ulMv5OKv3NqYAwN7GpCqbrGyWzV7S1sts
A8C7t5HWWQpTHJ9tXFX12/O6Wi72koOsSK/vHuRNvVzggpKzqshg0W1ynLX4
XF6eb2y8za7h9+nexsYwOTg7hv8+Prl8iP8wmhQ7Gxvpsr2oanpwtiwKXv2r
fPI2OUuvi6reSADo87TM/5HidHvJflpcw6KSs2xyUVZFdZ5nDTyUzdO82Evq
lt76j5SfGk2q+cbGZVYuYZFJcps1JAmj+Ef+O3mG78KnPA9syn/g7owAOPgw
rScXe8lF2y6avbt38RH8JL/MRvrQXfzg7riurprsLrx9F8HJ24vlGICG5TLc
d3Gj4ZsCdqVp/Yj+iRG/NMorevZuD6GMLto5YLas6jng7BJWvpGXM/9Xkrw+
fXGC/8Ia0/o8MxNNJs20IXhPluPm7sN7u+92xveyndFiOuMXmNyBpmd5Nk1O
F+kkSw7SNk1e5OVbT/Z3cI4teoVILNnd3r0/3H5AnzRZDbuGQDEUSfLkyenB
6V4C8412ho+H9+Djsx9uBOIOgLg9vhcDeJYV2Txr6+vkztkPWyvhDAHcGe5s
rwcQZhttC4D7L09vjMTt8f0Ywv3pZVpOAIcv63HeIomdXjdtNm+SOzDylwP5
oYB8Hz4++NPj4enu/+gH++rqapS1TU6QT7MCiKW+ix/8lJV3723v3tve/gn/
+fZb/uvh9u7d7Z3R9v3R9s5PD7bvZuVP+vnl9s72/e2dRbzmPwhoBzmQcVok
f8qnWZU8rqt0OkkbQsIdgHHrO3nuNAPONE3OsxLOJx3VWZ3O8bEG+NSkXdbZ
IJlcpGWZFcmkmuI3aTmVt+fVdFnwa42gFo5BMN1AHj0qW5hhggcEJq0v80nW
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
/cnJ8MmLy/uymma08f8Bes6hoezlAAA=

-->

</rfc>
