| Internet-Draft | DTN QUIC CL | March 2026 |
| Taylor & Kline | Expires 16 September 2026 | [Page] |
This document specifies a minimal convergence layer protocol for transferring Bundle Protocol version 7 (BPv7) bundles over QUIC. The protocol leverages QUIC's native capabilities for reliable streaming, connection management, and security, requiring no application-layer framing for reliable transfers. Unreliable transfers use the Bundle Transfer Protocol - Unidirectional (BTP-U) over QUIC datagrams.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://ekline.github.io/draft-dtn-qubicle/draft-ek-dtn-qubicle.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-ek-dtn-qubicle/.¶
Discussion of this document takes place on the Delay/Disruption Tolerant Networking Working Group mailing list (mailto:dtn@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/dtn/. Subscribe at https://www.ietf.org/mailman/listinfo/dtn/.¶
Source for this draft and an issue tracker can be found at https://github.com/ekline/draft-dtn-qubicle.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 16 September 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Bundle Protocol version 7 (BPv7) [RFC9171] requires Convergence Layer Adapters (CLAs) to transfer bundles between nodes. This document specifies the QUIC Bundle Protocol Convergence Layer (QBCL or "qubicle"), a minimal CLA using QUIC [RFC9000] that embraces QUIC's native capabilities rather than layering additional protocol machinery.¶
The design philosophy is simple: QUIC already provides reliable streams, multiplexing, flow control, congestion control, and integrated security. This specification adds only what is strictly necessary to transfer bundles.¶
The protocol provides two services:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The Qubicle peer that initiates the QUIC connection. This is a connection-level role and does not imply any restriction on bundle transfer direction.¶
The Qubicle peer that accepts the QUIC connection. This is a connection-level role and does not imply any restriction on bundle transfer direction.¶
The period during which a QUIC connection is established between two Qubicle peers. A session begins when the QUIC handshake completes and ends when the QUIC connection closes. Both client and server are equal peers for the purpose of bundle transfer.¶
A Qubicle session is established by initiating a QUIC connection to a peer. The QUIC handshake provides mutual authentication via TLS 1.3 [RFC9001].¶
The ALPN identifier for Qubicle is qbcl.¶
For reliable transfer, each bundle is sent on a dedicated QUIC unidirectional stream:¶
The sender creates a new unidirectional stream.¶
The sender writes the complete bundle (CBOR-encoded per [RFC9171]) to the stream.¶
The sender closes the stream by sending a STREAM frame with the FIN bit set.¶
The bundle is implicitly framed by the stream boundaries. No length prefix or application-layer framing is required.¶
The receiver reads data from the stream until FIN is received, then delivers the complete bundle to the BPA. Receipt of more than one Bundle on a given stream is a protocol error, and the receiver MUST abort the connection with QBCL_PROTOCOL_ERROR.¶
QUIC guarantees reliable, in-order delivery of stream data. No application-layer acknowledgment is required; the sender can consider the transfer complete when QUIC confirms the stream data has been acknowledged by the peer. Completed transfer at the convergence layer does not guarantee successful receipt at the receiving Bundle Protocol Agent, so this signal alone does not suffice to indicate when a Bundle can be deleted from the sender. Additional information at the Bundle Protocol layer is required to confirm successful transfer.¶
Both peers can send bundles simultaneously. Each peer creates unidirectional streams to send its bundles. QUIC stream IDs inherently separate client-initiated streams (IDs 2, 6, 10...) from server-initiated streams (IDs 3, 7, 11...), ensuring no collision between the two directions of bundle flow.¶
Senders MAY use QUIC stream priorities to expedite higher-priority bundles. The mapping of bundle priority to QUIC stream priority is an implementation matter.¶
QUIC stream identifiers are 62-bit values, providing an effectively unlimited number of streams per connection. The MAX_STREAMS transport parameter limits concurrent streams, not the total number of streams over a connection's lifetime.¶
If an implementation reaches practical limits on stream creation, it SHOULD close the connection and establish a new one.¶
For unreliable transfer, bundles are sent using QUIC datagrams [RFC9221] with [BTP-U] framing.¶
Each QUIC datagram contains one or more [BTP-U] messages. The [BTP-U] specification defines segmentation, reassembly, transfer identification, and optional repetition for probabilistic reliability.¶
Implementations MUST negotiate the QUIC max_datagram_frame_size transport parameter to enable datagram support.¶
The mapping of bundle priority to [BTP-U] transfer interleaving is an implementation matter.¶
To terminate a session, a peer closes the QUIC connection using CONNECTION_CLOSE. Application-specific error codes are defined in Section 4.¶
A peer MAY close the connection at any time. In-flight reliable transfers on incomplete streams will fail; the BPA is notified of the failure.¶
TODO(ek): describe how a receiver can cancel a transfer via STOP_SENDING.¶
The following application error codes are defined for use with QUIC CONNECTION_CLOSE:¶
| Code | Name | Description |
|---|---|---|
| 0x00 | QBCL_NO_ERROR | Graceful closure, no error |
| 0x01 | QBCL_PROTOCOL_ERROR | Qubicle protocol error encountered |
QUIC mandates TLS 1.3 for all connections, providing confidentiality, integrity, and authentication. Qubicle inherits these security properties.¶
Implementations SHOULD require peer certificate authentication. The Node ID in the transport parameter SHOULD match an identity in the peer's certificate. The BundleEID OtherName form defined in [RFC9174], Section 4.4.2 provides a standard mechanism for embedding DTN Node IDs in X.509 certificates. Automated certificate provisioning is available via the ACME extensions defined in [RFC9891].¶
Transport security protects bundles in transit between adjacent nodes. For end-to-end bundle security, implementations SHOULD use BPSec [RFC9172].¶
QUIC provides built-in protection against many denial-of-service attacks, including address validation and amplification prevention.¶
Implementations SHOULD apply rate limiting on bundle reception to prevent resource exhaustion.¶
QUIC 0-RTT data is subject to replay attacks. Implementations that enable 0-RTT SHOULD only send bundles that are safe to replay (e.g., bundles with replay protection at the bundle layer).¶
Qubicle endpoints wishing to combat various ossification vectors are RECOMMENDED to support version negotiation and the same Bundle transfer operations described in this memo over QUIC v2 [RFC9369].¶
As noted in [RFC9308], some networks block UDP traffic such that Qubicle connections cannot be established. Bundle Protocol Agents that employ Qubicle are RECOMMENDED to support additional Convergence Layers, e.g. TCPCLv4 [RFC9174].¶
It is RECOMMENDED that Qubicle implementations use a dedicated UDP port for operational simplicity.¶
Bundle Protocol Agents that employ Qubicle and other UDP-based Convergence Layers on the same UDP port MUST be able to disambiguate received datagrams in order to route them to the correct CLA. For UDP CLs that use DTLS, [RFC9443] provides the required guidance to disambiguate QUIC traffic from DTLS-encapsulated CL traffic.¶
Qubicle senders may be manually provisioned with a hostname (or IP addresses) and UDP port corresponding to the listening Qubicle endpoint for a peer Bundle Protocol Agent. If only a hostname is known but a port is not, [RFC9460] SVCB Resource Records may be looked up to find a listening UDP port and confirm expected ALPN configuration.¶
Consider this zone file for example.:¶
;; zone: example.
;
$ORIGIN example.
_dtn-bundle._tcp.mars-orbiter IN SRV 10 20 4556 cloud-agent.example.
_qbcl.mars-orbiter IN SVCB 0 cloud-agent.example.
cloud-agent IN A 192.0.2.1
cloud-agent IN AAAA 2001:db8::1
cloud-agent IN SVCB 10 . (
ipv4hint=192.0.2.1
ipv6hint=2001:db8::1
port=1234 alpn="qbcl")
¶
A BPA supporting both [RFC9174] may attempt to resolve an SRV record
for the _dtn-bundle._tcp prefixed hostname. A BPA that support Qubicle
might also issue DNS SVCB queries for the [AttrLeaf] prefix "_qbcl". The
sample above indicates that mars-orbiter.example. has an SVCB record in
AliasMode referring to cloud-agent.example. The SVCB record associated
with cloud-agent.example. contains all required QUIC transport rendezvous
information.¶
IANA is requested to register the following ALPN identifier in the "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" registry:¶
| Protocol | Identification Sequence | Reference |
|---|---|---|
| Qubicle | 0x71 0x62 0x63 0x6C ("qbcl") | This document |
Per [AttrLeaf], IANA is request to add the following entry to the DNS "Underscored and Globally Scoped DNS Node Names" registry:¶
| RR Type | _NODE NAME | Reference |
|---|---|---|
| SVCB | _qbcl | this document |
IANA is requested to create a new registry "Qubicle Error Codes" with the following initial values:¶
| Code | Name | Reference |
|---|---|---|
| 0x00 | QBCL_NO_ERROR | This document |
| 0x01 | QBCL_PROTOCOL_ERROR | This document |
| 0x02-0xEF | Unassigned | |
| 0xF0-0xFF | Reserved for Private Use | This document |