﻿<?xml version='1.0' encoding='UTF-8'?>
 <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<!DOCTYPE rfc [
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-johnson-dtn-dtpc-00" category="std" submissionType="IETF">
  <front>
    <title abbrev="DTPC Protocol">Delay-Tolerant Payload Conditioning (DTPC) Protocol Specification</title>
    <seriesInfo name="Internet-Draft" value="draft-johnson-dtn-dtpc-00"/>
    <author initials="S." surname="Johnson" fullname="Scott Johnson">
      <organization>Spacely Packets, LLC</organization>
      <address>
        <postal>
          <street>46 High Ridge Rd</street>
          <city>Holly Hill</city>
          <region>FL</region>
          <code>32117</code>
          <country>United States of America</country>
        </postal>
        <email>scott@spacelypackets.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="27"/>
    <area>Internet</area>
    <workgroup>Delay/Disruption Tolerant Networking</workgroup>
    <keyword>DTN</keyword>
    <keyword>BPv7</keyword>
    <keyword>DTPC</keyword>
    <keyword>Transport</keyword>
    <keyword>Optimization</keyword>
    <abstract>
      <?line 51?>

<t>This document specifies the Delay-Tolerant Payload Conditioning (DTPC) 
protocol. DTPC is an end-to-end, connectionless, expandable application 
service protocol designed to operate directly above the Bundle Protocol 
(BPv7). It provides transparent application data conditioning services 
across challenged networks, including controlled aggregation of 
Application Data Units (ADUs), application-specific elision, 
transmission-order tracking, end-to-end positive/negative 
acknowledgments, and duplicate suppression. DTPC preserves the 
end-to-end principle across delay-tolerant networks where intermediate 
nodes execute store-and-forward operations.</t>
  </abstract>
  </front>
  <middle>
<section anchor="introduction" title="Introduction" >
      <t>The Bundle Protocol version 7 <xref target="RFC9171"/> handles the hop-by-hop 
transmission of data units (bundles) across Delay and Disruption 
Tolerant Networks (DTNs). While BPv7 guarantees store-and-forward bundle 
carriage, it deliberately omits strict end-to-end transport-layer 
controls like packet sequencing, redundancy elimination, and targeted 
retransmissions. Consequently, these responsibilities are often forced 
directly onto individual applications.</t>
      <t>The Delay-Tolerant Payload Conditioning (DTPC) protocol provides an 
application-independent service layer sitting immediately above BPv7 and 
below application clients <xref target="ION-DTPC"/>. DTPC executes strictly at the 
endpoints of the communication path, optimizing data conditioning and 
link utilization without demanding modification from intermediate 
routers <xref target="DTPC-Paper"/>.</t>
</section>
 
    <section anchor="functional-capabilities" title="Functional Capabilities">
      <t>DTPC encompasses the following distinct application support facilities:</t>
      <ul spacing="normal">
        <li>
          <t><strong>In-Order Delivery Support:</strong> Delivers application items to the 
destination client in transmission order, safeguarding application logic 
against variable network path delays.</t>
        </li>
        <li>
          <t><strong>Controlled Aggregation:</strong> Bundles multiple small Application Data 
Units (ADUs) sharing an identical destination and profile into a single 
compressed bundle payload to mitigate BP header overhead.</t>
        </li>
        <li>
          <t><strong>Application-Controlled Elision:</strong> Removes redundant or outdated data 
items from an outbound aggregation queue based on an application-defined 
profile.</t>
        </li>
        <li>
          <t><strong>End-to-End Reliability:</strong> Implements end-to-end positive (ACK) and 
negative (NAK) signaling paired with reactive timers to manage data 
loss.</t>
        </li>
        <li>
          <t><strong>Duplicate Suppression:</strong> Captures and drops redundant application 
data items arriving via multiple network segments.</t>
        </li>
      </ul>
    </section>
    <section anchor="architecture-service-primitives" title="Architecture and Service Primitives">
      
            <t>DTPC operates as a thin management layer positioned between the 
application and the Bundle Protocol Agent (BPA). It tracks communication 
paths by matching discrete "Topic IDs".</t>
      <t>+-----------------------------------------+
| Application Client |
+-----------------------------------------+
| (Topic Registration)
v
+-----------------------------------------+
| Delay-Tolerant Payload Conditioning |
| (DTPC) |
+-----------------------------------------+
| (Aggregated Payloads)
v
+-----------------------------------------+
| Bundle Protocol Agent (BPA) |
+-----------------------------------------+</t>
      <section anchor="architecture-fig" title="Architectural Figure">
        <t>An application interacts with a local DTPC entity by binding to a specific 
unsigned integer <tt>Topic ID</tt>. The API surface incorporates three primary service 
primitives modeled on the ION reference implementation <xref target="ION-DTPC"/>:</t>
        <ol spacing="normal" type="1"><li>
            <t><tt>dtpc_open(topicID, elisionFn)</tt>: Registers the client as the 
definitive handler for a given topic and assigns an application-specific 
elision callback hook.</t>
          </li>
          <li>
            <t><tt>dtpc_send(destinationEID, profile, aduLength, aduBuffer)</tt>: Submits 
an individual ADU to the outbound staging system.</t>
          </li>
          <li>
            <t><tt>dtpc_receive(sap, aduBuffer, bytesReceived)</tt>: Delivers verified, 
sequenced ADUs directly to the target application thread.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="protocol-data-units-pdus" title="Protocol Data Units (PDUs)">
            <t>DTPC exchanges structural operational units wrapped as standard Bundle 
Protocol payload blocks. The primary formats include the <strong>Data PDU</strong> 
and the <strong>Ack PDU</strong>.</t>
      <section anchor="data-pdu-format" title="Data PDU Format">
      <t>Data PDUs transport aggregated or standalone application payloads. Fields are 
encoded sequentially:</t>
        <ul spacing="normal">
          <li>
            <t><strong>PDU Type (4 bits):</strong> Set to <tt>0x01</tt> for Data PDU.</t>
          </li>
          <li>
            <t><strong>Flags (4 bits):</strong> Reserved for framing and extension signaling.</t>
          </li>
          <li>
            <t><strong>Topic ID (Variable Length CBOR):</strong> Identifies the target application 
service framework.</t>
          </li>
          <li>
            <t><strong>Profile ID (Variable Length CBOR):</strong> Dictates aggregation limits and 
reliability requirements (e.g., ACK required, NAK required).</t>
          </li>
          <li>
            <t><strong>Sequence Number (Variable Length CBOR):</strong> A monotonically increasing 
counter unique to the Sender-Recipient-Topic triplet.</t>
          </li>
          <li>
            <t><strong>Payload Length (Variable Length CBOR):</strong> Length of the trailing 
aggregated application data block.</t>
          </li>
          <li>
            <t><strong>Payload:</strong> The raw concatenated Application Data Units.</t>
          </li>
        </ul>
      </section>
      <section anchor="ack-pdu-format" title="Ack PDU Format">
      
        <t>Ack PDUs convey end-to-end receipt metrics back to the original source.</t>
        <ul spacing="normal">
          <li>
            <t><strong>PDU Type (4 bits):</strong> Set to <tt>0x02</tt> for Ack PDU.</t>
          </li>
          <li>
            <t><strong>Flags (4 bits):</strong> Reserved.</t>
          </li>
          <li>
            <t><strong>Topic ID (Variable Length CBOR):</strong> Matches the target sequence domain.</t>
          </li>
          <li>
            <t><strong>Ack Count (Variable Length CBOR):</strong> Number of sequence ranges 
reported in this frame.</t>
          </li>
          <li>
            <t><strong>Sequence Ranges (Array of CBOR pairs):</strong> Pairs of sequence bounds 
<tt>[Start, End]</tt> indicating successfully delivered or missing payloads.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="operational-procedures" title="Operational Procedures">
      <section anchor="aggregation-and-elision" title="Aggregation and Elision">
        <t>To protect constrained space links from protocol bloat, <tt>dtpc_send</tt> 
places incoming ADUs into an outbound topic buffer queue.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Length Constraints:</strong> Transmission is immediately triggered if 
adding the next ADU causes the aggregated buffer to exceed a maximum 
size parameter.</t>
          </li>
          <li>
            <t><strong>Time Constraints:</strong> A configurable countdown timer runs when items 
inhabit the buffer. If the timer hits zero before the length threshold 
is reached, the buffer is packaged for delivery, sent as a bundle 
payload, and cleared of content.</t>
          </li>
          <li>
            <t><strong>Elision Processing:</strong> Upon receipt of application data and resultant 
insertion into the queue as a PDU, the protocol passes the PDU to the 
application's registered <tt>elisionFn</tt>. This allows the application to 
replace outdated or superseded PDUs to be flushed from the queue and 
replaced with fresh entries, conserving network bandwidth.</t>
          </li>
        </ul>
      </section>
      <section anchor="reliability-engine" title="Reliability Engine">
        <t>When the <tt>Profile ID</tt> requests acknowledgment:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Transmission Logging:</strong> The DTPC source maintains a copy of the 
outgoing Data PDU in a local retransmission database and initializes an 
estimated Retransmission Timeout (RTO) timer.</t>
          </li>
          <li>
            <t><strong>ACK/NAK Processing:</strong> Upon receiving an Ack PDU, the source cleans 
acknowledged entries from its log. If an explicit sequence gap is 
identified via negative indicators, or if an RTO timer expires, the 
affected segments are systematically placed on the queue again for 
retransmission.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="iana-considerations" title="IANA Considerations">
    
      <t>Well-Known Service Registration</t>
      <t>This document requests IANA to register the following entry in the
   "'ipn' Scheme URI Well-Known Service Numbers for BPv7" registry
   established by <xref target="RFC9758"/>:</t>
      <t>+=======+==============+=================+
   | Value | Description  | Reference       |
   +=======+==============+=================+
   | 129   | DTPC Service | (this document) |
   +-------+--------------+-----------------+</t>
      <artwork><![CDATA[
   Table 1: DTPC Service Registration
]]></artwork>
      <t>For the IPN scheme, the service number is appended to the node 
   number; for example, ipn:2.2.129 is the DTPC service on Allocator ID 
   2, node number 2.</t>
      <t>Note: Existing implementations use service number 129 for bundle 
   reception, and 128 for sending.  As sending need not be bound to a 
   Well-Known service number, it is suggested that implementations send 
   via a service number Reserved for Private Use per RFC9758.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>DTPC relies fundamentally on the Bundle Protocol Security framework (BPSec) 
to enforce transport authorization, payload integrity, and confidentiality. 
Applications requiring end-to-end verification must coordinate cryptographic 
keys prior to establishing a DTPC session.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references" title="Normative References">
        <reference anchor="RFC9171" target="https://www.rfc-editor.org/info/rfc9171" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9171.xml">
          <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="RFC9758" target="https://www.rfc-editor.org/info/rfc9758" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9758.xml">
          <front>
            <title>Updates to the 'ipn' URI Scheme</title>
            <author fullname="R. Taylor" initials="R." surname="Taylor"/>
            <author fullname="E. Birrane III" initials="E." surname="Birrane III"/>
            <date month="May" year="2025"/>
            <abstract>
              <t>This document updates the specification of the 'ipn' URI scheme previously defined in RFC 6260 and the IANA registries established in RFC 7116. It also updates the rules for the encoding and decoding of these URIs when used as an Endpoint Identifier (EID) in the Bundle Protocol version 7 (BPv7) as defined in RFC 9171. These updates clarify the structure and behavior of the 'ipn' URI scheme, define new encodings of 'ipn' scheme URIs, and establish the registries necessary to manage this scheme.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9758"/>
          <seriesInfo name="DOI" value="10.17487/RFC9758"/>
        </reference>
        
      </references>
      <references anchor="sec-informative-references" title="Informative References">
        <reference anchor="ION-DTPC" target="https://ion-dtn.readthedocs.io/">
          <front>
            <title>Interplanetary Overlay Network (ION) Open Source Software</title>
            <author>
              <organization>California Institute of Technology / Jet Propulsion Laboratory</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DTPC-Paper">
          <front>
            <title>Delay Tolerant Payload Conditioning protocol</title>
            <author>
              <organization/>
            </author>
            <date year="2014"/>
          </front>
          <seriesInfo name="ScienceDirect" value="Elsevier Computer Networks, Vol 57"/>
        </reference>
      </references>
    </references>
  </back>


</rfc>
