Datagram Congestion Control Protocol
# Datagram Congestion Control Protocol

Das Datagram Congestion Control Protocol (kurz DCCP) ist ein Netzwerkprotokoll der Transportschicht. Es wird etwa zur Übertragung von Medienströmen in IP-Netzen verwendet, wenn ein Staukontrollmechanismus (zur dynamischen Anpassung der Senderate an die tatsächlich verfügbare Datenübertragungsrate) eingesetzt werden soll. Das sonst dafür häufig verwendete Protokoll TCP bringt nämlich – etwa durch seine erzwungenen Bestätigungen – Nachteile bei der rechtzeitigen Zustellung von „Echtzeitdaten“ mit sich.

## Eigenschaften und Funktionen

DCCP wurde so entwickelt, dass eine einfache Umstellung einer Anwendung von UDP auf DCCP möglich ist. Dazu wurde der notwendige Funktionsumfang minimal gehalten und zusätzliche Funktionen wurden in höhere Schichten verlagert. Es kann mit jeder Anwendung eingesetzt werden, welche unzuverlässige Unicast-Verbindungen mit Überlastkontrolle (engl. congestion control) benötigt. DCCP erlaubt der Anwendung, den für den jeweiligen Anwendungsfall geeigneten Überlastkontrollmechanismus zu wählen.

## Datagram Congestion Control Protocol Header

DCCP-Header mit 48-Bit-Sequenznummer :

| 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 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport |
| Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | CCVal | CCVal | CCVal | CCVal | CsCov | CsCov | CsCov | CsCov | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum |
| Res | Res | Res | Type | Type | Type | Type | 1 | reserviert | reserviert | reserviert | reserviert | reserviert | reserviert | reserviert | reserviert | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) | Sequenznummer (höherwertige Bits) |
| Sequenznummer (niederwertige Bits) ||||||||||||||||||||||||||||||||

DCCP-Header mit 24-Bit-Sequenznummer :

| 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 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Quellport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport | Zielport |
| Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | Data Offset | CCVal | CCVal | CCVal | CCVal | CsCov | CsCov | CsCov | CsCov | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum |
| Res | Res | Res | Type | Type | Type | Type | 0 | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) | Sequenznummer (niederwertige Bits) |

## Erweiterung

Analog zu der Erweiterung von TCP für die Nutzung mehrerer Pfade für eine Verbindung (Multipath TCP) wird auch für DCCP bei IETF in der TSVWG eine entsprechende Protokollvariante als MP-DCCP diskutiert. So kann auch für Echtzeitanwendungen wie interaktive Sprache oder Multimediadienste eine erhöhte Übertragungsrate und verlässlichere Verbindungsverfügbarkeit, etwa durch gleichzeitige Nutzung mehrerer Übertragungswege (z. B. WLAN und Mobilfunk), ermöglicht werden. Erste Anwendungsfälle wurden bereits implementiert und demonstriert.

## Dokumente

* RFC 4340 – Datagram Congestion Control Protocol (DCCP). (englisch).
* RFC 5595 – The Datagram Congestion Control Protocol (DCCP) Service Codes. (englisch).
* RFC 5596 – Datagram Congestion Control Protocol (DCCP) Simultaneous-Open Technique to Facilitate NAT/Middlebox Traversal. (englisch).
* RFC 6335 – Service Name and Port Number Procedures. (englisch).
* RFC 6773 – A Datagram Congestion Control Protocol UDP Encapsulation for NAT Traversal. (englisch).
