One document matched: draft-ietf-dccp-rfc3448bis-03.ps
%!PS-Adobe-3.0
%%BoundingBox: 24 24 588 768
%%Title: Enscript Output
%%For: Sally Floyd
%%Creator: GNU enscript 1.6.1
%%CreationDate: Sun Nov 18 22:30:14 2007
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentMedia: Letter 612 792 0 () ()
%%DocumentNeededResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset Enscript-Prolog 1.6 1
%
% Procedures.
%
/_S { % save current state
/_s save def
} def
/_R { % restore from saved state
_s restore
} def
/S { % showpage protecting gstate
gsave
showpage
grestore
} bind def
/MF { % fontname newfontname -> - make a new encoded font
/newfontname exch def
/fontname exch def
/fontdict fontname findfont def
/newfont fontdict maxlength dict def
fontdict {
exch
dup /FID eq {
% skip FID pair
pop pop
} {
% copy to the new font dictionary
exch newfont 3 1 roll put
} ifelse
} forall
newfont /FontName newfontname put
% insert only valid encoding vectors
encoding_vector length 256 eq {
newfont /Encoding encoding_vector put
} if
newfontname newfont definefont pop
} def
/SF { % fontname width height -> - set a new font
/height exch def
/width exch def
findfont
[width 0 0 height 0 0] makefont setfont
} def
/SUF { % fontname width height -> - set a new user font
/height exch def
/width exch def
/F-gs-user-font MF
/F-gs-user-font width height SF
} def
/M {moveto} bind def
/s {show} bind def
/Box { % x y w h -> - define box path
/d_h exch def /d_w exch def /d_y exch def /d_x exch def
d_x d_y moveto
d_w 0 rlineto
0 d_h rlineto
d_w neg 0 rlineto
closepath
} def
/bgs { % x y height blskip gray str -> - show string with bg color
/str exch def
/gray exch def
/blskip exch def
/height exch def
/y exch def
/x exch def
gsave
x y blskip sub str stringwidth pop height Box
gray setgray
fill
grestore
x y M str s
} def
% Highlight bars.
/highlight_bars { % nlines lineheight output_y_margin gray -> -
gsave
setgray
/ymarg exch def
/lineheight exch def
/nlines exch def
% This 2 is just a magic number to sync highlight lines to text.
0 d_header_y ymarg sub 2 sub translate
/cw d_output_w cols div def
/nrows d_output_h ymarg 2 mul sub lineheight div cvi def
% for each column
0 1 cols 1 sub {
cw mul /xp exch def
% for each rows
0 1 nrows 1 sub {
/rn exch def
rn lineheight mul neg /yp exch def
rn nlines idiv 2 mod 0 eq {
% Draw highlight bar. 4 is just a magic indentation.
xp 4 add yp cw 8 sub lineheight neg Box fill
} if
} for
} for
grestore
} def
% Line highlight bar.
/line_highlight { % x y width height gray -> -
gsave
/gray exch def
Box gray setgray fill
grestore
} def
% Column separator lines.
/column_lines {
gsave
.1 setlinewidth
0 d_footer_h translate
/cw d_output_w cols div def
1 1 cols 1 sub {
cw mul 0 moveto
0 d_output_h rlineto stroke
} for
grestore
} def
% Column borders.
/column_borders {
gsave
.1 setlinewidth
0 d_footer_h moveto
0 d_output_h rlineto
d_output_w 0 rlineto
0 d_output_h neg rlineto
closepath stroke
grestore
} def
% Do the actual underlay drawing
/draw_underlay {
ul_style 0 eq {
ul_str true charpath stroke
} {
ul_str show
} ifelse
} def
% Underlay
/underlay { % - -> -
gsave
0 d_page_h translate
d_page_h neg d_page_w atan rotate
ul_gray setgray
ul_font setfont
/dw d_page_h dup mul d_page_w dup mul add sqrt def
ul_str stringwidth pop dw exch sub 2 div ul_h_ptsize -2 div moveto
draw_underlay
grestore
} def
/user_underlay { % - -> -
gsave
ul_x ul_y translate
ul_angle rotate
ul_gray setgray
ul_font setfont
0 0 ul_h_ptsize 2 div sub moveto
draw_underlay
grestore
} def
% Page prefeed
/page_prefeed { % bool -> -
statusdict /prefeed known {
statusdict exch /prefeed exch put
} {
pop
} ifelse
} def
% Wrapped line markers
/wrapped_line_mark { % x y charwith charheight type -> -
/type exch def
/h exch def
/w exch def
/y exch def
/x exch def
type 2 eq {
% Black boxes (like TeX does)
gsave
0 setlinewidth
x w 4 div add y M
0 h rlineto w 2 div 0 rlineto 0 h neg rlineto
closepath fill
grestore
} {
type 3 eq {
% Small arrows
gsave
.2 setlinewidth
x w 2 div add y h 2 div add M
w 4 div 0 rlineto
x w 4 div add y lineto stroke
x w 4 div add w 8 div add y h 4 div add M
x w 4 div add y lineto
w 4 div h 8 div rlineto stroke
grestore
} {
% do nothing
} ifelse
} ifelse
} def
% EPSF import.
/BeginEPSF {
/b4_Inc_state save def % Save state for cleanup
/dict_count countdictstack def % Count objects on dict stack
/op_count count 1 sub def % Count objects on operand stack
userdict begin
/showpage { } def
0 setgray 0 setlinecap
1 setlinewidth 0 setlinejoin
10 setmiterlimit [ ] 0 setdash newpath
/languagelevel where {
pop languagelevel
1 ne {
false setstrokeadjust false setoverprint
} if
} if
} bind def
/EndEPSF {
count op_count sub { pos } repeat % Clean up stacks
countdictstack dict_count sub { end } repeat
b4_Inc_state restore
} bind def
% Check PostScript language level.
/languagelevel where {
pop /gs_languagelevel languagelevel def
} {
/gs_languagelevel 1 def
} ifelse
%%EndResource
%%BeginResource: procset Enscript-Encoding-88591 1.6 1
/encoding_vector [
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/space /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
/zero /one /two /three
/four /five /six /seven
/eight /nine /colon /semicolon
/less /equal /greater /question
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
/quoteleft /a /b /c
/d /e /f /g
/h /i /j /k
/l /m /n /o
/p /q /r /s
/t /u /v /w
/x /y /z /braceleft
/bar /braceright /tilde /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/space /exclamdown /cent /sterling
/currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft
/logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior
/acute /mu /paragraph /bullet
/cedilla /onesuperior /ordmasculine /guillemotright
/onequarter /onehalf /threequarters /questiondown
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /ydieresis
] def
%%EndResource
%%EndProlog
%%BeginSetup
%%IncludeResource: font Courier-Bold
%%IncludeResource: font Courier
/HFpt_w 10 def
/HFpt_h 10 def
/Courier-Bold /HF-gs-font MF
/HF /HF-gs-font findfont [HFpt_w 0 0 HFpt_h 0 0] makefont def
/Courier /F-gs-font MF
/F-gs-font 10 10 SF
/#copies 1 def
% Pagedevice definitions:
gs_languagelevel 1 gt {
<<
/PageSize [612 792]
>> setpagedevice
} if
/d_page_w 564 def
/d_page_h 744 def
/d_header_x 0 def
/d_header_y 744 def
/d_header_w 564 def
/d_header_h 0 def
/d_footer_x 0 def
/d_footer_y 0 def
/d_footer_w 564 def
/d_footer_h 0 def
/d_output_w 564 def
/d_output_h 744 def
/cols 1 def
%%EndSetup
%%Page: (1) 1
%%BeginPageSetup
_S
24 24 translate
/pagenum 1 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 632 M
(Internet Engineering Task Force S. Floyd) s
5 621 M
(INTERNET-DRAFT ICIR) s
5 610 M
(Intended status: Proposed Standard M. Handley) s
5 599 M
(Expires: May 2008 University College London) s
5 588 M
( J. Padhye) s
5 577 M
( Microsoft) s
5 566 M
( J. Widmer) s
5 555 M
( University of Mannheim) s
5 544 M
( 18 November 2007) s
5 511 M
( TCP Friendly Rate Control \(TFRC\): Protocol Specification) s
5 500 M
( draft-ietf-dccp-rfc3448bis-03.txt) s
5 467 M
(Status of this Memo) s
5 445 M
( By submitting this Internet-Draft, each author represents that any) s
5 434 M
( applicable patent or other IPR claims of which he or she is aware) s
5 423 M
( have been or will be disclosed, and any of which he or she becomes) s
5 412 M
( aware will be disclosed, in accordance with Section 6 of BCP 79.) s
5 390 M
( Internet-Drafts are working documents of the Internet Engineering) s
5 379 M
( Task Force \(IETF\), its areas, and its working groups. Note that) s
5 368 M
( other groups may also distribute working documents as Internet-) s
5 357 M
( Drafts.) s
5 335 M
( Internet-Drafts are draft documents valid for a maximum of six) s
5 324 M
( months and may be updated, replaced, or obsoleted by other documents) s
5 313 M
( at any time. It is inappropriate to use Internet-Drafts as) s
5 302 M
( reference material or to cite them other than as "work in progress.") s
5 280 M
( The list of current Internet-Drafts can be accessed at) s
5 269 M
( http://www.ietf.org/ietf/1id-abstracts.txt.) s
5 247 M
( The list of Internet-Draft Shadow Directories can be accessed at) s
5 236 M
( http://www.ietf.org/shadow.html.) s
5 214 M
( This Internet-Draft will expire on May 2008.) s
5 192 M
(Copyright Notice) s
5 170 M
( Copyright \(C\) The IETF Trust \(2007\).) s
5 104 M
(Floyd et al. Expires: May 2008 [Page 1]) s
_R
S
%%Page: (2) 2
%%BeginPageSetup
_S
24 24 translate
/pagenum 2 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(Abstract) s
5 665 M
( This document specifies TCP-Friendly Rate Control \(TFRC\). TFRC is a) s
5 654 M
( congestion control mechanism for unicast flows operating in a best-) s
5 643 M
( effort Internet environment. It is reasonably fair when competing) s
5 632 M
( for bandwidth with TCP flows, but has a much lower variation of) s
5 621 M
( throughput over time compared with TCP, making it more suitable for) s
5 610 M
( applications such as streaming media where a relatively smooth) s
5 599 M
( sending rate is of importance.) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 2]) s
_R
S
%%Page: (3) 3
%%BeginPageSetup
_S
24 24 translate
/pagenum 3 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(Table of Contents) s
5 665 M
( 1. Introduction ..................................................11) s
5 654 M
( 2. Conventions ...................................................12) s
5 643 M
( 3. Protocol Mechanism ............................................12) s
5 632 M
( 3.1. TCP Throughput Equation ..................................13) s
5 621 M
( 3.2. Packet Contents ..........................................14) s
5 610 M
( 3.2.1. Data Packets ......................................15) s
5 599 M
( 3.2.2. Feedback Packets ..................................15) s
5 588 M
( 4. Data Sender Protocol ..........................................16) s
5 577 M
( 4.1. Measuring the Segment Size ...............................16) s
5 566 M
( 4.2. Sender Initialization ....................................17) s
5 555 M
( 4.3. Sender Behavior When a Feedback Packet is Received .......18) s
5 544 M
( 4.4. Expiration of Nofeedback Timer ...........................21) s
5 533 M
( 4.5. Reducing Oscillations ....................................23) s
5 522 M
( 4.6. Scheduling of Packet Transmissions .......................24) s
5 511 M
( 5. Calculation of the Loss Event Rate \(p\) ........................25) s
5 500 M
( 5.1. Detection of Lost or Marked Packets ......................25) s
5 489 M
( 5.2. Translation from Loss History to Loss Events .............26) s
5 478 M
( 5.3. Inter-loss Event Interval ................................28) s
5 467 M
( 5.4. Average Loss Interval ....................................28) s
5 456 M
( 5.5. History Discounting ......................................29) s
5 445 M
( 6. Data Receiver Protocol ........................................31) s
5 434 M
( 6.1. Receiver Behavior When a Data Packet is Received .........32) s
5 423 M
( 6.2. Expiration of Feedback Timer .............................33) s
5 412 M
( 6.3. Receiver Initialization ..................................34) s
5 401 M
( 6.3.1. Initializing the Loss History after the First Loss) s
5 390 M
( Event ....................................................35) s
5 379 M
( 7. Sender-based Variants .........................................36) s
5 368 M
( 8. Implementation Issues .........................................36) s
5 357 M
( 8.1. Computing the Throughput Equation ........................37) s
5 346 M
( 8.2. Sender Behavior When a Feedback Packet is Received .......37) s
5 335 M
( 8.3. Sending Packets Before their Nominal Send Time ...........38) s
5 324 M
( 8.4. Calculation of the Average Loss Interval .................40) s
5 313 M
( 8.5. The Optional History Discounting Mechanism ...............40) s
5 302 M
( 9. Changes from RFC 3448 .........................................40) s
5 291 M
( 9.1. Overview of Changes ......................................40) s
5 280 M
( 9.2. Changes in each Section ..................................41) s
5 269 M
( 10. Security Considerations ......................................43) s
5 258 M
( 11. IANA Considerations ..........................................44) s
5 247 M
( 12. Acknowledgments ..............................................44) s
5 236 M
( A. Terminology ...................................................44) s
5 225 M
( B. The Initial Value of the Nofeedback Timer .....................46) s
5 214 M
( C. Response to Idle or Data-limited Periods ......................47) s
5 203 M
( C.1. Long Idle or Data-limited Periods ........................47) s
5 192 M
( C.2. Short Idle or Data-limited Periods .......................50) s
5 181 M
( C.3. Moderate Idle or Data-limited Periods ....................50) s
5 170 M
( C.4. Other Patterns ...........................................51) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 3]) s
_R
S
%%Page: (4) 4
%%BeginPageSetup
_S
24 24 translate
/pagenum 4 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( C.5. Evaluating TFRC's Response to Idle Periods ...............51) s
5 676 M
( Normative References .............................................52) s
5 665 M
( Informational References .........................................52) s
5 654 M
( Authors' Addresses ...............................................54) s
5 643 M
( Full Copyright Statement .........................................54) s
5 632 M
( Intellectual Property ............................................55) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 4]) s
_R
S
%%Page: (5) 5
%%BeginPageSetup
_S
24 24 translate
/pagenum 5 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( NOTE TO RFC EDITOR: PLEASE DELETE THIS NOTE UPON PUBLICATION.) s
5 665 M
( Changes from draft-ietf-dccp-rfc3448bis-02.txt:) s
5 643 M
( * In a data-limited period, instead of setting the receive rate to) s
5 632 M
( Infinity, set it to the maximum of \(X_recv, values in X_recv_set\).) s
5 621 M
( Step \(4\) of Section 4.3.) s
5 599 M
( * Added a fix so that when datalimited and p = 0, the sender doesn't) s
5 588 M
( double the allowed sending rate after each feedback packet.) s
5 577 M
( Step \(4\) of Section 4.3. Problem reported by Arjuna.) s
5 555 M
( * Added a line to the pseudocode for reducing the sending rate) s
5 544 M
( during idle periods during initial slow-start. This fixes) s
5 533 M
( a problem when the sender is in initial slow-start, has) s
5 522 M
( an allowed sending rate less than twice the initial sending rate,) s
5 511 M
( and has been idle since the nofeedback timer was set.) s
5 500 M
( Step \(1\) of Section 4.4. Problem reported by Arjuna.) s
5 478 M
( * Added one line to the pseudocode in Section 4.4 on "Expiration of) s
5 467 M
( Nofeedback Timer" so that when the nofeedback timer expires and) s
5 456 M
( the sender does not have an RTT sample and has not yet received) s
5 445 M
( feedback from the receiver, we also look at whether the sender has) s
5 434 M
( been idle during the entire nofeedback interval.) s
5 412 M
( * General editing from feedback from Colin Perkins.) s
5 390 M
( * General editing from feedback from Gerrit Renker.) s
5 379 M
( This includes the following:) s
5 368 M
( - Added a subsection to Section 8 on implementation issues about) s
5 357 M
( "Sender Behavior When a Feedback Packet is Received".) s
5 346 M
( - Moved Section 4.6.1 on "Sending Packets Before their Nominal) s
5 335 M
( Send Time" to Section 8 on "Implementation Issues".) s
5 313 M
( * Added a subsection on "Evaluating TFRC's Response to Idle Periods") s
5 302 M
( to the Appendix, encouraging future work on TFRC's responses to) s
5 291 M
( idle and data-limited periods.) s
5 269 M
( Changes from draft-ietf-dccp-rfc3448bis-01.txt:) s
5 247 M
( * Specified that the sender is not limited by the receive rate) s
5 236 M
( if the sender has been data-limited for an entire feedback) s
5 225 M
( interval.) s
5 203 M
( * Added variables "initial_rate" and "recover_rate, for the) s
5 192 M
( initial transmit rate and the rate for resuming after an idle) s
5 181 M
( period, for easier specification of Faster Restart \(in a separate) s
5 170 M
( document\). Also added the variable "recv_limit" to specify) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 5]) s
_R
S
%%Page: (6) 6
%%BeginPageSetup
_S
24 24 translate
/pagenum 6 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( the limit on the sending rate that is computed from the receive) s
5 676 M
( rate, and the variable "timer_limit" to specify the) s
5 665 M
( limit on the sending rate from the expiration of the nofeedback) s
5 654 M
( timer.) s
5 643 M
( Explained why recover_rate is not used as lower bound) s
5 632 M
( for nofeedback timer expirations after a data-limited period.) s
5 610 M
( * Added Appendix C on "Response to Idle or Data-limited Periods".) s
5 588 M
( * Revised the section on "Scheduling of Packet Transmissions") s
5 577 M
( to make clear what is specification, and what is) s
5 566 M
( implementation. From Gerrit Renker. Also stated that the) s
5 555 M
( accumulation of sending credits should be limited) s
5 544 M
( to a round-trip time's worth of packets.) s
5 522 M
( * For measuring the receive rate, added that after a loss event,) s
5 511 M
( the receive rate SHOULD be measured over the most recent RTT,) s
5 500 M
( but for simplicity of implementation, MAY be measured over) s
5 489 M
( a slightly longer time interval.) s
5 467 M
( * Clarified that RTT measurements don't necessarily come from) s
5 456 M
( feedback packets; they could also come from other places,) s
5 445 M
( e.g., from the SYN exchange.) s
5 423 M
( * Specified that the sender may maintain unused sent credits) s
5 412 M
( up to one RTT. This gives behavior similar to TCP.) s
5 401 M
( Also specified that the sender should not sent packets more) s
5 390 M
( that rtt/2 seconds before their nominal send time.) s
5 368 M
( * Reinserted the last paragraph of Section 4.4 from RFC 3448.) s
5 357 M
( It must have been deleted accidently.) s
5 335 M
( * TODO in ns-2) s
5 324 M
( - Add a variable to ns-2 to allow either TFRC or CCID3.) s
5 302 M
( * Feedback from Arjuna Sathiaseelan:) s
5 291 M
( - Changing W_init to be in terms of segment size s, not MSS.) s
5 269 M
( * Changed THRESHOLD, the lower bound on the history) s
5 258 M
( discounting parameter DF, from 0.5 to 0.25, for more) s
5 247 M
( history discounting when the current interval is long.) s
5 225 M
( * Relying on the sender not to use X_recv from data-limited) s
5 214 M
( periods. This gives behavior similar to TCP, when) s
5 203 M
( ACK-clocking is not in effect in data-limited periods.) s
5 192 M
( The largest X_recv over the most recent two round-trip) s
5 181 M
( times is used to limit the sending rate. This is) s
5 170 M
( maintained using X_recv_set. Taken together, these avoid) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 6]) s
_R
S
%%Page: (7) 7
%%BeginPageSetup
_S
24 24 translate
/pagenum 7 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( problems with the first feedback packet after an idle) s
5 676 M
( period, and this avoids problems with limitations) s
5 665 M
( from X_recv during data-limited periods.) s
5 643 M
( * Clarified that when the receiver receives a data packet,) s
5 632 M
( and didn't send a feedback packet when the feedback timer) s
5 621 M
( last expired \(because no data packets were received\),) s
5 610 M
( then the receiver sends a feedback packet immediately.) s
5 588 M
( * Clarified that the feedback packet reports the rate over) s
5 577 M
( the last RTT, not necessarily the rate since the) s
5 566 M
( last feedback packet was sent \(if no feedback packet was) s
5 555 M
( sent when the feedback timer last expired\).) s
5 533 M
( * Corrected earlier code designed to prevent the receive) s
5 522 M
( rate from limiting the sending rate when the first feedback) s
5 511 M
( packet received, or for the first feedback packet received) s
5 500 M
( after an idle period.) s
5 478 M
( * Clarified that we have p=0 only until the first loss event.) s
5 467 M
( After the first loss event, p>0, and it is not possible to go) s
5 456 M
( back to p=0. In response to old email.) s
5 434 M
( * Clarified in Section 6.1 that the loss event rate does not) s
5 423 M
( have to be recalculated with the arrival of each new data) s
5 412 M
( packet.) s
5 390 M
( * Clarified the section on Reducing Oscillations. Feedback from) s
5 379 M
( Gerrit Renker.) s
5 357 M
( Changes from draft-ietf-dccp-rfc3448bis-00.txt:) s
5 335 M
( * When initializing the loss history after the first) s
5 324 M
( data packet sent is lost or ECN-marked, TFRC uses) s
5 313 M
( a minimum receive rate of 0.5 packets per second.) s
5 291 M
( * For initializing the estimated packet drop rate) s
5 280 M
( for the first loss interval when coming out of slow-start,) s
5 269 M
( it is ok to use the maximum receive rate so far, not just) s
5 258 M
( the receive rate in the last round-trip time.) s
5 247 M
( Feedback from Ladan Gharai.) s
5 225 M
( * General feedback from Gorry Fairhurst:) s
5 214 M
( - Added a reference for RFC4828.) s
5 203 M
( - Clarified that R_m is sender's estimate of RTT, as reported) s
5 192 M
( in Section 3.2.1.) s
5 181 M
( - Added a definition of terms.) s
5 170 M
( - Added a discussion of why the initial value of the nofeedback) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 7]) s
_R
S
%%Page: (8) 8
%%BeginPageSetup
_S
24 24 translate
/pagenum 8 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( timer is two seconds, instead of three seconds for the) s
5 676 M
( recommended initial value for TCP's retransmit timer.) s
5 654 M
( * General feedback from Arjuna Sathiaseelan:) s
5 643 M
( - Added more details about sending multiple feedback) s
5 632 M
( packets per RTT.) s
5 621 M
( - Added change to Section 4.3 to use the first feedback) s
5 610 M
( packet, or the first feedback packet after a) s
5 599 M
( nofeedback timer during slow-start, *if min_rate > X*.) s
5 577 M
( * General feedback from Gerrit Renker:) s
5 566 M
( - Changed "delta" to "t_delta".) s
5 555 M
( - Changed X_calc to X_Bps, clarified X.) s
5 544 M
( - Clarified send times in "Scheduling of Packet Transmissions".) s
5 533 M
( - Changed so that tld can be initialized to either 0 or -1.) s
5 522 M
( - Fixed Section 5.5 to say that the most recent lost) s
5 511 M
( interval has weight 1/\(0.75*n\) *when there have been) s
5 500 M
( at least eight loss intervals*.) s
5 489 M
( - Clarified introduction about fixed-size and variable-size) s
5 478 M
( packets.) s
5 456 M
( * Added more about sender-based variants.) s
5 445 M
( Feedback from Guillaume Jourjon.) s
5 423 M
( * Corrected that the loss interval I_0 includes all transmitted) s
5 412 M
( packets, including lost and marked packets \(as defined in Section) s
5 401 M
( 5.3 in the general definition.\) Email from Eddie Kohler and) s
5 390 M
( Gerrit Renker.) s
5 368 M
( * Not done: I didn't add a minimum value for the nofeedback) s
5 357 M
( timer. \(Why would a nofeedback timer need to be bigger) s
5 346 M
( than max\(4*R, 2*s/X\)? Email discussing pros and cons from) s
5 335 M
( Arjuna.) s
5 313 M
( Changes from draft-floyd-rfc3448bis-00.txt:) s
5 291 M
( * Name change to draft-ietf-dccp-rfc3448bis-00.txt.) s
5 269 M
( * Specified the receiver's initialization of the feedback timer) s
5 258 M
( when the first data packet doesn't have an estimate of the) s
5 247 M
( RTT. From feedback from Dado Colussi.) s
5 225 M
( * Added the procedure for sending receiver) s
5 214 M
( feedback packets when a coarse-grained) s
5 203 M
( timestamp is used. From RFC 4243.) s
5 181 M
( Changes from RFC 3448:) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 8]) s
_R
S
%%Page: (9) 9
%%BeginPageSetup
_S
24 24 translate
/pagenum 9 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( * Incorporated changes in the RFC 3448 errata:) s
5 665 M
( - "If the sender does not receive a feedback report for) s
5 654 M
( four round trip times, it cuts its sending rate in half.") s
5 643 M
( \("Two" changed to "four", for consistency with the rest) s
5 632 M
( of the document. Reported by Joerg Widmer\).) s
5 610 M
( - "If the nofeedback timer expires when the sender does not) s
5 599 M
( yet have an RTT sample, and has not yet received any) s
5 588 M
( feedback from the receiver, or when p == 0,...") s
5 577 M
( \(Added "or when p == 0,", reported by Wim Heirman\).) s
5 555 M
( - In Section 5.5, changed:) s
5 544 M
( for \(i = 1 to n\) { DF_i = 1; }) s
5 533 M
( to:) s
5 522 M
( for \(i = 0 to n\) { DF_i = 1; }) s
5 511 M
( Reported by Michele R.) s
5 489 M
( * Changed RFC 3448 to correspond to the larger initial windows) s
5 478 M
( specified in RFC 3390. This includes the following:) s
5 456 M
( - Incorporated Section 5.1 from [RFC4342], saying that) s
5 445 M
( when reducing the sending rate after an idle period, don't) s
5 434 M
( reduce the sending rate below the initial sending rate.) s
5 412 M
( - Change for a datalimited sender:) s
5 401 M
( When the sender has been datalimited, the sender doesn't) s
5 390 M
( let the receive rate limit it to a sending rate less than) s
5 379 M
( the initial rate.) s
5 357 M
( - Small change to slow-start:) s
5 346 M
( Changed so that for the first feedback packet received,) s
5 335 M
( or for the first feedback packet received after an idle) s
5 324 M
( period, the receive rate is not used to limit the) s
5 313 M
( sending rate. This is because the receiver might not yet) s
5 302 M
( have seen an entire window of data.) s
5 280 M
( * Clarified how the average loss interval is calculated when) s
5 269 M
( the receiver has not yet seen eight loss intervals.) s
5 247 M
( * Discussed more about estimating the average segment size:) s
5 225 M
( - For initializing the loss history after the first loss event,) s
5 214 M
( either the receiver knows the sender's value for s, or) s
5 203 M
( the receiver uses the throughput equation for X_pps and does) s
5 192 M
( not need to know an estimate for s.) s
5 170 M
( - Added a discussion about estimating the average segment size) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 9]) s
_R
S
%%Page: (10) 10
%%BeginPageSetup
_S
24 24 translate
/pagenum 10 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( s in Section 4.1 on "Measuring the Segment Size".) s
5 665 M
( - Changed "packet size" to "segment size".) s
5 643 M
( END OF NOTE TO RFC EDITOR.) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 10]) s
_R
S
%%Page: (11) 11
%%BeginPageSetup
_S
24 24 translate
/pagenum 11 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(1. Introduction) s
5 665 M
( This document specifies TCP-Friendly Rate Control \(TFRC\). TFRC is a) s
5 654 M
( congestion control mechanism designed for unicast flows operating in) s
5 643 M
( an Internet environment and competing with TCP traffic [FHPW00].) s
5 632 M
( Instead of specifying a complete protocol, this document simply) s
5 621 M
( specifies a congestion control mechanism that could be used in a) s
5 610 M
( transport protocol such as DCCP \(Datagram Congestion Control) s
5 599 M
( Protocol\) [RFC4340], in an application incorporating end-to-end) s
5 588 M
( congestion control at the application level, or in the context of) s
5 577 M
( endpoint congestion management [BRS99]. This document does not) s
5 566 M
( discuss packet formats or reliability. Implementation-related) s
5 555 M
( issues are discussed only briefly, in Section 8.) s
5 533 M
( TFRC is designed to be reasonably fair when competing for bandwidth) s
5 522 M
( with TCP flows, where a flow is "reasonably fair" if its sending) s
5 511 M
( rate is generally within a factor of two of the sending rate of a) s
5 500 M
( TCP flow under the same conditions. However, TFRC has a much lower) s
5 489 M
( variation of throughput over time compared with TCP, which makes it) s
5 478 M
( more suitable for applications such as telephony or streaming media) s
5 467 M
( where a relatively smooth sending rate is of importance.) s
5 445 M
( The penalty of having smoother throughput than TCP while competing) s
5 434 M
( fairly for bandwidth is that TFRC responds slower than TCP to) s
5 423 M
( changes in available bandwidth. Thus TFRC should only be used when) s
5 412 M
( the application has a requirement for smooth throughput, in) s
5 401 M
( particular, avoiding TCP's halving of the sending rate in response) s
5 390 M
( to a single packet drop. For applications that simply need to) s
5 379 M
( transfer as much data as possible in as short a time as possible we) s
5 368 M
( recommend using TCP, or if reliability is not required, using an) s
5 357 M
( Additive-Increase, Multiplicative-Decrease \(AIMD\) congestion control) s
5 346 M
( scheme with similar parameters to those used by TCP.) s
5 324 M
( TFRC is designed for best performance with applications that use a) s
5 313 M
( fixed segment size, and vary their sending rate in packets per) s
5 302 M
( second in response to congestion. TFRC can also be used, perhaps) s
5 291 M
( with less optimal performance, with applications that don't have a) s
5 280 M
( fixed segment size, but where the segment size varies according to) s
5 269 M
( the needs of the application \(e.g., video applications\).) s
5 247 M
( Some applications \(e.g., some audio applications\) require a fixed) s
5 236 M
( interval of time between packets and vary their segment size instead) s
5 225 M
( of their packet rate in response to congestion. The congestion) s
5 214 M
( control mechanism in this document is not designed for those) s
5 203 M
( applications; TFRC-SP \(Small-Packet TFRC\) is a variant of TFRC for) s
5 192 M
( applications that have a fixed sending rate in packets per second) s
5 181 M
( but either use small packets, or vary their packet size in response) s
5 170 M
( to congestion. TFRC-SP is specified in a separate document) s
5 126 M
(Floyd et al. Expires: May 2008 Section 1. [Page 11]) s
_R
S
%%Page: (12) 12
%%BeginPageSetup
_S
24 24 translate
/pagenum 12 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( [RFC4828].) s
5 665 M
( This document specifies TFRC as a receiver-based mechanism, with the) s
5 654 M
( calculation of the congestion control information \(i.e., the loss) s
5 643 M
( event rate\) in the data receiver rather in the data sender. This is) s
5 632 M
( well-suited to an application where the sender is a large server) s
5 621 M
( handling many concurrent connections, and the receiver has more) s
5 610 M
( memory and CPU cycles available for computation. In addition, a) s
5 599 M
( receiver-based mechanism is more suitable as a building block for) s
5 588 M
( multicast congestion control. However, it is also possible to) s
5 577 M
( implement TFRC in sender-based variants, as allowed in DCCP's) s
5 566 M
( Congestion Control ID 3 \(CCID 3\) [RFC4342].) s
5 544 M
(2. Conventions) s
5 522 M
( The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",) s
5 511 M
( "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this) s
5 500 M
( document are to be interpreted as described in [RFC2119].) s
5 478 M
( Appendix A gives a list of technical terms used in this document.) s
5 456 M
(3. Protocol Mechanism) s
5 434 M
( For its congestion control mechanism, TFRC directly uses a) s
5 423 M
( throughput equation for the allowed sending rate as a function of) s
5 412 M
( the loss event rate and round-trip time. In order to compete fairly) s
5 401 M
( with TCP, TFRC uses the TCP throughput equation, which roughly) s
5 390 M
( describes TCP's sending rate as a function of the loss event rate,) s
5 379 M
( round-trip time, and segment size. We define a loss event as one or) s
5 368 M
( more lost or marked packets from a window of data, where a marked) s
5 357 M
( packet refers to a congestion indication from Explicit Congestion) s
5 346 M
( Notification \(ECN\) [RFC3168].) s
5 324 M
( Generally speaking, TFRC's congestion control mechanism works as) s
5 313 M
( follows:) s
5 291 M
( o The receiver measures the loss event rate and feeds this) s
5 280 M
( information back to the sender.) s
5 258 M
( o The sender also uses these feedback messages to measure the) s
5 247 M
( round-trip time \(RTT\).) s
5 225 M
( o The loss event rate and RTT are then fed into TFRC's throughput) s
5 214 M
( equation, and the resulting sending rate is limited to at most) s
5 203 M
( twice the receive rate to give the allowed transmit rate X.) s
5 181 M
( o The sender then adjusts its transmit rate to match the allowed) s
5 170 M
( transmit rate X.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 3. [Page 12]) s
_R
S
%%Page: (13) 13
%%BeginPageSetup
_S
24 24 translate
/pagenum 13 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( The dynamics of TFRC are sensitive to how the measurements are) s
5 676 M
( performed and applied. We recommend specific mechanisms below to) s
5 665 M
( perform and apply these measurements. Other mechanisms are) s
5 654 M
( possible, but it is important to understand how the interactions) s
5 643 M
( between mechanisms affect the dynamics of TFRC.) s
5 621 M
(3.1. TCP Throughput Equation) s
5 599 M
( Any realistic equation giving TCP throughput as a function of loss) s
5 588 M
( event rate and RTT should be suitable for use in TFRC. However, we) s
5 577 M
( note that the TCP throughput equation used must reflect TCP's) s
5 566 M
( retransmit timeout behavior, as this dominates TCP throughput at) s
5 555 M
( higher loss rates. We also note that the assumptions implicit in) s
5 544 M
( the throughput equation about the loss event rate parameter have to) s
5 533 M
( be a reasonable match to how the loss rate or loss event rate is) s
5 522 M
( actually measured. While this match is not perfect for the) s
5 511 M
( throughput equation and loss rate measurement mechanisms given) s
5 500 M
( below, in practice the assumptions turn out to be close enough.) s
5 478 M
( The throughput equation we currently recommend for TFRC is a) s
5 467 M
( slightly simplified version of the throughput equation for Reno TCP) s
5 456 M
( from [PFTK98]. Ideally we'd prefer a throughput equation based on) s
5 445 M
( SACK TCP, but no one has yet derived the throughput equation for) s
5 434 M
( SACK TCP, and from both simulations and experiments, the differences) s
5 423 M
( between the two equations are relatively minor.) s
5 401 M
( The throughput equation is:) s
5 379 M
( s) s
5 368 M
( X_Bps = ----------------------------------------------------------) s
5 357 M
( R*sqrt\(2*b*p/3\) + \(t_RTO * \(3*sqrt\(3*b*p/8\)*p*\(1+32*p^2\)\)\)) s
5 324 M
( Where:) s
5 302 M
( X_Bps is the transmit rate in bytes/second. \(X_Bps is the same) s
5 291 M
( as X_calc in RFC 3448.\)) s
5 269 M
( s is the segment size in bytes.) s
5 247 M
( R is the round trip time in seconds.) s
5 225 M
( p is the loss event rate, between 0 and 1.0, of the number of) s
5 214 M
( loss events as a fraction of the number of packets transmitted.) s
5 192 M
( t_RTO is the TCP retransmission timeout value in seconds.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 3.1. [Page 13]) s
_R
S
%%Page: (14) 14
%%BeginPageSetup
_S
24 24 translate
/pagenum 14 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( b is the maximum number of packets acknowledged by a single TCP) s
5 676 M
( acknowledgement.) s
5 654 M
( We further simplify this by setting t_RTO = 4*R. A more accurate) s
5 643 M
( calculation of t_RTO is possible, but experiments with the current) s
5 632 M
( setting have resulted in reasonable fairness with existing TCP) s
5 621 M
( implementations [W00]. Another possibility would be to set t_RTO to) s
5 610 M
( max\(4R, one second\), to match the recommended minimum of one second) s
5 599 M
( on the RTO [RFC2988].) s
5 577 M
( Many current TCP connections use delayed acknowledgements, sending) s
5 566 M
( an acknowledgement for every two data packets received, and thus) s
5 555 M
( have a sending rate modeled by b = 2. However, TCP is also allowed) s
5 544 M
( to send an acknowledgement for every data packet, and this would be) s
5 533 M
( modeled by b = 1. Because many TCP implementations do not use) s
5 522 M
( delayed acknowledgements, we recommend b = 1.) s
5 500 M
( In future, different TCP equations may be substituted for this) s
5 489 M
( equation. The requirement is that the throughput equation be a) s
5 478 M
( reasonable approximation of the sending rate of TCP for conformant) s
5 467 M
( TCP congestion control.) s
5 445 M
( The throughput equation can also be expressed as) s
5 423 M
( X_Bps = X_pps * s ,) s
5 401 M
( with X_pps, the sending rate in packets per second, given as) s
5 379 M
( 1) s
5 368 M
( X_pps = --------------------------------------------------------) s
5 357 M
( R*sqrt\(2*b*p/3\) + \(t_RTO*\(3*sqrt\(3*b*p/8\)*p*\(1+32*p^2\)\)\)) s
5 324 M
( The parameters s \(segment size\), p \(loss event rate\) and R \(RTT\)) s
5 313 M
( need to be measured or calculated by a TFRC implementation. The) s
5 302 M
( measurement of s is specified in Section 4.1, measurement of R is) s
5 291 M
( specified in Section 4.3, and measurement of p is specified in) s
5 280 M
( Section 5. In the rest of this document data rates are measured in) s
5 269 M
( bytes/second unless otherwise specified.) s
5 247 M
(3.2. Packet Contents) s
5 225 M
( Before specifying the sender and receiver functionality, we describe) s
5 214 M
( the contents of the data packets sent by the sender and feedback) s
5 203 M
( packets sent by the receiver. As TFRC will be used along with a) s
5 192 M
( transport protocol, we do not specify packet formats, as these) s
5 181 M
( depend on the details of the transport protocol used.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 3.2. [Page 14]) s
_R
S
%%Page: (15) 15
%%BeginPageSetup
_S
24 24 translate
/pagenum 15 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(3.2.1. Data Packets) s
5 665 M
( Each data packet sent by the data sender contains the following) s
5 654 M
( information:) s
5 632 M
( o A sequence number. This number is incremented by one for each) s
5 621 M
( data packet transmitted. The field must be sufficiently large) s
5 610 M
( that it does not wrap causing two different packets with the) s
5 599 M
( same sequence number to be in the receiver's recent packet) s
5 588 M
( history at the same time.) s
5 566 M
( o A timestamp indicating when the packet is sent. We denote by) s
5 555 M
( ts_i the timestamp of the packet with sequence number i. The) s
5 544 M
( resolution of the timestamp should typically be measured in) s
5 533 M
( milliseconds.) s
5 511 M
( This timestamp is used by the receiver to determine which losses) s
5 500 M
( belong to the same loss event. The timestamp is also echoed by) s
5 489 M
( the receiver to enable the sender to estimate the round-trip) s
5 478 M
( time, for senders that do not save timestamps of transmitted) s
5 467 M
( data packets.) s
5 445 M
( We note that as an alternative to a timestamp incremented in) s
5 434 M
( milliseconds, a "timestamp" that increments every quarter of a) s
5 423 M
( round-trip time would be sufficient for determining when losses) s
5 412 M
( belong to the same loss event, in the context of a protocol) s
5 401 M
( where this is understood by both sender and receiver, and where) s
5 390 M
( the sender saves the timestamps of transmitted data packets.) s
5 368 M
( o The sender's current estimate of the round trip time. The) s
5 357 M
( estimate reported in packet i is denoted by R_i. The round-trip) s
5 346 M
( time estimate is used by the receiver, along with the timestamp,) s
5 335 M
( to determine when multiple losses belong to the same loss event.) s
5 324 M
( The round-trip time estimate is also used by the receiver to) s
5 313 M
( determine the interval to use for calculating the receive rate,) s
5 302 M
( and to determine when to send feedback packets.) s
5 280 M
( If the sender sends a coarse-grained "timestamp" that increments) s
5 269 M
( every quarter of a round-trip time, as discussed above, then the) s
5 258 M
( sender does not need to send its current estimate of the round) s
5 247 M
( trip time.) s
5 214 M
(3.2.2. Feedback Packets) s
5 192 M
( Each feedback packet sent by the data receiver contains the) s
5 181 M
( following information:) s
5 126 M
(Floyd et al. Expires: May 2008 Section 3.2.2. [Page 15]) s
_R
S
%%Page: (16) 16
%%BeginPageSetup
_S
24 24 translate
/pagenum 16 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( o The timestamp of the last data packet received. We denote this) s
5 676 M
( by t_recvdata. If the last packet received at the receiver has) s
5 665 M
( sequence number i, then t_recvdata = ts_i.) s
5 654 M
( This timestamp is used by the sender to estimate the round-trip) s
5 643 M
( time, and is only needed if the sender does not save timestamps) s
5 632 M
( of transmitted data packets.) s
5 610 M
( o The amount of time elapsed between the receipt of the last data) s
5 599 M
( packet at the receiver, and the generation of this feedback) s
5 588 M
( report. We denote this by t_delay.) s
5 566 M
( o The rate at which the receiver estimates that data was received) s
5 555 M
( in the previous round-trip time. We denote this by X_recv.) s
5 533 M
( o The receiver's current estimate of the loss event rate p.) s
5 500 M
(4. Data Sender Protocol) s
5 478 M
( The data sender sends a stream of data packets to the data receiver) s
5 467 M
( at a controlled rate. When a feedback packet is received from the) s
5 456 M
( data receiver, the data sender changes its sending rate, based on) s
5 445 M
( the information contained in the feedback report. If the sender does) s
5 434 M
( not receive a feedback report for four round trip times, and the) s
5 423 M
( sender has not been idle over that entire period, then it cuts its) s
5 412 M
( sending rate in half. This is achieved by means of a timer called) s
5 401 M
( the nofeedback timer.) s
5 379 M
( We specify the sender-side protocol in the following steps:) s
5 357 M
( o Measurement of the mean segment size being sent.) s
5 335 M
( o Sender initialization.) s
5 313 M
( o The sender behavior when a feedback packet is received.) s
5 291 M
( o The sender behavior when the nofeedback timer expires.) s
5 269 M
( o Oscillation prevention \(optional\)) s
5 247 M
( o Scheduling of packet transmission and allowed burstiness.) s
5 214 M
(4.1. Measuring the Segment Size) s
5 192 M
( The parameter s \(segment size\) is normally known to an application.) s
5 181 M
( This may not be so in two cases:) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.1. [Page 16]) s
_R
S
%%Page: (17) 17
%%BeginPageSetup
_S
24 24 translate
/pagenum 17 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( 1\) The segment size naturally varies depending on the data. In) s
5 676 M
( this case, although the segment size varies, that variation is) s
5 665 M
( not coupled to the transmit rate. The TFRC sender can either) s
5 654 M
( compute the average segment size or use the maximum segment size) s
5 643 M
( for the segment size s.) s
5 621 M
( 2\) The application needs to change the segment size rather than the) s
5 610 M
( number of segments per second to perform congestion control.) s
5 599 M
( This would normally be the case with packet audio applications) s
5 588 M
( where a fixed interval of time needs to be represented by each) s
5 577 M
( packet. Such applications need to have a completely different) s
5 566 M
( way of measuring parameters.) s
5 544 M
( For the first class of applications where the segment size varies) s
5 533 M
( depending on the data, the sender MAY estimate the segment size s as) s
5 522 M
( the average segment size over the last four loss intervals. The) s
5 511 M
( sender MAY also estimate the average segment size over longer time) s
5 500 M
( intervals, if so desired. The TFRC sender uses the segment size s) s
5 489 M
( in the throughput equation, in the setting of the maximum receive) s
5 478 M
( rate and the minimum and initial sending rates, and in the setting) s
5 467 M
( of the nofeedback timer.) s
5 445 M
( The TFRC receiver may use the average segment size s in initializing) s
5 434 M
( the loss history after the first loss event, but Section 6.3.1 also) s
5 423 M
( gives an alternate procedure that does not use the average segment) s
5 412 M
( size s.) s
5 390 M
( The second class of applications are discussed separately in a) s
5 379 M
( separate document on TFRC-SP. For the remainder of this section we) s
5 368 M
( assume the sender can estimate the segment size, and that congestion) s
5 357 M
( control is performed by adjusting the number of packets sent per) s
5 346 M
( second.) s
5 313 M
(4.2. Sender Initialization) s
5 291 M
( The initial values for X \(the allowed sending rate in bytes per) s
5 280 M
( second\) and tld \(the Time Last Doubled during slow-start, in) s
5 269 M
( seconds\) are undefined until they are set as described below. If) s
5 258 M
( the sender is ready to send data when it does not yet have a round) s
5 247 M
( trip sample, the value of X is set to s bytes per second, for) s
5 236 M
( segment size s, the nofeedback timer is set to expire after two) s
5 225 M
( seconds, and tld is set to 0 \(or to -1, either one is okay\). Upon) s
5 214 M
( receiving the first round trip time measurement \(e.g., after the) s
5 203 M
( first feedback packet or the SYN exchange from connection set-up, or) s
5 192 M
( from a previous connection [RFC2140]\), tld is set to the current) s
5 181 M
( time, and the allowed transmit rate X is set to the initial_rate,) s
5 170 M
( specified as W_init/R, for W_init based on [RFC3390]:) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.2. [Page 17]) s
_R
S
%%Page: (18) 18
%%BeginPageSetup
_S
24 24 translate
/pagenum 18 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( W_init = min\(4*s, max\(2*s, 4380\)\).) s
5 665 M
( For responding to the initial feedback packet, this replaces step) s
5 654 M
( \(4\) of Section 4.3 below.) s
5 632 M
( Appendix B explains why the initial value of TFRC's nofeedback timer) s
5 621 M
( is set to two seconds, instead of the recommended initial value of) s
5 610 M
( three seconds for TCP's retransmit timer from [RFC2988].) s
5 588 M
(4.3. Sender Behavior When a Feedback Packet is Received) s
5 566 M
( The sender knows its current allowed sending rate X, and maintains) s
5 555 M
( an estimate of the current round trip time R. The sender also) s
5 544 M
( maintains X_recv_set as a small set of recent X_recv values) s
5 533 M
( \(typically only two values\). X_recv_set is first initialized to) s
5 522 M
( contain a single item, with value Infinity \(or a suitably large) s
5 511 M
( number\). The variable recv_limit is defined as the limit on the) s
5 500 M
( sending rate that is computed from the receive rate. In this) s
5 489 M
( document, in step \(4\) below, recv_limit is specified as twice the) s
5 478 M
( maximum value in X_recv_set. Future documents [KFS07] might specify) s
5 467 M
( alternate values for recv_limit.) s
5 445 M
( When a feedback packet is received by the sender at time t_now, the) s
5 434 M
( current time in seconds, the following actions should be performed.) s
5 401 M
( 1\) Calculate a new round trip sample:) s
5 379 M
( R_sample = \(t_now - t_recvdata\) - t_delay.) s
5 346 M
( 2\) Update the round trip time estimate:) s
5 324 M
( If no feedback has been received before {) s
5 313 M
( R = R_sample;) s
5 302 M
( } Else {) s
5 291 M
( R = q*R + \(1-q\)*R_sample;) s
5 280 M
( }) s
5 258 M
( TFRC is not sensitive to the precise value for the filter) s
5 247 M
( constant q, but we recommend a default value of 0.9.) s
5 225 M
( 3\) Update the timeout interval:) s
5 203 M
( RTO = max\(4*R, 2*s/X\)) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.3. [Page 18]) s
_R
S
%%Page: (19) 19
%%BeginPageSetup
_S
24 24 translate
/pagenum 19 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( 4\) Update the allowed sending rate as follows. This procedure uses) s
5 676 M
( the following new variable:) s
5 654 M
( t_mbi: the maximum backoff interval of 64 seconds.) s
5 632 M
( The procedure for updating the allowed sending rate:) s
5 610 M
( If \(the entire interval covered by the feedback packet) s
5 599 M
( was a data-limited interval\) {) s
5 588 M
( Maximize X_recv_set;) s
5 577 M
( } Else { // typical behavior) s
5 566 M
( Update X_recv_set;) s
5 555 M
( }) s
5 544 M
( recv_limit = 2 * max \(X_recv_set\);) s
5 533 M
( If \(p > 0\) { // congestion avoidance phase) s
5 522 M
( Calculate X_Bps using the TCP throughput equation.) s
5 511 M
( X = max\(min\(X_Bps, recv_limit\), s/t_mbi\);) s
5 500 M
( } Else if \(\(t_now - tld >= R\) and) s
5 489 M
( \(sender was not data-limited over entire feedback interval\) {) s
5 478 M
( // initial slow-start) s
5 467 M
( X = max\(min\(2*X, recv_limit\), initial_rate\);) s
5 456 M
( tld = t_now;) s
5 445 M
( }) s
5 412 M
( 5\) If oscillation reduction is used, calculate the instantaneous) s
5 401 M
( transmit rate X_inst, following Section 4.5.) s
5 379 M
( 6\) Reset the nofeedback timer to expire after RTO seconds.) s
5 357 M
( The subroutine for maximizing X_recv_set keeps a single value, the) s
5 346 M
( largest value from X_recv_set and the new X_recv.) s
5 324 M
( Maximize X_recv_set:) s
5 313 M
( Add X_recv to X_recv_set;) s
5 302 M
( Set the timestamp of the largest item to the current time;) s
5 291 M
( Delete all other items.) s
5 258 M
( The subroutine for updating X_recv_set keeps a set of X_recv values) s
5 247 M
( with timestamps from the most recent two round-trip times.) s
5 225 M
( Update X_recv_set:) s
5 214 M
( Add X_recv to X_recv_set;) s
5 203 M
( Delete from X_recv_set values older than) s
5 192 M
( two round-trip times.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.3. [Page 19]) s
_R
S
%%Page: (20) 20
%%BeginPageSetup
_S
24 24 translate
/pagenum 20 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( We define a sender as data-limited any time it is not sending as) s
5 676 M
( much as it is allowed to send \(including unused send credits) s
5 665 M
( discussed in Section 4.6\). We define an interval as a `data-limited) s
5 654 M
( interval' if the sender was data-limited over the *entire* interval.) s
5 643 M
( The first ``if'' condition in step \(4\) prevents a sender from having) s
5 632 M
( to reduce the sending rate as a result of a feedback packet) s
5 621 M
( reporting the receive rate from a data-limited period.) s
5 599 M
( As an example, consider a sender that is sending at its full allowed) s
5 588 M
( rate, except that it is sending packets in pairs, rather than) s
5 577 M
( sending each packet as soon as it can. Such a sender is considered) s
5 566 M
( data-limited part of the time, because it is not always sending) s
5 555 M
( packets as soon as it can. However, any interval that covers the) s
5 544 M
( transmission of at least two data packets is not a data-limited) s
5 533 M
( interval for this sender.) s
5 511 M
( Because X_recv_set is initialized with a single item, with value) s
5 500 M
( Infinity, recv_limit is set to Infinity for the first two round-trip) s
5 489 M
( times of the connection. As a result, the sending rate is not) s
5 478 M
( limited by the receive rate during that period. This avoids the) s
5 467 M
( problem of the sending rate being limited by the value of X_recv) s
5 456 M
( from the first feedback packet, which reports only one segment) s
5 445 M
( received in the last round-trip time,) s
5 423 M
( How does the sender determine the period covered by a feedback) s
5 412 M
( packet? This is discussed in more detail in Section 8.2. In) s
5 401 M
( general, the receiver will be sending a feedback packet once per) s
5 390 M
( round-trip time, so typically the sender will be able to determine) s
5 379 M
( exactly the period covered by the current feedback packet from the) s
5 368 M
( previous feedback packet. However, in cases when the previous) s
5 357 M
( feedback packet was lost, or when the receiver sends a feedback) s
5 346 M
( packet early because it detected a lost or ECN-marked packet, the) s
5 335 M
( sender will have to estimate the interval covered by the feedback) s
5 324 M
( packet. As specified in Section 6.2, each feedback packet sent by) s
5 313 M
( the receiver covers a round-trip time, for the round-trip time) s
5 302 M
( estimate R_m maintained by the receiver R_m seconds before the) s
5 291 M
( feedback packet was sent.) s
5 269 M
( Note that when p=0, the sender has not yet learned of any loss) s
5 258 M
( events, and the sender is in the initial slow-start phase. In this) s
5 247 M
( initial slow-start phase, the sender can approximately double the) s
5 236 M
( sending rate each round-trip time until a loss occurs. The) s
5 225 M
( initial_rate term in step \(4\) gives a minimum allowed sending rate) s
5 214 M
( during slow-start of the initial allowed sending rate.) s
5 192 M
( We note that if the sender is data-limited during slow-start, or if) s
5 181 M
( the connection is limited by the path bandwidth, then the sender) s
5 170 M
( isn't necessarily able to double its sending rate each round-trip) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.3. [Page 20]) s
_R
S
%%Page: (21) 21
%%BeginPageSetup
_S
24 24 translate
/pagenum 21 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( time; the sender's sending rate is limited to at most twice the) s
5 676 M
( receive rate, or at most initial_rate, whichever is larger. This is) s
5 665 M
( similar to TCP's behavior, where the sending rate is limited by the) s
5 654 M
( rate of incoming acknowledgement packets as well as by the) s
5 643 M
( congestion window. Thus in TCP's Slow-Start, for the most) s
5 632 M
( aggressive case of the TCP receiver acknowledging every data packet,) s
5 621 M
( the TCP sender's sending rate is limited to at most twice the rate) s
5 610 M
( of these incoming acknowledgment packets.) s
5 588 M
( The term s/t_mbi ensures that when p > 0, the sender sends at least) s
5 577 M
( one packet every 64 seconds.) s
5 555 M
(4.4. Expiration of Nofeedback Timer) s
5 533 M
( This section specifies the sender's response to a nofeedback timer.) s
5 522 M
( The nofeedback timer could expire because of an idle period, or) s
5 511 M
( because of data or feedback packets dropped in the network.) s
5 489 M
( This section uses the variable recover_rate. If the TFRC sender has) s
5 478 M
( been idle ever since the nofeedback timer was set, the allowed) s
5 467 M
( sending rate is not reduced below the recover_rate. For this) s
5 456 M
( document, the recover_rate is set to the initial_rate. Future) s
5 445 M
( documents may explore other possible values for the recover_rate.) s
5 423 M
( If the nofeedback timer expires, the sender should perform the) s
5 412 M
( following actions:) s
5 390 M
( 1\) Cut the allowed sending rate in half.) s
5 368 M
( If the nofeedback timer expires when the sender has had at least) s
5 357 M
( one RTT measurement, the allowed sending rate is reduced by) s
5 346 M
( modifying X_recv_set as described in the pseudocode below) s
5 335 M
( \(including item \(2\)\). In the general case, the sending rate is) s
5 324 M
( limited to at most twice X_recv. Modifying X_recv_set limits) s
5 313 M
( the sending rate, but still allows the sender to slow-start,) s
5 302 M
( doubling its sending rate each RTT, if feedback messages resume) s
5 291 M
( reporting no losses.) s
5 269 M
( If the sender has been idle since this nofeedback timer was set) s
5 258 M
( and X_recv is less than the recover_rate, then the allowed) s
5 247 M
( sending rate is not halved, and X_recv_set is not changed. This) s
5 236 M
( ensures that the allowed sending rate is not reduced to less) s
5 225 M
( than half the recover_rate as a result of an idle period.) s
5 203 M
( In the general case, the allowed sending rate is halved in) s
5 192 M
( response to the expiration of the nofeedback timer. The) s
5 181 M
( details, in the pseudocode below, depend on whether the sender) s
5 170 M
( is in slow-start, is in congestion avoidance limited by X_recv,) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.4. [Page 21]) s
_R
S
%%Page: (22) 22
%%BeginPageSetup
_S
24 24 translate
/pagenum 22 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( or is in congestion avoidance limited by the throughput) s
5 676 M
( equation. We use the variable timer_limit for the limit on the) s
5 665 M
( sending rate computed from the expiration of the nofeedback) s
5 654 M
( timer.) s
5 632 M
( X_recv = max \(X_recv_set\);) s
5 621 M
( If \(sender does not have an RTT sample,) s
5 610 M
( has not received any feedback from receiver,) s
5 599 M
( and has not been idle ever since the nofeedback timer was set\) {) s
5 588 M
( // We don't have X_Bps or recover_rate yet.) s
5 577 M
( // Halve the allowed sending rate.) s
5 566 M
( X = max\(X/2, s/t_mbi\);) s
5 555 M
( } Else if \(\(\(p>0 && X_recv < recover_rate\) or) s
5 544 M
( \(p==0 && X < 2 * recover_rate\)\), and) s
5 533 M
( sender has been idle ever) s
5 522 M
( since nofeedback timer was set\) {) s
5 511 M
( // Don't halve the allowed sending rate.) s
5 500 M
( timer_limit is not updated;) s
5 489 M
( } Else if \(p==0\) {) s
5 478 M
( // We don't have X_Bps yet.) s
5 467 M
( // Halve the allowed sending rate.) s
5 456 M
( X = max\(X/2, s/t_mbi\);) s
5 445 M
( } Else if \(X_Bps > 2*X_recv\)\) {) s
5 434 M
( // 2*X_recv was already limiting the sending rate.) s
5 423 M
( // Halve the allowed sending rate.) s
5 412 M
( timer_limit = X_recv;) s
5 401 M
( } Else {) s
5 390 M
( // The sending rate was limited by X_Bps, not by X_recv.) s
5 379 M
( // Halve the allowed sending rate.) s
5 368 M
( timer_limit = X_Bps/2;) s
5 357 M
( }) s
5 346 M
( If \(timer_limit < s/t_mbi\) {) s
5 335 M
( timer_limit = s/t_mbi;) s
5 324 M
( }) s
5 291 M
( The term s/t_mbi limits the backoff to one packet every 64) s
5 280 M
( seconds.) s
5 258 M
( 2\) If timer_limit has been changed, then do the following:) s
5 236 M
( If \(timer_limit has been updated\) {) s
5 225 M
( Replace X_recv_set contents with the single item timer_limit/2.) s
5 214 M
( Recalculate X as in step \(4\) of Section 4.3.) s
5 203 M
( }) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.4. [Page 22]) s
_R
S
%%Page: (23) 23
%%BeginPageSetup
_S
24 24 translate
/pagenum 23 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( 3\) Restart the nofeedback timer to expire after max\(4*R, 2*s/X\)) s
5 676 M
( seconds.) s
5 654 M
( If the sender has been data-limited but not idle since the) s
5 643 M
( nofeedback timer was set, it is possible that the nofeedback timer) s
5 632 M
( expired because data or feedback packets were dropped in the) s
5 621 M
( network. In this case, the nofeedback timer is the backup mechanism) s
5 610 M
( for the sender to detect these losses, similar to the retransmit) s
5 599 M
( timer in TCP.) s
5 577 M
( Note that when the sender stops sending, the receiver will stop) s
5 566 M
( sending feedback. When the sender's nofeedback timer expires, the) s
5 555 M
( sender could use the procedure above to limit the sending rate. If) s
5 544 M
( the sender subsequently starts to send again, X_recv_set will be) s
5 533 M
( used to limit the transmit rate, and slow-start behavior will occur) s
5 522 M
( until the transmit rate reaches X_Bps.) s
5 500 M
( The TFRC sender's reduction of the allowed sending rate after the) s
5 489 M
( nofeedback timer expires is similar to TCP's reduction of the) s
5 478 M
( congestion window cwnd after each RTO seconds of an idle period, for) s
5 467 M
( TCP with Congestion Window Validation [RFC2861].) s
5 445 M
(4.5. Reducing Oscillations) s
5 423 M
( To reduce oscillations in queueing delay and sending rate in) s
5 412 M
( environments with a low degree of statistical multiplexing at the) s
5 401 M
( congested link, it can be useful for the sender to reduce the) s
5 390 M
( transmit rate as the queuing delay \(and hence RTT\) increases. To do) s
5 379 M
( this the sender maintains R_sqmean, a long-term estimate of the) s
5 368 M
( square root of the RTT, and modifies its sending rate depending on) s
5 357 M
( how the square root of R_sample, the most recent sample of the RTT,) s
5 346 M
( differs from the long-term estimate. The long-term estimate) s
5 335 M
( R_sqmean is set as follows:) s
5 313 M
( If no feedback has been received before {) s
5 302 M
( R_sqmean = sqrt\(R_sample\);) s
5 291 M
( } Else {) s
5 280 M
( R_sqmean = q2*R_sqmean + \(1-q2\)*sqrt\(R_sample\);) s
5 269 M
( }) s
5 247 M
( Thus R_sqmean gives the exponentially weighted moving average of the) s
5 236 M
( square root of the RTT samples. The constant q2 should be set) s
5 225 M
( similarly to q, the constant used in the round trip time estimate R.) s
5 214 M
( We recommend a value of 0.9 as the default for q2.) s
5 192 M
( When sqrt\(R_sample\) is greater than R_sqmean then the current round-) s
5 181 M
( trip time is greater than the long-term average, implying that) s
5 170 M
( queueing delay is probably increasing. In this case, the transmit) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.5. [Page 23]) s
_R
S
%%Page: (24) 24
%%BeginPageSetup
_S
24 24 translate
/pagenum 24 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( rate is decreased to minimize oscillations in queueing delay.) s
5 665 M
( The sender obtains the base allowed transmit rate, X, as described) s
5 654 M
( in step \(4\) of Section 4.3 above. It then calculates a modified) s
5 643 M
( instantaneous transmit rate X_inst, as follows:) s
5 621 M
( X_inst = X * R_sqmean / sqrt\(R_sample\);) s
5 610 M
( If \(p > 0\) { // congestion avoidance phase) s
5 599 M
( X_inst = max\(X_inst, s/t_mbi\)) s
5 588 M
( } Else if \(t_now - tld >= R\) { // initial slow-start) s
5 577 M
( X_inst = max\(X_inst, s/R\)) s
5 566 M
( }) s
5 544 M
( Because we are using square roots, there is generally only a) s
5 533 M
( moderate difference between the instantaneous transmit rate X_inst) s
5 522 M
( and the allowed transmit rate X. For example, in a somewhat extreme) s
5 511 M
( case when the current RTT sample R_sample is twice as large as the) s
5 500 M
( long-term average, then sqrt\(R_sample\) will be roughly 1.44 times) s
5 489 M
( R_sqmean, and the allowed transmit rate will be reduced by a factor) s
5 478 M
( of roughly 0.7.) s
5 456 M
( Note: This modification for reducing oscillatory behavior is not) s
5 445 M
( always needed, especially if the degree of statistical multiplexing) s
5 434 M
( in the network is high. We also note that the measured round-trip) s
5 423 M
( time is not necessarily strongly correlated with the data packet) s
5 412 M
( queueing delay. However, this modification SHOULD be implemented) s
5 401 M
( because it makes TFRC behave better in some environments with a low) s
5 390 M
( level of statistical multiplexing. The performance of this) s
5 379 M
( modification is illustrated in Section 3.1.3 of [FHPW00]. If it is) s
5 368 M
( not implemented, we recommend using a very low value of the weight q) s
5 357 M
( for the average round-trip time.) s
5 335 M
(4.6. Scheduling of Packet Transmissions) s
5 313 M
( As TFRC is rate-based, and as operating systems typically cannot) s
5 302 M
( schedule events precisely, it is necessary to be opportunistic about) s
5 291 M
( sending data packets so that the correct average rate is maintained) s
5 280 M
( despite the coarse-grain or irregular scheduling of the operating) s
5 269 M
( system. To help maintain the correct average sending rate, the TFRC) s
5 258 M
( sender may send some packets before their nominal send time.) s
5 236 M
( In addition, the scheduling of packet transmissions controls the) s
5 225 M
( allowed burstiness of senders after an idle or data-limited period.) s
5 214 M
( The TFRC sender is allowed to accumulate sending `credits' for past) s
5 203 M
( unused send times; this allows the TFRC sender to send a burst of) s
5 192 M
( data after an idle or data-limited period. To compare with TCP, TCP) s
5 181 M
( may send up to a round-trip time's worth of packets in a single) s
5 170 M
( burst, but never more. As examples, packet bursts can be sent by) s
5 126 M
(Floyd et al. Expires: May 2008 Section 4.6. [Page 24]) s
_R
S
%%Page: (25) 25
%%BeginPageSetup
_S
24 24 translate
/pagenum 25 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( TCP when an ACK arrives acknowledging a window of data, or when a) s
5 676 M
( data-limited sender suddenly has a window of data to send after a) s
5 665 M
( delay of nearly a round-trip time.) s
5 643 M
( To limit burstiness, a TFRC implementation MUST prevent bursts of) s
5 632 M
( arbitrary size. This limit MUST be less than or equal to one round-) s
5 621 M
( trip time's worth of packets. A TFRC implementation MAY limit) s
5 610 M
( bursts to less than a round-trip time's worth of packets, if so) s
5 599 M
( desired. However, we note that such limits also constrain TFRC's) s
5 588 M
( performance beyond the case for the current TCP.) s
5 566 M
( As an implementation-specific example, a sending loop could) s
5 555 M
( calculate the correct inter-packet interval, t_ipi, as follows:) s
5 533 M
( t_ipi = s/X_inst;) s
5 511 M
( Let t_now be the current time and i be a natural number, i = 0, 1,) s
5 500 M
( ..., with t_i the nominal send time for the i-th packet. Then the) s
5 489 M
( nominal send time t_\(i+1\) would derive recursively as) s
5 467 M
( t_0 = t_now,) s
5 456 M
( t_\(i+1\) = t_i + t_ipi.) s
5 434 M
( For TFRC senders allowed to accumulate sending credits for unused) s
5 423 M
( sent time over the last T seconds, the sender would be allowed to) s
5 412 M
( use unused nominal sent times t_j for t_j < now - T, for T set to) s
5 401 M
( the round-trip time.) s
5 379 M
(5. Calculation of the Loss Event Rate \(p\)) s
5 357 M
( Obtaining an accurate and stable measurement of the loss event rate) s
5 346 M
( is of primary importance for TFRC. Loss rate measurement is) s
5 335 M
( performed at the receiver, based on the detection of lost or marked) s
5 324 M
( packets from the sequence numbers of arriving packets. We describe) s
5 313 M
( this process before describing the rest of the receiver protocol.) s
5 302 M
( If the receiver has not yet detected a lost or marked packet, then) s
5 291 M
( the receiver doesn't calculate the loss event rate, but reports a) s
5 280 M
( loss event rate of zero.) s
5 258 M
(5.1. Detection of Lost or Marked Packets) s
5 236 M
( TFRC assumes that all packets contain a sequence number that is) s
5 225 M
( incremented by one for each packet that is sent. For the purposes) s
5 214 M
( of this specification, we require that if a lost packet is) s
5 203 M
( retransmitted, the retransmission is given a new sequence number) s
5 192 M
( that is the latest in the transmission sequence, and not the same) s
5 181 M
( sequence number as the packet that was lost. If a transport) s
5 170 M
( protocol has the requirement that it must retransmit with the) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.1. [Page 25]) s
_R
S
%%Page: (26) 26
%%BeginPageSetup
_S
24 24 translate
/pagenum 26 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( original sequence number, then the transport protocol designer must) s
5 676 M
( figure out how to distinguish delayed from retransmitted packets and) s
5 665 M
( how to detect lost retransmissions.) s
5 643 M
( The receiver maintains a data structure that keeps track of which) s
5 632 M
( packets have arrived and which are missing. For the purposes of) s
5 621 M
( specification, we assume that the data structure consists of a list) s
5 610 M
( of packets that have arrived along with the receiver timestamp when) s
5 599 M
( each packet was received. In practice this data structure will) s
5 588 M
( normally be stored in a more compact representation, but this is) s
5 577 M
( implementation-specific.) s
5 555 M
( The loss of a packet is detected by the arrival of at least NDUPACK) s
5 544 M
( packets with a higher sequence number than the lost packet, for) s
5 533 M
( NDUPACK set to 3. The requirement for NDUPACK subsequent packets is) s
5 522 M
( the same as with TCP, and is to make TFRC more robust in the) s
5 511 M
( presence of reordering. In contrast to TCP, if a packet arrives) s
5 500 M
( late \(after NDUPACK subsequent packets arrived\) in TFRC, the late) s
5 489 M
( packet can fill the hole in TFRC's reception record, and the) s
5 478 M
( receiver can recalculate the loss event rate. Future versions of) s
5 467 M
( TFRC might make the requirement for NDUPACK subsequent packets) s
5 456 M
( adaptive based on experienced packet reordering, but we do not) s
5 445 M
( specify such a mechanism here.) s
5 423 M
( For an ECN-capable connection, a marked packet is detected as a) s
5 412 M
( congestion event as soon as it arrives, without having to wait for) s
5 401 M
( the arrival of subsequent packets.) s
5 368 M
(5.2. Translation from Loss History to Loss Events) s
5 346 M
( TFRC requires that the loss fraction be robust to several) s
5 335 M
( consecutive packets lost or marked in the same loss event. This is) s
5 324 M
( similar to TCP, which \(typically\) only performs one halving of the) s
5 313 M
( congestion window during any single RTT. Thus the receiver needs to) s
5 302 M
( map the packet loss history into a loss event record, where a loss) s
5 291 M
( event is one or more packets lost or marked in an RTT. To perform) s
5 280 M
( this mapping, the receiver needs to know the RTT to use, and this is) s
5 269 M
( supplied periodically by the sender, typically as control) s
5 258 M
( information piggy-backed onto a data packet. TFRC is not sensitive) s
5 247 M
( to how the RTT measurement sent to the receiver is made, but we) s
5 236 M
( recommend using the sender's calculated RTT, R, \(see Section 4.3\)) s
5 225 M
( for this purpose.) s
5 203 M
( To determine whether a lost or marked packet should start a new loss) s
5 192 M
( event, or be counted as part of an existing loss event, we need to) s
5 181 M
( compare the sequence numbers and timestamps of the packets that) s
5 170 M
( arrived at the receiver. For a marked packet S_new, its reception) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.2. [Page 26]) s
_R
S
%%Page: (27) 27
%%BeginPageSetup
_S
24 24 translate
/pagenum 27 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( time T_new can be noted directly. For a lost packet, we can) s
5 676 M
( interpolate to infer the nominal "arrival time". Assume:) s
5 654 M
( S_loss is the sequence number of a lost packet.) s
5 632 M
( S_before is the sequence number of the last packet to arrive,) s
5 621 M
( before any packet arrivals with a sequence number above S_loss,) s
5 610 M
( with a sequence number below S_loss.) s
5 588 M
( S_after is the sequence number of the first packet to arrive) s
5 577 M
( after S_before with a sequence number above S_loss.) s
5 555 M
( S_max is the largest sequence number.) s
5 533 M
( Therefore, S_before < S_loss < S_after <= S_max.) s
5 511 M
( T_loss is the nominal estimated arrival time for the lost) s
5 500 M
( packet.) s
5 478 M
( T_before is the reception time of S_before.) s
5 456 M
( T_after is the reception time of S_after.) s
5 434 M
( Note that due to reordering, T_before could be either before or) s
5 423 M
( after T_after.) s
5 401 M
( For a lost packet S_loss, we can interpolate its nominal "arrival) s
5 390 M
( time" at the receiver from the arrival times of S_before and) s
5 379 M
( S_after. Thus:) s
5 357 M
( T_loss = T_before + \( \(T_after - T_before\)) s
5 346 M
( * \(S_loss - S_before\)/\(S_after - S_before\) \);) s
5 313 M
( To address sequence number wrapping, let S_MAX be the maximum) s
5 302 M
( sequence number using by the particular implementation. In this) s
5 291 M
( case, we can interpolate the arrival time T_loss as follows:) s
5 269 M
( T_loss = T_before + \(T_after - T_before\)) s
5 258 M
( * Dist\(S_loss, S_before\)/Dist\(S_after, S_before\)) s
5 236 M
( where) s
5 214 M
( Dist\(Seqno_A, Seqno_B\) = \(Seqno_A + S_MAX - Seqno_B\) % S_MAX) s
5 181 M
( If the lost packet S_old was determined to have started the previous) s
5 170 M
( loss event, and we have just determined that S_new has been lost,) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.2. [Page 27]) s
_R
S
%%Page: (28) 28
%%BeginPageSetup
_S
24 24 translate
/pagenum 28 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( then we interpolate the nominal arrival times of S_old and S_new,) s
5 676 M
( called T_old and T_new respectively.) s
5 654 M
( If T_old + R >= T_new, then S_new is part of the existing loss) s
5 643 M
( event. Otherwise S_new is the first packet in a new loss event.) s
5 610 M
(5.3. Inter-loss Event Interval) s
5 588 M
( If a loss interval, A, is determined to have started with packet) s
5 577 M
( sequence number S_A and the next loss interval, B, started with) s
5 566 M
( packet sequence number S_B, then the number of packets in loss) s
5 555 M
( interval A is given by \(S_B - S_A\). Thus, loss interval A contains) s
5 544 M
( all of the packets transmitted by the sender starting with the first) s
5 533 M
( packet transmitted in loss interval A, and ending with but not) s
5 522 M
( including the first packet transmitted in loss interval B.) s
5 489 M
(5.4. Average Loss Interval) s
5 467 M
( To calculate the loss event rate p, we first calculate the average) s
5 456 M
( loss interval. This is done using a filter that weights the n most) s
5 445 M
( recent loss event intervals in such a way that the measured loss) s
5 434 M
( event rate changes smoothly. If the receiver has not yet seen a) s
5 423 M
( lost or marked packet, then the receiver doesn't calculate the) s
5 412 M
( average loss interval.) s
5 390 M
( Weights w_0 to w_\(n-1\) are calculated as:) s
5 368 M
( If \(i < n/2\) {) s
5 357 M
( w_i = 1;) s
5 346 M
( } Else {) s
5 335 M
( w_i = 2 * \(n-i\)/\(n+2\);) s
5 324 M
( }) s
5 291 M
( Thus if n=8, the values of w_0 to w_7 are:) s
5 269 M
( 1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2) s
5 247 M
( The value n for the number of loss intervals used in calculating the) s
5 236 M
( loss event rate determines TFRC's speed in responding to changes in) s
5 225 M
( the level of congestion. As currently specified, TFRC SHOULD NOT) s
5 214 M
( use values of n greater than 8, for traffic that might compete in) s
5 203 M
( the global Internet with TCP. At the very least, safe operation) s
5 192 M
( with values of n greater than 8 would require a slight change to) s
5 181 M
( TFRC's mechanisms, to include a more severe response to two or more) s
5 170 M
( round-trip times with heavy packet loss.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.4. [Page 28]) s
_R
S
%%Page: (29) 29
%%BeginPageSetup
_S
24 24 translate
/pagenum 29 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( When calculating the average loss interval we need to decide whether) s
5 676 M
( to include the current loss interval, defined as the loss interval) s
5 665 M
( containing the most recent loss event. We only include the current) s
5 654 M
( loss interval if it is sufficiently large to increase the average) s
5 643 M
( loss interval.) s
5 621 M
( Let the most recent loss intervals be I_0 to I_k, where I_0 is the) s
5 610 M
( current loss interval. If there have been at least n loss) s
5 599 M
( intervals, then k is set to n; otherwise k is the maximum number of) s
5 588 M
( loss intervals seen so far. We calculate the average loss interval) s
5 577 M
( I_mean as follows:) s
5 555 M
( I_tot0 = 0;) s
5 544 M
( I_tot1 = 0;) s
5 533 M
( W_tot = 0;) s
5 522 M
( for \(i = 0 to k-1\) {) s
5 511 M
( I_tot0 = I_tot0 + \(I_i * w_i\);) s
5 500 M
( W_tot = W_tot + w_i;) s
5 489 M
( }) s
5 478 M
( for \(i = 1 to k\) {) s
5 467 M
( I_tot1 = I_tot1 + \(I_i * w_\(i-1\)\);) s
5 456 M
( }) s
5 445 M
( I_tot = max\(I_tot0, I_tot1\);) s
5 434 M
( I_mean = I_tot/W_tot;) s
5 412 M
( The loss event rate, p is simply:) s
5 390 M
( p = 1 / I_mean;) s
5 357 M
(5.5. History Discounting) s
5 335 M
( As described in Section 5.4, when there have been at least eight) s
5 324 M
( loss intervals, the most recent loss interval is only assigned) s
5 313 M
( 1/\(0.75*n\) of the total weight in calculating the average loss) s
5 302 M
( interval, regardless of the size of the most recent loss interval.) s
5 291 M
( This section describes an optional history discounting mechanism,) s
5 280 M
( discussed further in [FHPW00a] and [W00], that allows the TFRC) s
5 269 M
( receiver to adjust the weights, concentrating more of the relative) s
5 258 M
( weight on the most recent loss interval, when the most recent loss) s
5 247 M
( interval is more than twice as large as the computed average loss) s
5 236 M
( interval.) s
5 214 M
( To carry out history discounting, we associate a discount factor) s
5 203 M
( DF_i with each loss interval L_i, for i > 0, where each discount) s
5 192 M
( factor is a floating point number. The discount array maintains the) s
5 181 M
( cumulative history of discounting for each loss interval. At the) s
5 170 M
( beginning, the values of DF_i in the discount array are initialized) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.5. [Page 29]) s
_R
S
%%Page: (30) 30
%%BeginPageSetup
_S
24 24 translate
/pagenum 30 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( to 1:) s
5 665 M
( for \(i = 0 to n\) {) s
5 654 M
( DF_i = 1;) s
5 643 M
( }) s
5 621 M
( History discounting also uses a general discount factor DF, also a) s
5 610 M
( floating point number, that is also initialized to 1. First we show) s
5 599 M
( how the discount factors are used in calculating the average loss) s
5 588 M
( interval, and then we describe later in this section how the) s
5 577 M
( discount factors are modified over time.) s
5 555 M
( As described in Section 5.4 the average loss interval is calculated) s
5 544 M
( using the n previous loss intervals I_1, ..., I_n and the current) s
5 533 M
( loss interval I_0. The computation of the average loss interval) s
5 522 M
( using the discount factors is a simple modification of the procedure) s
5 511 M
( in Section 5.4, as follows:) s
5 489 M
( I_tot0 = I_0 * w_0) s
5 478 M
( I_tot1 = 0;) s
5 467 M
( W_tot0 = w_0) s
5 456 M
( W_tot1 = 0;) s
5 445 M
( for \(i = 1 to n-1\) {) s
5 434 M
( I_tot0 = I_tot0 + \(I_i * w_i * DF_i * DF\);) s
5 423 M
( W_tot0 = W_tot0 + w_i * DF_i * DF;) s
5 412 M
( }) s
5 401 M
( for \(i = 1 to n\) {) s
5 390 M
( I_tot1 = I_tot1 + \(I_i * w_\(i-1\) * DF_i\);) s
5 379 M
( W_tot1 = W_tot1 + w_\(i-1\) * DF_i;) s
5 368 M
( }) s
5 357 M
( p = min\(W_tot0/I_tot0, W_tot1/I_tot1\);) s
5 335 M
( The general discounting factor DF is updated on every packet arrival) s
5 324 M
( as follows. First, the receiver computes the weighted average I_mean) s
5 313 M
( of the loss intervals I_1, ..., I_n:) s
5 291 M
( I_tot = 0;) s
5 280 M
( W_tot = 0;) s
5 269 M
( for \(i = 1 to n\) {) s
5 258 M
( W_tot = W_tot + w_\(i-1\) * DF_i;) s
5 247 M
( I_tot = I_tot + \(I_i * w_\(i-1\) * DF_i\);) s
5 236 M
( }) s
5 225 M
( I_mean = I_tot / W_tot;) s
5 203 M
( This weighted average I_mean is compared to I_0, the size of current) s
5 192 M
( loss interval. If I_0 is greater than twice I_mean, then the new) s
5 181 M
( loss interval is considerably larger than the old ones, and the) s
5 170 M
( general discount factor DF is updated to decrease the relative) s
5 126 M
(Floyd et al. Expires: May 2008 Section 5.5. [Page 30]) s
_R
S
%%Page: (31) 31
%%BeginPageSetup
_S
24 24 translate
/pagenum 31 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( weight on the older intervals, as follows:) s
5 665 M
( if \(I_0 > 2 * I_mean\) {) s
5 654 M
( DF = 2 * I_mean/I_0;) s
5 643 M
( if \(DF < THRESHOLD\) {) s
5 632 M
( DF = THRESHOLD;) s
5 621 M
( }) s
5 610 M
( } else {) s
5 599 M
( DF = 1;) s
5 588 M
( }) s
5 566 M
( A nonzero value for THRESHOLD ensures that older loss intervals from) s
5 555 M
( an earlier time of high congestion are not discounted entirely. We) s
5 544 M
( recommend a THRESHOLD of 0.25. Note that with each new packet) s
5 533 M
( arrival, I_0 will increase further, and the discount factor DF will) s
5 522 M
( be updated.) s
5 500 M
( When a new loss event occurs, the current interval shifts from I_0) s
5 489 M
( to I_1, loss interval I_i shifts to interval I_\(i+1\), and the loss) s
5 478 M
( interval I_n is forgotten. The previous discount factor DF has to) s
5 467 M
( be incorporated into the discount array. Because DF_i carries the) s
5 456 M
( discount factor associated with loss interval I_i, the DF_i array) s
5 445 M
( has to be shifted as well. This is done as follows:) s
5 423 M
( for \(i = 1 to n\) {) s
5 412 M
( DF_i = DF * DF_i;) s
5 401 M
( }) s
5 390 M
( for \(i = n-1 to 0 step -1\) {) s
5 379 M
( DF_\(i+1\) = DF_i;) s
5 368 M
( }) s
5 357 M
( I_0 = 1;) s
5 346 M
( DF_0 = 1;) s
5 335 M
( DF = 1;) s
5 302 M
( This completes the description of the optional history discounting) s
5 291 M
( mechanism. We emphasize that this is an optional mechanism whose) s
5 280 M
( sole purpose is to allow TFRC to respond somewhat more quickly to) s
5 269 M
( the sudden absence of congestion, as represented by a long current) s
5 258 M
( loss interval.) s
5 225 M
(6. Data Receiver Protocol) s
5 203 M
( The receiver periodically sends feedback messages to the sender.) s
5 192 M
( Feedback packets should normally be sent at least once per RTT,) s
5 181 M
( unless the sender is sending at a rate of less than one packet per) s
5 170 M
( RTT, in which case a feedback packet should be send for every data) s
5 126 M
(Floyd et al. Expires: May 2008 Section 6. [Page 31]) s
_R
S
%%Page: (32) 32
%%BeginPageSetup
_S
24 24 translate
/pagenum 32 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( packet received. A feedback packet should also be sent whenever a) s
5 676 M
( new loss event is detected without waiting for the end of an RTT,) s
5 665 M
( and whenever an out-of-order data packet is received that removes a) s
5 654 M
( loss event from the history.) s
5 632 M
( If the sender is transmitting at a high rate \(many packets per RTT\)) s
5 621 M
( there may be some advantages to sending periodic feedback messages) s
5 610 M
( more than once per RTT as this allows faster response to changing) s
5 599 M
( RTT measurements, and more resilience to feedback packet loss.) s
5 577 M
( If the receiver was sending k feedback packets per RTT, for k>1,) s
5 566 M
( step \(4\) of Section 6.2 would be modified to set the feedback timer) s
5 555 M
( to expire after R_m/k seconds. However, each feedback packet would) s
5 544 M
( still report the receiver rate over the last RTT, not over a) s
5 533 M
( fraction of an RTT. In this document we do not specify the) s
5 522 M
( modifications that might be required for a receiver sending more) s
5 511 M
( than one feedback packet per RTT. We note that there is little gain) s
5 500 M
( from sending a large number of feedback messages per RTT.) s
5 467 M
(6.1. Receiver Behavior When a Data Packet is Received) s
5 445 M
( When a data packet is received, the receiver performs the following) s
5 434 M
( steps:) s
5 412 M
( 1\) Add the packet to the packet history.) s
5 390 M
( 2\) Check if done: If the new packet results in the detection of a) s
5 379 M
( new loss event, or if no feedback packet was sent when the) s
5 368 M
( feedback timer last expired, go to step 3\). Otherwise, no) s
5 357 M
( action need be performed \(unless the optimization in the next) s
5 346 M
( paragraph is used\), so exit the procedure.) s
5 324 M
( An optimization might check to see if the arrival of the packet) s
5 313 M
( caused a hole in the packet history to be filled and) s
5 302 M
( consequently two loss intervals were merged into one. If this) s
5 291 M
( is the case, the receiver might also send feedback immediately.) s
5 280 M
( The effects of such an optimization are normally expected to be) s
5 269 M
( small.) s
5 247 M
( 3\) Calculate p: Let the previous value of p be p_prev. Calculate) s
5 236 M
( the new value of p as described in Section 5.) s
5 214 M
( 4\) Expire feedback timer?: If p > p_prev, cause the feedback timer) s
5 203 M
( to expire, and perform the actions described in Section 6.2) s
5 181 M
( If p <= p_prev and no feedback packet was sent when the feedback) s
5 170 M
( timer last expired, cause the feedback timer to expire, and) s
5 126 M
(Floyd et al. Expires: May 2008 Section 6.1. [Page 32]) s
_R
S
%%Page: (33) 33
%%BeginPageSetup
_S
24 24 translate
/pagenum 33 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( perform the actions described in Section 6.2. If p <= p_prev) s
5 676 M
( and a feedback packet was sent when the feedback timer last) s
5 665 M
( expired, no action need be performed.) s
5 621 M
(6.2. Expiration of Feedback Timer) s
5 599 M
( When the feedback timer at the receiver expires, the action to be) s
5 588 M
( taken depends on whether data packets have been received since the) s
5 577 M
( last feedback was sent.) s
5 555 M
( For the m-th expiration of the feedback timer, let the maximum) s
5 544 M
( sequence number of a packet at the receiver so far be S_m, and the) s
5 533 M
( value of the RTT measurement included in packet S_m be R_m. As) s
5 522 M
( described in Section 3.2.1, R_m is the sender's most recent estimate) s
5 511 M
( of the round trip time, as reported in data packets. If data) s
5 500 M
( packets have been received since the previous feedback was sent, the) s
5 489 M
( receiver performs the following steps:) s
5 467 M
( 1\) Calculate the average loss event rate using the algorithm) s
5 456 M
( described in Section 5.) s
5 434 M
( 2\) Calculate the measured receive rate, X_recv, based on the) s
5 423 M
( packets received within the previous R_\(m-1\) seconds. This is) s
5 412 M
( performed whether the feedback timer expired at its normal time,) s
5 401 M
( or expired early due to a new lost or marked packet \(i.e., step) s
5 390 M
( \(3\) in Section 6.1\).) s
5 368 M
( In the typical case, when the receiver is sending only one) s
5 357 M
( feedback packet per round-trip time and the feedback timer did) s
5 346 M
( not expire early due to a new lost packet, then the time) s
5 335 M
( interval since the feedback timer last expired would be R_\(m-1\)) s
5 324 M
( seconds.) s
5 302 M
( We note that when the feedback timer expires early due to a new) s
5 291 M
( lost or marked packet, the time interval since the feedback) s
5 280 M
( timer last expired is likely to be smaller than R_\(m-1\) seconds.) s
5 258 M
( For ease of implementation, if the time interval since the) s
5 247 M
( feedback timer last expired is not R_\(m-1\) seconds, the receive) s
5 236 M
( rate MAY be calculated over a longer time interval, the time) s
5 225 M
( interval going back to the most recent feedback timer expiration) s
5 214 M
( that was at least R_\(m-1\) seconds ago.) s
5 192 M
( 3\) Prepare and send a feedback packet containing the information) s
5 181 M
( described in Section 3.2.2.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 6.2. [Page 33]) s
_R
S
%%Page: (34) 34
%%BeginPageSetup
_S
24 24 translate
/pagenum 34 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( 4\) Restart the feedback timer to expire after R_m seconds.) s
5 665 M
( Note that rule 2\) above gives a minimum value for the measured) s
5 654 M
( receive rate X_recv of one packet per round-trip time. If the) s
5 643 M
( sender is limited to a sending rate of less than one packet per) s
5 632 M
( round-trip time, this will be due to the loss event rate, not from a) s
5 621 M
( limit imposed by the measured receive rate at the receiver.) s
5 599 M
( If no data packets have been received since the last feedback was) s
5 588 M
( sent, no feedback packet is sent, and the feedback timer is) s
5 577 M
( restarted to expire after R_m seconds.) s
5 533 M
(6.3. Receiver Initialization) s
5 511 M
( The receiver is initialized by the first data packet that arrives at) s
5 500 M
( the receiver. Let the sequence number of this packet be i.) s
5 478 M
( When the first packet is received:) s
5 456 M
( o Set p=0.) s
5 434 M
( o Set X_recv = 0.) s
5 412 M
( o Prepare and send a feedback packet.) s
5 390 M
( o Set the feedback timer to expire after R_i seconds.) s
5 368 M
( If the first data packet doesn't contain an estimate R_i of the) s
5 357 M
( round-trip time, then the receiver sends a feedback packet for every) s
5 346 M
( arriving data packet, until a data packet arrives containing an) s
5 335 M
( estimate of the round-trip time.) s
5 313 M
( If the sender is using a coarse-grained timestamp that increments) s
5 302 M
( every quarter of a round-trip time, then a feedback timer is not) s
5 291 M
( needed, and the following procedure from RFC 4342 is used to) s
5 280 M
( determine when to send feedback messages.) s
5 258 M
( o Whenever the receiver sends a feedback message, the receiver) s
5 247 M
( sets a local variable last_counter to the greatest received) s
5 236 M
( value of the window counter since the last feedback message was) s
5 225 M
( sent, if any data packets have been received since the last) s
5 214 M
( feedback message was sent.) s
5 192 M
( o If the receiver receives a data packet with a window counter) s
5 181 M
( value greater than or equal to last_counter + 4, then the) s
5 170 M
( receiver sends a new feedback packet. \("Greater" and "greatest") s
5 126 M
(Floyd et al. Expires: May 2008 Section 6.3. [Page 34]) s
_R
S
%%Page: (35) 35
%%BeginPageSetup
_S
24 24 translate
/pagenum 35 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( are measured in circular window counter space.\)) s
5 665 M
(6.3.1. Initializing the Loss History after the First Loss Event) s
5 643 M
( The number of packets until the first loss can not be used to) s
5 632 M
( compute the allowed sending rate directly, as the sending rate) s
5 621 M
( changes rapidly during this time. TFRC assumes that the correct) s
5 610 M
( data rate after the first loss is half of the maximum sending rate) s
5 599 M
( before the loss occurred. TFRC approximates this target rate) s
5 588 M
( X_target by the maximum value in X_recv_set. \(For slow-start, for a) s
5 577 M
( particular round-trip time, the sender's sending rate is generally) s
5 566 M
( twice the the receiver's receive rate for data sent over the) s
5 555 M
( previous round-trip time.\)) s
5 533 M
( After the first loss, instead of initializing the first loss) s
5 522 M
( interval to the number of packets sent until the first loss, the) s
5 511 M
( TFRC receiver calculates the loss interval that would be required to) s
5 500 M
( produce the data rate X_target, and uses this synthetic loss) s
5 489 M
( interval to seed the loss history mechanism.) s
5 467 M
( TFRC does this by finding some value p for which the throughput) s
5 456 M
( equation in Section 3.1 gives a sending rate within 5% of X_target,) s
5 445 M
( given the round-trip time R, and the first loss interval is then set) s
5 434 M
( to 1/p. If the receiver knows the segment size s used by the) s
5 423 M
( sender, then the receiver can use the throughput equation for X;) s
5 412 M
( otherwise, the receiver can measure the receive rate in packets per) s
5 401 M
( second instead of bytes per second for this purpose, and use the) s
5 390 M
( throughput equation for X_pps. \(The 5% tolerance is introduced) s
5 379 M
( simply because the throughput equation is difficult to invert, and) s
5 368 M
( we want to reduce the costs of calculating p numerically.\)) s
5 346 M
( Special care is needed for initializing the first loss interval when) s
5 335 M
( the first data packet is lost or marked. When the first data packet) s
5 324 M
( is lost in TCP, the TCP sender retransmits the packet after the) s
5 313 M
( retransmit timer expires. If TCP's first data packet is ECN-marked,) s
5 302 M
( the TCP sender resets the retransmit timer, and sends a new data) s
5 291 M
( packet only when the retransmit timer expires [RFC3168] \(Section) s
5 280 M
( 6.1.2\). For TFRC, if the first data packet is lost or ECN-marked,) s
5 269 M
( then the first loss interval consists of the null interval with no) s
5 258 M
( data packets. In this case, the loss interval length for this) s
5 247 M
( \(null\) loss interval should be set to give a similar sending rate to) s
5 236 M
( that of TCP.) s
5 214 M
( When the first TFRC loss interval is null, meaning that the first) s
5 203 M
( data packet is lost or ECN-marked, in order to follow the behavior) s
5 192 M
( of TCP, TFRC wants the allowed sending rate to be 1 packet every two) s
5 181 M
( round-trip times, or equivalently, 0.5 packets per RTT. Thus, the) s
5 170 M
( TFRC receiver calculates the loss interval that would be required to) s
5 126 M
(Floyd et al. Expires: May 2008 Section 6.3.1. [Page 35]) s
_R
S
%%Page: (36) 36
%%BeginPageSetup
_S
24 24 translate
/pagenum 36 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( produce the target rate X_target of 0.5/R packets per second, for) s
5 676 M
( the round-trip time R, and uses this synthetic loss interval for the) s
5 665 M
( first loss interval. The TFRC receiver uses 0.5/R packets per) s
5 654 M
( second as the minimum value for X_target when initializing the first) s
5 643 M
( loss interval.) s
5 610 M
(7. Sender-based Variants) s
5 588 M
( In a sender-based variant of TFRC, the receiver uses reliable) s
5 577 M
( delivery to send information about packet losses to the sender, and) s
5 566 M
( the sender computes the packet loss rate and the acceptable transmit) s
5 555 M
( rate.) s
5 533 M
( The main advantage of a sender-based variant of TFRC is that the) s
5 522 M
( sender does not have to trust the receiver's calculation of the) s
5 511 M
( packet loss rate. However, with the requirement of reliable) s
5 500 M
( delivery of loss information from the receiver to the sender, a) s
5 489 M
( sender-based TFRC would have much tighter constraints on the) s
5 478 M
( transport protocol in which it is embedded.) s
5 456 M
( In contrast, the receiver-based variant of TFRC specified in this) s
5 445 M
( document is robust to the loss of feedback packets, and therefore) s
5 434 M
( does not require the reliable delivery of feedback packets. It is) s
5 423 M
( also better suited for applications where it is desirable to offload) s
5 412 M
( work from the server to the client as much as possible.) s
5 390 M
( RFC 4340 and RFC 4342 together specify CCID 3, which can be used as) s
5 379 M
( a sender-based variant of TFRC. In CCID 3, each feedback packet) s
5 368 M
( from the receiver contains a Loss Intervals option, reporting the) s
5 357 M
( lengths of the most recent loss intervals. Feedback packets may) s
5 346 M
( also include the Ack Vector option, allowing the sender to determine) s
5 335 M
( exactly which packets were dropped or marked and to check the) s
5 324 M
( information reported in the Loss Intervals options. The Ack Vector) s
5 313 M
( option can also include ECN Nonce Echoes, allowing the sender to) s
5 302 M
( verify the receiver's report of having received an unmarked data) s
5 291 M
( packet. The Ack Vector option allows the sender to see for itself) s
5 280 M
( which data packets were lost or ECN-marked, to determine loss) s
5 269 M
( intervals, and to calculate the loss event rate. Section 9 of) s
5 258 M
( RFC 4342 discusses issues in the sender verifying information) s
5 247 M
( reported by the receiver.) s
5 214 M
(8. Implementation Issues) s
5 192 M
( This document has specified the TFRC congestion control mechanism,) s
5 181 M
( for use by applications and transport protocols. This section) s
5 170 M
( mentions briefly some of the implementation issues.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 8. [Page 36]) s
_R
S
%%Page: (37) 37
%%BeginPageSetup
_S
24 24 translate
/pagenum 37 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(8.1. Computing the Throughput Equation) s
5 665 M
( For t_RTO = 4*R and b = 1, the throughput equation in Section 3.1) s
5 654 M
( can be expressed as follows:) s
5 632 M
( s) s
5 621 M
( X_Bps = --------) s
5 610 M
( R * f\(p\)) s
5 588 M
( for) s
5 566 M
( f\(p\) = sqrt\(2*p/3\) + \(12*sqrt\(3*p/8\) * p * \(1+32*p^2\)\).) s
5 544 M
( A table lookup could be used for the function f\(p\).) s
5 522 M
( Many of the multiplications \(e.g., q and 1-q for the round-trip time) s
5 511 M
( average, a factor of 4 for the timeout interval\) are or could be by) s
5 500 M
( powers of two, and therefore could be implemented as simple shift) s
5 489 M
( operations.) s
5 467 M
(8.2. Sender Behavior When a Feedback Packet is Received) s
5 445 M
( This section discusses implementation issues for sender behavior) s
5 434 M
( when a feedback packet is received, from Section 4.3.) s
5 412 M
( When a feedback packet is received, the sender has to determine if) s
5 401 M
( the entire interval covered by that feedback packet was a data-) s
5 390 M
( limited period. If the feedback packets all report the timestamp of) s
5 379 M
( the last data packet received, then let t_new be the timestamp) s
5 368 M
( reported by this feedback packet. Because all feedback packets) s
5 357 M
( cover an interval of at least a round-trip time, it is sufficient) s
5 346 M
( for the sender to determine if there was any time in the period) s
5 335 M
( \(t_old, t_new] when the sender was not data-limited, for R the) s
5 324 M
( sender's estimate of the round-trip time, and for t_old set to) s
5 313 M
( t_new - R. \(This procedure estimates the interval covered by the) s
5 302 M
( feedback packet, rather than computing it exactly. This seems fine) s
5 291 M
( to us.\)) s
5 269 M
( The sender can estimate whether the sender was data-limited over the) s
5 258 M
( entire interval \(t_old, t_new] by keeping two variables NotLimited1) s
5 247 M
( and NotLimited2, both representing times when the sender was *not*) s
5 236 M
( data-limited. To initialize, NotLimited1 and NotLimited2 are set to) s
5 225 M
( the first two segment transmission times \(for transmission to the) s
5 214 M
( layer below\) when the transport-layer sender was not data-limited.) s
5 203 M
( \(That is, the transport-layer sender had enough data to send all of) s
5 192 M
( the segments that it was allowed to send.\) When possible, the) s
5 181 M
( sender maintains NotLimited1 as a transmission time later than t_old) s
5 170 M
( when the sender was not data-limited, and maintains NotLimited2 as) s
5 126 M
(Floyd et al. Expires: May 2008 Section 8.2. [Page 37]) s
_R
S
%%Page: (38) 38
%%BeginPageSetup
_S
24 24 translate
/pagenum 38 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( the earliest transmission time later than t_new when the sender was) s
5 676 M
( not data-limited.) s
5 654 M
( When a feedback packet is received, first t_old and t_new are) s
5 643 M
( updated. If neither NotLimited1 nor NotLimited2 is in the interval) s
5 632 M
( \(t_old, t_new], then the sender assumes that it was data-limited) s
5 621 M
( over the entire interval covered by the feedback packet.) s
5 610 M
( NotLimited1 can then be updated as follows:) s
5 588 M
( If \(NotLimited1 <= t_old && NotLimited2 > t_old\) {) s
5 577 M
( NotLimited1 = NotLimited2;) s
5 566 M
( }) s
5 544 M
( We note that this procedure is a heuristic, and in some cases the) s
5 533 M
( sender might not determine correctly if the sender was data-limited) s
5 522 M
( over the entire interval covered by the feedback packet. In) s
5 511 M
( particular, this procedure does not address the possible) s
5 500 M
( complications of reordering. That seems fine to us.) s
5 478 M
( In some implementations of TFRC, the sender sends coarse-grained) s
5 467 M
( timestamps that increment every quarter of a round-trip time, and) s
5 456 M
( the feedback packet reports the greatest valid sequence number) s
5 445 M
( received so far instead of reporting the timestamp of the last) s
5 434 M
( packet received. In this case, the sender can maintain per-packet) s
5 423 M
( state to determine t_new \(the time that the acknowledged packet was) s
5 412 M
( sent\), or the sender can estimate t_new from its estimate of the) s
5 401 M
( round-trip time and the elapsed time t_delay reported by the) s
5 390 M
( feedback packet.) s
5 368 M
(8.3. Sending Packets Before their Nominal Send Time) s
5 346 M
( This section discusses possible scheduling mechanisms for a sender) s
5 335 M
( in an operating system with a coarse-grained timing granularity) s
5 324 M
( \(from Section 4.6\).) s
5 302 M
( Let t_gran be the scheduling timer granularity of the operating) s
5 291 M
( system. Let t_ipi be the inter-packet interval, as specified in) s
5 280 M
( Section 4.6. If the operating system has a coarse timer granularity) s
5 269 M
( or otherwise cannot support short t_ipi intervals, then either the) s
5 258 M
( TFRC sender will be restricted to a sending rate of at most 1 packet) s
5 247 M
( every t_gran seconds, or the TFRC sender must be allowed to send) s
5 236 M
( short bursts of packets. In addition to allowing the sender to) s
5 225 M
( accumulate sending credits for past unused send times, it can be) s
5 214 M
( useful to allow the sender to send a packet before its scheduled) s
5 203 M
( send time, as described in the section below.) s
5 181 M
( A parameter t_delta MAY be used to allow a packet to be sent before) s
5 170 M
( its nominal send time. Consider an application that becomes idle) s
5 126 M
(Floyd et al. Expires: May 2008 Section 8.3. [Page 38]) s
_R
S
%%Page: (39) 39
%%BeginPageSetup
_S
24 24 translate
/pagenum 39 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( and requests re-scheduling for time t_i = t_\(i-1\) + t_ipi, for) s
5 676 M
( t_\(i-1\) the send time for the previous packet. When the application) s
5 665 M
( is re-scheduled, it checks the current time, t_now. If \(t_now > t_i) s
5 654 M
( - t_delta\) then packet i is sent. When the nominal send time, t_i,) s
5 643 M
( of the next packet is calculated, it may already be the case that) s
5 632 M
( t_now > t_i - t_delta. In such a case the packet would be sent) s
5 621 M
( immediately.) s
5 599 M
( In order to send at most one packet before its nominal send time,) s
5 588 M
( and never to send a packet more than a round-trip time before its) s
5 577 M
( nominal send time the parameter t_delta would be set as follows:) s
5 555 M
( t_delta = min\(t_ipi, t_gran, rtt\)/2;) s
5 533 M
( \(The scheduling granularity t_gran is 10 ms on some older Unix) s
5 522 M
( systems.\)) s
5 500 M
( As an example, consider a TFRC flow with an allowed sending rate X) s
5 489 M
( of 10 packets per round-trip time, a round-trip time of 100 ms, a) s
5 478 M
( system with a scheduling granularity t_gran of 10 ms, and the) s
5 467 M
( ability to accumulate unused sending credits for a round-trip time.) s
5 456 M
( In this case, t_ipi is 1 ms. The TFRC sender would be allowed to) s
5 445 M
( send packets 0.5 ms before their nominal sending time, and would be) s
5 434 M
( allowed to save unused sending credits for 100 ms. The scheduling) s
5 423 M
( granularity of 10 ms would not significantly affect the performance) s
5 412 M
( of the connection.) s
5 390 M
( As a different example, consider a TFRC flow with a scheduling) s
5 379 M
( granularity greater than the round-trip time, for example, with a) s
5 368 M
( round-trip time of 0.1 ms and a system with a scheduling granularity) s
5 357 M
( of 1 ms, and with the ability to accumulate unused sending credits) s
5 346 M
( for a round-trip time. The TFRC sender would be allowed to save) s
5 335 M
( unused sending credits for 0.1 ms. If the scheduling granularity) s
5 324 M
( *did not* affect the sender's response to an incoming feedback) s
5 313 M
( packet, then the TFRC sender would be able to send an RTT of data) s
5 302 M
( \(as determined by the allowed sending rate\) each RTT, in response to) s
5 291 M
( incoming feedback packets. In this case, the coarse scheduling) s
5 280 M
( granularity would not significantly reduce the sending rate, but the) s
5 269 M
( sending rate would be bursty, with a round-trip time of data sent in) s
5 258 M
( response to each feedback packet.) s
5 236 M
( However, performance would be different in this case if the) s
5 225 M
( operating system scheduling granularity affected the sender's) s
5 214 M
( response to feedback packets as well as the general scheduling of) s
5 203 M
( the sender, In this case the sender's performance would be severely) s
5 192 M
( limited by the scheduling granularity being greater than the round-) s
5 181 M
( trip time, with the sender able to send an RTT of data, at the) s
5 170 M
( allowed sending rate, at most once every 1 ms. This restriction of) s
5 126 M
(Floyd et al. Expires: May 2008 Section 8.3. [Page 39]) s
_R
S
%%Page: (40) 40
%%BeginPageSetup
_S
24 24 translate
/pagenum 40 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( the sending rate is an unavoidable consequence of allowing) s
5 676 M
( burstiness of at most a round-trip time of data.) s
5 654 M
(8.4. Calculation of the Average Loss Interval) s
5 632 M
( The calculation of the average loss interval in Section 5.4 involves) s
5 621 M
( multiplications by the weights w_0 to w_\(n-1\), which for n=8 are:) s
5 599 M
( 1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2.) s
5 577 M
( With a minor loss of smoothness, it would be possible to use weights) s
5 566 M
( that were powers of two or sums of powers of two, e.g.,) s
5 544 M
( 1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.25.) s
5 522 M
(8.5. The Optional History Discounting Mechanism) s
5 500 M
( The optional history discounting mechanism described in Section 5.5) s
5 489 M
( is used in the calculation of the average loss rate. The history) s
5 478 M
( discounting mechanism is invoked only when there has been an) s
5 467 M
( unusually long interval with no packet losses. For a more efficient) s
5 456 M
( operation, the discount factor DF_i could be restricted to be a) s
5 445 M
( power of two.) s
5 412 M
(9. Changes from RFC 3448) s
5 390 M
(9.1. Overview of Changes) s
5 368 M
( This section summarizes the changes from RFC 3448. At a high level,) s
5 357 M
( the main change is to add mechanisms to address the case of a data-) s
5 346 M
( limited sender. This document also explicitly allows the TFRC) s
5 335 M
( sender to accumulate up to a round-trip time of unused send credits,) s
5 324 M
( and as a result to send a burst of packets if data arrives from the) s
5 313 M
( application in a burst after a data-limited period. This issue was) s
5 302 M
( not explicitly addressed in RFC 3448.) s
5 280 M
( This document updates RFC 3448 to incorporate TCP's higher initial) s
5 269 M
( sending rates from RFC 3390. This document also updates RFC 3448 to) s
5 258 M
( incorporate RFC 4243's use of a coarse-grained timestamp on data) s
5 247 M
( packets instead of a more fine-grained timestamp.) s
5 225 M
( Other changes address corner cases involving slow-start, the) s
5 214 M
( response when the first data packet is dropped, and the like. This) s
5 203 M
( document also incorporates the items in the RFC 3448 Errata.) s
5 181 M
( This section is non-normative; the normative text is in the cited) s
5 170 M
( sections.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 9.1. [Page 40]) s
_R
S
%%Page: (41) 41
%%BeginPageSetup
_S
24 24 translate
/pagenum 41 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(9.2. Changes in each Section) s
5 665 M
( Section 4.1, estimating the average segment size: Section 4.1 was) s
5 654 M
( modified to give a specific algorithm that could be used for) s
5 643 M
( estimating the average segment size.) s
5 621 M
( Section 4.2, update to the initial sending rate: In RFC 3448, the) s
5 610 M
( initial sending rate was two packets per round trip time. In this) s
5 599 M
( document, the initial sending rate can be as high as four packets) s
5 588 M
( per round trip time, following RFC 3390. The initial sending rate) s
5 577 M
( was changed to be in terms of the segment size s, not in terms of) s
5 566 M
( the MSS.) s
5 544 M
( Section 4.2 now says that tld, the Time Last Doubled during slow-) s
5 533 M
( start, can be initialized to either 0 or to -1. Section 4.2 was) s
5 522 M
( also clarified to say that RTT measurements don't only come from) s
5 511 M
( feedback packets; they could also come from other places, such as) s
5 500 M
( the SYN exchange.) s
5 478 M
( Section 4.3, response to feedback packets: Section 4.3 was modified) s
5 467 M
( to change the way that the receive rate is used in limiting the) s
5 456 M
( sender's allowed sending rate, by using the set of receive rate) s
5 445 M
( values of the last two round-trip times, and initializing the set of) s
5 434 M
( receive rate values by a large value.) s
5 412 M
( The larger initial sending rate in Section 4.2 is of little use if) s
5 401 M
( the receiver sends a feedback packet after the first packet is) s
5 390 M
( received, and the sender in response reduces the allowed sending) s
5 379 M
( rate to at most two packets per RTT, which would be twice the) s
5 368 M
( receive rate. Because of the change in the sender's processing of) s
5 357 M
( the receive rate, the sender now does not reduce the allowed sending) s
5 346 M
( rate to twice the reported receive rate in response to the first) s
5 335 M
( feedback packet.) s
5 313 M
( The sender doesn't double the allowed sending rate during slow-start) s
5 302 M
( if the sender has been data-limited over the entire interval) s
5 291 M
( reported by the feedback packet.) s
5 269 M
( During a data-limited period, the sender saves the receive rate) s
5 258 M
( reported from just before the data-limited period, if it is larger) s
5 247 M
( than the receive rate during the data-limited period. Thus, the) s
5 236 M
( sender does not use the receive rate from a data-limited period to) s
5 225 M
( restrict the allowed sending rate. Appendix C discusses this) s
5 214 M
( response further.) s
5 192 M
( Section 4.4, response to an idle period: Following Section 5.1 from) s
5 181 M
( [RFC4342], this document specifies that when the sending rate is) s
5 170 M
( reduced after an idle period that covers the period since the) s
5 126 M
(Floyd et al. Expires: May 2008 Section 9.2. [Page 41]) s
_R
S
%%Page: (42) 42
%%BeginPageSetup
_S
24 24 translate
/pagenum 42 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( nofeedback timer was set, the allowed sending rate is not reduced) s
5 676 M
( below the initial sending rate. \(In Section 4.4, the variable) s
5 665 M
( recover_rate is set to the initial sending rate.\)) s
5 643 M
( Section 4.4, correction from [RFC3448Err]. RFC 3448 had) s
5 632 M
( contradictory text about whether the sender halved its sending rate) s
5 621 M
( after *two* round-trip times without receiving a feedback report, or) s
5 610 M
( after *four* round-trip times. This document clarifies that the) s
5 599 M
( sender halves its sending rate after four round-trip times without) s
5 588 M
( receiving a feedback report [RFC3448Err].) s
5 566 M
( Section 4.4, clarification for Slow-Start: Section 4.4 was clarified) s
5 555 M
( to specify that on the expiration of the nofeedback timer, if p = 0,) s
5 544 M
( X_Bps can't be used, because the sender doesn't yet have a value for) s
5 533 M
( X_Bps. Section 4.4 was also clarified to check the case when the) s
5 522 M
( sender doesn't yet have an RTT sample, but has sent a packet since) s
5 511 M
( the nofeedback timer was set.) s
5 489 M
( Section 4.6: credits for unused send time:) s
5 467 M
( Section 4.6 has been clarified to say that the TFRC sender gets to) s
5 456 M
( accumulate up to an RTT of credits for unused send time. Section) s
5 445 M
( 4.6 was also rewritten to clarify what is specification and what is) s
5 434 M
( implementation.) s
5 412 M
( Section 5.4, clarification: Section 5.4 was modified to clarify the) s
5 401 M
( receiver's calculation of the average loss interval when the) s
5 390 M
( receiver has not yet seen eight loss intervals.) s
5 368 M
( Section 5.5, correction: Section 5.5 was corrected to say that the) s
5 357 M
( loss interval I_0 includes all transmitted packets, including lost) s
5 346 M
( and marked packets \(as defined in Section 5.3 in the general) s
5 335 M
( definition of loss intervals.\)) s
5 313 M
( Section 5.5, correction from [RFC3448Err]: A line in Section 5.5 was) s
5 302 M
( changed from) s
5 280 M
( ``for \(i = 1 to n\) { DF_i = 1; }'') s
5 258 M
( to) s
5 236 M
( ``for \(i = 0 to n\) { DF_i = 1; }'') s
5 214 M
( [RFC3448Err].) s
5 192 M
( Section 5.5, history discounting: THRESHOLD, the lower bound on the) s
5 181 M
( history discounting parameter DF, has been changed from 0.5 to 0.25,) s
5 170 M
( to allow more history discounting when the current interval is long.) s
5 126 M
(Floyd et al. Expires: May 2008 Section 9.2. [Page 42]) s
_R
S
%%Page: (43) 43
%%BeginPageSetup
_S
24 24 translate
/pagenum 43 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( Section 6, multiple feedback packets: Section 6 now contains more) s
5 676 M
( discussion of procedures if the receiver sends multiple feedback) s
5 665 M
( packets each round-trip time.) s
5 643 M
( Section 6.3, initialization of the feedback timer: Section 6.3 now) s
5 632 M
( specifies the receiver's initialization of the feedback timer if the) s
5 621 M
( first data packet received doesn't have an estimate of the round-) s
5 610 M
( trip time.) s
5 588 M
( Section 6.3, a coarse-grained timestamp: Section 6.3 was modified to) s
5 577 M
( incorporate, as an option, a coarse-grained timestamp from the) s
5 566 M
( sender that increments every quarter of a round-trip time, instead) s
5 555 M
( of a more fine-grained timestamp. This follows RFC 4243.) s
5 533 M
( Section 6.3.1, after the first loss event: Section 6.3.1 now says) s
5 522 M
( that for initializing the loss history after the first loss event,) s
5 511 M
( the receiver uses the maximum receive rate in X_recv_set, instead of) s
5 500 M
( the receive rate in the last round-trip time.) s
5 478 M
( Section 6.3.1, if the first data packet is dropped: Section 6.3.1) s
5 467 M
( now contains a specification for initializing the loss history if) s
5 456 M
( the first data packet sent is lost or ECN-marked.) s
5 434 M
( Section 7, sender-based variants: Section 7's discussion of sender-) s
5 423 M
( based variants has been expanded, with reference to RFC 4342.) s
5 390 M
(10. Security Considerations) s
5 368 M
( TFRC is not a transport protocol in its own right, but a congestion) s
5 357 M
( control mechanism that is intended to be used in conjunction with a) s
5 346 M
( transport protocol. Therefore security primarily needs to be) s
5 335 M
( considered in the context of a specific transport protocol and its) s
5 324 M
( authentication mechanisms.) s
5 302 M
( Congestion control mechanisms can potentially be exploited to create) s
5 291 M
( denial of service. This may occur through spoofed feedback. Thus) s
5 280 M
( any transport protocol that uses TFRC should take care to ensure) s
5 269 M
( that feedback is only accepted from the receiver of the data. The) s
5 258 M
( precise mechanism to achieve this will however depend on the) s
5 247 M
( transport protocol itself.) s
5 225 M
( In addition, congestion control mechanisms may potentially be) s
5 214 M
( manipulated by a greedy receiver that wishes to receive more than) s
5 203 M
( its fair share of network bandwidth. A receiver might do this by) s
5 192 M
( claiming to have received packets that in fact were lost due to) s
5 181 M
( congestion. Possible defenses against such a receiver would) s
5 170 M
( normally include some form of nonce that the receiver must feed back) s
5 126 M
(Floyd et al. Expires: May 2008 Section 10. [Page 43]) s
_R
S
%%Page: (44) 44
%%BeginPageSetup
_S
24 24 translate
/pagenum 44 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( to the sender to prove receipt. However, the details of such a) s
5 676 M
( nonce would depend on the transport protocol, and in particular on) s
5 665 M
( whether the transport protocol is reliable or unreliable.) s
5 643 M
( We expect that protocols incorporating ECN with TFRC will also want) s
5 632 M
( to incorporate feedback from the receiver to the sender using the) s
5 621 M
( ECN nonce [RFC3540]. The ECN nonce is a modification to ECN that) s
5 610 M
( protects the sender from the accidental or malicious concealment of) s
5 599 M
( marked packets. Again, the details of such a nonce would depend on) s
5 588 M
( the transport protocol, and are not addressed in this document.) s
5 555 M
(11. IANA Considerations) s
5 533 M
( There are no IANA actions required for this document.) s
5 500 M
(12. Acknowledgments) s
5 478 M
( We would like to acknowledge feedback and discussions on equation-) s
5 467 M
( based congestion control with a wide range of people, including) s
5 456 M
( members of the Reliable Multicast Research Group, the Reliable) s
5 445 M
( Multicast Transport Working Group, and the End-to-End Research) s
5 434 M
( Group. We would like to thank Dado Colussi, Gorry Fairhurst, Ladan) s
5 423 M
( Gharai, Wim Heirman, Eddie Kohler, Ken Lofgren, Mike Luby, Ian) s
5 412 M
( McDonald, Colin Perkins, Michele R., Gerrit Renker, Arjuna) s
5 401 M
( Sathiaseelan, Vladica Stanisic, Randall Stewart, Eduardo Urzaiz,) s
5 390 M
( Shushan Wen, and Wendy Lee \(lhh@zsu.edu.cn\) for feedback on earlier) s
5 379 M
( versions of this document, and to thank Mark Allman for his) s
5 368 M
( extensive feedback from using [RFC3448] to produce a working) s
5 357 M
( implementation.) s
5 335 M
(A. Terminology) s
5 313 M
( This document uses the following terms. Timer variables \(e.g.,) s
5 302 M
( t_now, tld\) are assumed to be in seconds, with a timer resolution of) s
5 291 M
( at least a millisecond.) s
5 269 M
( DF: Discount factor for a loss interval \(Section 5.5\).) s
5 247 M
( initial_rate:) s
5 236 M
( Allowed initial sending rate.) s
5 214 M
( last_counter:) s
5 203 M
( Greatest received value of the window counter \(Section 6.3\).) s
5 181 M
( min_rate:) s
5 170 M
( Minimum transmit rate \(Section 4.3\).) s
5 126 M
(Floyd et al. Expires: May 2008 Section A. [Page 44]) s
_R
S
%%Page: (45) 45
%%BeginPageSetup
_S
24 24 translate
/pagenum 45 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( n: Number of loss intervals.) s
5 665 M
( NDUPACK:) s
5 654 M
( Number of dupacks for inferring loss \(constant\) \(Section 5.1\).) s
5 632 M
( nofeedback timer:) s
5 621 M
( Sender-side timer \(Section 4\).) s
5 599 M
( p: Estimated Loss Event Rate.) s
5 577 M
( p_prev:) s
5 566 M
( Previous value of p \(Section 6.1\).) s
5 544 M
( q: Filter constant for RTT \(constant\) \(Section 4.3\).) s
5 522 M
( q2: Filter constant for long-term RTT \(constant\) \(Section 4.6\).) s
5 500 M
( R: Estimated path round-trip time.) s
5 478 M
( R_sample:) s
5 467 M
( Measured path RTT \(Section 4.3\).) s
5 445 M
( R_sqmean:) s
5 434 M
( Long-term estimate of the square root of the RTT \(Section 4.6\).) s
5 412 M
( recover_rate:) s
5 401 M
( Allowed rate for resuming after an idle period \(Section 4.4\).) s
5 379 M
( recv_limit;) s
5 368 M
( Limit on sending rate computed from the receive rate \(Section) s
5 357 M
( 4.3\).) s
5 335 M
( s: Nominal packet size in bytes.) s
5 313 M
( S: Sequence number.) s
5 291 M
( t_delay:) s
5 280 M
( Reported time delay between receipt of the last packet at the) s
5 269 M
( receiver and the generation of the feedback packet \(Section) s
5 258 M
( 3.2.2\).) s
5 236 M
( t_delta:) s
5 225 M
( Parameter for flexibility in send time \(Section 8.3\).) s
5 203 M
( t_gran:) s
5 192 M
( Schedular granularity \(constant\) \(Section 8.3\).) s
5 126 M
(Floyd et al. Expires: May 2008 Section A. [Page 45]) s
_R
S
%%Page: (46) 46
%%BeginPageSetup
_S
24 24 translate
/pagenum 46 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( t_ipi:) s
5 676 M
( Inter-packet interval for sending packets \(Section 4.6\).) s
5 654 M
( t_mbi:) s
5 643 M
( Maximum RTO value of TCP \(constant\) \(Section 4.3\).) s
5 621 M
( tld:) s
5 610 M
( Time Last Doubled \(Section 4.2\).) s
5 588 M
( t_now:) s
5 577 M
( Current time \(Section 4.3\).) s
5 555 M
( t_RTO:) s
5 544 M
( Estimated RTO of TCP \(Section 4.3\).) s
5 522 M
( X: Allowed transmit rate, as limited by the receive rate.) s
5 500 M
( X_Bps:) s
5 489 M
( Calculated sending rate in bytes per second \(Section 3.1\).) s
5 467 M
( X_pps:) s
5 456 M
( Calculated sending rate in packets per second \(Section 3.1\).) s
5 434 M
( X_recv:) s
5 423 M
( Estimated receive rate at the receiver \(Section 3.2.2\).) s
5 401 M
( X_inst:) s
5 390 M
( Instantaneous allowed transmit rate \(Section 4.6\).) s
5 368 M
( W_init:) s
5 357 M
( TCP initial window \(constant\) \(Section 4.2\).) s
5 335 M
(B. The Initial Value of the Nofeedback Timer) s
5 313 M
( Why is the initial value of TFRC's nofeedback timer set to two) s
5 302 M
( seconds, instead of the recommended initial value of three seconds) s
5 291 M
( for TCP's retransmit timer, from [RFC2988]? There isn't any) s
5 280 M
( particular reason why TFRC's nofeedback timer should have the same) s
5 269 M
( initial value as TCP's retransmit timer. TCP's retransmit timer is) s
5 258 M
( used not only to reduce the sending rate in response to congestion,) s
5 247 M
( but also to retransmit a packet that is assumed to have been dropped) s
5 236 M
( in the network. In contrast, TFRC's nofeedback timer is only used) s
5 225 M
( to reduce the allowed sending rate, not to trigger the sending of a) s
5 214 M
( new packet. As a result, there is no danger to the network for the) s
5 203 M
( initial value of TFRC's nofeedback timer to be smaller than the) s
5 192 M
( recommended initial value for TCP's retransmit timer.) s
5 170 M
( Further, when the nofeedback timer has not yet expired, TFRC has a) s
5 126 M
(Floyd et al. Expires: May 2008 Section B. [Page 46]) s
_R
S
%%Page: (47) 47
%%BeginPageSetup
_S
24 24 translate
/pagenum 47 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( more slowly-responding congestion control mechanism than TCP, and) s
5 676 M
( TFRC's use of the receive rate for limiting the sending rate is) s
5 665 M
( somewhat less precise than TCP's use of windows and ack-clocking, so) s
5 654 M
( the nofeedback timer is a particularly important safety mechanism) s
5 643 M
( for TFRC. For all of these reasons, it is perfectly reasonable for) s
5 632 M
( TFRC's nofeedback timer to have a smaller initial value than that of) s
5 621 M
( TCP's retransmit timer.) s
5 599 M
(C. Response to Idle or Data-limited Periods) s
5 577 M
( Future work could explore alternate responses to using the receive) s
5 566 M
( rate during a data-limited period.) s
5 544 M
(C.1. Long Idle or Data-limited Periods) s
5 522 M
( Table 1 summarizes the response of Standard TCP [RFC2581], TCP with) s
5 511 M
( Congestion Window Validation [RFC2861], Standard TFRC [RFC3448], and) s
5 500 M
( Revised TFRC \(this document\) in response to long idle or data-) s
5 489 M
( limited periods. For the purposes of this section, we define a long) s
5 478 M
( period as a period of at least an RTO.) s
5 445 M
( Protocol Long idle periods Long data-limited periods) s
5 434 M
( -------------- -------------------- ----------------------) s
5 423 M
( Standard TCP: Window -> initial. No change in window.) s
5 412 M
( \(Window not increased in) s
5 401 M
( data-limited periods.\)) s
5 379 M
( TCP with CWV: Halve window Reduce window half way) s
5 368 M
( \(not below initial cwnd\). to used window.) s
5 346 M
( Standard TFRC: Halve rate Rate limited to) s
5 335 M
( \(not below 2 pkts/rtt\). twice receive rate.) s
5 324 M
( One RTT after sending pkt,) s
5 313 M
( rate is limited by X_recv.) s
5 291 M
( Revised TFRC: Halve rate Rate limited to twice) s
5 280 M
( \(not below initial rate\). max\(current receive rate,) s
5 269 M
( receive rate before) s
5 258 M
( data-limited period\).) s
5 236 M
( Table 1: Response to long idle or data-limited periods.) s
5 214 M
( Standard TCP after long idle periods: For Standard TCP, [RFC2581]) s
5 203 M
( specifies that TCP SHOULD set the congestion window to no more than) s
5 192 M
( the initial window after an idle period of at least an RTO. \(To be) s
5 181 M
( precise, RFC 2581 specifies that the TCP sender should set cwnd to) s
5 170 M
( the initial window if the sender has not sent data in an interval) s
5 126 M
(Floyd et al. Expires: May 2008 Section C.1. [Page 47]) s
_R
S
%%Page: (48) 48
%%BeginPageSetup
_S
24 24 translate
/pagenum 48 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( exceeding the retransmission timeout.\)) s
5 665 M
( Standard TCP after long data-limited periods: Standard TCP [RFC2581]) s
5 654 M
( does not reduce TCP's congestion window after a data-limited period,) s
5 643 M
( when the congestion window is not fully used. Standard TCP in) s
5 632 M
( [RFC2581] uses the FlightSize, the amount of outstanding data in the) s
5 621 M
( network, only in setting the slow-start threshold after a retransmit) s
5 610 M
( timeout. Standard TCP is not limited by TCP's ack-clocking) s
5 599 M
( mechanism during a data-limited period.) s
5 577 M
( Standard TCP's lax response to a data-limited period is quite) s
5 566 M
( different from its stringent response to an idle period.) s
5 544 M
( TCP with Congestion Window Validation \(CWV\) after long idle periods:) s
5 533 M
( As an experimental alternative, [RFC2861] specifies a more moderate) s
5 522 M
( response to an idle period than that of Standard TCP, where during) s
5 511 M
( an idle period the TCP sender halves cwnd after each RTO, down to) s
5 500 M
( the initial cwnd.) s
5 478 M
( TCP with Congestion Window Validation after long data-limited) s
5 467 M
( periods: As an experimental alternative, [RFC2861] specifies a more) s
5 456 M
( stringent response to a data-limited period than that of Standard) s
5 445 M
( TCP, where after each RTO seconds of a data-limited period, the) s
5 434 M
( congestion window is reduced half way down to the window that is) s
5 423 M
( actually used.) s
5 401 M
( The response of TCP with CWV to an idle period is similar to its) s
5 390 M
( response to a data-limited period. TCP with CWV is less restrictive) s
5 379 M
( than Standard TCP in response to an idle period, and more) s
5 368 M
( restrictive than Standard TCP in response to a data-limited period.) s
5 346 M
( Standard TFRC after long idle periods: For Standard TFRC, [RFC3448]) s
5 335 M
( specifies that the allowed sending rate is halved after each RTO) s
5 324 M
( seconds of an idle period. The allowed sending rate is not reduced) s
5 313 M
( below two packets per RTT after idle periods. After an idle period,) s
5 302 M
( the first feedback packet receives reports a receive rate of one) s
5 291 M
( packet per round-trip time, and this receive rate is used to limit) s
5 280 M
( the sending rate. Standard TFRC effectively slow-starts up from) s
5 269 M
( this allowed sending rate.) s
5 247 M
( Standard TFRC after long data-limited periods: [RFC3448] does not) s
5 236 M
( distinguish between data-limited and not-data-limited periods. As a) s
5 225 M
( consequence, the allowed sending rate is limited to at most twice) s
5 214 M
( the receive rate during and after a data-limited period. This is a) s
5 203 M
( very restrictive response, more restrictive than that of either) s
5 192 M
( Standard TCP or of TCP with CWV.) s
5 170 M
( Revised TFRC after long idle periods: For Revised TFRC, this) s
5 126 M
(Floyd et al. Expires: May 2008 Section C.1. [Page 48]) s
_R
S
%%Page: (49) 49
%%BeginPageSetup
_S
24 24 translate
/pagenum 49 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( document specifies that the allowed sending rate is halved after) s
5 676 M
( each RTO seconds of an idle period. The allowed sending rate is not) s
5 665 M
( reduced below the initial sending rate as the result of an idle) s
5 654 M
( period. The first feedback packet received after the idle period) s
5 643 M
( reports a receive rate of one packet per round-trip time. However,) s
5 632 M
( the Revised TFRC sender does not use this receive rate for limiting) s
5 621 M
( the sending rate. Thus, Revised TFRC differs from Standard TFRC in) s
5 610 M
( the lower limit used in the reduction of the sending rate, and in) s
5 599 M
( the better response to the first feedback packet received after the) s
5 588 M
( idle period.) s
5 566 M
( Revised TFRC after long data-limited periods: For Revised TFRC, this) s
5 555 M
( document distinguishes between data-limited and not-data-limited) s
5 544 M
( periods. As specified in Section 4.3, during a data-limited period) s
5 533 M
( Revised TFRC remembers the receive rate before the data-limited) s
5 522 M
( period began, and does not reduce the allowed sending rate below) s
5 511 M
( twice that receive rate. This is somewhat similar to the response) s
5 500 M
( of Standard TCP, and is quite different from the very restrictive) s
5 489 M
( response of Standard TFRC to a data-limited period. However, the) s
5 478 M
( response of Revised TFRC is not as conservative as the response of) s
5 467 M
( TCP with Congestion Window Validation, where the congestion window) s
5 456 M
( is gradually reduced down to the window actually used during a data-) s
5 445 M
( limited period.) s
5 423 M
( We note that for Standard TCP, the congestion window is generally) s
5 412 M
( not increased during a data-limited period \(when the current) s
5 401 M
( congestion window is not being fully used\). We note that there is) s
5 390 M
( no mechanism comparable to this in Revised TFRC.) s
5 368 M
( Recovery after idle or data-limited periods: When TCP reduces the) s
5 357 M
( congestion window after an idle or data-utilized period, TCP can set) s
5 346 M
( the slow-start threshold ssthresh to allow the TCP sender to slow-) s
5 335 M
( start back up towards its old sending rate when the idle or data-) s
5 324 M
( limited period is over. However in TFRC, even when the TFRC) s
5 313 M
( sender's sending rate is restricted by twice the previous receive) s
5 302 M
( rate, this results in the sender being able to double the sending) s
5 291 M
( rate from one round-trip time to the next, if permitted by the) s
5 280 M
( throughput equation. Thus, TFRC doesn't need a mechanism such as) s
5 269 M
( TCP's setting of ssthresh to allow a slow-start after an idle or) s
5 258 M
( data-limited period.) s
5 236 M
( For future work, one avenue to explore would be the addition of) s
5 225 M
( Congestion Window Validation mechanisms for TFRC's response to data-) s
5 214 M
( limited periods. Currently, following Standard TCP, during data-) s
5 203 M
( limited periods Revised TFRC does not limit its allowed sending rate) s
5 192 M
( as a function of the receive rate.) s
5 126 M
(Floyd et al. Expires: May 2008 Section C.1. [Page 49]) s
_R
S
%%Page: (50) 50
%%BeginPageSetup
_S
24 24 translate
/pagenum 50 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
(C.2. Short Idle or Data-limited Periods) s
5 665 M
( Table 2 summarizes the response of Standard TCP [RFC2581], TCP with) s
5 654 M
( Congestion Window Validation [RFC2861], Standard TFRC [RFC3448], and) s
5 643 M
( Revised TFRC \(this document\) in response to short idle or data-) s
5 632 M
( limited periods. For the purposes of this section, we define a) s
5 621 M
( short period as a period of less than an RTT.) s
5 588 M
( Protocol Short idle periods Short data-limited periods) s
5 577 M
( -------------- -------------------- ----------------------) s
5 566 M
( Standard TCP: Send a burst up to cwnd. Send a burst up to cwnd.) s
5 544 M
( TCP with CWV: Send a burst up to cwnd. Send a burst up to cwnd.) s
5 522 M
( Standard TFRC: ? ?) s
5 500 M
( Revised TFRC: Send a burst Send a burst) s
5 489 M
( \(up to an RTT of \(up to an RTT of) s
5 478 M
( unused send credits\). unused send credits\).) s
5 456 M
( Table 2: Response to short idle or data-limited periods.) s
5 434 M
( Table 2 shows that Revised TFRC has a similar response to that of) s
5 423 M
( Standard TCP and of TCP with CWV to a short idle or data-limited) s
5 412 M
( period. For a short idle or data-limited period, TCP is limited) s
5 401 M
( only by the size of the unused congestion window, and Revised TFRC) s
5 390 M
( is limited only by the number of unused send credits \(up to an RTT's) s
5 379 M
( worth\). For Standard TFRC, [RFC3448] did not explicitly specify the) s
5 368 M
( behavior with respect to unused send credits.) s
5 346 M
(C.3. Moderate Idle or Data-limited Periods) s
5 324 M
( Table 3 summarizes the response of Standard TCP [RFC2581], TCP with) s
5 313 M
( Congestion Window Validation [RFC2861], Standard TFRC [RFC3448], and) s
5 302 M
( Revised TFRC \(this document\) in response to moderate idle or data-) s
5 291 M
( limited periods. For the purposes of this section, we define a) s
5 280 M
( moderate period as a period greater than an RTT, but less than an) s
5 269 M
( RTO.) s
5 126 M
(Floyd et al. Expires: May 2008 Section C.3. [Page 50]) s
_R
S
%%Page: (51) 51
%%BeginPageSetup
_S
24 24 translate
/pagenum 51 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( Protocol Moderate idle periods Moderate data-limited periods) s
5 676 M
( ------------- --------------------- -------------------------) s
5 665 M
( Standard TCP: Send a burst up to cwnd. Send a burst up to cwnd.) s
5 643 M
( TCP with CWV: Send a burst up to cwnd. Send a burst up to cwnd.) s
5 621 M
( Standard TFRC: ? Limited by X_recv.) s
5 599 M
( Revised TFRC: Send a burst Send a burst) s
5 588 M
( \(up to an RTT of \(up to an RTT of) s
5 577 M
( unused send credits\). unused send credits\).) s
5 555 M
( Table 3: Response to moderate idle or data-limited periods.) s
5 533 M
( Table 3 shows that Revised TFRC has a similar response to that of) s
5 522 M
( Standard TCP and of TCP with CWV to a moderate idle or data-limited) s
5 511 M
( period. For a moderate idle or data-limited period, TCP is limited) s
5 500 M
( only by the size of the unused congestion window. For a moderate) s
5 489 M
( idle period, Revised TFRC is limited only by the number of unused) s
5 478 M
( send credits \(up to an RTT's worth\). For a moderate data-limited) s
5 467 M
( period, Standard TCP would be limited by X_recv from the most recent) s
5 456 M
( feedback packet. In contrast, Revised TFRC isn't limited by the) s
5 445 M
( receive rate from data-limited periods that cover an entire feedback) s
5 434 M
( period of a round-trip time. For Standard TFRC, [RFC3448] did not) s
5 423 M
( explicitly specify the behavior with respect to unused send credits.) s
5 401 M
(C.4. Other Patterns) s
5 379 M
( Other possible patterns to consider in evaluating Revised TFRC would) s
5 368 M
( be to compare the behavior of TCP, Standard TFRC, and Revised TFRC) s
5 357 M
( for connections with alternating busy and idle periods, alternating) s
5 346 M
( idle and data-limited periods, or with idle or data-limited periods) s
5 335 M
( during Slow-Start,) s
5 313 M
(C.5. Evaluating TFRC's Response to Idle Periods) s
5 291 M
( In this section we focus on evaluating Revised TFRC's response to) s
5 280 M
( idle or data-limited periods.) s
5 258 M
( One drawback to TFRC's strict response to idle or data-limited) s
5 247 M
( periods is that it could be seen as encouraging applications to pad) s
5 236 M
( their sending rate during idle or data-limited periods, by sending) s
5 225 M
( dummy data when there was no other data to send. By having a less) s
5 214 M
( strict response to data-limited periods, Revised TFRC also could be) s
5 203 M
( seen as giving applications less of an incentive to pad their) s
5 192 M
( sending rates. Work in progress such as Faster Restart [KFS07] can) s
5 181 M
( also decrease a application's incentive to pad its sending rate, by) s
5 170 M
( allowing faster start-up after idle periods. Further research would) s
5 126 M
(Floyd et al. Expires: May 2008 Section C.5. [Page 51]) s
_R
S
%%Page: (52) 52
%%BeginPageSetup
_S
24 24 translate
/pagenum 52 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( be useful to understand in more detail the interaction between TCP) s
5 676 M
( or TFRC's congestion control mechanisms, and an application's) s
5 665 M
( incentive to pad its sending rate during idle or data-limited) s
5 654 M
( periods.) s
5 632 M
( TCP Congestion Window Validation, described in Appendix C.1 above,) s
5 621 M
( is an Experimental standard specifying that the TCP sender slowly) s
5 610 M
( reduces the congestion window during an idle or data-limited period) s
5 599 M
( [RFC2861]. While TFRC and Revised TFRC's responses to idle periods) s
5 588 M
( are roughly similar to those of TCP with Congestion Window) s
5 577 M
( Validation, Revised TFRC's response to data-limited periods is less) s
5 566 M
( conservative that those of Congestion Window Validation \(and) s
5 555 M
( Standard TFRC's response to data-limited periods was considerably) s
5 544 M
( more conservative that those of Congestion Window Validation\).) s
5 533 M
( Future work should include modifications to this document so that) s
5 522 M
( the response of Revised TFRC to a data-limited period includes a) s
5 511 M
( slow reduction of the allowed sending rate. This would be) s
5 500 M
( particularly compelling if Congestion Window Validation became a) s
5 489 M
( Proposed Standard in the IETF.) s
5 467 M
(Normative References) s
5 445 M
( [RFC3448] M. Handley, S. Floyd, J. Padhye, and J. Widmer, TCP) s
5 434 M
( Friendly Rate Control \(TFRC\): Protocol) s
5 423 M
( Specification, RFC 3448, January 2003.) s
5 401 M
(Informational References) s
5 379 M
( [BRS99] Balakrishnan, H., Rahul, H., and Seshan, S., "An) s
5 368 M
( Integrated Congestion Management Architecture for) s
5 357 M
( Internet Hosts," Proc. ACM SIGCOMM, Cambridge, MA,) s
5 346 M
( September 1999.) s
5 324 M
( [FHPW00] S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 313 M
( "Equation-Based Congestion Control for Unicast) s
5 302 M
( Applications", August 2000, Proc SIGCOMM 2000.) s
5 280 M
( [FHPW00a] S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 269 M
( "Equation-Based Congestion Control for Unicast) s
5 258 M
( Applications: the Extended Version", ICSI tech) s
5 247 M
( report TR-00-03, March 2000.) s
5 225 M
( [KFS07] E. Kohler, S. Floyd, and A. Sathiaseelan, Faster) s
5 214 M
( Restart for TCP Friendly Rate Control \(TFRC\),) s
5 203 M
( Internet-draft draft-ietf-dccp-tfrc-faster-) s
5 192 M
( restart-04.txt, work-in-progress, September 2007.) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 52]) s
_R
S
%%Page: (53) 53
%%BeginPageSetup
_S
24 24 translate
/pagenum 53 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( [PFTK98] Padhye, J. and Firoiu, V. and Towsley, D. and) s
5 676 M
( Kurose, J., "Modeling TCP Throughput: A Simple Model) s
5 665 M
( and its Empirical Validation", Proc ACM SIGCOMM) s
5 654 M
( 1998.) s
5 632 M
( [RFC2119] S. Bradner, Key Words For Use in RFCs to Indicate) s
5 621 M
( Requirement Levels, RFC 2119.) s
5 599 M
( [RFC2140] J. Touch, "TCP Control Block Interdependence", RFC) s
5 588 M
( 2140, April 1997.) s
5 566 M
( [RFC2581] Allman, M., Paxson, V., and W. Stevens, "TCP) s
5 555 M
( Congestion Control", RFC 2581, April 1999.) s
5 533 M
( [RFC2861] M. Handley, J. Padhye, and S. Floyd, TCP Congestion) s
5 522 M
( Window Validation, RFC2861, June 2000.) s
5 500 M
( [RFC2988] V. Paxson and M. Allman, "Computing TCP's) s
5 489 M
( Retransmission Timer", RFC 2988, November 2000.) s
5 467 M
( [RFC3168] K. Ramakrishnan and S. Floyd, "The Addition of) s
5 456 M
( Explicit Congestion Notification \(ECN\) to IP", RFC) s
5 445 M
( 3168, September 2001.) s
5 423 M
( [RFC3390] Allman, M., Floyd, S., and C. Partridge, "Increasing) s
5 412 M
( TCP's Initial Window", RFC 3390, October 2002.) s
5 390 M
( [RFC3448Err] RFC 3448 Errata, URL) s
5 379 M
( ``http://www.icir.org/tfrc/rfc3448.errata''.) s
5 357 M
( [RFC3540] Wetherall, D., Ely, D., and Spring, N., "Robust ECN) s
5 346 M
( Signaling with Nonces", RFC 3540, Experimental, June) s
5 335 M
( 2003) s
5 313 M
( [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram) s
5 302 M
( Congestion Control Protocol \(DCCP\)", RFC 4340, March) s
5 291 M
( 2006.) s
5 269 M
( [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for) s
5 258 M
( Datagram Congestion Control Protocol \(DCCP\)) s
5 247 M
( Congestion Control ID 3: TCP-Friendly Rate Control) s
5 236 M
( \(TFRC\)", RFC 4342, March 2006.) s
5 214 M
( [RFC4828] Floyd, S., and E. Kohler, TCP Friendly Rate Control) s
5 203 M
( \(TFRC\): the Small-Packet \(SP\) Variant, RFC 4828,) s
5 192 M
( Experimental, April 2007.) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 53]) s
_R
S
%%Page: (54) 54
%%BeginPageSetup
_S
24 24 translate
/pagenum 54 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( [W00] Widmer, J., "Equation-Based Congestion Control",) s
5 676 M
( Diploma Thesis, University of Mannheim, February) s
5 665 M
( 2000. URL "http://www.icir.org/tfrc/".) s
5 632 M
(Authors' Addresses) s
5 610 M
( Mark Handley,) s
5 599 M
( Department of Computer Science) s
5 588 M
( University College London) s
5 577 M
( Gower Street) s
5 566 M
( London WC1E 6BT) s
5 555 M
( UK) s
5 544 M
( EMail: M.Handley@cs.ucl.ac.uk) s
5 511 M
( Sally Floyd) s
5 500 M
( ICSI) s
5 489 M
( 1947 Center St, Suite 600) s
5 478 M
( Berkeley, CA 94708) s
5 467 M
( Email: floyd@icir.org) s
5 434 M
( Jitendra Padhye) s
5 423 M
( Microsoft Research) s
5 412 M
( Email: padhye@microsoft.com) s
5 368 M
( Joerg Widmer) s
5 357 M
( DoCoMo Euro-Labs) s
5 346 M
( Landsberger Strasse 312) s
5 335 M
( 80687 Munich) s
5 324 M
( Germany) s
5 313 M
( Email: widmer@acm.org) s
5 269 M
(Full Copyright Statement) s
5 247 M
( Copyright \(C\) The IETF Trust \(2007\).) s
5 225 M
( This document is subject to the rights, licenses and restrictions) s
5 214 M
( contained in BCP 78, and except as set forth therein, the authors) s
5 203 M
( retain all their rights.) s
5 181 M
( This document and the information contained herein are provided on) s
5 170 M
( an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 54]) s
_R
S
%%Page: (55) 55
%%BeginPageSetup
_S
24 24 translate
/pagenum 55 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT TFRC: Protocol Specification November 2007) s
5 687 M
( REPRESENTS OR IS SPONSORED BY \(IF ANY\), THE INTERNET SOCIETY, THE) s
5 676 M
( IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL) s
5 665 M
( WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY) s
5 654 M
( WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE) s
5 643 M
( ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS) s
5 632 M
( FOR A PARTICULAR PURPOSE.) s
5 610 M
(Intellectual Property) s
5 588 M
( The IETF takes no position regarding the validity or scope of any) s
5 577 M
( Intellectual Property Rights or other rights that might be claimed) s
5 566 M
( to pertain to the implementation or use of the technology described) s
5 555 M
( in this document or the extent to which any license under such) s
5 544 M
( rights might or might not be available; nor does it represent that) s
5 533 M
( it has made any independent effort to identify any such rights.) s
5 522 M
( Information on the procedures with respect to rights in RFC) s
5 511 M
( documents can be found in BCP 78 and BCP 79.) s
5 489 M
( Copies of IPR disclosures made to the IETF Secretariat and any) s
5 478 M
( assurances of licenses to be made available, or the result of an) s
5 467 M
( attempt made to obtain a general license or permission for the use) s
5 456 M
( of such proprietary rights by implementers or users of this) s
5 445 M
( specification can be obtained from the IETF on-line IPR repository) s
5 434 M
( at http://www.ietf.org/ipr.) s
5 412 M
( The IETF invites any interested party to bring to its attention any) s
5 401 M
( copyrights, patents or patent applications, or other proprietary) s
5 390 M
( rights that may cover technology that may be required to implement) s
5 379 M
( this standard. Please address the information to the IETF at ietf-) s
5 368 M
( ipr@ietf.org.) s
5 126 M
(Floyd et al. Expires: May 2008 [Page 55]) s
_R
S
%%Page: (56) 56
%%BeginPageSetup
_S
24 24 translate
/pagenum 56 def
/fname (draft-ietf-dccp-rfc3448bis-03.txt) def
/fdir () def
/ftail (draft-ietf-dccp-rfc3448bis-03.txt) def
/user_header_p false def
%%EndPageSetup
_R
S
%%Trailer
%%Pages: 56
%%DocumentNeededResources: font Courier-Bold Courier
%%EOF
| PAFTECH AB 2003-2026 | 2026-04-23 00:05:44 |