# Datagram Congestion Control Protocol

En xarxes d'ordinadors, el Datagram Congestion Control Protocol (DCCP) és un protocol de capa de transport orientat a missatges. DCCP implementa una configuració de connexió fiable, desmuntatge, notificació explícita de congestió (ECN), control de congestió i negociació de funcions. L'IETF va publicar DCCP com, una norma proposada, el març de 2006. RFC 4336 proporciona una introducció.

## Funcionament

DCCP proporciona una manera d'accedir als mecanismes de control de congestió sense haver d'implementar-los a la capa d'aplicació. Permet una semàntica basada en el flux com en el protocol de control de transmissió (TCP), però no proporciona un lliurament fiable en comanda. El lliurament seqüenciat dins de diversos fluxos, com en el protocol de transmissió de control de fluxos (SCTP) no està disponible a DCCP. Una connexió DCCP conté trànsit de reconeixement i trànsit de dades. Els reconeixements informen a un remitent si els seus paquets han arribat i si s'han marcat per una Notificació de congestió explícita (ECN). Els agraïments es transmeten de manera tan fiable com ho requereix el mecanisme de control de congestió en ús, possiblement de manera totalment fiable.
DCCP té l'opció de números de seqüència molt llargs (48 bits) corresponents a un ID de paquet, en lloc d'un ID de byte com en TCP. La llarga durada dels números de seqüència pretén protegir-se de "alguns atacs cecs, com ara la injecció de DCCP-Resets a la connexió".

## Aplicacions

DCCP és útil per a aplicacions amb limitacions de temps en el lliurament de dades. Aquestes aplicacions inclouen streaming de mitjans, jocs en línia multijugador i telefonia per Internet. En aquestes aplicacions, els missatges antics es converteixen ràpidament en inútils, de manera que es prefereix rebre missatges nous que tornar a enviar missatges perduts. A 2017 aquestes aplicacions sovint s'han conformat amb TCP o han utilitzat el protocol de datagrama d'usuari (UDP) i han implementat els seus propis mecanismes de control de congestió, o no tenen cap control de congestió. Tot i que és útil per a aquestes aplicacions, DCCP també pot servir com a mecanisme general de control de congestió per a aplicacions basades en UDP, afegint, segons sigui necessari, mecanismes per a un lliurament fiable o en ordre a sobre d'UDP/DCCP. En aquest context, DCCP permet l'ús de mecanismes de control de congestió diferents, però generalment compatibles amb TCP.

## Implementacions

Els sistemes operatius següents implementen DCCP:
* FreeBSD, versió 5.1 com a pedaç
* Linux des de la versió 2.6.14 , però marcat com a obsolet des de la versió 6.4 a causa de la manca de manteniment i s'ha programat la seva eliminació el 2025.
Biblioteca d'espais d'usuari:
* DCCP-TP Arxivat 2008-07-23 a Wayback Machine. La implementació està optimitzada per a la portabilitat, però no ha tingut canvis des del juny de 2008.
L'objectiu d'aquesta implementació de GoDCCP és proporcionar un marc estandarditzat i portàtil compatible amb NAT per a comunicacions d'igual a igual amb un control de congestió flexible, depenent de l'aplicació.

## Estructura de paquets

La capçalera genèrica DCCP pren diferents formes depenent del valor de X, el bit de números de seqüència ampliada. Si X és un, el camp Número de seqüència té 48 bits de llarg i la capçalera genèrica pren 16 bytes, de la manera següent.
| Desplaçaments | Octet | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 0 | 0 | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen |
| 2 | 16 | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació |
| 4 | 32 | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | CCVal | CCVal | CCVal | CCVal | CsCov | CsCov | CsCov | CsCov |
| 6 | 48 | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control |
| 8 | 64 | Res | Res | Res | Tipus | Tipus | Tipus | Tipus | X=1 | Reservat | Reservat | Reservat | Reservat | Reservat | Reservat | Reservat | Reservat |
| 10 | 80 | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) | Número de seqüència (bits alts) |
| 12 | 96 | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència | Número de seqüència |
| 14 | 112 | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) |
Si X és zero, només es transmeten els 24 bits baixos del número de seqüència, i la capçalera genèrica té una longitud de 12 bytes.
| Desplaçaments | Octet | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 0 | 0 | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen | Port d'origen |
| 2 | 16 | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació | Port de destinació |
| 4 | 32 | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | Desplaçament de dades | CCVal | CCVal | CCVal | CCVal | CsCov | CsCov | CsCov | CsCov |
| 6 | 48 | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control | Suma de control |
| 8 | 64 | Res | Res | Res | Tipus | Tipus | Tipus | Tipus | X=0 | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) | Número de seqüència (alt) |
| 10 | 80 | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) | Número de seqüència (bits baixos) |

## Referències

* ↑ «What is DCCP (Datagram Congestion Control Protocol)?» (en anglès americà), 21-03-2022. [Consulta: 14 novembre 2023].
* ↑ «DCCP» (en anglès). [Consulta: 14 novembre 2023].
* ↑ «Datagram Congestion Control Protocol (dccp)» (en anglès). [Consulta: 14 novembre 2023].
* ↑ «DCCP protocol — The Linux Kernel documentation» (en anglès). [Consulta: 14 novembre 2023].