DCCP Review

From: Vladan D <vladandjeric_at_gmail.com>
Date: Mon, 9 Oct 2006 21:37:22 -0400

DCCP is a protocol for providing congestion control to applications which do
not require reliable data transmission. DCCP is designed as a protocol at
the same layer as UDP with its own transport-layer header structures and
acknowledgement semantics. It is meant to be used by high-bandwidth
applications such as VoIP, which currently use UDP instead of TCP, and
either implement their own congestion control mechanisms or do not use them
at all. Unlike the Congestion Management approach studied in the previous
paper, DCCP does not use a single congestion control algorithm and allows
the communicating parties to negotiate one of several algorithms during the
initial connection setup.

In designing DCCP, the authors set out 5 goals for their protocol:

-- Minimalism in functionality and mechanism (and header size), in line with
the end-to-end arguments and as a nod to TCP/IP's simplicity
-- Robustness in the face of attacks and network "middle-boxes" such as NATs
-- Providing a flexible framework for current and future congestion control
algorithms
-- Self-sufficiency by providing a simple API, without requiring application
participation in congestion control
-- Support for simple timing/reliability tradeoffs

The authors explain how these goals have been fulfilled throughout the
paper.

DCCP uses three-way handshakes to set up connections and uses ports to
distinguish flows. The TCP header, however, has been redesigned with
changes including 48-bit sequence numbers (optionally shorter) which
represent datagram counts instead of byte counts, the removal of the receive
window field, and the addition of several DCCP-specific fields.
Additionally, every packet including pure ACKs uses a new sequence number
and the ACK-Vector option can report ACKs for every packet received. ACKs
are sent for the most recently received packets instead of a TCP-like
cumulative ACK. A separate option can indicate when packets are dropped.
Checksums can optionally only cover part of the packet (e.g. headers), a
useful feature in wireless environments. DCCP also provides an explicit
mechanism for synchronization and provides defences against DoS attacks,
misbehaved receivers and attempts to hijack connections.

DCCP has been implemented in Linux kernels since version 2.6.14 but as the
authors point out, there are no applications yet which use DCCP as their
primary transport. Occasionally, the paper reads too much like a transcript
of the authors' thought processes and it distracts from understanding the
protocol itself. The many comparisons to TCP are occasionally superfluous
and sometimes detract the authors from providing a clear explanation of the
details of their design.
Received on Mon Oct 09 2006 - 21:37:28 EDT

This archive was generated by hypermail 2.2.0 : Mon Oct 09 2006 - 22:49:56 EDT