ietf-corpus

rfc-4342

Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)

S. Floyd, E. Kohler, J. Padhye
date2006-04 streamIETF areatsv wgdccp statusPROPOSED STANDARD pages33 canonicalhttps://www.rfc-editor.org/rfc/rfc4342 doi10.17487/RFC4342 errataview
This document contains the profile for Congestion Control Identifier 3, TCP-Friendly Rate Control (TFRC), in the Datagram Congestion Control Protocol (DCCP). CCID 3 should be used by senders that want a TCP-friendly sending rate, possibly with Explicit Congestion Notification (ECN), while minimizing abrupt rate changes. [STANDARDS-TRACK]

updated by

Extracted elements (25)

design-rationale §5.3

CCID 3 should not be used by applications that vary sending rate by changing packet size rather than packet rate, since the TCP throughput equation in TFRC is calibrated for fixed packet sizes. A new CCID would be required for variable-size-per-rate applications.

congestion

design-rationale §3

CCID 3 (TFRC) is designed for applications that prefer smooth sending rates over maximum throughput, such as streaming media with small receiver buffers. Unlike TCP-like CCID 2, TFRC avoids halving the sending rate per congestion event, at the cost of slower adaptation to available bandwidth changes.

congestion, realtime, udp

design-rationale §10.2

The window counter (CCVal) is preferred over a round-trip time option for communicating sending-time information to the receiver because it conveys relative *sending* times, giving more robust performance when there is large delay variation within a window of data. A round-trip time option would only allow distinguishing relative *receive* times.

congestion

interoperability-note §8

All currently defined CCID 3-specific options (Loss Event Rate, Loss Intervals, Receive Rate) MUST be ignored when they appear on DCCP-Data packets. Loss Intervals options MUST NOT be sent on packets without an Acknowledgement Number.

congestion

normative-requirement §6.1 MUST

A loss interval's lossy part MUST be less than or equal to 1 RTT in length. CCID 3 uses window counter values (not receive times) to determine whether multiple packets occurred in the same RTT and thus belong to the same loss event.

congestion

normative-requirement §3.1 SHOULD

Conforming CCID 3 implementations MAY track updates to the TCP throughput equation directly as standardized by IETF, but SHOULD wait for explicit updates to CCID 3 before implementing other changes to TFRC congestion control.

congestion

normative-requirement §7 MUST

ECN Nonce Echo information MUST be returned by the receiver using the Loss Intervals option. Any Ack Vector options MUST include the ECN Nonce Sum. The sender MAY maintain a per-packet nonce table to probabilistically verify receiver feedback.

congestion, ecn, security

normative-requirement §5 MUST

If the sender has not received a feedback packet when the nofeedback timer expires (set to at least four RTTs or twice the inter-packet interval, whichever is larger), the sender halves its allowed sending rate. The sending rate is never reduced below one packet per 64 seconds.

congestion, udp

normative-requirement §6.1 MUST

In the absence of better information, a receiver MUST conservatively assume that every lost packet was a data packet and must occur in some lossy part of a loss interval. DCCP's NDP Count option can help determine whether a particular packet contained data.

congestion

normative-requirement §8.6.1 MUST

Loss Intervals options MUST contain information about at least the most recent NINTERVAL+1 = 9 loss intervals unless fewer have occurred or the sender's acknowledgements confirm prior intervals were received. The receiver MUST transmit at least one loss interval regardless.

congestion

normative-requirement §5.1 SHOULD

The allowed sending rate is never reduced to less than the RFC 3390 initial sending rate as a result of an idle period. If the allowed rate was at or above the initial sending rate upon entering the idle period, it should not be reduced below that rate regardless of idle duration.

congestion

normative-requirement §8.2 MUST

The data receiver MUST include an Elapsed Time option on every required feedback packet, and SHOULD also include the corresponding Timestamp Echo option with Elapsed Time value if recent data packets contained Timestamp options. This allows the sender to separate network RTT from receiver processing delay.

congestion

normative-requirement §8.6.1 MUST

The ECN Nonce Echo in each Loss Interval MUST be reported as 0 if Lossless Length is 0, the receiver is ECN Incapable, or the lossless part contained no data packets. Non-data packet nonces MUST NOT contribute to the ECN Nonce Echo.

congestion, ecn

normative-requirement §5 MUST

The initial CCID 3 sending rate is allowed to be at least two packets per RTT and at most four packets per RTT depending on packet size, in contrast to RFC 3448 which specifies one packet per RTT. The rate is only three or four packets per RTT when that translates to at most 4380 bytes per RTT.

congestion, udp

normative-requirement §8.1 MUST

The sender MUST avoid wrapping CCVal on adjacent packets. The sender SHOULD use the specified algorithm: compute quarter_RTTs elapsed since last_WC_time, increment last_WC by min(quarter_RTTs, 5) mod 16, and set the packet's CCVal to last_WC.

congestion

normative-requirement §5.2 MUST

When a sender receives Data Dropped or Slow Receiver options, it SHOULD adjust X_recv (the receive rate used in TFRC calculations) to limit the next RTT's sending rate to at most X_drop. This procedure MUST only be used for Drop Codes not related to corruption (currently Drop Codes 0, 1, and 2).

congestion

normative-requirement §6.3 MUST

When Ack Vector or Data Dropped is used, an active sender MUST acknowledge the receiver's acknowledgements approximately once per RTT (within a factor of two or three), typically via a DCCP-DataAck packet, so the receiver can free up state.

congestion

protocol-element §10.3

The receiver determines whether to send feedback using the window counter: it tracks last_counter (greatest CCVal seen since last feedback). When a data packet arrives with CCVal >= last_counter + 4, a new feedback packet is sent. This replaces the TFRC feedback timer in most cases.

congestion

protocol-element §8.4

The Send Loss Event Rate feature (feature number 192, server-priority, initial value 0) lets endpoints negotiate whether the receiver MUST provide Loss Event Rate options on acknowledgements. When set to 1, the receiver MUST send Loss Event Rate options; it MAY send them when set to 0.

congestion, registry

registry §12

IANA registers CCID 3-specific Reset Codes (range 128-255), option types (128-255, initially populated with types 192-194), and feature numbers (128-255, initially populated with feature 192). Codes 184-190 and 248-254 in each registry are reserved for experimental/testing use; remaining unallocated values require Standards Action.

registry, congestion

security-consideration §11

CCID 3 must protect against spoofed feedback and incorrect congestion information from receivers. When ECN is used, the ECN Nonce echo in Loss Intervals options gives a misbehaving receiver only a 50% chance per interval of successfully concealing dropped or marked packets. Without ECN, the sender can use out-of-order or absent packets to probabilistically detect receiver misbehavior, but this is less robust.

security, congestion, ecn

wire-format §8.1

The CCVal field in the DCCP generic header is a 4-bit window counter value set by the data sender on every data packet. It is initialized to 0 and incremented by 1 every quarter RTT using circular arithmetic modulo 16. Adjacent packets' CCVal values never differ by more than 5 (mod 16).

congestion, udp

wire-format §8.5

The Loss Event Rate option (Type=192, Len=6) carries a 4-byte value indicating the inverse of the loss event rate (rounded up) in data packets per loss interval. When no losses have occurred, the value is set to 2^32 - 1 (all ones). MUST NOT be sent on DCCP-Data packets.

congestion

wire-format §8.6

The Loss Intervals option (Type=193, variable length) reports up to 28 loss intervals in reverse chronological order. Each 9-byte interval encodes: Lossless Length (24 bits), ECN Nonce Echo (1 bit) + Loss Length (23 bits), and Data Length (24 bits). MUST be sent on all required acknowledgements and MUST NOT be sent on DCCP-Data packets.

congestion, ecn

wire-format §8.3

The Receive Rate option (Type=194, Len=6) carries a 4-byte field indicating the rate in bytes per second at which the receiver has received data since its last acknowledgement. It MUST be sent on all required acknowledgements and MUST NOT be sent on DCCP-Data packets.

congestion