RFC 7122
Datagram Convergence Layers for the Delay- and Disruption-Tolerant Networking (DTN) Bundle Protocol and Licklider Transmission Protocol (LTP)
Okay bestie, this is the doc that sets up how DTN bundles and LTP segments travel over the Internet using datagrams ๐ฆ. It's an Experimental IRTF document, not a Standards Track spec, and it's March 2014 (ISSN 2070-1721) ๐ธ. It was written by H. Kruse (Ohio University), S. Jero (Purdue University), and S. Ostermann (Ohio University) ๐ . The title block doesn't list anything it obsoletes or updates, so it doesn't replace or change any earlier RFC โจ. Its stream is the IRTF, and it's a product of the Delay-Tolerant Networking Research Group (DTNRG) ๐ง.
Here's the full title, no cap:
Datagram Convergence Layers for
the Delay- and Disruption-Tolerant Networking (DTN) Bundle Protocol
and Licklider Transmission Protocol (LTP)
Abstract โจ
Okay so this doc spells out the preferred way to send DTN protocol data across the Internet using datagrams ๐ซถ. It covers convergence layers for the Bundle Protocol ([RFC5050]), plus moving LTP segments with the Licklider Transmission Protocol ([RFC5326]) ๐. The two datagram candidates it looks at are UDP and the Datagram Congestion Control Protocol (DCCP) ๐. UDP can only be used on a local network, or where the DTN node has its own explicit congestion control ๐. DCCP handles the congestion control problem, so it's recommended whenever possible ๐. This doc is a product of the Delay-Tolerant Networking Research Group (DTNRG), and it reflects DTNRG consensus ๐.
Status of This Memo โจ
This doc isn't an Internet Standards Track spec, so it's published for examination, experimental implementation, and evaluation ๐ง.
It defines an Experimental Protocol for the Internet community ๐ฆ. It's a product of the Internet Research Task Force (IRTF), which publishes Internet-related research and development results ๐ธ. Those results might not be suitable for deployment, fr fr โญ. It represents the consensus of the Delay-Tolerant Networking Research Group of the IRTF ๐ซถ. Anything the IRSG approves for publication isn't a candidate for any level of Internet Standard, see Section 2 of RFC 5741 ๐ .
For the current status, any errata, and how to give feedback, check http://www.rfc-editor.org/info/rfc7122 ๐ฅ.
Copyright Notice โจ
Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved ๐.
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Read those carefully, bestie, because they explain your rights and restrictions for this doc ๐.
Table of Contents โจ
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4
2. General Recommendation . . . . . . . . . . . . . . . . . . . 4
3. Recommendations for Implementers . . . . . . . . . . . . . . 6
3.1. How and Where to Deal with Fragmentation . . . . . . . . 6
3.1.1. DCCP . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2. Bundle Protocol over a Datagram Convergence Layer . . . . 6
3.2.1. DCCP . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3. LTP over Datagrams . . . . . . . . . . . . . . . . . . . 7
3.3.1. DCCP . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4. Keep-Alive Option . . . . . . . . . . . . . . . . . . . . 7
3.5. Checksums . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5.1. DCCP . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6. DCCP Congestion Control Modules . . . . . . . . . . . . . 8
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
5. Security Considerations . . . . . . . . . . . . . . . . . . . 9
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.1. Normative References . . . . . . . . . . . . . . . . . . 9
6.2. Informative References . . . . . . . . . . . . . . . . . 10
1. Introduction โจ
DTN communication protocols include the Bundle Protocol from RFC 5050 [RFC5050] ๐ง. It carries application data blocks ("bundles") and can use optional intermediate custody transfer ๐ธ. There's also the Licklider Transmission Protocol (LTP), which is covered by the LTP Motivation [RFC5325], LTP Specification [RFC5326], and LTP Security [RFC5327] docs ๐. LTP can send bundles reliably and efficiently over a point-to-point link ๐ฅ. People often want to test these over Internet Protocol links, which is literally the whole point of this doc ๐ซถ. The "Delay Tolerant Networking TCP Convergence Layer Protocol" [CLAYER] explains how to move bundles over TCP ๐ . This doc is the preferred method for sending bundles or LTP blocks across the Internet with datagrams instead of TCP ๐. Figure 1 shows the general protocol layering from the DTN docs: DTN Applications talk to the Bundle Protocol Layer, which then uses a Convergence Layer to get a bundle ready to send ๐ฆ. The Convergence Layer usually depends on a lower-level protocol to do the actual transmission ๐.
+-----------------------------------------+
| |
| DTN Application |
| |
+-----------------------------------------+
+-----------------------------------------+
| |
| Bundle Protocol (BP) |
| |
+-----------------------------------------+
+-----------------------------------------+
| |
| Convergence Layer Adapter (CL) |
| |
+-----------------------------------------+
+-----------------------------------------+
| |
| Local Data-Link Layer (Transport) |
| |
+-----------------------------------------+
Figure 1: Generic Protocol Stack for DTN
This doc gives implementation guidance for the two stacks in Figure 2 ๐. In Figure 2(a), the Convergence Layer Adapter is UDP or DCCP, so bundles go straight over the Internet โจ. In Figure 2(b), the Convergence Layer Adapter is LTP, and LTP then uses UDP or DCCP as its local data-link layer ๐.
+-------------+ +-------------+
| | | |
| DTN App | | DTN App |
| | | |
+-------------+ +-------------+
+-------------+ +-------------+
| | | |
| BP | | BP |
| | | |
+-------------+ +-------------+
+-------------+ +-------------+
| | | |
| UDP/DCCP | | LTP |
| | | |
+-------------+ +-------------+
+-------------+
| |
| UDP/DCCP |
| |
+-------------+
(a) (b)
Figure 2: Protocol Stacks Addressed in this Document
1.1. Requirements Language โจ
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119] ๐.
2. General Recommendation โจ
To use DTN protocols across the Internet, whether for testing or as part of a bigger network path, you have to wrap them in a standard Internet Protocol so they travel easily across the Internet ๐ง. This matters a lot for LTP, since LTP has no endpoint addressing at all ๐ธ. The encapsulation choice has to be made carefully so you don't end up with redundancy, because DTN protocols may already bring their own reliability mechanisms ๐.
Congestion control is vital to the Internet staying healthy, especially when data could be sent at arbitrarily fast rates ๐ฅ. The Bundle Protocol hands off reliable delivery, and implicitly congestion control, to whichever convergence layer you use (Section 7.2 of RFC 5050 [RFC5050]) ๐ซถ. If TCP works well between a pair of DTN nodes, the TCP convergence layer [CLAYER] gives you the reliability and congestion control bundles need, so it's the default pick on the Internet ๐ . Sending bundles straight in datagrams with UDP or DCCP isn't generally appropriate, because they offer limited reliability and, for UDP, no congestion control at all ๐.
LTP has its own form of reliability ๐. For testing especially, running LTP over something like TCP that's already reliable makes no sense ๐ฆ. Running LTP over TCP would also cut the flexibility users have, since LTP lets you control which data is delivered reliably and which is best effort, and TCP can't do that ๐. So running LTP over an unreliable protocol is the better move ๐.
UDP is one option. It gives no reliability, so LTP can handle that itself โจ. But UDP also has no congestion control ๐. LTP is built for fixed-rate radio links, so it does rate control but not congestion control ๐. Missing congestion control on network connections is a big problem, since it can cause artificially high loss rates and serious fairness issues ๐. Earlier standards docs all agree that protocols used on the Internet should have congestion control: see "Congestion Control Principles" [RFC2914], "Unicast UDP Usage Guidelines" [RFC5405], and "Queue Management and Congestion Avoidance" [RFC2309], among others ๐ง. RFC 5405 specifically calls congestion control "vital" for "applications that can operate at higher, potentially unbounded data rates" ๐ฅ. So any Bundle Protocol implementation that lets UDP carry LTP segments or bundles outside an isolated network, for any non-trivial amount of data, MUST implement congestion control consistent with RFC 5405 ๐ญ.
The other option is the Datagram Congestion Control Protocol (DCCP) [RFC4340]. It was designed specifically to give congestion control without reliability, for apps that cross the Internet but don't want to retransmit lost data ๐. So, RECOMMENDED and not optional-optional: if it's possible, DCCP SHOULD be used to carry LTP segments across the Internet ๐. Wait, I mean the doc says it is RECOMMENDED that, if possible, DCCP be used to transport LTP segments across the Internet ๐ .
3. Recommendations for Implementers โจ
3.1. How and Where to Deal with Fragmentation โจ
okay so bundles can be as big as the node's resources allow ๐ง In IPv4, a UDP datagram tops out at nearly 64 KB ๐ With IPv6 jumbograms [RFC2675], UDP datagrams can technically hit 4 GB [RFC2147], but honestly that option is rarely used ๐ (Note: RFC 2147 was obsoleted by RFC 2675.) It is well understood that sending big IP datagrams that must be fragmented by the network has enormous efficiency penalties [Kent87], which is so not it ๐ญ The Bundle Protocol specification has a bundle fragmentation concept [RFC5050] that lets a large bundle get split into bundle fragments ๐ If the Bundle Protocol is being encapsulated in DCCP or UDP, it therefore SHOULD create each fragment small enough that it can be wrapped in a datagram that won't need fragmenting at the IP layer ๐ซถ
IP fragmentation can be avoided with IP Path MTU Discovery [RFC1191] [RFC1981], which depends on routers reliably delivering ICMP Packet Too Big (PTB) messages ๐ฆ To get around a condition called a black hole [RFC2923], there's a newer spec in [RFC4821] that works out the IP Path MTU without PTB messages โจ This document doesn't try to pick one fragmentation avoidance mechanism over another. This section is here for the implementers ๐
3.1.1. DCCP
Because DCCP implementations aren't required to support IP fragmentation and aren't allowed to switch it on by default, a DCCP Convergence Layer (we'll say "CL" from here on) MUST NOT accept data segments that can't be sent as a single MTU-sized datagram ๐
3.1.2. UDP
When an LTP CL is using UDP for datagram delivery, it SHOULD NOT create segments that will result in UDP datagrams that will need to be fragmented, as discussed above ๐ธ
3.2. Bundle Protocol over a Datagram Convergence Layer ๐
Generally, using the Bundle Protocol over a datagram CL is discouraged in IP networks ๐ Bundles can be of (almost) arbitrary length, and the Bundle Protocol doesn't come with an effective retransmission mechanism ๐ฌ Whenever possible, the Bundle Protocol SHOULD be operated over the TCP Convergence Layer or over LTP ๐
If a datagram CL is used for transmission of bundles, every datagram MUST contain exactly one bundle or 4 octets of zero bits as a keep-alive. Bundles that are too large for the path MTU SHOULD be fragmented and reassembled at the Bundle Protocol layer to prevent IP fragmentation ๐ฅ
3.2.1. DCCP
The DCCP CL for Bundle Protocol use SHOULD use the IANA-assigned port 4556/DCCP and service code 1685351985. The use of other port numbers and service codes is implementation specific ๐
3.2.2. UDP
The UDP CL for Bundle Protocol use SHOULD use the IANA-assigned port 4556/UDP. The use of other port numbers is implementation specific ๐
3.3. LTP over Datagrams ๐ง
LTP is designed as a point-to-point protocol within DTN, and it has intrinsic acknowledgement and retransmission facilities built in ๐ LTP segments are carried over a "local data-link layer" (RFC 5325 [RFC5325]), so we'll say "transport" from here on. Carrying LTP in datagrams is an appropriate choice โจ When a datagram transport is used to send LTP segments, every datagram MUST contain exactly one LTP segment or 4 octets of zero bits as a keep-alive. LTP MUST perform segmentation in such a way as to ensure that every LTP segment fits into a single packet that won't require IP fragmentation, as discussed above ๐ซถ
3.3.1. DCCP
The DCCP transport for LTP SHOULD use the IANA-assigned port 1113/DCCP and service code 7107696. The use of other port numbers and service codes is implementation specific ๐ซ
3.3.2. UDP
The UDP transport for LTP SHOULD use the IANA-assigned port 1113/UDP. The use of other port numbers is implementation specific ๐
3.4. Keep-Alive Option ๐ธ
A UDP or DCCP CL or transport might want to send "keep-alive" packets during long idle stretches ๐ค This might be needed to refresh a contact table entry at the destination, or to keep an address mapping in a NAT or a dynamic access rule in a firewall alive ๐ฅ So the CL or transport MAY send a datagram containing exactly 4 octets of zero bits. The CL or transport receiving such a packet MUST discard this packet. The receiver can then do local maintenance on its state tables, but those maintenance functions aren't covered in this document ๐ Note that packets carrying bundles or segments will always contain more than 4 octets of information (either the bundle or the LTP header), so keep-alive packets will never get mistaken for actual data packets ๐ If UDP or DCCP is being used for communication in both directions between a pair of bundle agents, transmission and processing of keep-alives in the two directions happen independently ๐ฆ Keep-alive intervals SHOULD be configurable, SHOULD default to 15 seconds, and MUST NOT be configured shorter than 15 seconds โฐ
3.5. Checksums ๐ซถ
Both the core Bundle Protocol specification and core LTP specification assume they're transmitting over an erasure channel, i.e., a channel that either delivers packets correctly or not at all ๐
3.5.1. DCCP
A DCCP transmitter MUST, therefore, ensure that the entire packet is checksummed by setting the Checksum Coverage to zero. Likewise, the DCCP receiver MUST ignore all packets with partial checksum coverage ๐ฅ
3.5.2. UDP
A UDP transmitter, therefore, MUST NOT disable UDP checksums, and the UDP receiver MUST NOT disable the checking of received UDP checksums ๐
Even when UDP checksums are enabled, a small probability of UDP packet corruption remains. In some environments, it may be acceptable for LTP or the Bundle Protocol to occasionally receive corrupted input. In general, however, a UDP implementation SHOULD use optional security extensions available in the Bundle Protocol or LTP to protect against message corruption ๐ซถ
3.6. DCCP Congestion Control Modules ๐
DCCP supports pluggable congestion control modules so it can be optimized for particular environments โจ The two most common congestion control modules (CCIDs) are TCP-like Congestion Control (CCID2) [RFC4341] and TCP-Friendly Rate Control (CCID3) [RFC4342]. TCP-like Congestion Control is designed to emulate TCP's congestion control as much as possible. It is recommended for applications that want to send data as quickly as possible, while TCP-Friendly Rate Control is aimed at applications that want to avoid sudden changes in sending rate ๐๏ธ DTN use cases seem to fit more into the first case, so DCCP CL's and transports SHOULD use TCP-like Congestion Control (CCID2) by default ๐
4. IANA Considerations ๐ฆ
Port number assignments 1113/UDP and 4556/UDP have been registered with IANA. The assignment for 1113/UDP referenced [RFC5326]; this entry has been changed to add the present document in addition to [RFC5326]. The assignment of 4556/UDP had no reference; this entry has been changed to point to the present document. The service name for 4556/UDP has been changed from dtn-bundle-udp to dtn-bundle. Port number 1113/DCCP (ltp-deepspace) with Service Code 7107696 has been assigned for the transport of LTP. Port number 4556/DCCP (dtn-bundle) with Service Code 1685351985 has been assigned for the transport of bundles. The port number assignment for 4556/TCP is addressed in the [CLAYER] document. ๐ฎ
5. Security Considerations ๐
This memo describes the use of datagrams to transport DTN application data. Hosts may be in the position of having to accept and process packets from unknown sources, and the DTN Endpoint ID can only be discovered after the bundle has been retrieved from the DCCP or UDP packet. Hosts SHOULD use authentication methods available in the DTN specifications to prevent malicious hosts from inserting unknown data into the application.
Hosts need to listen for and process DCCP or UDP data on the known LTP or Bundle Protocol ports. A denial-of-service scenario exists where a malicious host sends datagrams at a high rate, forcing the receiving hosts to use their resources to process and attempt to authenticate this data. Whenever possible, hosts SHOULD use IP address filtering to limit the origin of packets to known hosts.
๐จ bestie, the denial-of-service thing is serious. A flood of datagrams can drain a host's resources before it ever gets to the good stuff, so filtering by IP address is a big deal.
6. References ๐
6.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2147] Borman, D., "TCP and UDP over IPv6 Jumbograms", RFC 2147,
May 1997.
[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms",
RFC 2675, August 1999.
[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram
Congestion Control Protocol (DCCP)", RFC 4340, March 2006.
[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion
Control Protocol (DCCP) Congestion Control ID 2: TCP-like
Congestion Control", RFC 4341, March 2006.
[RFC5050] Scott, K. and S. Burleigh, "Bundle Protocol
Specification", RFC 5050, November 2007.
[RFC5325] Burleigh, S., Ramadas, M., and S. Farrell, "Licklider
Transmission Protocol - Motivation", RFC 5325, September
2008.
[RFC5326] Ramadas, M., Burleigh, S., and S. Farrell, "Licklider
Transmission Protocol - Specification", RFC 5326,
September 2008.
[RFC5327] Farrell, S., Ramadas, M., and S. Burleigh, "Licklider
Transmission Protocol - Security Extensions", RFC 5327,
September 2008.
6.2. Informative References
[CLAYER] Demmer, M., Ott, J., and S. Perreault, "Delay Tolerant
Networking TCP Convergence Layer Protocol", Work in
Progress, January 2014.
[Kent87] Kent, C. and J. Mogul, "Fragmentation considered harmful",
SIGCOMM '87, Proceedings of the ACM workshop on Frontiers
in computer communications technology, 1987,
<http://doi.acm.org/10.1145/55482.55524>.
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
November 1990.
[RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery
for IP version 6", RFC 1981, August 1996.
[RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., Deering,
S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G.,
Partridge, C., Peterson, L., Ramakrishnan, K., Shenker,
S., Wroclawski, J., and L. Zhang, "Recommendations on
Queue Management and Congestion Avoidance in the
Internet", RFC 2309, April 1998.
[RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, RFC
2914, September 2000.
[RFC2923] Lahey, K., "TCP Problems with Path MTU Discovery", RFC
2923, September 2000.
[RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for
Datagram Congestion Control Protocol (DCCP) Congestion
Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342,
March 2006.
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU
Discovery", RFC 4821, March 2007.
[RFC5405] Eggert, L. and G. Fairhurst, "Unicast UDP Usage Guidelines
for Application Designers", BCP 145, RFC 5405, November
2008.
Authors' Addresses โจ
okay bestie, these are the humans who wrote this one ๐ซถ here's who to find if you have questions, and where to find them ๐
Hans Kruse
Ohio University
31 S. Court Street, Rm 150
Athens, OH 45701
United States
Phone: +1 740 593 4891
EMail: kruse@ohio.edu
Samuel Jero
Purdue University
West Lafayette, IN 47907
United States
EMail: sjero@purdue.edu
Shawn Ostermann
Ohio University
Stocker Engineering Center
Athens, OH 45701
United States
Phone: +1 740 593 1566
EMail: ostermann@eecs.ohiou.edu
that's the whole doc, babe ๐ the authors are literally the brains behind this, so if you ever get stuck on the TCP-vs-DCCP-vs-UDP stuff, you know who to hit up ๐ง๐
๐ฆ where this page comes from
- ietf: rfc7122 2014-03
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms