Datagram Congestion Control Protocol
{{short description|Message-oriented transport layer protocol}}
{{Infobox networking protocol
| title = Datagram Congestion Control Protocol
| logo =
| logo alt =
| image =
| image alt =
| caption =
| is stack =
| abbreviation = DCCP
| purpose =
| developer =
| date = {{Start date and age| | | }}
| based on =
| influenced =
| osilayer = Transport layer (4)
| ports =
| rfcs = {{IETF RFC|4340|4336|plainlink=yes}}
| hardware =
}}
{{IPstack}}
In computer networking, the Datagram Congestion Control Protocol (DCCP) is a message-oriented transport layer protocol. DCCP implements reliable connection setup, teardown, Explicit Congestion Notification (ECN), congestion control, and feature negotiation. The IETF published DCCP as {{IETF RFC|4340}}, a proposed standard, in March 2006. {{IETF RFC|4336}} provides an introduction.
Operation
DCCP provides a way to gain access to congestion-control mechanisms without having to implement them at the application layer. It allows for flow-based semantics like in Transmission Control Protocol (TCP), but does not provide reliable in-order delivery. Sequenced delivery within multiple streams as in the Stream Control Transmission Protocol (SCTP) is not available in DCCP. A DCCP connection contains acknowledgment traffic as well as data traffic. Acknowledgments inform a sender whether its packets have arrived, and whether they were marked by Explicit Congestion Notification (ECN). Acknowledgements are transmitted as reliably as the congestion control mechanism in use requires, possibly completely reliably.
DCCP has the option for very long (48-bit) sequence numbers corresponding to a packet ID, rather than a byte ID as in TCP. The long length of the sequence numbers aims to guard against "some blind attacks, such as the injection of DCCP-Resets into the connection".[http://tools.ietf.org/html/rfc4340#section-7.6 RFC 4340 section 7.6]
Applications
DCCP is useful for applications with timing constraints on the delivery of data. Such applications include streaming media, multiplayer online games and Internet telephony. In such applications, old messages quickly become useless, so that getting new messages is preferred to resending lost messages. {{As of | 2017}} such applications have often either settled for TCP or used User Datagram Protocol (UDP) and implemented their own congestion-control mechanisms, or have no congestion control at all. While being useful for these applications, DCCP can also serve as a general congestion-control mechanism for UDP-based applications, by adding, as needed, mechanisms for reliable or in-order delivery on top of UDP/DCCP. In this context, DCCP allows the use of different, but generally TCP-friendly congestion-control mechanisms.
Implementations
The following operating systems implement DCCP:
- FreeBSD, version 5.1 {{cite web|url=https://www.ietf.org/mail-archive/web/dccp/current/msg00508.html|title=[dccp] FreeBSD implementation|website=www.ietf.org|access-date=18 April 2018}} as patch
- Linux since version 2.6.14,{{cite web|url=https://lwn.net/Articles/149756/|title=Linux gets DCCP [LWN.net]|website=lwn.net|access-date=18 April 2018}} but marked deprecated since version 6.4 due to lack of maintenance and scheduled for removal in 2025.{{cite web|url=https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b144fcaf46d43b1471ad6e4de66235b8cebb3c87|title=dccp: Print deprecation notice|website=kernel.org}} Linux 6.16 drops DCCP.{{cite web |title=Linux 6.16 Expected To Remove Datagram Congestion Control Protocol "DCCP" Networking |url=https://www.phoronix.com/news/Linux-6.16-Net-Next-Drops-DCCP |website=www.phoronix.com |access-date=15 April 2025 |language=en}}
- DCCP was removed from Linux 6.16.{{cite web |title=Linux 6.16 Expected To Remove Datagram Congestion Control Protocol "DCCP" Networking |url=https://www.phoronix.com/news/Linux-6.16-Net-Next-Drops-DCCP |website=www.phoronix.com |access-date=29 May 2025 |language=en}}
Userspace library:
- [http://www.phelan-4.com/dccp-tp/ DCCP-TP] {{Webarchive|url=https://web.archive.org/web/20080723104232/http://www.phelan-4.com/dccp-tp/ |date=2008-07-23 }} implementation is optimized for portability, but has had no changes since June 2008.{{Cite web |url=http://www.phelan-4.com/dccp-tp/tiki-lastchanges.php?days=0 |title=Change log for the dccp-tp wiki, retrieved June 13, 2011 |access-date=June 13, 2011 |archive-date=October 4, 2011 |archive-url=https://web.archive.org/web/20111004105003/http://www.phelan-4.com/dccp-tp/tiki-lastchanges.php?days=0 |url-status=dead }}
- [https://github.com/petar/GoDCCP GoDCCP] purpose of this implementation is to provide a standardized, portable NAT-friendly framework for peer-to-peer communications with flexible congestion control, depending on application.
Packet structure
The DCCP generic header takes different forms depending on the value of X, the Extended Sequence Numbers bit. If X is one, the Sequence Number field is 48 bits long, and the generic header takes 16 bytes, as follows.
{{APHD|start|title=DCCP generic header (X = 1)}}
{{APHD|0|bits1=16|field1=Source Port|bits2=16|field2=Destination Port}}
{{APHD|4|bits1=8|field1=Data Offset|bits2=4|field2=CCVal|bits3=4|field3=CsCov|bits4=16|field4=Checksum}}
{{APHD|8|bits1=3|field1=Res|bits2=4|field2=Type|bits3=1|field3=X|hint3=X {{=}} 1 implies Sequence Number field is 48 bits long|bits4=8|field4=Reserved|bits5=16|field5=Sequence Number (high bits)|border5=right}}
{{APHD|12|bits1=32|field1=Sequence Number|border1=left}}
{{APHD|end}}
If X is zero, only the low 24 bits of the Sequence Number are transmitted, and the generic header is 12 bytes long.
{{APHD|start|title=DCCP generic header (X = 0)}}
{{APHD|0|bits1=16|field1=Source Port|bits2=16|field2=Destination Port}}
{{APHD|4|bits1=8|field1=Data Offset|bits2=4|field2=CCVal|bits3=4|field3=CsCov|bits4=16|field4=Checksum}}
{{APHD|8|bits1=3|field1=Res|bits2=4|field2=Type|bits3=1|field3=X|hint3=X {{=}} 0 implies Sequence Number field is 24 bits long|bits4=24|field4=Sequence Number}}
{{APHD|end}}
;{{APHD|def|name=Source Port|length=16 bits|text=Identifies the sending port.}}
;{{APHD|def|name=Destination Port|length=16 bits|text=Identifies the receiving port.}}
;{{APHD|def|name=Data Offset|length=8 bits|text=The offset from the start of the packet's DCCP header to the start of its application data area, in 32-bit words.}}
;{{APHD|def|name=CCVal|length=4 bits|text=Used by the HC-Sender CCID.}}
;{{APHD|def|name=Checksum Coverage|short=CsCov|length=4 bits|text=Checksum Coverage determines the parts of the packet that are covered by the Checksum field.}}
;{{APHD|def|name=Checksum|length=16 bits|text=The Internet checksum of the packet's DCCP header (including options), a network-layer pseudoheader, and, depending on Checksum Coverage, all, some, or none of the application data.}}
;{{APHD|def|name=Reserved|short=Res|length=3 bits|constraint=Res == 0|text=Senders MUST set this field to all zeroes on generated packets, and receivers MUST ignore its value.}}
;{{APHD|def|name=Type|length=4 bits|text=The Type field specifies the type of the packet.}}
;{{APHD|def|name=Extended Sequence Numbers|short=X|length=1 bit|text=Set to one to indicate the use of an extended generic header with 48-bit Sequence and Acknowledgement Numbers.}}
;{{APHD|def|name=Sequence Number|length=48 or 24 bits|text=Identifies the packet uniquely in the sequence of all packets the source sent on this connection.}}
Current development
Similarly to the extension of TCP protocol by multipath capability (MPTCP) also for DCCP the multipath feature is under discussion at IETF {{Cite web|url=https://datatracker.ietf.org/doc/draft-ietf-tsvwg-multipath-dccp/|title = DCCP Extensions for Multipath Operation with Multiple Addresses|date = 9 November 2021|last1 = Amend|first1 = Markus|last2 = Brunstrom|first2 = Anna|last3 = Kassler|first3 = Aneas|last4 = Rakocevic|first4 = Veselin|last5 = Johnson|first5 = Stephen}} correspondingly denoted as MP-DCCP. First implementations have already been developed, tested, and presented in a collaborative approach between operators and academia {{cite web |url=https://multipath-dccp.org/ |title = Multipath extension for DCCP}} and are available as an open source solution.
==See also==
- Stream Control Transmission Protocol (SCTP)
- {{section link|Transport layer|Comparison of transport layer protocols}}
References
{{reflist}}
External links
- [https://datatracker.ietf.org/wg/dccp/charter/ IETF Datagram Congestion Control Protocol (dccp) Charter]
=Protocol specifications=
- {{IETF RFC|4340|link=no}} — Datagram Congestion Control Protocol
- {{IETF RFC|5595|link=no}} — The Datagram Congestion Control Protocol (DCCP) Service Codes
- {{IETF RFC|5596|link=no}} — DCCP Simultaneous-Open Technique to Facilitate NAT/Middlebox Traversal
- {{IETF RFC|5762|link=no}} — RTP and the DCCP
- {{IETF RFC|5238|link=no}} — Datagram Transport Layer Security (DTLS) over DCCP
- {{IETF RFC|5634|link=no}} — Quick-Start for DCCP
- {{IETF RFC|6773|link=no}} — A Datagram Congestion Control Protocol UDP Encapsulation for NAT Traversal
=Congestion control IDs=
- {{IETF RFC|4341|link=no}} — Profile for DCCP Congestion Control ID 2: TCP-like Congestion Control
- {{IETF RFC|4342|link=no}} — Profile for DCCP Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)
- {{IETF RFC|5622|link=no}} — Profile for DCCP Congestion Control ID 4: TCP-Friendly Rate Control for Small Packets (TFRC-SP)
=Other information=
- {{IETF RFC|4336|link=no}} — Problem Statement for the Datagram Congestion Control Protocol (DCCP)
- [https://web.archive.org/web/20060702222729/http://www.read.cs.ucla.edu/dccp/ DCCP page from one of DCCP authors]
- [https://wiki.linuxfoundation.org/networking/dccp DCCP support in Linux]
- [https://web.archive.org/web/20170102075035/http://www.seminartopicshq.com/datagram-congestion-control-protocol-dccp/ Datagram Congestion Control Protocol (DCCP)]