diff options
Diffstat (limited to 'doc/rfc/rfc4342.txt')
-rw-r--r-- | doc/rfc/rfc4342.txt | 1851 |
1 files changed, 1851 insertions, 0 deletions
diff --git a/doc/rfc/rfc4342.txt b/doc/rfc/rfc4342.txt new file mode 100644 index 0000000..c57ca9b --- /dev/null +++ b/doc/rfc/rfc4342.txt @@ -0,0 +1,1851 @@ + + + + + + +Network Working Group S. Floyd +Request for Comments: 4342 ICIR +Category: Standards Track E. Kohler + UCLA + J. Padhye + Microsoft Research + March 2006 + + + Profile for Datagram Congestion Control Protocol (DCCP) + Congestion Control ID 3: TCP-Friendly Rate Control (TFRC) + +Status of This Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2006). + +Abstract + + 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. + +Table of Contents + + 1. Introduction ....................................................2 + 2. Conventions .....................................................3 + 3. Usage ...........................................................3 + 3.1. Relationship with TFRC .....................................4 + 3.2. Half-Connection Example ....................................4 + 4. Connection Establishment ........................................5 + 5. Congestion Control on Data Packets ..............................5 + 5.1. Response to Idle and Application-Limited Periods ...........7 + 5.2. Response to Data Dropped and Slow Receiver .................8 + 5.3. Packet Sizes ...............................................9 + 6. Acknowledgements ................................................9 + 6.1. Loss Interval Definition ..................................10 + 6.1.1. Loss Interval Lengths ..............................12 + 6.2. Congestion Control on Acknowledgements ....................13 + + + +Floyd, et al. Standards Track [Page 1] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + 6.3. Acknowledgements of Acknowledgements ......................13 + 6.4. Determining Quiescence ....................................14 + 7. Explicit Congestion Notification ...............................14 + 8. Options and Features ...........................................14 + 8.1. Window Counter Value ......................................15 + 8.2. Elapsed Time Options ......................................17 + 8.3. Receive Rate Option .......................................17 + 8.4. Send Loss Event Rate Feature ..............................18 + 8.5. Loss Event Rate Option ....................................18 + 8.6. Loss Intervals Option .....................................18 + 8.6.1. Option Details .....................................19 + 8.6.2. Example ............................................20 + 9. Verifying Congestion Control Compliance with ECN ...............22 + 9.1. Verifying the ECN Nonce Echo ..............................22 + 9.2. Verifying the Reported Loss Intervals and Loss + Event Rate ................................................23 + 10. Implementation Issues .........................................23 + 10.1. Timestamp Usage ..........................................23 + 10.2. Determining Loss Events at the Receiver ..................24 + 10.3. Sending Feedback Packets .................................25 + 11. Security Considerations .......................................27 + 12. IANA Considerations ...........................................28 + 12.1. Reset Codes ..............................................28 + 12.2. Option Types .............................................28 + 12.3. Feature Numbers ..........................................28 + 13. Thanks ........................................................29 + A. Appendix: Possible Future Changes to CCID 3 ....................30 + Normative References ..............................................31 + Informative References ............................................31 + +List of Tables + + Table 1: DCCP CCID 3 Options ......................................14 + Table 2: DCCP CCID 3 Feature Numbers ..............................15 + +1. Introduction + + This document contains the profile for Congestion Control Identifier + 3, TCP-Friendly Rate Control (TFRC), in the Datagram Congestion + Control Protocol (DCCP) [RFC4340]. DCCP uses Congestion Control + Identifiers, or CCIDs, to specify the congestion control mechanism in + use on a half-connection. + + TFRC is a receiver-based congestion control mechanism that provides a + TCP-friendly sending rate while minimizing the abrupt rate changes + characteristic of TCP or of TCP-like congestion control [RFC3448]. + The sender's allowed sending rate is set in response to the loss + + + + +Floyd, et al. Standards Track [Page 2] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + event rate, which is typically reported by the receiver to the + sender. See Section 3 for more on application requirements. + +2. Conventions + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC2119]. + + All multi-byte numerical quantities in CCID 3, such as arguments to + options, are transmitted in network byte order (most significant byte + first). + + A DCCP half-connection consists of the application data sent by one + endpoint and the corresponding acknowledgements sent by the other + endpoint. The terms "HC-Sender" and "HC-Receiver" denote the + endpoints sending application data and acknowledgements, + respectively. Since CCIDs apply at the level of half-connections, we + abbreviate HC-Sender to "sender" and HC-Receiver to "receiver" in + this document. See [RFC4340] for more discussion. + + For simplicity, we say that senders send DCCP-Data packets and + receivers send DCCP-Ack packets. Both of these categories are meant + to include DCCP-DataAck packets. + + The phrases "ECN-marked" and "marked" refer to packets marked ECN + Congestion Experienced unless otherwise noted. + + This document uses a number of variables from [RFC3448], including + the following: + + o X_recv: The receive rate in bytes per second. See [RFC3448], + Section 3.2.2. + + o s: The packet size in bytes. See [RFC3448], Section 3.1. + + o p: The loss event rate. See [RFC3448], Section 3.1. + +3. Usage + + CCID 3's TFRC congestion control is appropriate for flows that would + prefer to minimize abrupt changes in the sending rate, including + streaming media applications with small or moderate receiver + buffering before playback. TCP-like congestion control, such as that + of DCCP's CCID 2 [RFC4341], halves the sending rate in response to + each congestion event and thus cannot provide a relatively smooth + sending rate. + + + + +Floyd, et al. Standards Track [Page 3] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + As explained in [RFC3448], Section 1, the penalty of having smoother + throughput than TCP while competing fairly for bandwidth with TCP is + that the TFRC mechanism in CCID 3 responds slower to changes in + available bandwidth than do TCP or TCP-like mechanisms. Thus, CCID 3 + should only be used for applications with a requirement for smooth + throughput. For applications that simply need to transfer as much + data as possible in as short a time as possible, we recommend using + TCP-like congestion control, such as CCID 2. + + CCID 3 should also not be used by applications that change their + sending rate by varying the packet size, rather than by varying the + rate at which packets are sent. A new CCID will be required for + these applications. + +3.1. Relationship with TFRC + + The congestion control mechanisms described here follow the TFRC + mechanism standardized by the IETF [RFC3448]. Conforming CCID 3 + implementations MAY track updates to the TCP throughput equation + directly, as updates are standardized in the IETF, rather than wait + for revisions of this document. However, conforming implementations + SHOULD wait for explicit updates to CCID 3 before implementing other + changes to TFRC congestion control. + +3.2. Half-Connection Example + + This example shows the typical progress of a half-connection using + CCID 3's TFRC Congestion Control, not including connection initiation + and termination. The example is informative, not normative. + + 1. The sender transmits DCCP-Data packets. Its sending rate is + governed by the allowed transmit rate as specified in [RFC3448], + Section 3.2. Each DCCP-Data packet has a sequence number and the + DCCP header's CCVal field contains the window counter value, which + is used by the receiver in determining when multiple losses belong + in a single loss event. + + In the typical case of an ECN-capable half-connection, each DCCP- + Data and DCCP-DataAck packet is sent as ECN Capable, with either + the ECT(0) or the ECT(1) codepoint set. The use of the ECN Nonce + with TFRC is described in Section 9. + + 2. The receiver sends DCCP-Ack packets acknowledging the data packets + at least once per round-trip time, unless the sender is sending at + a rate of less than one packet per round-trip time, as indicated + by the TFRC specification ([RFC3448], Section 6). Each DCCP-Ack + packet uses a sequence number, identifies the most recent packet + + + + +Floyd, et al. Standards Track [Page 4] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + received from the sender, and includes feedback about the recent + loss intervals experienced by the receiver. + + 3. The sender continues sending DCCP-Data packets as controlled by + the allowed transmit rate. Upon receiving DCCP-Ack packets, the + sender updates its allowed transmit rate as specified in + [RFC3448], Section 4.3. This update is based on a loss event rate + calculated by the sender using the receiver's loss intervals + feedback. If it prefers, the sender can also use a loss event + rate calculated and reported by the receiver. + + 4. The sender estimates round-trip times and calculates a nofeedback + time, as specified in [RFC3448], Section 4.4. If no feedback is + received from the receiver in that time (at least four round-trip + times), the sender halves its sending rate. + +4. Connection Establishment + + The client initiates the connection by using mechanisms described in + the DCCP specification [RFC4340]. During or after CCID 3 + negotiation, the client and/or server may want to negotiate the + values of the Send Ack Vector and Send Loss Event Rate features. + +5. Congestion Control on Data Packets + + CCID 3 uses the congestion control mechanisms of TFRC [RFC3448]. The + following discussion summarizes information from [RFC3448], which + should be considered normative except where specifically indicated + otherwise. + + Loss Event Rate + + The basic operation of CCID 3 centers around the calculation of a + loss event rate: the number of loss events as a fraction of the + number of packets transmitted, weighted over the last several loss + intervals. This loss event rate, a round-trip time estimate, and the + average packet size are plugged into the TCP throughput equation, as + specified in [RFC3448], Section 3.1. The result is a fair transmit + rate close to what a modern TCP would achieve in the same conditions. + CCID 3 senders are limited to this fair rate. + + The loss event rate itself is calculated in CCID 3 using recent loss + interval lengths reported by the receiver. Loss intervals are + precisely defined in Section 6.1. In summary, a loss interval is up + to 1 RTT of possibly lost or ECN-marked data packets, followed by an + arbitrary number of non-dropped, non-marked data packets. Thus, long + loss intervals represent low congestion rates. The CCID 3 Loss + + + + +Floyd, et al. Standards Track [Page 5] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Intervals option is used to report loss interval lengths; see Section + 8.6. + + Other Congestion Control Mechanisms + + The sender starts in a slow-start phase, roughly doubling its allowed + sending rate each round-trip time. The slow-start phase is ended by + the receiver's report of a data packet drop or mark, after which the + sender uses the loss event rate to calculate its allowed sending + rate. + + [RFC3448], Section 4, specifies an initial sending rate of one packet + per round-trip time (RTT) as follows: The sender initializes the + allowed sending rate to one packet per second. As soon as a feedback + packet is received from the receiver, the sender has a measurement of + the round-trip time and then sets the initial allowed sending rate to + one packet per RTT. However, while the initial TCP window used to be + one segment, [RFC2581] allows an initial TCP window of two segments, + and [RFC3390] allows an initial TCP window of three or four segments + (up to 4380 bytes). [RFC3390] gives an upper bound on the initial + window of min(4*MSS, max(2*MSS, 4380 bytes)). + + Therefore, in contrast to [RFC3448], 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 the packet size. The initial rate is + only allowed to be three or four packets per RTT when, in terms of + segment size, that translates to at most 4380 bytes per RTT. + + The sender's measurement of the round-trip time uses the Elapsed Time + and/or Timestamp Echo option contained in feedback packets, as + described in Section 8.2. The Elapsed Time option is required, while + the Timestamp Echo option is not. The sender maintains an average + round-trip time heavily weighted on the most recent measurements. + + Each DCCP-Data packet contains a sequence number. Each DCCP-Data + packet also contains a window counter value, as described in Section + 8.1. The window counter is generally incremented by one every + quarter round-trip time. The receiver uses it as a coarse-grained + timestamp to determine when a packet loss should be considered part + of an existing loss interval and when it must begin a new loss + interval. + + Because TFRC is rate-based instead of window-based, and because + feedback packets can be dropped in the network, the sender needs some + mechanism for reducing its sending rate in the absence of positive + feedback from the receiver. As described in Section 6, the receiver + sends feedback packets roughly once per round-trip time. As + specified in [RFC3448], Section 4.3, the sender sets a nofeedback + + + +Floyd, et al. Standards Track [Page 6] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + timer to at least four round-trip times, or to twice the interval + between data packets, whichever is larger. If the sender hasn't + received a feedback packet from the receiver when the nofeedback + timer expires, then the sender halves its allowed sending rate. The + allowed sending rate is never reduced below one packet per 64 + seconds. Note that not all acknowledgements are considered feedback + packets, since feedback packets must contain valid Loss Intervals, + Elapsed Time, and Receive Rate options. + + If the sender never receives a feedback packet from the receiver, and + as a consequence never gets to set the allowed sending rate to one + packet per RTT, then the sending rate is left at its initial rate of + one packet per second, with the nofeedback timer expiring after two + seconds. The allowed sending rate is halved each time the nofeedback + timer expires. Thus, if no feedback is received from the receiver, + the allowed sending rate is never above one packet per second and is + quickly reduced below one packet per second. + + The feedback packets from the receiver contain a Receive Rate option + specifying the rate at which data packets arrived at the receiver + since the last feedback packet. The allowed sending rate can be at + most twice the rate received at the receiver in the last round-trip + time. This may be less than the nominal fair rate if, for example, + the application is sending less than its fair share. + +5.1. Response to Idle and Application-Limited Periods + + One consequence of the nofeedback timer is that the sender reduces + the allowed sending rate when the sender has been idle for a + significant period of time. In [RFC3448], Section 4.4, the allowed + sending rate is never reduced to fewer than two packets per round- + trip time as the result of an idle period. CCID 3 revises this to + take into account the larger initial windows allowed by [RFC3390]: + the allowed sending rate is never reduced to less than the [RFC3390] + initial sending rate as the result of an idle period. If the allowed + sending rate is less than the initial sending rate upon entry to the + idle period, then it will still be less than the initial sending rate + when the idle period is exited. However, if the allowed sending rate + is greater than or equal to the initial sending rate upon entry to + the idle period, then it should not be reduced below the initial + sending rate no matter how long the idle period lasts. + + The sender's allowed sending rate is limited to at most twice the + receive rate reported by the receiver. Thus, after an application- + limited period, the sender can at most double its sending rate from + one round-trip time to the next, until it reaches the allowed sending + rate determined by the loss event rate. + + + + +Floyd, et al. Standards Track [Page 7] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + +5.2. Response to Data Dropped and Slow Receiver + + DCCP's Data Dropped option lets a receiver declare that a packet was + dropped at the end host before delivery to the application -- for + instance, because of corruption or receive buffer overflow. Its Slow + Receiver option lets a receiver declare that it is having trouble + keeping up with the sender's packets, although nothing has yet been + dropped. CCID 3 senders respond to these options as described in + [RFC4340], with the following further clarifications. + + o Drop Code 2 ("receive buffer drop"). The allowed sending rate is + reduced by one packet per RTT for each packet newly acknowledged + as Drop Code 2, except that it is never reduced below one packet + per RTT as a result of Drop Code 2. + + o Adjusting the receive rate X_recv. A CCID 3 sender SHOULD also + respond to non-network-congestion events, such as those implied by + Data Dropped and Slow Receiver options, by adjusting X_recv, the + receive rate reported by the receiver in Receive Rate options (see + Section 8.3). The CCID 3 sender's allowed sending rate is limited + to at most twice the receive rate reported by the receiver via the + "min(..., 2*X_recv)" clause in TFRC's throughput calculations + ([RFC3448], Section 4.3). When the sender receives one or more + Data Dropped and Slow Receiver options, the sender adjusts X_recv + as follows: + + 1. X_inrecv is equal to the Receive Rate in bytes per second + reported by the receiver in the most recent acknowledgement. + + 2. X_drop is set to the sending rate upper bound implied by Data + Dropped and Slow Receiver options. If the sender receives a + Slow Receiver option, which requests that the sender not + increase its sending rate for roughly a round-trip time + [RFC4340], then X_drop should be set to X_inrecv. Similarly, + if the sender receives a Data Dropped option indicating, for + example, that three packets were dropped with Drop Code 2, then + the upper bound on the sending rate will be decreased by at + most three packets per RTT, by the sender setting X_drop to + + max(X_inrecv - 3*s/RTT, min(X_inrecv, s/RTT)). + + Again, s is the packet size in bytes. + + 3. X_recv is then set to min(X_inrecv, X_drop/2). + + As a result, the next round-trip time's sending rate will be + limited to at most 2*(X_drop/2) = X_drop. The effects of the Slow + Receiver and Data Dropped options on X_recv will mostly vanish by + + + +Floyd, et al. Standards Track [Page 8] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + the round-trip time after that, which is appropriate for this + non-network-congestion feedback. This procedure MUST only be used + for those Drop Codes not related to corruption (see [RFC4340]). + Currently, this is limited to Drop Codes 0, 1, and 2. + +5.3. Packet Sizes + + CCID 3 is intended for applications that use a fixed packet size, and + that vary their sending rate in packets per second in response to + congestion. CCID 3 is not appropriate for applications that require + a fixed interval of time between packets and vary their packet size + instead of their packet rate in response to congestion. However, + some attention might be required for applications using CCID 3 that + vary their packet size not in response to congestion, but in response + to other application-level requirements. + + The packet size s is used in the TCP throughput equation. A CCID 3 + implementation MAY calculate s as the segment size averaged over + multiple round trip times -- for example, over the most recent four + loss intervals, for loss intervals as defined in Section 6.1. + Alternately, a CCID 3 implementation MAY use the Maximum Packet Size + to derive s. In this case, s is set to the Maximum Segment Size + (MSS), the maximum size in bytes for the data segment, not including + the default DCCP and IP packet headers. Each packet transmitted then + counts as one MSS, regardless of the actual segment size, and the TCP + throughput equation can be interpreted as specifying the sending rate + in packets per second. + + CCID 3 implementations MAY check for applications that appear to be + manipulating the packet size inappropriately. For example, an + application might send small packets for a while, building up a fast + rate, then switch to large packets to take advantage of the fast + rate. (Preliminary simulations indicate that applications may not be + able to increase their overall transfer rates this way, so it is not + clear that this manipulation will occur in practice [V03].) + +6. Acknowledgements + + The receiver sends a feedback packet to the sender roughly once per + round-trip time, if the sender is sending packets that frequently. + This rate is determined by the TFRC protocol as specified in + [RFC3448], Section 6. + + Each feedback packet contains an Acknowledgement Number, which equals + the greatest valid sequence number received so far on this + connection. ("Greatest" is, of course, measured in circular sequence + space.) Each feedback packet also includes at least the following + options: + + + +Floyd, et al. Standards Track [Page 9] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + 1. An Elapsed Time and/or Timestamp Echo option specifying the amount + of time elapsed since the arrival at the receiver of the packet + whose sequence number appears in the Acknowledgement Number field. + These options are described in [RFC4340], Section 13. + + 2. A Receive Rate option, defined in Section 8.3, specifying the rate + at which data was received since the last DCCP-Ack was sent. + + 3. A Loss Intervals option, defined in Section 8.6, specifying the + most recent loss intervals experienced by the receiver. (The + definition of a loss interval is provided below.) From Loss + Intervals, the sender can easily calculate the loss event rate p + using the procedure described in [RFC3448], Section 5.4. + + Acknowledgements not containing at least these three options are not + considered feedback packets. + + The receiver MAY also include other options concerning the loss event + rate, including Loss Event Rate, which gives the loss event rate + calculated by the receiver (Section 8.5), and DCCP's generic Ack + Vector option, which reports the specific sequence numbers of any + lost or marked packets ([RFC4340], Section 11.4). Ack Vector is not + required by CCID 3's congestion control mechanisms: the Loss + Intervals option provides all the information needed to manage the + transmit rate and probabilistically verify receiver feedback. + However, Ack Vector may be useful for applications that need to + determine exactly which packets were lost. The receiver MAY also + include other acknowledgement-related options, such as DCCP's Data + Dropped option ([RFC4340], Section 11.7). + + If the HC-Receiver is also sending data packets to the HC-Sender, + then it MAY piggyback acknowledgement information on those data + packets more frequently than TFRC's specified acknowledgement rate + allows. + +6.1. Loss Interval Definition + + As described in [RFC3448], Section 5.2, a loss interval begins with a + lost or ECN-marked data packet; continues with at most one round-trip + time's worth of packets that may or may not be lost or marked; and + completes with an arbitrarily long series of non-dropped, non-marked + data packets. For example, here is a single loss interval, assuming + that sequence numbers increase as you move right: + + + + + + + + +Floyd, et al. Standards Track [Page 10] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Lossy Part + <= 1 RTT __________ Lossless Part __________ + / \/ \ + *----*--*--*------------------------------------- + ^ ^ ^ ^ + losses or marks + + Note that a loss interval's lossless part might be empty, as in the + first interval below: + + Lossy Part Lossy Part + <= 1 RTT <= 1 RTT _____ Lossless Part _____ + / \/ \/ \ + *----*--*--***--------*-*--------------------------- + ^ ^ ^ ^^^ ^ ^ + \_ Int. 1 _/\_____________ Interval 2 _____________/ + + As in [RFC3448], Section 5.2, the length of the lossy part MUST be + less than or equal to 1 RTT. 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; see Section 10.2. A + loss interval whose lossy part lasts for more than 1 RTT, or whose + lossless part contains a dropped or marked data packet, is invalid. + + A missing data packet doesn't begin a new loss interval until NDUPACK + packets have been seen after the "hole", where NDUPACK = 3. Thus, up + to NDUPACK of the most recent sequence numbers (including the + sequence numbers of any holes) might temporarily not be part of any + loss interval while the implementation waits to see whether a hole + will be filled. See [RFC3448], Section 5.1, and [RFC2581], Section + 3.2, for further discussion of NDUPACK. + + As specified by [RFC3448], Section 5, all loss intervals except the + first begin with a lost or marked data packet, and all loss intervals + are as long as possible, subject to the validity constraints above. + + Lost and ECN-marked non-data packets may occur freely in the lossless + part of a loss interval. (Non-data packets consist of those packet + types that cannot carry application data; namely, DCCP-Ack, DCCP- + Close, DCCP-CloseReq, DCCP-Reset, DCCP-Sync, and DCCP-SyncAck.) In + the absence of better information, a receiver MUST conservatively + assume that every lost packet was a data packet and thus must occur + in some lossy part. DCCP's NDP Count option can help the receiver + determine whether a particular packet contained data; see [RFC4340], + Section 7.7. + + + + + + +Floyd, et al. Standards Track [Page 11] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + +6.1.1. Loss Interval Lengths + + [RFC3448] defines the TFRC congestion control mechanism in terms of a + one-way transfer of data, with data packets going from the sender to + the receiver and feedback packets going from the receiver back to the + sender. However, CCID 3 applies in a context of two half- + connections, with DCCP-Data and DCCP-DataAck packets from one half- + connection sharing sequence number space with DCCP-Ack packets from + the other half-connection. For the purposes of CCID 3 congestion + control, loss interval lengths should include data packets and should + exclude the acknowledgement packets from the reverse half-connection. + However, it is also useful to report the total number of packets in + each loss interval (for example, to facilitate ECN Nonce + verification). + + CCID 3's Loss Intervals option thus reports three lengths for each + loss interval, the lengths of the lossy and lossless parts defined + above and a separate data length. First, the lossy and lossless + lengths are measured in sequence numbers. Together, they sum to the + interval's sequence length, which is the total number of packets the + sender transmitted during the interval. This is easily calculated in + DCCP as the greatest packet sequence number in the interval minus the + greatest packet sequence number in the preceding interval (or, if + there is no preceding interval, then the predecessor to the half- + connection's initial sequence number). The interval's data length, + however, is the number used in TFRC's loss event rate calculation, as + defined in [RFC3448], Section 5, and is calculated as follows. + + For all loss intervals except the first, the data length equals the + sequence length minus the number of non-data packets the sender + transmitted during the loss interval, except that the minimum data + length is one packet. In the absence of better information, an + endpoint MUST conservatively assume that the loss interval contained + only data packets, in which case the data length equals the sequence + length. To achieve greater precision, the sender can calculate the + exact number of non-data packets in an interval by remembering which + sent packets contained data; the receiver can account for received + non-data packets by not including them in the data length, and for + packets that were not received, it may be able to discriminate + between lost data packets and lost non-data packets using DCCP's NDP + Count option. + + The first loss interval's data length is undefined until the first + loss event. [RFC3448], Section 6.3.1 specifies how the first loss + interval's data length is calculated once the first loss event has + occurred; this calculation uses X_recv, the most recent receive rate, + as input. Until this first loss event, the loss event rate is zero, + + + + +Floyd, et al. Standards Track [Page 12] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + as is the data length reported for the interval in the Loss Intervals + option. + + The first loss interval's data length might be less than, equal to, + or even greater than its sequence length. Any other loss interval's + data length must be less than or equal to its sequence length. + + A sender MAY use the loss event rate or loss interval data lengths as + reported by the receiver, or it MAY recalculate loss event rate + and/or loss interval data lengths based on receiver feedback and + additional information. For example, assume the network drops a + DCCP-Ack packet with sequence number 50. The receiver might then + report a loss interval beginning at sequence number 50. If the + sender determined that this loss interval actually contained no lost + or ECN-marked data packets, then it might coalesce the loss interval + with the previous loss interval, resulting in a larger allowed + transmit rate. + +6.2. Congestion Control on Acknowledgements + + The rate and timing for generating acknowledgements is determined by + the TFRC algorithm ([RFC3448], Section 6). The sending rate for + acknowledgements is relatively low -- roughly once per round-trip + time -- so there is no need for explicit congestion control on + acknowledgements. + +6.3. Acknowledgements of Acknowledgements + + TFRC acknowledgements don't generally need to be reliable, so the + sender generally need not acknowledge the receiver's + acknowledgements. When Ack Vector or Data Dropped is used, however, + the sender, DCCP A, MUST occasionally acknowledge the receiver's + acknowledgements so that the receiver can free up Ack Vector or Data + Dropped state. When both half-connections are active, the necessary + acknowledgements will be contained in A's acknowledgements to B's + data. If the B-to-A half-connection goes quiescent, however, DCCP A + must send an acknowledgement proactively. + + Thus, when Ack Vector or Data Dropped is used, an active sender MUST + acknowledge the receiver's acknowledgements approximately once per + round-trip time, within a factor of two or three, probably by sending + a DCCP-DataAck packet. No acknowledgement options are necessary, + just the Acknowledgement Number in the DCCP-DataAck header. + + The sender MAY choose to acknowledge the receiver's acknowledgements + even if they do not contain Ack Vectors or Data Dropped options. For + instance, regular acknowledgements can shrink the size of the Loss + Intervals option. Unlike Ack Vector and Data Dropped, however, the + + + +Floyd, et al. Standards Track [Page 13] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Loss Intervals option is bounded in size (and receiver state), so + acks-of-acks are not required. + +6.4. Determining Quiescence + + This section describes how a CCID 3 receiver determines that the + corresponding sender is not sending any data and therefore has gone + quiescent. See [RFC4340], Section 11.1, for general information on + quiescence. + + Let T equal the greater of 0.2 seconds and two round-trip times. (A + CCID 3 receiver has a rough measure of the round-trip time so that it + can pace its acknowledgements.) The receiver detects that the sender + has gone quiescent after T seconds have passed without receiving any + additional data from the sender. + +7. Explicit Congestion Notification + + CCID 3 supports Explicit Congestion Notification (ECN) [RFC3168]. In + the typical case of an ECN-capable half-connection (where the + receiver's ECN Incapable feature is set to zero), the sender will use + the ECN Nonce for its data packets, as specified in [RFC4340], + Section 12.2. Information about the ECN Nonce MUST be returned by + the receiver using the Loss Intervals option, and any Ack Vector + options MUST include the ECN Nonce Sum. The sender MAY maintain a + table with the ECN nonce sum for each packet and use this information + to probabilistically verify the ECN nonce sums returned in Loss + Intervals or Ack Vector options. Section 9 describes this further. + +8. Options and Features + + CCID 3 can make use of DCCP's Ack Vector, Timestamp, Timestamp Echo, + and Elapsed Time options, and its Send Ack Vector and ECN Incapable + features. In addition, the following CCID-specific options are + defined for use with CCID 3. + + Option DCCP- Section + Type Length Meaning Data? Reference + ----- ------ ------- ----- --------- + 128-191 Reserved + 192 6 Loss Event Rate N 8.5 + 193 variable Loss Intervals N 8.6 + 194 6 Receive Rate N 8.3 + 195-255 Reserved + + Table 1: DCCP CCID 3 Options + + + + + +Floyd, et al. Standards Track [Page 14] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + The "DCCP-Data?" column indicates that all currently defined CCID 3- + specific options MUST be ignored when they occur on DCCP-Data + packets. + + The following CCID-specific feature is also defined. + + Rec'n Initial Section + Number Meaning Rule Value Req'd Reference + ------ ------- ----- ----- ----- --------- + 128-191 Reserved + 192 Send Loss Event Rate SP 0 N 8.4 + 193-255 Reserved + + Table 2: DCCP CCID 3 Feature Numbers + + The column meanings are described in [RFC4340], Table 4. "Rec'n + Rule" defines the feature's reconciliation rule, where "SP" means + server-priority. "Req'd" specifies whether every CCID 3 + implementation MUST understand a feature; Send Loss Event Rate is + optional, in that it behaves like an extension ([RFC4340], Section + 15). + +8.1. Window Counter Value + + The data sender stores a 4-bit window counter value in the DCCP + generic header's CCVal field on every data packet it sends. This + value is set to 0 at the beginning of the transmission and generally + increased by 1 every quarter of a round-trip time, as described in + [RFC3448], Section 3.2.1. Window counters use circular arithmetic + modulo 16 for all operations, including comparisons; see [RFC4340], + Section 3.1, for more information on circular arithmetic. For + reference, the DCCP generic header is as follows. (The diagram is + repeated from [RFC4340], Section 5.1, which also shows the generic + header with a 24-bit Sequence Number field.) + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Source Port | Dest Port | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data Offset | CCVal | CsCov | Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Res | Type |1| Reserved | Sequence Number (high bits) . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + . Sequence Number (low bits) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Floyd, et al. Standards Track [Page 15] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + The CCVal field has enough space to express 4 round-trip times at + quarter-RTT granularity. The sender MUST avoid wrapping CCVal on + adjacent packets, as might happen, for example, if two data-carrying + packets were sent 4 round-trip times apart with no packets + intervening. Therefore, the sender SHOULD use the following + algorithm for setting CCVal. The algorithm uses three variables: + "last_WC" holds the last window counter value sent, "last_WC_time" is + the time at which the first packet with window counter value + "last_WC" was sent, and "RTT" is the current round-trip time + estimate. last_WC is initialized to zero, and last_WC_time to the + time of the first packet sent. Before sending a new packet, proceed + like this: + + Let quarter_RTTs = floor((current_time - last_WC_time) / (RTT/4)). + If quarter_RTTs > 0, then: + Set last_WC := (last_WC + min(quarter_RTTs, 5)) mod 16. + Set last_WC_time := current_time. + Set the packet header's CCVal field to last_WC. + + When this algorithm is used, adjacent data-carrying packets' CCVal + counters never differ by more than five, modulo 16. + + The window counter value may also change as feedback packets arrive. + In particular, after receiving an acknowledgement for a packet sent + with window counter WC, the sender SHOULD increase its window + counter, if necessary, so that subsequent packets have window counter + value at least (WC + 4) mod 16. + + The CCVal counters are used by the receiver to determine whether + multiple losses belong to a single loss event, to determine the + interval to use for calculating the receive rate, and to determine + when to send feedback packets. None of these procedures require the + receiver to maintain an explicit estimate of the round-trip time. + However, implementors who wish to keep such an RTT estimate may do so + using CCVal. Let T(I) be the arrival time of the earliest valid + received packet with CCVal = I. (Of course, when the window counter + value wraps around to the same value mod 16, we must recalculate + T(I).) Let D = 2, 3, or 4 and say that T(K) and T(K+D) both exist + (packets were received with window counters K and K+D). Then the + value (T(K+D) - T(K)) * 4/D MAY serve as an estimate of the round- + trip time. Values of D = 4 SHOULD be preferred for RTT estimation. + Concretely, say that the following packets arrived: + + Time: T1 T2 T3 T4 T5 T6 T7 T8 T9 + ------*---*---*-*----*------------*---*----*--*----> + CCVal: K-1 K-1 K K K+1 K+3 K+4 K+3 K+4 + + + + + +Floyd, et al. Standards Track [Page 16] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Then T7 - T3, the difference between the receive times of the first + packet received with window counter K+4 and the first packet received + with window counter K, is a reasonable round-trip time estimate. + Because of the necessary constraint that measurements only come from + packet pairs whose CCVals differ by at most 4, this procedure does + not work when the inter-packet sending times are significantly + greater than the RTT, resulting in packet pairs whose CCVals differ + by 5. Explicit RTT measurement techniques, such as Timestamp and + Timestamp Echo, should be used in that case. + +8.2. Elapsed Time Options + + The data receiver MUST include an elapsed time value on every + required acknowledgement. This helps the sender distinguish between + network round-trip time, which it must include in its rate equations, + and delay at the receiver due to TFRC's infrequent acknowledgement + rate, which it need not include. The receiver MUST at least include + an Elapsed Time option on every feedback packet, but if at least one + recent data packet (i.e., a packet received after the previous DCCP- + Ack was sent) included a Timestamp option, then the receiver SHOULD + include the corresponding Timestamp Echo option, with Elapsed Time + value, as well. All of these option types are defined in the main + DCCP specification [RFC4340]. + +8.3. Receive Rate Option + + +--------+--------+--------+--------+--------+--------+ + |11000010|00000110| Receive Rate | + +--------+--------+--------+--------+--------+--------+ + Type=194 Len=6 + + This option MUST be sent by the data receiver on all required + acknowledgements. Its four data bytes indicate the rate at which the + receiver has received data since it last sent an acknowledgement, in + bytes per second. To calculate this receive rate, the receiver sets + t to the larger of the estimated round-trip time and the time since + the last Receive Rate option was sent. (Received data packets' + window counters can be used to produce a suitable RTT estimate, as + described in Section 8.1.) The receive rate then equals the number + of data bytes received in the most recent t seconds, divided by t. + + Receive Rate options MUST NOT be sent on DCCP-Data packets, and any + Receive Rate options on received DCCP-Data packets MUST be ignored. + + + + + + + + +Floyd, et al. Standards Track [Page 17] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + +8.4. Send Loss Event Rate Feature + + The Send Loss Event Rate feature lets CCID 3 endpoints negotiate + whether the receiver MUST provide Loss Event Rate options on its + acknowledgements. DCCP A sends a "Change R(Send Loss Event Rate, 1)" + option to ask DCCP B to send Loss Event Rate options as part of its + acknowledgement traffic. + + Send Loss Event Rate has feature number 192 and is server-priority. + It takes one-byte Boolean values. DCCP B MUST send Loss Event Rate + options on its acknowledgements when Send Loss Event Rate/B is one, + although it MAY send Loss Event Rate options even when Send Loss + Event Rate/B is zero. Values of two or more are reserved. A CCID 3 + half-connection starts with Send Loss Event Rate equal to zero. + +8.5. Loss Event Rate Option + + +--------+--------+--------+--------+--------+--------+ + |11000000|00000110| Loss Event Rate | + +--------+--------+--------+--------+--------+--------+ + Type=192 Len=6 + + The option value indicates the inverse of the loss event rate, + rounded UP, as calculated by the receiver. Its units are data + packets per loss interval. Thus, if the Loss Event Rate option value + is 100, then the loss event rate is 0.01 loss events per data packet + (and the average loss interval contains 100 data packets). When each + loss event has exactly one data packet loss, the loss event rate is + the same as the data packet drop rate. + + See [RFC3448], Section 5, for a normative calculation of loss event + rate. Before any losses have occurred, when the loss event rate is + zero, the Loss Event Rate option value is set to + "11111111111111111111111111111111" in binary (or, equivalently, to + 2^32 - 1). The loss event rate calculation uses loss interval data + lengths, as defined in Section 6.1.1. + + Loss Event Rate options MUST NOT be sent on DCCP-Data packets, and + any Loss Event Rate options on received DCCP-Data packets MUST be + ignored. + +8.6. Loss Intervals Option + + +--------+--------+--------+--------...--------+--------+--- + |11000001| Length | Skip | Loss Interval | More Loss + | | | Length | | Intervals... + +--------+--------+--------+--------...--------+--------+--- + Type=193 9 bytes + + + +Floyd, et al. Standards Track [Page 18] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Each 9-byte Loss Interval contains three fields, as follows: + + ____________________ Loss Interval _____________________ + / \ + +--------...-------+--------...--------+--------...--------+ + | Lossless Length |E| Loss Length | Data Length | + +--------...-------+--------...--------+--------...--------+ + 3 bytes 3 bytes 3 bytes + + The receiver reports its observed loss intervals using a Loss + Intervals option. Section 6.1 defines loss intervals. This option + MUST be sent by the data receiver on all required acknowledgements. + The option reports up to 28 loss intervals seen by the receiver, + although TFRC currently uses at most the latest 9 of these. This + lets the sender calculate a loss event rate and probabilistically + verify the receiver's ECN Nonce Echo. + + The Loss Intervals option serves several purposes. + + o The sender can use the Loss Intervals option to calculate the loss + event rate. + + o Loss Intervals information is easily checked for consistency + against previous Loss Intervals options, and against any Loss + Event Rate calculated by the receiver. + + o The sender can probabilistically verify the ECN Nonce Echo for + each Loss Interval, reducing the likelihood of misbehavior. + + Loss Intervals options MUST NOT be sent on DCCP-Data packets, and any + Loss Intervals options on received DCCP-Data packets MUST be ignored. + +8.6.1. Option Details + + The Loss Intervals option contains information about one to 28 + consecutive loss intervals, always including the most recent loss + interval. Intervals are listed in reverse chronological order. + Should more than 28 loss intervals need to be reported, then multiple + Loss Intervals options can be sent; the second option begins where + the first left off, and so forth. The options MUST contain + information about at least the most recent NINTERVAL + 1 = 9 loss + intervals unless (1) there have not yet been NINTERVAL + 1 loss + intervals, or (2) the receiver knows, because of the sender's + acknowledgements, that some previously transmitted loss interval + information has been received. In this second case, the receiver + need not send loss intervals that the sender already knows about, + except that it MUST transmit at least one loss interval regardless. + + + + +Floyd, et al. Standards Track [Page 19] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + The NINTERVAL parameter is equal to "n" as defined in [RFC3448], + Section 5.4. + + Loss interval sequence numbers are delta encoded starting from the + Acknowledgement Number. Therefore, Loss Intervals options MUST NOT + be sent on packets without an Acknowledgement Number, and any Loss + Intervals options received on such packets MUST be ignored. + + The first byte of option data is Skip Length, which indicates the + number of packets up to and including the Acknowledgement Number that + are not part of any Loss Interval. As discussed above, Skip Length + must be less than or equal to NDUPACK = 3. In a packet containing + multiple Loss Intervals options, the Skip Lengths of the second and + subsequent options MUST equal zero; such options with nonzero Skip + Lengths MUST be ignored. + + Loss Interval structures follow Skip Length. Each Loss Interval + consists of a Lossless Length, a Loss Length, an ECN Nonce Echo (E), + and a Data Length. + + Lossless Length, a 24-bit number, specifies the number of packets in + the loss interval's lossless part. Note again that this part may + contain lost or marked non-data packets. + + Loss Length, a 23-bit number, specifies the number of packets in the + loss interval's lossy part. The sum of the Lossless Length and the + Loss Length equals the loss interval's sequence length. Receivers + SHOULD report the minimum valid Loss Length for each loss interval, + making the first and last sequence numbers in each lossy part + correspond to lost or marked data packets. + + The ECN Nonce Echo, stored in the high-order bit of the 3-byte field + containing Loss Length, equals the one-bit sum (exclusive-or, or + parity) of data packet nonces received over the loss interval's + lossless part (which is Lossless Length packets long). If Lossless + Length is 0, the receiver is ECN Incapable, or the Lossless Length + contained no data packets, then the ECN Nonce Echo MUST be reported + as 0. Note that any ECN nonces on received non-data packets MUST NOT + contribute to the ECN Nonce Echo. + + Finally, Data Length, a 24-bit number, specifies the loss interval's + data length, as defined in Section 6.1.1. + +8.6.2. Example + + Consider the following sequence of packets, where "-" represents a + safely delivered packet and "*" represents a lost or marked packet. + + + + +Floyd, et al. Standards Track [Page 20] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Sequence + Numbers: 0 10 20 30 40 44 + | | | | | | + ----------*--------***-*--------*----------*- + + Assuming that packet 43 was lost, not marked, this sequence might be + divided into loss intervals as follows: + + 0 10 20 30 40 44 + | | | | | | + ----------*--------***-*--------*----------*- + \________/\_______/\___________/\_________/ + L0 L1 L2 L3 + + A Loss Intervals option sent on a packet with Acknowledgement Number + 44 to acknowledge this set of loss intervals might contain the bytes + 193,39,2, 0,0,10, 128,0,1, 0,0,10, 0,0,8, 0,0,5, 0,0,10, 0,0,8, + 0,0,1, 0,0,8, 0,0,10, 128,0,0, 0,0,15. This option is interpreted as + follows. + + 193 The Loss Intervals option number. + + 39 The length of the option, including option type and length bytes. + This option contains information about (39 - 3)/9 = 4 loss + intervals. + + 2 The Skip Length is 2 packets. Thus, the most recent loss + interval, L3, ends immediately before sequence number 44 - 2 + 1 + = 43. + + 0,0,10, 128,0,1, 0,0,10 + These bytes define L3. L3 consists of a 10-packet lossless part + (0,0,10), preceded by a 1-packet lossy part. Continuing to + subtract, the lossless part begins with sequence number 43 - 10 = + 33, and the lossy part begins with sequence number 33 - 1 = 32. + The ECN Nonce Echo for the lossless part (namely, packets 33 + through 42, inclusive) equals 1. The interval's data length is + 10, so the receiver believes that the interval contained exactly + one non-data packet. + + 0,0,8, 0,0,5, 0,0,10 + This defines L2, whose lossless part begins with sequence number + 32 - 8 = 24; whose lossy part begins with sequence number 24 - 5 + = 19; whose ECN Nonce Echo (for packets [24,31]) equals 0; and + whose data length is 10. + + + + + + +Floyd, et al. Standards Track [Page 21] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + 0,0,8, 0,0,1, 0,0,8 + L1's lossless part begins with sequence number 11, its lossy part + begins with sequence number 10, its ECN Nonce Echo (for packets + [11,18]) equals 0, and its data length is 8. + + 0,0,10, 128,0,0, 0,0,15 + L0's lossless part begins with sequence number 0, it has no lossy + part, its ECN Nonce Echo (for packets [0,9]) equals 1, and its + data length is 15. (This must be the first loss interval in the + connection; otherwise, a data length greater than the sequence + length would be invalid.) + +9. Verifying Congestion Control Compliance with ECN + + The sender can use Loss Intervals options' ECN Nonce Echoes (and + possibly any Ack Vectors' ECN Nonce Echoes) to probabilistically + verify that the receiver is correctly reporting all dropped or marked + packets. Even if ECN is not used (the receiver's ECN Incapable + feature is set to one), the sender could still check on the receiver + by occasionally not sending a packet, or sending a packet out-of- + order, to catch the receiver in an error in Loss Intervals or Ack + Vector information. This is not as robust or non-intrusive as the + verification provided by the ECN Nonce, however. + +9.1. Verifying the ECN Nonce Echo + + To verify the ECN Nonce Echo included with a Loss Intervals option, + the sender maintains a table with the ECN nonce sum for each data + packet. As defined in [RFC3540], the nonce sum for sequence number S + is the one-bit sum (exclusive-or, or parity) of data packet nonces + over the sequence number range [I,S], where I is the initial sequence + number. Let NonceSum(S) represent this nonce sum for sequence number + S, and define NonceSum(I - 1) as 0. Note that NonceSum does not + account for the nonces of non-data packets such as DCCP-Ack. Then + the Nonce Echo for an interval of packets with sequence numbers X to + Y, inclusive, should equal the following one-bit sum: + + NonceSum(X - 1) + NonceSum(Y) + + Since an ECN Nonce Echo is returned for the lossless part of each + Loss Interval, a misbehaving receiver -- meaning a receiver that + reports a lost or marked data packet as "received non-marked", to + avoid rate reductions -- has only a 50% chance of guessing the + correct Nonce Echo for each loss interval. + + To verify the ECN Nonce Echo included with an Ack Vector option, the + sender maintains a table with the ECN nonce value sent for each + packet. The Ack Vector option explicitly says which packets were + + + +Floyd, et al. Standards Track [Page 22] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + received non-marked; the sender just adds up the nonces for those + packets using a one-bit sum and compares the result to the Nonce Echo + encoded in the Ack Vector's option type. Again, a misbehaving + receiver has only a 50% chance of guessing an Ack Vector's correct + Nonce Echo. Alternatively, an Ack Vector's ECN Nonce Echo may also + be calculated from a table of ECN nonce sums, rather than from ECN + nonces. If the Ack Vector contains many long runs of non-marked, + non-dropped packets, the nonce sum-based calculation will probably be + faster than a straightforward nonce-based calculation. + + Note that Ack Vector's ECN Nonce Echo is measured over both data + packets and non-data packets, while the Loss Intervals option reports + ECN Nonce Echoes for data packets only. Thus, different nonce sum + tables are required to verify the two options. + +9.2. Verifying the Reported Loss Intervals and Loss Event Rate + + Besides probabilistically verifying the ECN Nonce Echoes reported by + the receiver, the sender may also verify the loss intervals and any + loss event rate reported by the receiver, if it so desires. + Specifically, the Loss Intervals option explicitly reports the size + of each loss interval as seen by the receiver; the sender can verify + that the receiver is not falsely combining two loss events into one + reported Loss Interval by using saved window counter information. + The sender can also compare any Loss Event Rate option to the loss + event rate it calculates using the Loss Intervals option. + + Note that in some cases the loss event rate calculated by the sender + could differ from an explicit Loss Event Rate option sent by the + receiver. In particular, when a number of successive packets are + dropped, the receiver does not know the sending times for these + packets and interprets these losses as a single loss event. In + contrast, if the sender has saved the sending times or window counter + information for these packets, then the sender can determine if these + losses constitute a single loss event or several successive loss + events. Thus, with its knowledge of the sending times of dropped + packets, the sender is able to make a more accurate calculation of + the loss event rate. These kinds of differences SHOULD NOT be + misinterpreted as attempted receiver misbehavior. + +10. Implementation Issues + +10.1. Timestamp Usage + + CCID 3 data packets need not carry Timestamp options. The sender can + store the times at which recent packets were sent; the + Acknowledgement Number and Elapsed Time option contained on each + required acknowledgement then provide sufficient information to + + + +Floyd, et al. Standards Track [Page 23] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + compute the round trip time. Alternatively, the sender MAY include + Timestamp options on some of its data packets. The receiver will + respond with Timestamp Echo options including Elapsed Times, allowing + the sender to calculate round-trip times without storing sent + packets' timestamps at all. + +10.2. Determining Loss Events at the Receiver + + The window counter is used by the receiver to determine whether + multiple lost packets belong to the same loss event. The sender + increases the window counter by one every quarter round-trip time. + This section describes in detail the procedure for using the window + counter to determine when two lost packets belong to the same loss + event. + + [RFC3448], Section 3.2.1 specifies that each data packet contains a + timestamp and gives as an alternative implementation a "timestamp" + that is incremented every quarter of an RTT, as is the window counter + in CCID 3. However, [RFC3448], Section 5.2 on "Translation from Loss + History to Loss Events" is written in terms of timestamps, not in + terms of window counters. In this section, we give a procedure for + the translation from loss history to loss events that is explicitly + in terms of window counters. + + To determine whether two lost packets with sequence numbers X and Y + belong to different loss events, the receiver proceeds as follows. + Assume Y > X in circular sequence space. + + o Let X_prev be the greatest valid sequence number received with + X_prev < X. + + o Let Y_prev be the greatest valid sequence number received with + Y_prev < Y. + + o Given a sequence number N, let C(N) be the window counter value + associated with that packet. + + o Packets X and Y belong to different loss events if there exists a + packet with sequence number S so that X_prev < S <= Y_prev, and + the distance from C(X_prev) to C(S) is greater than 4. (The + distance is the number D so that C(X_prev) + D = C(S) (mod + WCTRMAX), where WCTRMAX is the maximum value for the window + counter -- in our case, 16.) + + That is, the receiver only considers losses X and Y as separate + loss events if there exists some packet S received between X and + Y, with the distance from C(X_prev) to C(S) greater than 4. This + complex calculation is necessary in order to handle the case where + + + +Floyd, et al. Standards Track [Page 24] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + window counter space wrapped completely between X and Y. When + that space does not wrap, the receiver can simply check whether + the distance from C(X_prev) to C(Y_prev) is greater than 4; if so, + then X and Y belong to separate loss events. + + Window counters can help the receiver disambiguate multiple losses + after a sudden decrease in the actual round-trip time. When the + sender receives an acknowledgement acknowledging a data packet with + window counter i, the sender increases its window counter, if + necessary, so that subsequent data packets are sent with window + counter values of at least i+4. This can help minimize errors where + the receiver incorrectly interprets multiple loss events as a single + loss event. + + We note that if all of the packets between X and Y are lost in the + network, then X_prev and Y_prev are equal, and the series of + consecutive losses is treated by the receiver as a single loss event. + However, the sender will receive no DCCP-Ack packets during a period + of consecutive losses, and the sender will reduce its sending rate + accordingly. + + As an alternative to the window counter, the sender could have sent + its estimate of the round-trip time to the receiver directly in a + round-trip time option; the receiver would use the sender's round- + trip time estimate to infer when multiple lost or marked packets + belong in the same loss event. In some respects, a round-trip time + option would give a more precise encoding of the sender's round-trip + time estimate than does the window counter. However, the window + counter conveys information about the relative *sending* times for + packets, while the receiver could only use the round-trip time option + to distinguish between the relative *receive* times (in the absence + of timestamps). That is, the window counter will give more robust + performance when there is a large variation in delay for packets sent + within a window of data. Slightly more speculatively, a round-trip + time option might possibly be used more easily by middleboxes + attempting to verify that a flow used conforming end-to-end + congestion control. + +10.3. Sending Feedback Packets + + [RFC3448], Sections 6.1 and 6.2 specify that the TFRC receiver must + send a feedback packet when a newly calculated loss event rate p is + greater than its previous value. CCID 3 follows this rule. + + In addition, [RFC3448], Section 6.2, specifies that the receiver use + a feedback timer to decide when to send additional feedback packets. + If the feedback timer expires and data packets have been received + since the previous feedback was sent, then the receiver sends a + + + +Floyd, et al. Standards Track [Page 25] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + feedback packet. When the feedback timer expires, the receiver + resets the timer to expire after R_m seconds, where R_m is the most + recent estimate of the round-trip time received from the sender. + CCID 3 receivers, however, generally use window counter values + instead of a feedback timer to determine when to send additional + feedback packets. This section describes how. + + Whenever the receiver sends a feedback message, the receiver sets a + local variable last_counter to the greatest received value of the + window counter since the last feedback message was sent, if any data + packets have been received since the last feedback message was sent. + If the receiver receives a data packet with a window counter value + greater than or equal to last_counter + 4, then the receiver sends a + new feedback packet. ("Greater" and "greatest" are measured in + circular window counter space.) + + This procedure ensures that when the sender is sending at a rate less + than one packet per round-trip time, the receiver sends a feedback + packet after each data packet. Similarly, this procedure ensures + that when the sender is sending several packets per round-trip time, + the receiver will send a feedback packet each time that a data packet + arrives with a window counter at least four greater than the window + counter when the last feedback packet was sent. Thus, the feedback + timer is not necessary when the window counter is used. + + However, the feedback timer still could be useful in some rare cases + to prevent the sender from unnecessarily halving its sending rate. + In particular, one could construct scenarios where the use of the + feedback timer at the receiver would prevent the unnecessary + expiration of the nofeedback timer at the sender. Consider the case + below, in which a feedback packet is sent when a data packet arrives + with a window counter of K. + + Window + Counters: K K+1 K+2 K+3 K+4 K+5 K+6 ... K+15 K+16 K+17 ... + | | | | | | | | | | + Data | | | | | | | | | | + Packets | | | | | | | | | | + Received: - - --- - ... - - -- - -- -- - + | | | | | | + | | | | | | + Events: 1: 2: 3: 4: 5: 6: + "A" "B" Timer "B" + sent sent received + + 1: Feedback message A is sent. + 2: A feedback message would have been sent if feedback + timers had been used. + + + +Floyd, et al. Standards Track [Page 26] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + 3: Feedback message B is sent. + 4: Sender's nofeedback timer expires. + 5: Feedback message B is received at the sender. + 6: Sender's nofeedback timer would have expired if feedback + timers had been used, and the feedback message at 2 had + been sent. + + The receiver receives data after the feedback packet has been sent + but has received no data packets with a window counter between K+4 + and K+14. A data packet with a window counter of K+4 or larger would + have triggered sending a new feedback packet, but no feedback packet + is sent until time 3. + + The TFRC protocol specifies that after a feedback packet is received, + the sender sets a nofeedback timer to at least four times the round- + trip time estimate. If the sender doesn't receive any feedback + packets before the nofeedback timer expires, then the sender halves + its sending rate. In the figure, the sender receives feedback + message A (time 1) and then sets the nofeedback timer to expire + roughly four round-trip times later (time 4). The sender starts + sending again just before the nofeedback timer expires but doesn't + receive the resulting feedback message until after its expiration, + resulting in an unnecessary halving of the sending rate. If the + connection had used feedback timers, the receiver would have sent a + feedback message when the feedback timer expired at time 2, and the + halving of the sending rate would have been avoided. + + For implementors who wish to implement a feedback timer for the data + receiver, we suggest estimating the round-trip time from the most + recent data packet, as described in Section 8.1. We note that this + procedure does not work when the inter-packet sending times are + greater than the RTT. + +11. Security Considerations + + Security considerations for DCCP have been discussed in [RFC4340], + and security considerations for TFRC have been discussed in + [RFC3448], Section 9. The security considerations for TFRC include + the need to protect against spoofed feedback and the need to protect + the congestion control mechanisms against incorrect information from + the receiver. + + In this document, we have extensively discussed the mechanisms the + sender can use to verify the information sent by the receiver. When + ECN is used, the receiver returns ECN Nonce information to the + sender. When ECN is not used, then, as Section 9 shows, the sender + could still use various techniques that might catch the receiver in + + + + +Floyd, et al. Standards Track [Page 27] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + an error in reporting congestion, but this is not as robust or non- + intrusive as the verification provided by the ECN Nonce. + +12. IANA Considerations + + This specification defines the value 3 in the DCCP CCID namespace + managed by IANA. This assignment is also mentioned in [RFC4340]. + + CCID 3 also introduces three sets of numbers whose values should be + allocated by IANA; namely, CCID 3-specific Reset Codes, option types, + and feature numbers. These ranges will prevent any future CCID 3- + specific allocations from polluting DCCP's corresponding global + namespaces; see [RFC4340], Section 10.3. However, we note that this + document makes no particular allocations from the Reset Code range, + except for experimental and testing use [RFC3692]. We refer to the + Standards Action policy outlined in [RFC2434]. + +12.1. Reset Codes + + Each entry in the DCCP CCID 3 Reset Code registry contains a CCID 3- + specific Reset Code, which is a number in the range 128-255; a short + description of the Reset Code; and a reference to the RFC defining + the Reset Code. Reset Codes 184-190 and 248-254 are permanently + reserved for experimental and testing use. The remaining Reset Codes + -- 128-183, 191-247, and 255 -- are currently reserved and should be + allocated with the Standards Action policy, which requires IESG + review and approval and standards-track IETF RFC publication. + +12.2. Option Types + + Each entry in the DCCP CCID 3 option type registry contains a CCID + 3-specific option type, which is a number in the range 128-255; the + name of the option, such as "Loss Intervals"; and a reference to the + RFC defining the option type. The registry is initially populated + using the values in Table 1, in Section 8. This document allocates + option types 192-194, and option types 184-190 and 248-254 are + permanently reserved for experimental and testing use. The remaining + option types -- 128-183, 191, 195-247, and 255 -- are currently + reserved and should be allocated with the Standards Action policy, + which requires IESG review and approval and standards-track IETF RFC + publication. + +12.3. Feature Numbers + + Each entry in the DCCP CCID 3 feature number registry contains a CCID + 3-specific feature number, which is a number in the range 128-255; + the name of the feature, such as "Send Loss Event Rate"; and a + reference to the RFC defining the feature number. The registry is + + + +Floyd, et al. Standards Track [Page 28] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + initially populated using the values in Table 2, in Section 8. This + document allocates feature number 192, and feature numbers 184-190 + and 248-254 are permanently reserved for experimental and testing + use. The remaining feature numbers -- 128-183, 191, 193-247, and 255 + -- are currently reserved and should be allocated with the Standards + Action policy, which requires IESG review and approval and + standards-track IETF RFC publication. + +13. Thanks + + We thank Mark Handley for his help in defining CCID 3. We also thank + Mark Allman, Aaron Falk, Ladan Gharai, Sara Karlberg, Greg Minshall, + Arun Venkataramani, David Vos, Yufei Wang, Magnus Westerlund, and + members of the DCCP Working Group for feedback on versions of this + document. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Floyd, et al. Standards Track [Page 29] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + +A. Appendix: Possible Future Changes to CCID 3 + + There are a number of cases where the behavior of TFRC as specified + in [RFC3448] does not match the desires of possible users of DCCP. + These include the following: + + 1. The initial sending rate of at most four packets per RTT, as + specified in [RFC3390]. + + 2. The receiver's sending of an acknowledgement for every data packet + received, when the receiver receives at a rate less than one + packet per round-trip time. + + 3. The sender's limitation of at most doubling the sending rate from + one round-trip time to the next (or, more specifically, of + limiting the sending rate to at most twice the reported receive + rate over the previous round-trip time). + + 4. The limitation of halving the allowed sending rate after an idle + period of four round-trip times (possibly down to the initial + sending rate of two to four packets per round-trip time). + + 5. The response function used in [RFC3448], Section 3.1, which does + not closely match the behavior of TCP in environments with high + packet drop rates [RFC3714]. + + One suggestion for higher initial sending rates is an initial sending + rate of up to eight small packets per RTT, when the total packet + size, including headers, is at most 4380 bytes. Because the packets + would be rate-paced out over a round-trip time, instead of sent + back-to-back as they would be in TCP, an initial sending rate of + eight small packets per RTT with TFRC-based congestion control would + be considerably milder than the impact of an initial window of eight + small packets sent back-to-back in TCP. As Section 5.1 describes, + the initial sending rate also serves as a lower bound for reductions + of the allowed sending rate during an idle period. + + We note that with CCID 3, the sender is in slow-start in the + beginning and responds promptly to the report of a packet loss or + mark. However, in the absence of feedback from the receiver, the + sender can maintain its old sending rate for up to four round-trip + times. One possibility would be that for an initial window of eight + small packets, the initial nofeedback timer would be set to two + round-trip times instead of four, so that the sending rate would be + reduced after two round-trips without feedback. + + + + + + +Floyd, et al. Standards Track [Page 30] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + Research and engineering will be needed to investigate the pros and + cons of modifying these limitations in order to allow larger initial + sending rates, to send fewer acknowledgements when the data sending + rate is low, to allow more abrupt changes in the sending rate, or to + allow a higher sending rate after an idle period. + +Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing + an IANA Considerations Section in RFCs", BCP 26, RFC + 2434, October 1998. + + [RFC2581] Allman, M., Paxson, V., and W. Stevens, "TCP + Congestion Control", RFC 2581, April 1999. + + [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The + Addition of Explicit Congestion Notification (ECN) to + IP", RFC 3168, September 2001. + + [RFC3390] Allman, M., Floyd, S., and C. Partridge, "Increasing + TCP's Initial Window", RFC 3390, October 2002. + + [RFC3448] Handley, M., Floyd, S., Padhye, J., and J. Widmer, + "TCP Friendly Rate Control (TFRC): Protocol + Specification", RFC 3448, January 2003. + + [RFC3692] Narten, T., "Assigning Experimental and Testing + Numbers Considered Useful", BCP 82, RFC 3692, January + 2004. + + [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram + Congestion Control Protocol (DCCP)", RFC 4340, March + 2006. + +Informative References + + [RFC3540] Spring, N., Wetherall, D., and D. Ely, "Robust + Explicit Congestion Notification (ECN) Signaling with + Nonces", RFC 3540, June 2003. + + + + + + + + + +Floyd, et al. Standards Track [Page 31] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + + [RFC3714] Floyd, S. and J. Kempf, "IAB Concerns Regarding + Congestion Control for Voice Traffic in the Internet", + RFC 3714, March 2004. + + [RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram + Congestion Control Protocol (DCCP) Congestion Control + ID 2: TCP-like Congestion Control", RFC 4341, March + 2006. + + [V03] Arun Venkataramani, August 2003. Citation for + acknowledgement purposes only. + +Authors' Addresses + + Sally Floyd + ICSI Center for Internet Research + 1947 Center Street, Suite 600 + Berkeley, CA 94704 + USA + + EMail: floyd@icir.org + + + Eddie Kohler + 4531C Boelter Hall + UCLA Computer Science Department + Los Angeles, CA 90095 + USA + + EMail: kohler@cs.ucla.edu + + + Jitendra Padhye + Microsoft Research + One Microsoft Way + Redmond, WA 98052 + USA + + EMail: padhye@microsoft.com + + + + + + + + + + + + +Floyd, et al. Standards Track [Page 32] + +RFC 4342 DCCP CCID3 TFRC March 2006 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2006). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at ietf- + ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is provided by the IETF + Administrative Support Activity (IASA). + + + + + + + +Floyd, et al. Standards Track [Page 33] + |