| Communication protocol | |
| Abbreviation | DCCP |
|---|---|
| Introduction | () |
| OSI layer | Transport layer (4) |
| RFC(s) | 4340,4336 |
| Internet protocol suite |
|---|
| Application layer |
| Transport layer |
| Internet layer |
| Link layer |
Incomputer networking, theDatagram Congestion Control Protocol (DCCP) is a message-orientedtransport layerprotocol. DCCP implements reliable connection setup, teardown,Explicit Congestion Notification (ECN),congestion control, and feature negotiation. TheIETF published DCCP asRFC 4340, aproposed standard, in March 2006.RFC 4336 provides an introduction.
DCCP provides a way to gain access to congestion-control mechanisms without having to implement them at theapplication layer. It allows for flow-based semantics like inTransmission Control Protocol (TCP) but does not provide reliable in-order delivery. Sequenced delivery within multiple streams, as in theStream Control Transmission Protocol (SCTP), is not available in DCCP. A DCCP connection containsacknowledgment traffic as well as data traffic. Acknowledgments inform a sender whether its packets have arrived, and whether they were marked byExplicit 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".[1]
DCCP is useful for applications with timing constraints on the delivery of data. Such applications includestreaming media,multiplayer online games andInternet telephony. In such applications, old messages quickly become useless, so that getting new messages is preferred to resending lost messages. As of 2017[update] such applications have often either settled for TCP or usedUser 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 generallyTCP-friendly, congestion-control mechanisms.
The following operating systems implement DCCP:
Userspace library:
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.
| Offset | Octet | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | Source Port | Destination Port | ||||||||||||||||||||||||||||||
| 4 | 32 | Data Offset | CCVal | CsCov | Checksum | ||||||||||||||||||||||||||||
| 8 | 64 | Res | Type | X | Reserved | Sequence Number (high bits)↴ | |||||||||||||||||||||||||||
| 12 | 96 | ↪Sequence Number | |||||||||||||||||||||||||||||||
If X is zero, only the low 24 bits of the Sequence Number are transmitted, and the generic header is 12 bytes long.
| Offset | Octet | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | Source Port | Destination Port | ||||||||||||||||||||||||||||||
| 4 | 32 | Data Offset | CCVal | CsCov | Checksum | ||||||||||||||||||||||||||||
| 8 | 64 | Res | Type | X | Sequence Number | ||||||||||||||||||||||||||||
Similarly to the extension ofTCP protocol adding multipath capability (MPTCP), a multipath extension of DCCP is under discussion at the IETF,[8] correspondingly denoted asMP-DCCP. First implementations have already been developed, tested, and presented in a collaborative approach between operators and academia[9] and are available as an open source solution.