ietf-corpus

rfc-4341

Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control

S. Floyd, E. Kohler
date2006-03 streamIETF areatsv wgdccp statusPROPOSED STANDARD pages20 canonicalhttps://www.rfc-editor.org/rfc/rfc4341 doi10.17487/RFC4341
This document contains the profile for Congestion Control Identifier 2 (CCID 2), TCP-like Congestion Control, in the Datagram Congestion Control Protocol (DCCP). CCID 2 should be used by senders who would like to take advantage of the available bandwidth in an environment with rapidly changing conditions, and who are able to adapt to the abrupt changes in the congestion window typical of TCP's Additive Increase Multiplicative Decrease (AIMD) congestion control. [STANDARDS-TRACK]

updated by

Extracted elements (30)

design-rationale §6

CCID 2 applies congestion control to acknowledgements via the Ack Ratio feature, a mechanism not currently standardized for TCP, to avoid congestion collapse on the reverse path and perform somewhat better than TCP under high reverse-path loss rates.

congestion, udp

design-rationale §3

CCID 2 is recommended over CCID 3 (TFRC) for applications that buffer data before playback (tolerating rate swings) or that want TCP-like, well-understood congestion dynamics rather than the smoother but less-studied TFRC behavior.

congestion, udp, realtime

design-rationale §3.1

CCID 2 parameters (cwnd, ssthresh, pipe) are measured in packets rather than bytes because DCCP is a datagram protocol. This is a deliberate deviation from TCP where these parameters are byte-based.

congestion, udp, tcp

design-rationale §7

ECN Nonce is not used for CCID 2 acknowledgements because it would be difficult to protect against concealment of marked ack packets by the sender, and the sender has little motivation to lie about the ack mark rate.

congestion, ecn, udp

design-rationale §6.1.1

For Ack Ratio calculation, the sender assumes all lost packets were non-data packets because DCCP-Ack packets impose less load on congested links; Appendix B quantifies that even worst-case misclassification reduces the ack rate by only a factor of ~0.62.

congestion, udp

interoperability-note §3.1

CCID 2 implementations should NOT track TCP congestion control evolution directly but wait for explicit CCID 2 updates, since TCP's mechanisms are specified for TCP's retransmission-based reliability model and may not translate directly to DCCP's unreliable datagram context.

congestion, tcp, udp

normative-requirement §6.2 MUST

An active sender DCCP A MUST occasionally acknowledge its peer DCCP B's acknowledgements so that DCCP B can free up Ack Vector state, and SHOULD do so at least once per congestion window.

congestion, udp

normative-requirement §3.1 SHOULD

CCID 2 implementations SHOULD wait for explicit updates to CCID 2 rather than tracking TCP's congestion control evolution directly.

congestion, tcp, udp

normative-requirement §6 MUST

Each required acknowledgement MUST contain Ack Vector options that declare exactly which packets arrived and whether those packets were ECN-marked. Ack Vector coverage SHOULD generally span the receiver's entire Acknowledgement Window.

congestion, udp, ecn

normative-requirement §5 MUST NOT

The sender MAY send a data packet when pipe < cwnd but MUST NOT send a data packet when pipe >= cwnd. Every data packet sent increases pipe by 1.

congestion, udp

normative-requirement §5.2 MUST

The sender MUST exit slow start whenever it receives a relevant Data Dropped or Slow Receiver option.

congestion, udp

normative-requirement §5 MUST NOT

The sender MUST NOT decrement pipe for non-data packets such as DCCP-Acks, even though the Ack Vector will contain information about them.

congestion, udp

normative-requirement §5 MUST NOT

The sender MUST NOT decrement pipe more than once per data packet; true duplicate acknowledgements MUST NOT affect pipe, and the sender MUST NOT decrement pipe again upon receiving acknowledgement of a packet previously inferred as lost.

congestion, udp

normative-requirement §7 SHOULD

The sender SHOULD check ECN Nonce Echoes returned in Ack Vector options against the expected values, protecting against accidental or malicious concealment of marked packets.

congestion, ecn, security

normative-requirement §6.1.2 SHOULD NOT

The sender SHOULD NOT attempt to renegotiate the Ack Ratio more than once per round-trip time. It MAY rate-limit Ack Ratio renegotiations to once every four or five RTTs or once every second or two.

congestion, udp

normative-requirement §4 SHOULD NOT

The sender SHOULD NOT send data until it has received the corresponding 'Confirm L(Send Ack Vector, 1)' from the receiver, except that it MAY send data on DCCP-Request packets.

congestion, udp

normative-requirement §6.1.1 SHOULD

Unless the sender has better information (e.g., via NDP Count), it SHOULD assume for Ack Ratio calculation that every lost packet was a non-data packet.

congestion, udp

normative-requirement §4 MUST

Use of the Ack Vector is MANDATORY on CCID 2 half-connections; the sender MUST send a 'Change R(Send Ack Vector, 1)' option to the receiver as part of connection establishment.

congestion, udp

protocol-element §6.1

Ack Ratio feature controls the receiver's DCCP-Ack sending rate: when Ack Ratio is R, the receiver sends one DCCP-Ack per R data packets. For each RTT with a DCCP-Ack congestion event, Ack Ratio is doubled; for each cwnd/(R^2 - R) consecutive congestion-free windows, Ack Ratio is decreased by 1.

congestion, udp

protocol-element §6.1.2

Ack Ratio must satisfy three constraints: (1) it is an integer; (2) it does not exceed ceil(cwnd/2), except Ack Ratio 2 is always acceptable; (3) it is two or more for a congestion window of four or more packets.

congestion, udp

protocol-element §5

CCID 2 maintains three integer parameters measured in packets: cwnd (maximum data packets allowed in network), ssthresh (slow-start threshold), and pipe (sender's estimate of data packets outstanding in network). These are manipulated per SACK-based TCP behavior but in packet units rather than bytes.

congestion, udp, tcp

protocol-element §5

Congestion window increase rules: in slow-start (cwnd < ssthresh), cwnd increases by one packet per two newly acknowledged State-0 packets, up to Ack Ratio/2 per ack; in congestion avoidance (cwnd >= ssthresh), cwnd increases by one packet per window of data acknowledged without loss or marks. cwnd is initialized to at most four packets per RFC 3390.

congestion, udp, tcp

protocol-element §5.2

For the Data Dropped option with Drop Code 2 (receive buffer drop), cwnd is reduced by one for each packet newly acknowledged as Drop Code 2, but is never reduced below one packet.

congestion, udp

protocol-element §5

On a congestion event (lost or ECN-marked packet), cwnd is halved and ssthresh is set to the new cwnd, never reducing cwnd below one packet. After a transmit timeout, ssthresh is set to cwnd/2 and cwnd is reset to one packet; the transmit timeout uses exponential backoff identical to TCP.

congestion, udp, tcp

protocol-element §6.2.1

Quiescence detection: a CCID 2 receiver infers the sender has gone quiescent when at least T = max(0.2 s, 2 RTTs) have passed without receiving data and the sender has acknowledged Ack Vectors covering all received data packets.

congestion, udp

protocol-element §5

The NUMDUPACK parameter is set to three (matching TCP): a data packet P is inferred lost rather than delayed when at least NUMDUPACK packets transmitted after P have been acknowledged as received (Ack Vector State 0 or 1) by the receiver.

congestion, udp, tcp

registry §10.3

IANA manages the DCCP CCID 2 Feature Number registry; values are numbers 128-255, with 184-190 and 248-254 reserved for experimental/testing use and the remainder allocated via Standards Action policy. This document also defines value 2 in the DCCP CCID namespace.

registry, udp

registry §10.2

IANA manages the DCCP CCID 2 Option Type registry; values are numbers 128-255, with 184-190 and 248-254 reserved for experimental/testing use and the remainder allocated via Standards Action policy.

registry, udp

registry §10.1

IANA manages the DCCP CCID 2 Reset Code registry; values are numbers 128-255, with 184-190 and 248-254 reserved for experimental/testing use and the remainder allocated via Standards Action policy.

registry, udp

security-consideration §9

An attacker could impair CCID 2 connection performance by dropping packets or forging duplicate acknowledgements or acknowledgements for new data, as in TCP. The document states no new security considerations are introduced beyond those already discussed for TCP (RFC 2581) and DCCP (RFC 4340).

security, congestion, udp