====== Datagram Congestion Control Protocol (DCCP) ====== The Datagram Congestion Control Protocol (DCCP) is a transport protocol that provides bidirectional unicast connections of congestion-controlled unreliable datagrams. DCCP is suitable for applications that transfer fairly large amounts of data and that can benefit from control over the tradeoff between timeliness and reliability. ===== RFCs ===== ^ RFC ^ Title ^ Authors ^ Links ^ | [[rfc4336.txt|RFC4336]] | Problem Statement for the Datagram Congestion Control Protocol (DCCP) | S. Floyd, M. Handley, E. Kohler | [[rfc4336.txt|TXT]] / [[rfc4336.pdf|PDF]] / [[ftp://ftp.rfc-editor.org/in-notes/rfc4336.txt|TXT (remote)]] | | [[rfc4340.txt|RFC4340]] | Datagram Congestion Control Protocol (DCCP) | E. Kohler, M. Handley, S. Floyd | [[rfc4340.txt|TXT]] / [[rfc4340.pdf|PDF]] / [[ftp://ftp.rfc-editor.org/in-notes/rfc4340.txt|TXT (remote)]] \\ **[[rfc4340errata|Errata]]** | | [[rfc4341.txt|RFC4341]] | Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control | S. Floyd, E. Kohler | [[rfc4341.txt|TXT]] / [[rfc4341.pdf|PDF]] / [[ftp://ftp.rfc-editor.org/in-notes/rfc4341.txt|TXT (remote)]] | | [[rfc4342.txt|RFC4342]] | Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC) | S. Floyd, E. Kohler, J. Padhye | [[rfc4342.txt|TXT]] / [[rfc4342.pdf|PDF]] / [[ftp://ftp.rfc-editor.org/in-notes/rfc4342.txt|TXT (remote)]] \\ **[[rfc4340errata|Errata]]** | * [[History]]: for old drafts and differences between versions ===== IETF Working Group ===== * [[http://www.ietf.org/html.charters/dccp-charter.html|DCCP Working Group Information]] * Mailing list: [[dccp@ietf.org]] * [[http://www.ietf.org/mailman/listinfo/dccp|Mailing list information page]] * [[meetings|Meetings and reviews]] ^ Draft ^ Date ^ Title ^ Authors ^ Links ^ | [[draft-ietf-dccp-ccid3-thin-01.txt]] | Jul 2004 | DCCP CCID 3-Thin | E. Kohler | [[draft-ietf-dccp-ccid3-thin-01.txt|TXT]] / [[draft-ietf-dccp-ccid3-thin-01.ps|PS]] | | [[draft-kohler-dccp-mobility-02.txt]] | Jun 2006 | Generalized Connections in the Datagram Congestion Control Protocol | E. Kohler | [[draft-kohler-dccp-mobility-02.txt|TXT]] / [[draft-kohler-dccp-mobility-02.pdf|PDF]] | | [[draft-ietf-dccp-tfrc-voip-05.txt]] | Mar 2006 | TCP Friendly Rate Control (TFRC): the Small-Packet (SP) Variant | S. Floyd, E. Kohler | [[draft-ietf-dccp-tfrc-voip-05.txt|TXT]] | | [[draft-ietf-dccp-tfrc-faster-restart-01.txt]] | Jun 2006 | Faster Restart for TCP Friendly Rate Control (TFRC) | E. Kohler, S. Floyd | [[draft-ietf-dccp-tfrc-faster-restart-01.txt|TXT]] / [[draft-ietf-dccp-tfrc-faster-restart-01.pdf|PDF]] | | [[draft-ietf-dccp-tfrc-media-00.txt]] | Jul 2005 | Strategies for Streaming Media Applications Using TCP-Friendly Rate Control | T. Phelan | [[draft-ietf-dccp-tfrc-media-00.txt|TXT]] | | [[draft-ietf-dccp-user-guide-02.txt]] | Jul 2004 | Datagram Congestion Control Protocol (DCCP) User Guide | T. Phelan | [[draft-ietf-dccp-user-guide-02.txt|TXT]] | | [[draft-kohler-dccp-ccid3-drops-00.txt]] | Oct 2006 | Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3 Dropped Packets Option | E. Kohler | [[draft-kohler-dccp-ccid3-drops-00.txt/TXT]] / [[draft-kohler-dccp-ccid3-drops-00.pdf|PDF]] | * [[History]]: for old drafts and differences between versions ===== Implementations ===== * [[http://linux-net.osdl.org/index.php/DCCP|Linux 2.6 DCCP Implementation Wiki]] * Linux 2.6.14 and later include a DCCP stack maintained by Arnaldo Cavalho de Melo, with contributions by Ian McDonald and others. * [[http://www.tcpdump.org/|tcpdump]] 3.9.4 and later includes DCCP support * [[http://www.jp.nishida.org/dccp/|Preliminary FreeBSD implementation]] * [[http://mobqos.ee.unsw.edu.au/~lochin/#coding|Updated version of FreeBSD patches]] from Emmanuel Lochin * [[http://tapir.cs.ucl.ac.uk/pccd/|DCCP packet level test-suite.]] * [[implementations|Other implementations]] ===== Formal models ===== * [[http://www.unisa.edu.au/csec/publications/journal/2005/FORTE-22-09-2005-v2.pdf|Discovering Chatter and Incompleteness in the Datagram Congestion Control Protocol (PDF)]], by Somsak Vanit-Anunchai, Jonathan Billington, and Tul Kongprakaiwoot. Proc. FORTE 2005, LNCS 3731, Springer-Verlag, 2005. * Models DCCP using Coloured Petri Nets (CPNs), discovering several bugs. These bugs are fixed in the published RFC thanks to the authors. * [[model.ltsa|LTSA Model]], by Mark Handley * This model, derived from an early version of [[draft-ietf-dccp-spec-05.txt]], formalizes properties of the DCCP state machine. It can be used to check DCCP for properties like deadlock freedom. ===== Papers ===== * [[http://www.cs.ucla.edu/~kohler/pubs/kohler06designing.pdf|Designing DCCP: Congestion Control Without Reliability (PDF)]], by Eddie Kohler, Mark Handley, and Sally Floyd. Proc. //ACM SIGCOMM 2006//. An extensively revised version of the technical report. * [[dccp-icnp03s.pdf|Designing DCCP: Congestion Control Without Reliability (PDF)]], by Eddie Kohler, Mark Handley, and Sally Floyd. Technical report. * Abstract: DCCP, the Datagram Congestion Control Protocol, is a new transport protocol in the TCP/UDP family that provides a congestion-controlled flow of unreliable datagrams. Delay-sensitive applications, such as streaming media and telephony, prefer timeliness to reliability. These applications have historically used UDP and implemented their own congestion control mechanisms---a difficult task---or no congestion control at all. DCCP will make it easy to deploy these applications without risking congestion collapse. It aims to add to a UDP-like foundation the minimum mechanisms necessary to support congestion control, such as possibly-reliable transmission of acknowledgement information. This minimal design should make DCCP suitable as a building block for more advanced application semantics, such as selective reliability. We introduce and motivate the protocol and discuss some of its design principles. **Those principles particularly shed light on the ways TCP's reliable byte-stream semantics influence its implementation of congestion control.** * [[http://www.cs.ucla.edu/~kohler/pubs/lai04efficiency.pdf|Efficiency and Late Data Choice in a User-Kernel Interface for Congestion-Controlled Datagrams (PDF)]], by Junwen Lai and Eddie Kohler. Proc. [[http://mmcn05.cse.nd.edu/|12th Annual SPIE Conference on Multimedia Computing and Networking (MMCN '05)]], San Jose, CA, January 2005. * Describes a potential DCCP API based on a shared-memory packet ring. The API simultaneously achieves kernel-implemented congestion control, high throughput, and late data choice, where the app can change what's sent very late in the process. Shows that congestion-controlled DCCP API can improve the rate of "important" frames delivered, relative to non-congestion-controlled UDP, in some situations. * [[nsdiabstract.pdf|A one-page summary (PDF)]] * [[summary.pdf|DCCP Overview (PDF)]], by Eddie Kohler and Sally Floyd. Unpublished. * Intended as a quick overview for DCCP newcomers. Abstract: We provide a short overview of ... DCCP, which implements a congestion-controlled, unreliable flow of datagrams suitable for use by applications such as streaming media. ...