#Introduction
Channeler is a multi-channel protocol with per-channel capabilities. It’s something of a parallel development to QUIC1, but with distinct features.
The design for channeler was originally inspired by experience with video streaming over peer-to-peer networks in 2006-2009. In order to safely traverse NATs, a UDP2-based implementation is required. Using that, however, means losing reliability criteria of TCP3.
From an application perspective, however, it’s not always clear which is preferred. More precisely, it’s usually the case that for some messages, reliability is a good idea – while for others, it adds unnecessary overhead.
Unlike QUIC, which replicates TCP’s reliability over UDP, in Channeler one can choose the reliability characteristics of every channel individually. Furthermore, there are a lot more choices available than TCP’s ordered mode with resend or UDP’s fire-and-forget mechanisms.
Because NAT traversal is only a concern once for the UDP source and destination tuple, any other channels can still traverse the NAT, if reliability is enabled or not.
Furthermore, transport encryption is part of Channeler’s design. To this end, channeler employs a simple scheme4 based on the The Noise Protocol Framework5, which explicitly circumvents complexities present in DTLS6.
Work on Channeler was partially funded with a grant from NGI Zero Discovery7.
#Dependencies
All of channeler makes use of liberate. Measuring round-trip time in order to make application-level decisions on congestion uses the spin_bit library. Transport encryption makes use of primitives from the s3kr1t library.
The implementation does not make use of sockets or similar mechanisms directly, and thus permits use of a user-defined send and receive mechanism. However, an implementation based on packeteer is self-evident.
-
J. Iyengar and M. Thomson. 2021. QUIC: A UDP-Based Multiplexed and Secure Transport. RFC 9000.
https://www.rfc-editor.org/info/rfc9000
See also: References ↩︎ -
J. Postel. 1980. User Datagram Protocol. RFC 768.
https://www.rfc-editor.org/info/rfc768
See also: References ↩︎ -
W. Eddy. 2022. Transmission Control Protocol (TCP). RFC 9293.
https://www.rfc-editor.org/info/rfc9293
See also: References ↩︎ -
The encryption sub-protocol is a work in progress. ↩︎
-
Trevor Perrin. 2018. The Noise Protocol Framework.
http://noiseprotocol.org/
See also: References ↩︎ -
E. Rescorla, H. Tschofenig and N. Modadugu. 2022. The Datagram Transport Layer Security (DTLS) Protocol Version 1.3. RFC 9147.
https://www.rfc-editor.org/info/rfc9147
See also: References ↩︎ -
NGI Zero Discovery
https://nlnet.nl/discovery/
See also: References ↩︎