One document matched: draft-floyd-rfc3448bis-00.ps


%!PS-Adobe-3.0
%%BoundingBox: 24 24 588 768
%%Title: Enscript Output
%%For: Sally Floyd
%%Creator: GNU enscript 1.6.1
%%CreationDate: Wed Jun 21 11:45:26 2006
%%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 (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 731 M
(Internet Engineering Task Force                               M. Handley) s
5 720 M
(INTERNET-DRAFT                                 University College London) s
5 709 M
(draft-floyd-rfc3448bis-00.txt                                   S. Floyd) s
5 698 M
(Expires: December 2006                                              ICIR) s
5 687 M
(                                                               J. Padhye) s
5 676 M
(                                                               Microsoft) s
5 665 M
(                                                               J. Widmer) s
5 654 M
(                                                  University of Mannheim) s
5 643 M
(                                                            18 June 2006) s
5 610 M
(                   TCP Friendly Rate Control \(TFRC\):) s
5 599 M
(                         Protocol Specification) s
5 544 M
(Status of this Memo) s
5 522 M
(    By submitting this Internet-Draft, each author represents that any) s
5 511 M
(    applicable patent or other IPR claims of which he or she is aware) s
5 500 M
(    have been or will be disclosed, and any of which he or she becomes) s
5 489 M
(    aware will be disclosed, in accordance with Section 6 of BCP 79.) s
5 467 M
(    Internet-Drafts are working documents of the Internet Engineering) s
5 456 M
(    Task Force \(IETF\), its areas, and its working groups.  Note that) s
5 445 M
(    other groups may also distribute working documents as Internet-) s
5 434 M
(    Drafts.) s
5 412 M
(    Internet-Drafts are draft documents valid for a maximum of six) s
5 401 M
(    months and may be updated, replaced, or obsoleted by other documents) s
5 390 M
(    at any time.  It is inappropriate to use Internet-Drafts as) s
5 379 M
(    reference material or to cite them other than as "work in progress.") s
5 357 M
(    The list of current Internet-Drafts can be accessed at) s
5 346 M
(    http://www.ietf.org/ietf/1id-abstracts.txt.) s
5 324 M
(    The list of Internet-Draft Shadow Directories can be accessed at) s
5 313 M
(    http://www.ietf.org/shadow.html.) s
5 291 M
(    This Internet-Draft will expire on December 2006.) s
5 203 M
(Handley/Floyd/Padhye/Widmer                                     [Page 1]) s
_R
S
%%Page: (2) 2
%%BeginPageSetup
_S
24 24 translate
/pagenum 2 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) 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 telephony or streaming media where a relatively) s
5 599 M
(    smooth sending rate is of importance.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                     [Page 2]) s
_R
S
%%Page: (3) 3
%%BeginPageSetup
_S
24 24 translate
/pagenum 3 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(Table of Contents) s
5 665 M
(    1. Introduction ...................................................6) s
5 654 M
(    2. Conventions ....................................................7) s
5 643 M
(    3. Protocol Mechanism .............................................7) s
5 632 M
(       3.1. TCP Throughput Equation ...................................8) s
5 621 M
(       3.2. Packet Contents ...........................................9) s
5 610 M
(            3.2.1. Data Packets ......................................10) s
5 599 M
(            3.2.2. Feedback Packets ..................................10) s
5 588 M
(    4. Data Sender Protocol ..........................................11) s
5 577 M
(       4.1. Measuring the Segment Size ...............................11) s
5 566 M
(       4.2. Sender Initialization ....................................12) s
5 555 M
(       4.3. Sender behavior when a feedback packet is received .......13) s
5 544 M
(       4.4. Expiration of nofeedback timer ...........................14) s
5 533 M
(       4.5. Sending a packet after an idle period ....................15) s
5 522 M
(       4.6. Preventing Oscillations ..................................15) s
5 511 M
(       4.7. Scheduling of Packet Transmissions .......................16) s
5 500 M
(    5. Calculation of the Loss Event Rate \(p\) ........................17) s
5 489 M
(       5.1. Detection of Lost or Marked Packets ......................17) s
5 478 M
(       5.2. Translation from Loss History to Loss Events .............18) s
5 467 M
(       5.3. Inter-loss Event Interval ................................19) s
5 456 M
(       5.4. Average Loss Interval ....................................19) s
5 445 M
(       5.5. History Discounting ......................................20) s
5 434 M
(    6. Data Receiver Protocol ........................................23) s
5 423 M
(       6.1. Receiver behavior when a data packet is received .........23) s
5 412 M
(       6.2. Expiration of feedback timer .............................24) s
5 401 M
(       6.3. Receiver initialization ..................................24) s
5 390 M
(            6.3.1. Initializing the Loss History after the First Loss) s
5 379 M
(            Event ....................................................25) s
5 368 M
(    7. Sender-based Variants .........................................25) s
5 357 M
(    8. Implementation Issues .........................................26) s
5 346 M
(    9. Changes from RFC 3448 .........................................27) s
5 335 M
(    10. Security Considerations ......................................28) s
5 324 M
(    11. IANA Considerations ..........................................28) s
5 313 M
(    12. Acknowledgments ..............................................28) s
5 302 M
(    13. Normative References .........................................29) s
5 291 M
(    14. Informational References .....................................29) s
5 280 M
(    15. Authors' Addresses ...........................................30) s
5 269 M
(    Full Copyright Statement .........................................31) s
5 258 M
(    Intellectual Property ............................................31) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                     [Page 3]) s
_R
S
%%Page: (4) 4
%%BeginPageSetup
_S
24 24 translate
/pagenum 4 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    NOTE TO RFC EDITOR: PLEASE DELETE THIS NOTE UPON PUBLICATION.) s
5 676 M
(     Changes from RFC 3448:) s
5 654 M
(     * Incorporated changes in the RFC 3448 errata:) s
5 632 M
(       -  "If the sender does not receive a feedback report for) s
5 621 M
(          four round trip times, it cuts its sending rate in half.") s
5 610 M
(          \("Two" changed to "four", for consistency with the rest) s
5 599 M
(          of the document.  Reported by Joerg Widmer\).) s
5 577 M
(       - "If the nofeedback timer expires when the sender does not) s
5 566 M
(         yet have an RTT sample, and has not yet received any) s
5 555 M
(         feedback from the receiver, or when p == 0,...") s
5 544 M
(         \(Added "or when p == 0,", reported by Wim Heirman\).) s
5 522 M
(       - In Section 5.5, changed:) s
5 511 M
(           for \(i = 1 to n\) { DF_i = 1; }) s
5 500 M
(         to:) s
5 489 M
(           for \(i = 0 to n\) { DF_i = 1; }) s
5 478 M
(         Reported by Michele R.) s
5 456 M
(     * Changed RFC 3448 to correspond to the larger initial windows) s
5 445 M
(       specified in RFC 3390.  This includes the following:) s
5 423 M
(       - Incorporated Section 5.1 from [RFC4342], saying that) s
5 412 M
(         when reducing the sending rate after an idle period, don't) s
5 401 M
(         reduce the sending rate below the initial sending rate.) s
5 379 M
(       - Change for a datalimited sender:) s
5 368 M
(         When the sender has been datalimited, the sender doesn't) s
5 357 M
(         let the receive rate limit it to a sending rate less than) s
5 346 M
(         the initial rate.) s
5 324 M
(       - Small change to slow-start:) s
5 313 M
(         Changed so that for the first feedback packet received,) s
5 302 M
(         or for the first feedback packet received after an idle) s
5 291 M
(         period, the receive rate is not used to limit the) s
5 280 M
(         sending rate.  This is because the receiver might not yet) s
5 269 M
(         have seen an entire window of data.) s
5 247 M
(     * Clarified how the average loss interval is calculated when) s
5 236 M
(       the receiver has not yet seen eight loss intervals.) s
5 214 M
(     * Discussed more about estimating the average segment size:) s
5 192 M
(       - For initializing the loss history after the first loss event,) s
5 181 M
(         either the receiver knows the sender's value for s, or) s
5 170 M
(         the receiver uses the throughput equation for X_pps and does) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                     [Page 4]) s
_R
S
%%Page: (5) 5
%%BeginPageSetup
_S
24 24 translate
/pagenum 5 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(         not need to know an estimate for s.) s
5 665 M
(       - Added a discussion about estimating the average segment size) s
5 654 M
(         s in Section 4.1 on "Measuring the Segment Size".) s
5 632 M
(       - Changed "packet size" to "segment size".) s
5 610 M
(    END OF NOTE TO RFC EDITOR.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                     [Page 5]) s
_R
S
%%Page: (6) 6
%%BeginPageSetup
_S
24 24 translate
/pagenum 6 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) 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 applications that use a fixed segment size, and) s
5 313 M
(    vary their sending rate in packets per second in response to) s
5 302 M
(    congestion.  TFRC can also be used by applications that don't have a) s
5 291 M
(    fixed segment size, but where the segment size varies according to) s
5 280 M
(    the needs of the application \(e.g., video applications\).) s
5 258 M
(    Some applications \(e.g., some audio applications\) require a fixed) s
5 247 M
(    interval of time between packets and vary their segment size instead) s
5 236 M
(    of their packet rate in response to congestion.  The congestion) s
5 225 M
(    control mechanism in this document is not designed for those) s
5 214 M
(    applications; TFRC-SP \(Small-Packet TFRC\) is a variant of TFRC for) s
5 203 M
(    applications that have a fixed sending rate in packets per second) s
5 192 M
(    but either use small packets, or vary their packet size in response) s
5 181 M
(    to congestion.  TFRC-SP will be specified in a later document.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                         Section 1.  [Page 6]) s
_R
S
%%Page: (7) 7
%%BeginPageSetup
_S
24 24 translate
/pagenum 7 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    This document specifies TFRC as a receiver-based mechanism, with the) s
5 676 M
(    calculation of the congestion control information \(i.e., the loss) s
5 665 M
(    event rate\) in the data receiver rather in the data sender.  This is) s
5 654 M
(    well-suited to an application where the sender is a large server) s
5 643 M
(    handling many concurrent connections, and the receiver has more) s
5 632 M
(    memory and CPU cycles available for computation.  In addition, a) s
5 621 M
(    receiver-based mechanism is more suitable as a building block for) s
5 610 M
(    multicast congestion control.  However, it is also possible to) s
5 599 M
(    implement TFRC in sender-based variants, as allowed in DCCP's) s
5 588 M
(    Congestion Control ID 3 \(CCID 3\) [RFC4342].) s
5 566 M
(2.  Conventions) s
5 544 M
(    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",) s
5 533 M
(    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this) s
5 522 M
(    document are to be interpreted as described in RFC 2119.) s
5 500 M
(3.  Protocol Mechanism) s
5 478 M
(    For its congestion control mechanism, TFRC directly uses a) s
5 467 M
(    throughput equation for the allowed sending rate as a function of) s
5 456 M
(    the loss event rate and round-trip time.  In order to compete fairly) s
5 445 M
(    with TCP, TFRC uses the TCP throughput equation, which roughly) s
5 434 M
(    describes TCP's sending rate as a function of the loss event rate,) s
5 423 M
(    round-trip time, and segment size.  We define a loss event as one or) s
5 412 M
(    more lost or marked packets from a window of data, where a marked) s
5 401 M
(    packet refers to a congestion indication from Explicit Congestion) s
5 390 M
(    Notification \(ECN\) [RFC3168].) s
5 368 M
(    Generally speaking, TFRC's congestion control mechanism works as) s
5 357 M
(    follows:) s
5 335 M
(    o   The receiver measures the loss event rate and feeds this) s
5 324 M
(        information back to the sender.) s
5 302 M
(    o   The sender also uses these feedback messages to measure the) s
5 291 M
(        round-trip time \(RTT\).) s
5 269 M
(    o   The loss event rate and RTT are then fed into TFRC's throughput) s
5 258 M
(        equation, giving the acceptable transmit rate.) s
5 236 M
(    o   The sender then adjusts its transmit rate to match the) s
5 225 M
(        calculated rate.) s
5 203 M
(    The dynamics of TFRC are sensitive to how the measurements are) s
5 192 M
(    performed and applied.  We recommend specific mechanisms below to) s
5 181 M
(    perform and apply these measurements.  Other mechanisms are) s
5 170 M
(    possible, but it is important to understand how the interactions) s
5 126 M
(Handley/Floyd/Padhye/Widmer                         Section 3.  [Page 7]) s
_R
S
%%Page: (8) 8
%%BeginPageSetup
_S
24 24 translate
/pagenum 8 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    between mechanisms affect the dynamics of TFRC.) s
5 665 M
(3.1.  TCP Throughput Equation) s
5 643 M
(    Any realistic equation giving TCP throughput as a function of loss) s
5 632 M
(    event rate and RTT should be suitable for use in TFRC.  However, we) s
5 621 M
(    note that the TCP throughput equation used must reflect TCP's) s
5 610 M
(    retransmit timeout behavior, as this dominates TCP throughput at) s
5 599 M
(    higher loss rates.  We also note that the assumptions implicit in) s
5 588 M
(    the throughput equation about the loss event rate parameter have to) s
5 577 M
(    be a reasonable match to how the loss rate or loss event rate is) s
5 566 M
(    actually measured.  While this match is not perfect for the) s
5 555 M
(    throughput equation and loss rate measurement mechanisms given) s
5 544 M
(    below, in practice the assumptions turn out to be close enough.) s
5 522 M
(    The throughput equation we currently recommend for TFRC is a) s
5 511 M
(    slightly simplified version of the throughput equation for Reno TCP) s
5 500 M
(    from [PFTK98]. Ideally we'd prefer a throughput equation based on) s
5 489 M
(    SACK TCP, but no one has yet derived the throughput equation for) s
5 478 M
(    SACK TCP, and from both simulations and experiments, the differences) s
5 467 M
(    between the two equations are relatively minor.) s
5 445 M
(    The throughput equation is:) s
5 412 M
(                                       s) s
5 401 M
(         X =  ----------------------------------------------------------) s
5 390 M
(              R*sqrt\(2*b*p/3\) + \(t_RTO * \(3*sqrt\(3*b*p/8\) * p * \(1+32*p^2\)\)\)) s
5 346 M
(    Where:) s
5 324 M
(        X is the transmit rate in bytes/second.) s
5 302 M
(        s is the segment size in bytes.) s
5 280 M
(        R is the round trip time in seconds.) s
5 258 M
(        p is the loss event rate, between 0 and 1.0, of the number of) s
5 247 M
(        loss events as a fraction of the number of packets transmitted.) s
5 225 M
(        t_RTO is the TCP retransmission timeout value in seconds.) s
5 203 M
(        b is the number of packets acknowledged by a single TCP) s
5 192 M
(        acknowledgement.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                       Section 3.1.  [Page 8]) s
_R
S
%%Page: (9) 9
%%BeginPageSetup
_S
24 24 translate
/pagenum 9 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    We further simplify this by setting t_RTO = 4*R.  A more accurate) s
5 676 M
(    calculation of t_RTO is possible, but experiments with the current) s
5 665 M
(    setting have resulted in reasonable fairness with existing TCP) s
5 654 M
(    implementations [W00]. Another possibility would be to set t_RTO =) s
5 643 M
(    max\(4R, one second\), to match the recommended minimum of one second) s
5 632 M
(    on the RTO [RFC2988].) s
5 610 M
(    Many current TCP connections use delayed acknowledgements, sending) s
5 599 M
(    an acknowledgement for every two data packets received, and thus) s
5 588 M
(    have a sending rate modeled by b = 2.  However, TCP is also allowed) s
5 577 M
(    to send an acknowledgement for every data packet, and this would be) s
5 566 M
(    modeled by b = 1.  Because many TCP implementations do not use) s
5 555 M
(    delayed acknowledgements, we recommend b = 1.) s
5 533 M
(    In future, different TCP equations may be substituted for this) s
5 522 M
(    equation.  The requirement is that the throughput equation be a) s
5 511 M
(    reasonable approximation of the sending rate of TCP for conformant) s
5 500 M
(    TCP congestion control.) s
5 478 M
(    The throughput equation can also be expressed as) s
5 445 M
(         X =  X_pps * s ,) s
5 423 M
(     with X_pps, the sending rate in packets per second, given as) s
5 390 M
(                                      1) s
5 379 M
(    X_pps =  --------------------------------------------------------) s
5 368 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 all data rates are measured) s
5 269 M
(    in bytes/second.) 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
(Handley/Floyd/Padhye/Widmer                       Section 3.2.  [Page 9]) s
_R
S
%%Page: (10) 10
%%BeginPageSetup
_S
24 24 translate
/pagenum 10 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) 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 522 M
(        This timestamp is used by the receiver to determine which losses) s
5 511 M
(        belong to the same loss event.  The timestamp is also echoed by) s
5 500 M
(        the receiver to enable the sender to estimate the round-trip) s
5 489 M
(        time, for senders that do not save timestamps of transmitted) s
5 478 M
(        data packets.) s
5 467 M
(        We note that as an alternative to a timestamp incremented in) s
5 456 M
(        milliseconds, a "timestamp" that increments every quarter of a) s
5 445 M
(        round-trip time would be sufficient for determining when losses) s
5 434 M
(        belong to the same loss event, in the context of a protocol) s
5 423 M
(        where this is understood by both sender and receiver, and where) s
5 412 M
(        the sender saves the timestamps of transmitted data packets.) s
5 390 M
(    o   The sender's current estimate of the round trip time. The) s
5 379 M
(        estimate reported in packet i is denoted by R_i.  The round-trip) s
5 368 M
(        time estimate is used by the receiver, along with the timestamp,) s
5 357 M
(        to determine when multiple losses belong to the same loss event.) s
5 346 M
(        If the sender sends a coarse-grained "timestamp" that increments) s
5 335 M
(        every quarter of a round-trip time, as discussed above, then the) s
5 324 M
(        sender does not need to send its current estimate of the round) s
5 313 M
(        trip time.) s
5 269 M
(3.2.2.  Feedback Packets) s
5 247 M
(    Each feedback packet sent by the data receiver contains the) s
5 236 M
(    following information:) s
5 214 M
(    o   The timestamp of the last data packet received. We denote this) s
5 203 M
(        by t_recvdata.  If the last packet received at the receiver has) s
5 192 M
(        sequence number i, then t_recvdata = ts_i.) s
5 181 M
(        This timestamp is used by the sender to estimate the round-trip) s
5 170 M
(        time, and is only needed if the sender does not save timestamps) s
5 126 M
(Handley/Floyd/Padhye/Widmer                    Section 3.2.2.  [Page 10]) s
_R
S
%%Page: (11) 11
%%BeginPageSetup
_S
24 24 translate
/pagenum 11 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(        of transmitted data packets.) s
5 665 M
(    o   The amount of time elapsed between the receipt of the last data) s
5 654 M
(        packet at the receiver, and the generation of this feedback) s
5 643 M
(        report. We denote this by t_delay.) s
5 621 M
(    o   The rate at which the receiver estimates that data was received) s
5 610 M
(        since the last feedback report was sent. We denote this by) s
5 599 M
(        X_recv.) s
5 577 M
(    o   The receiver's current estimate of the loss event rate, p.) s
5 544 M
(4.  Data Sender Protocol) s
5 522 M
(    The data sender sends a stream of data packets to the data receiver) s
5 511 M
(    at a controlled rate. When a feedback packet is received from the) s
5 500 M
(    data receiver, the data sender changes its sending rate, based on) s
5 489 M
(    the information contained in the feedback report. If the sender does) s
5 478 M
(    not receive a feedback report for four round trip times, it cuts its) s
5 467 M
(    sending rate in half.  This is achieved by means of a timer called) s
5 456 M
(    the nofeedback timer.) s
5 434 M
(    We specify the sender-side protocol in the following steps:) s
5 412 M
(    o   Measurement of the mean segment size being sent.) s
5 390 M
(    o   The sender behavior when a feedback packet is received.) s
5 368 M
(    o   The sender behavior when the nofeedback timer expires.) s
5 346 M
(    o   Oscillation prevention \(optional\)) s
5 324 M
(    o   Scheduling of transmission on non-realtime operating systems.) s
5 291 M
(4.1.  Measuring the Segment Size) s
5 269 M
(    The parameter s \(segment size\) is normally known to an application.) s
5 258 M
(    This may not be so in two cases:) s
5 236 M
(    o   \(1\) The segment size naturally varies depending on the data.  In) s
5 225 M
(        this case, although the segment size varies, that variation is) s
5 214 M
(        not coupled to the transmit rate.  The TFRC sender can either) s
5 203 M
(        compute the average segment size or use the maximum segment size) s
5 192 M
(        for the segment size s.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.1.  [Page 11]) s
_R
S
%%Page: (12) 12
%%BeginPageSetup
_S
24 24 translate
/pagenum 12 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    o   \(2\) The application needs to change the segment size rather than) s
5 676 M
(        the number of segments per second to perform congestion control.) s
5 665 M
(        This would normally be the case with packet audio applications) s
5 654 M
(        where a fixed interval of time needs to be represented by each) s
5 643 M
(        packet.  Such applications need to have a completely different) s
5 632 M
(        way of measuring parameters.) s
5 610 M
(    For the first class of applications where the segment size varies) s
5 599 M
(    depending on the data, the sender MAY estimate the segment size s as) s
5 588 M
(    the average segment size over the last four loss intervals.  The) s
5 577 M
(    sender MAY also estimate the average segment size over longer time) s
5 566 M
(    intervals, if so desired.  The TFRC sender uses the segment size s) s
5 555 M
(    in the throughput equation, in the setting of the maximum receive) s
5 544 M
(    rate and the minimum sending rate, and in the setting of the) s
5 533 M
(    nofeedback timer.) s
5 511 M
(    The TFRC receiver may use the average segment size s in initializing) s
5 500 M
(    the loss history after the first loss event, but Section 6.3.1 also) s
5 489 M
(    gives an alternate procedure that does not use the average segment) s
5 478 M
(    size s.) s
5 456 M
(    The second class of applications are discussed separately in a) s
5 445 M
(    separate document on TFRC-SP.  For the remainder of this section we) s
5 434 M
(    assume the sender can estimate the segment size, and that congestion) s
5 423 M
(    control is performed by adjusting the number of packets sent per) s
5 412 M
(    second.) s
5 379 M
(4.2.  Sender Initialization) s
5 357 M
(    The initial values for X and tld are undefined until they are set as) s
5 346 M
(    described below.  If the sender is ready to send data when it does) s
5 335 M
(    not yet have a round trip sample, the value of X is set to 1) s
5 324 M
(    packet/second, the nofeedback timer is set to expire after 2) s
5 313 M
(    seconds, and the tld, the Time Last Doubled during slow-start, is) s
5 302 M
(    set to -1.  Upon receiving a round trip time measurement \(e.g.,) s
5 291 M
(    after the first feedback packet\), tld is set to the current time,) s
5 280 M
(    and the transmit rate X is set to W_init/R, for W_init below from) s
5 269 M
(    [RFC3390]:) s
5 236 M
(         W_init = min\(4*MSS, max\(2*MSS, 4380\)\),) s
5 214 M
(     for MSS the Maximum Segment Size.  For responding to the initial) s
5 203 M
(    feedback packet, this replaces step \(4\) of Section 4.3 below.) s
5 181 M
(    If the sender does have a round trip sample when it is ready to) s
5 170 M
(    first send data \(e.g., from the SYN exchange or from a previous) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.2.  [Page 12]) s
_R
S
%%Page: (13) 13
%%BeginPageSetup
_S
24 24 translate
/pagenum 13 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    connection [RFC2140]\), the initial transmit rate X is set to) s
5 676 M
(    W_init/R, and tld is set to the current time.) s
5 654 M
(4.3.  Sender behavior when a feedback packet is received) s
5 632 M
(    The sender knows its current sending rate, X, and maintains an) s
5 621 M
(    estimate of the current round trip time, R, and an estimate of the) s
5 610 M
(    timeout interval, t_RTO.) s
5 588 M
(    When a feedback packet is received by the sender at time t_now, the) s
5 577 M
(    following actions should be performed:) s
5 544 M
(    1\)  Calculate a new round trip sample.) s
5 533 M
(        R_sample = \(t_now - t_recvdata\) - t_delay.) s
5 511 M
(    2\)  Update the round trip time estimate:) s
5 489 M
(             If no feedback has been received before) s
5 478 M
(                 R = R_sample;) s
5 467 M
(             Else) s
5 456 M
(                 R = q*R + \(1-q\)*R_sample;) s
5 434 M
(        TFRC is not sensitive to the precise value for the filter) s
5 423 M
(        constant q, but we recommend a default value of 0.9.) s
5 401 M
(    3\)  Update the timeout interval:) s
5 379 M
(             t_RTO = 4*R.) s
5 346 M
(    4\)  Update the sending rate as follows:) s
5 324 M
(             If \(sender has been idle or data-limited\)) s
5 313 M
(                 min_rate = max\(2*X_recv, W_init/R\);) s
5 302 M
(             Else) s
5 291 M
(                 min_rate = 2*X_recv;) s
5 280 M
(             If \(p > 0\)) s
5 269 M
(                 Calculate X_calc using the TCP throughput equation.) s
5 258 M
(                 X = max\(min\(X_calc, min_rate\), s/t_mbi\);) s
5 247 M
(             Else if \(not the first feedback packet, and) s
5 236 M
(               not the first feedback packet after a nofeedback timer\)) s
5 225 M
(                 If \(t_now - tld >= R\)) s
5 214 M
(                     X = max\(min\(2*X, min_rate\), s/R\);) s
5 203 M
(                     tld = t_now;) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.3.  [Page 13]) s
_R
S
%%Page: (14) 14
%%BeginPageSetup
_S
24 24 translate
/pagenum 14 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The condition ``if \(sender has been idle or data-limited\)'' prevents) s
5 676 M
(    an idle or data-limited sender from having to reduce the sending) s
5 665 M
(    rate to less than the initial sending rate as a result of) s
5 654 M
(    limitations from a small receive rate.  The condition ``if \(not the) s
5 643 M
(    first feedback packet, and not the first feedback packet after a) s
5 632 M
(    nofeedback timer\)'' prevents a sender from reducing the sending rate) s
5 621 M
(    in response to a feedback packet that reports the receipt of only a) s
5 610 M
(    few packets after start-up or after an idle period.) s
5 588 M
(    Note that if p == 0, then the sender is in slow-start phase, where) s
5 577 M
(    it approximately doubles the sending rate each round-trip time until) s
5 566 M
(    a loss occurs. The s/R term gives a minimum sending rate during) s
5 555 M
(    slow-start of one packet per RTT.  The parameter t_mbi is 64) s
5 544 M
(    seconds, and represents the maximum inter-packet backoff interval in) s
5 533 M
(    the persistent absence of feedback.  Thus, when p > 0 the sender) s
5 522 M
(    sends at least one packet every 64 seconds.) s
5 500 M
(    5\)  Reset the nofeedback timer to expire after max\(4*R, 2*s/X\)) s
5 489 M
(        seconds.) s
5 467 M
(4.4.  Expiration of nofeedback timer) s
5 445 M
(    If the nofeedback timer expires, the sender should perform the) s
5 434 M
(    following actions:) s
5 412 M
(    1\)  Cut the sending rate in half.  If the sender has received) s
5 401 M
(        feedback from the receiver, this is done by modifying the) s
5 390 M
(        sender's cached copy of X_recv \(the receive rate\).  Because the) s
5 379 M
(        sending rate is limited to at most twice X_recv, modifying) s
5 368 M
(        X_recv limits the current sending rate, but allows the sender to) s
5 357 M
(        slow-start, doubling its sending rate each RTT, if feedback) s
5 346 M
(        messages resume reporting no losses.) s
5 324 M
(            If \(X_calc > 2*X_recv\)) s
5 313 M
(                X_recv = max\(X_recv/2, s/\(2*t_mbi\)\);) s
5 302 M
(            Else) s
5 291 M
(                X_recv = X_calc/4;) s
5 258 M
(        The term s/\(2*t_mbi\) limits the backoff to one packet every 64) s
5 247 M
(        seconds in the case of persistent absence of feedback.) s
5 214 M
(    2\)  The value of X must then be recalculated as described under) s
5 203 M
(        point \(4\) above.) s
5 181 M
(        If the nofeedback timer expires when the sender does not yet) s
5 170 M
(        have an RTT sample and has not yet received any feedback from) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.4.  [Page 14]) s
_R
S
%%Page: (15) 15
%%BeginPageSetup
_S
24 24 translate
/pagenum 15 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(        the receiver, or when p == 0, then step \(1\) can be skipped, and) s
5 676 M
(        the sending rate cut in half directly:) s
5 654 M
(               X = max\(X/2, s/t_mbi\)) s
5 610 M
(    3\)  Restart the nofeedback timer to expire after max\(4*R, 2*s/X\)) s
5 599 M
(        seconds.) s
5 577 M
(    Note that when the sender stops sending, the receiver will stop) s
5 566 M
(    sending feedback.  This will cause the nofeedback timer to start to) s
5 555 M
(    expire and decrease X_recv.  If the sender subsequently starts to) s
5 544 M
(    send again, X_recv will limit the transmit rate, and a normal) s
5 533 M
(    slowstart phase will occur until the transmit rate reaches X_calc.) s
5 511 M
(4.5.  Sending a packet after an idle period) s
5 489 M
(    If the sender has been idle \(unable to send because there is no data) s
5 478 M
(    from the application\), the allowed sending rate could have been) s
5 467 M
(    reduced due to the nofeedback timer, as specified in the section) s
5 456 M
(    above.  Because the sender is always restricted to sending at most) s
5 445 M
(    twice the receive rate reported by the receiver, the sender will be) s
5 434 M
(    limited to at most doubling its sending rate each round-trip time,) s
5 423 M
(    until the sending rate reaches the allowed sending rate calculated) s
5 412 M
(    by the throughput equation.) s
5 390 M
(4.6.  Preventing Oscillations) s
5 357 M
(    To prevent oscillatory behavior in environments with a low degree of) s
5 346 M
(    statistical multiplexing it is useful to modify sender's transmit) s
5 335 M
(    rate to provide congestion avoidance behavior by reducing the) s
5 324 M
(    transmit rate as the queuing delay \(and hence RTT\) increases.  To do) s
5 313 M
(    this the sender maintains an estimate of the long-term RTT and) s
5 302 M
(    modifies its sending rate depending on how the most recent sample of) s
5 291 M
(    the RTT differs from this value.  The long-term sample is R_sqmean,) s
5 280 M
(    and is set as follows:) s
5 258 M
(         If no feedback has been received before) s
5 247 M
(             R_sqmean = sqrt\(R_sample\);) s
5 236 M
(         Else) s
5 225 M
(             R_sqmean = q2*R_sqmean + \(1-q2\)*sqrt\(R_sample\);) s
5 203 M
(    Thus R_sqmean gives the exponentially weighted moving average of the) s
5 192 M
(    square root of the RTT samples.  The constant q2 should be set) s
5 181 M
(    similarly to q, and we recommend a value of 0.9 as the default.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.6.  [Page 15]) s
_R
S
%%Page: (16) 16
%%BeginPageSetup
_S
24 24 translate
/pagenum 16 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The sender obtains the base transmit rate, X, from the throughput) s
5 676 M
(    function.  It then calculates a modified instantaneous transmit rate) s
5 665 M
(    X_inst, as follows:) s
5 643 M
(         X_inst = X * R_sqmean / sqrt\(R_sample\);) s
5 610 M
(    When sqrt\(R_sample\) is greater than R_sqmean then the queue is) s
5 599 M
(    typically increasing and so the transmit rate needs to be decreased) s
5 588 M
(    for stable operation.) s
5 566 M
(    Note: This modification is not always strictly required, especially) s
5 555 M
(    if the degree of statistical multiplexing in the network is high.) s
5 544 M
(    However, we recommend that it is done because it does make TFRC) s
5 533 M
(    behave better in environments with a low level of statistical) s
5 522 M
(    multiplexing.  If it is not done, we recommend using a very low) s
5 511 M
(    value of q, such that q is close to or exactly zero.) s
5 489 M
(4.7.  Scheduling of Packet Transmissions) s
5 467 M
(    As TFRC is rate-based, and as operating systems typically cannot) s
5 456 M
(    schedule events precisely, it is necessary to be opportunistic about) s
5 445 M
(    sending data packets so that the correct average rate is maintained) s
5 434 M
(    despite the course-grain or irregular scheduling of the operating) s
5 423 M
(    system.  Thus a typical sending loop will calculate the correct) s
5 412 M
(    inter-packet interval, t_ipi, as follows:) s
5 390 M
(         t_ipi = s/X_inst;) s
5 368 M
(    When a sender first starts sending at time t_0, it calculates t_ipi,) s
5 357 M
(    and calculates a nominal send time t_1 = t_0 + t_ipi for packet 1.) s
5 346 M
(    When the application becomes idle, it checks the current time,) s
5 335 M
(    t_now, and then requests re-scheduling after \(t_ipi - \(t_now - t_0\)\)) s
5 324 M
(    seconds.  When the application is re-scheduled, it checks the) s
5 313 M
(    current time, t_now, again. If \(t_now > t_1 - delta\) then packet 1) s
5 302 M
(    is sent.) s
5 280 M
(    Now a new t_ipi may be calculated, and used to calculate a nominal) s
5 269 M
(    send time t_2 for packet 2: t2 = t_1 + t_ipi.  The process then) s
5 258 M
(    repeats, with each successive packet's send time being calculated) s
5 247 M
(    from the nominal send time of the previous packet.) s
5 225 M
(    In some cases, when the nominal send time, t_i, of the next packet) s
5 214 M
(    is calculated, it may already be the case that t_now > t_i - delta.) s
5 203 M
(    In such a case the packet should be sent immediately.  Thus if the) s
5 192 M
(    operating system has coarse timer granularity and the transmit rate) s
5 181 M
(    is high, then TFRC may send short bursts of several packets) s
5 170 M
(    separated by intervals of the OS timer granularity.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 4.7.  [Page 16]) s
_R
S
%%Page: (17) 17
%%BeginPageSetup
_S
24 24 translate
/pagenum 17 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The parameter delta is to allow a degree of flexibility in the send) s
5 676 M
(    time of a packet.  If the operating system has a scheduling timer) s
5 665 M
(    granularity of t_gran seconds, then delta would typically be set to:) s
5 643 M
(         delta = min\(t_ipi/2, t_gran/2\);) s
5 621 M
(    t_gran is 10ms on many Unix systems.  If t_gran is not known, a) s
5 610 M
(    value of 10ms can be safely assumed.) s
5 588 M
(5.  Calculation of the Loss Event Rate \(p\)) s
5 566 M
(    Obtaining an accurate and stable measurement of the loss event rate) s
5 555 M
(    is of primary importance for TFRC. Loss rate measurement is) s
5 544 M
(    performed at the receiver, based on the detection of lost or marked) s
5 533 M
(    packets from the sequence numbers of arriving packets. We describe) s
5 522 M
(    this process before describing the rest of the receiver protocol.) s
5 500 M
(5.1.  Detection of Lost or Marked Packets) s
5 478 M
(    TFRC assumes that all packets contain a sequence number that is) s
5 467 M
(    incremented by one for each packet that is sent.  For the purposes) s
5 456 M
(    of this specification, we require that if a lost packet is) s
5 445 M
(    retransmitted, the retransmission is given a new sequence number) s
5 434 M
(    that is the latest in the transmission sequence, and not the same) s
5 423 M
(    sequence number as the packet that was lost.  If a transport) s
5 412 M
(    protocol has the requirement that it must retransmit with the) s
5 401 M
(    original sequence number, then the transport protocol designer must) s
5 390 M
(    figure out how to distinguish delayed from retransmitted packets and) s
5 379 M
(    how to detect lost retransmissions.) s
5 357 M
(    The receiver maintains a data structure that keeps track of which) s
5 346 M
(    packets have arrived and which are missing.  For the purposes of) s
5 335 M
(    specification, we assume that the data structure consists of a list) s
5 324 M
(    of packets that have arrived along with the receiver timestamp when) s
5 313 M
(    each packet was received.  In practice this data structure will) s
5 302 M
(    normally be stored in a more compact representation, but this is) s
5 291 M
(    implementation-specific.) s
5 269 M
(    The loss of a packet is detected by the arrival of at least NDUPACK) s
5 258 M
(    packets with a higher sequence number than the lost packet, for) s
5 247 M
(    NDUPACK set to 3.  The requirement for NDUPACK subsequent packets is) s
5 236 M
(    the same as with TCP, and is to make TFRC more robust in the) s
5 225 M
(    presence of reordering.  In contrast to TCP, if a packet arrives) s
5 214 M
(    late \(after NDUPACK subsequent packets arrived\) in TFRC, the late) s
5 203 M
(    packet can fill the hole in TFRC's reception record, and the) s
5 192 M
(    receiver can recalculate the loss event rate.  Future versions of) s
5 181 M
(    TFRC might make the requirement for NDUPACK subsequent packets) s
5 170 M
(    adaptive based on experienced packet reordering, but we do not) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.1.  [Page 17]) s
_R
S
%%Page: (18) 18
%%BeginPageSetup
_S
24 24 translate
/pagenum 18 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    specify such a mechanism here.) s
5 665 M
(    For an ECN-capable connection, a marked packet is detected as a) s
5 654 M
(    congestion event as soon as it arrives, without having to wait for) s
5 643 M
(    the arrival of subsequent packets.) s
5 610 M
(5.2.  Translation from Loss History to Loss Events) s
5 588 M
(    TFRC requires that the loss fraction be robust to several) s
5 577 M
(    consecutive packets lost where those packets are part of the same) s
5 566 M
(    loss event.  This is similar to TCP, which \(typically\) only performs) s
5 555 M
(    one halving of the congestion window during any single RTT.  Thus) s
5 544 M
(    the receiver needs to map the packet loss history into a loss event) s
5 533 M
(    record, where a loss event is one or more packets lost in an RTT.) s
5 522 M
(    To perform this mapping, the receiver needs to know the RTT to use,) s
5 511 M
(    and this is supplied periodically by the sender, typically as) s
5 500 M
(    control information piggy-backed onto a data packet.  TFRC is not) s
5 489 M
(    sensitive to how the RTT measurement sent to the receiver is made,) s
5 478 M
(    but we recommend using the sender's calculated RTT, R, \(see Section) s
5 467 M
(    4.3\) for this purpose.) s
5 445 M
(    To determine whether a lost or marked packet should start a new loss) s
5 434 M
(    event, or be counted as part of an existing loss event, we need to) s
5 423 M
(    compare the sequence numbers and timestamps of the packets that) s
5 412 M
(    arrived at the receiver.  For a marked packet S_new, its reception) s
5 401 M
(    time T_new can be noted directly.  For a lost packet, we can) s
5 390 M
(    interpolate to infer the nominal "arrival time".  Assume:) s
5 368 M
(        S_loss is the sequence number of a lost packet.) s
5 346 M
(        S_before is the sequence number of the last packet to arrive) s
5 335 M
(        with sequence number before S_loss.) s
5 313 M
(        S_after is the sequence number of the first packet to arrive) s
5 302 M
(        with sequence number after S_loss.) s
5 280 M
(        T_before is the reception time of S_before.) s
5 258 M
(        T_after is the reception time of S_after.) s
5 236 M
(    Note that T_before can either be before or after T_after due to) s
5 225 M
(    reordering.) s
5 203 M
(    For a lost packet S_loss, we can interpolate its nominal "arrival) s
5 192 M
(    time" at the receiver from the arrival times of S_before and) s
5 181 M
(    S_after. Thus:) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.2.  [Page 18]) s
_R
S
%%Page: (19) 19
%%BeginPageSetup
_S
24 24 translate
/pagenum 19 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(         T_loss = T_before + \( \(T_after - T_before\)) s
5 676 M
(                     * \(S_loss - S_before\)/\(S_after - S_before\) \);) s
5 643 M
(    Note that if the sequence space wrapped between S_before and) s
5 632 M
(    S_after, then the sequence numbers must be modified to take this) s
5 621 M
(    into account before performing this calculation.  If the largest) s
5 610 M
(    possible sequence number is S_max, and S_before > S_after, then) s
5 599 M
(    modifying each sequence number S by S' = \(S + \(S_max + 1\)/2\) mod) s
5 588 M
(    \(S_max + 1\) would normally be sufficient.) s
5 566 M
(    If the lost packet S_old was determined to have started the previous) s
5 555 M
(    loss event, and we have just determined that S_new has been lost,) s
5 544 M
(    then we interpolate the nominal arrival times of S_old and S_new,) s
5 533 M
(    called T_old and T_new respectively.) s
5 511 M
(    If T_old + R >= T_new, then S_new is part of the existing loss) s
5 500 M
(    event. Otherwise S_new is the first packet in a new loss event.) s
5 467 M
(5.3.  Inter-loss Event Interval) s
5 445 M
(    If a loss interval, A, is determined to have started with packet) s
5 434 M
(    sequence number S_A and the next loss interval, B, started with) s
5 423 M
(    packet sequence number S_B, then the number of packets in loss) s
5 412 M
(    interval A is given by \(S_B - S_A\).) s
5 368 M
(5.4.  Average Loss Interval) s
5 346 M
(    To calculate the loss event rate p, we first calculate the average) s
5 335 M
(    loss interval.  This is done using a filter that weights the n most) s
5 324 M
(    recent loss event intervals in such a way that the measured loss) s
5 313 M
(    event rate changes smoothly.) s
5 291 M
(    Weights w_0 to w_\(n-1\) are calculated as:) s
5 269 M
(         If \(i < n/2\)) s
5 258 M
(            w_i = 1;) s
5 247 M
(         Else) s
5 236 M
(            w_i = 1 - \(i - \(n/2 - 1\)\)/\(n/2 + 1\);) s
5 203 M
(    Thus if n=8, the values of w_0 to w_7 are:) s
5 181 M
(        1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.4.  [Page 19]) s
_R
S
%%Page: (20) 20
%%BeginPageSetup
_S
24 24 translate
/pagenum 20 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The value n for the number of loss intervals used in calculating the) s
5 676 M
(    loss event rate determines TFRC's speed in responding to changes in) s
5 665 M
(    the level of congestion.  As currently specified, TFRC should not be) s
5 654 M
(    used for values of n significantly greater than 8, for traffic that) s
5 643 M
(    might compete in the global Internet with TCP.  At the very least,) s
5 632 M
(    safe operation with values of n greater than 8 would require a) s
5 621 M
(    slight change to TFRC's mechanisms to include a more severe response) s
5 610 M
(    to two or more round-trip times with heavy packet loss.) s
5 588 M
(    When calculating the average loss interval we need to decide whether) s
5 577 M
(    to include the interval since the most recent packet loss event.  We) s
5 566 M
(    only do this if it is sufficiently large to increase the average) s
5 555 M
(    loss interval.) s
5 533 M
(    Let the most recent loss intervals be I_0 to I_k, where I_0 is the) s
5 522 M
(    interval since the most recent loss event.  If there have been at) s
5 511 M
(    least n loss intervals, then k is set to n; otherwise k is the) s
5 500 M
(    maximum number of loss intervals seen so far.  We calculate the) s
5 489 M
(    average loss interval I_mean is:) s
5 467 M
(         I_tot0 = 0;) s
5 456 M
(         I_tot1 = 0;) s
5 445 M
(         W_tot = 0;) s
5 434 M
(         for \(i = 0 to k-1\) {) s
5 423 M
(           I_tot0 = I_tot0 + \(I_i * w_i\);) s
5 412 M
(           W_tot = W_tot + w_i;) s
5 401 M
(         }) s
5 390 M
(         for \(i = 1 to k\) {) s
5 379 M
(           I_tot1 = I_tot1 + \(I_i * w_\(i-1\)\);) s
5 368 M
(         }) s
5 357 M
(         I_tot = max\(I_tot0, I_tot1\);) s
5 346 M
(         I_mean = I_tot/W_tot;) s
5 324 M
(    The loss event rate, p is simply:) s
5 302 M
(         p = 1 / I_mean;) s
5 269 M
(5.5.  History Discounting) s
5 247 M
(    As described in Section 5.4, the most recent loss interval is only) s
5 236 M
(    assigned 1/\(0.75*n\) of the total weight in calculating the average) s
5 225 M
(    loss interval, regardless of the size of the most recent loss) s
5 214 M
(    interval.  This section describes an optional history discounting) s
5 203 M
(    mechanism, discussed further in [FHPW00a] and [W00], that allows the) s
5 192 M
(    TFRC receiver to adjust the weights, concentrating more of the) s
5 181 M
(    relative weight on the most recent loss interval, when the most) s
5 170 M
(    recent loss interval is more than twice as large as the computed) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.5.  [Page 20]) s
_R
S
%%Page: (21) 21
%%BeginPageSetup
_S
24 24 translate
/pagenum 21 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    average loss interval.) s
5 665 M
(    To carry out history discounting, we associate a discount factor) s
5 654 M
(    DF_i with each loss interval L_i, for i > 0, where each discount) s
5 643 M
(    factor is a floating point number.  The discount array maintains the) s
5 632 M
(    cumulative history of discounting for each loss interval.  At the) s
5 621 M
(    beginning, the values of DF_i in the discount array are initialized) s
5 610 M
(    to 1:) s
5 588 M
(         for \(i = 0 to n\) {) s
5 577 M
(           DF_i = 1;) s
5 566 M
(         }) s
5 544 M
(    History discounting also uses a general discount factor DF, also a) s
5 533 M
(    floating point number, that is also initialized to 1.  First we show) s
5 522 M
(    how the discount factors are used in calculating the average loss) s
5 511 M
(    interval, and then we describe later in this section how the) s
5 500 M
(    discount factors are modified over time.) s
5 478 M
(    As described in Section 5.4 the average loss interval is calculated) s
5 467 M
(    using the n previous loss intervals I_1, ..., I_n, and the interval) s
5 456 M
(    I_0 that represents the number of packets received since the last) s
5 445 M
(    loss event.  The computation of the average loss interval using the) s
5 434 M
(    discount factors is a simple modification of the procedure in) s
5 423 M
(    Section 5.4, as follows:) s
5 401 M
(         I_tot0 = I_0 * w_0) s
5 390 M
(         I_tot1 = 0;) s
5 379 M
(         W_tot0 = w_0) s
5 368 M
(         W_tot1 = 0;) s
5 357 M
(         for \(i = 1 to n-1\) {) s
5 346 M
(           I_tot0 = I_tot0 + \(I_i * w_i * DF_i * DF\);) s
5 335 M
(           W_tot0 = W_tot0 + w_i * DF_i * DF;) s
5 324 M
(         }) s
5 313 M
(         for \(i = 1 to n\) {) s
5 302 M
(           I_tot1 = I_tot1 + \(I_i * w_\(i-1\) * DF_i\);) s
5 291 M
(           W_tot1 = W_tot1 + w_\(i-1\) * DF_i;) s
5 280 M
(         }) s
5 269 M
(         p = min\(W_tot0/I_tot0, W_tot1/I_tot1\);) s
5 247 M
(    The general discounting factor, DF is updated on every packet) s
5 236 M
(    arrival as follows. First, the receiver computes the weighted) s
5 225 M
(    average I_mean of the loss intervals I_1, ..., I_n:) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.5.  [Page 21]) s
_R
S
%%Page: (22) 22
%%BeginPageSetup
_S
24 24 translate
/pagenum 22 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(         I_tot = 0;) s
5 676 M
(         W_tot = 0;) s
5 665 M
(         for \(i = 1 to n\) {) s
5 654 M
(           W_tot = W_tot + w_\(i-1\) * DF_i;) s
5 643 M
(           I_tot = I_tot + \(I_i * w_\(i-1\) * DF_i\);) s
5 632 M
(         }) s
5 621 M
(         I_mean = I_tot / W_tot;) s
5 599 M
(    This weighted average I_mean is compared to I_0, the number of) s
5 588 M
(    packets received since the last loss event.  If I_0 is greater than) s
5 577 M
(    twice I_mean, then the new loss interval is considerably larger than) s
5 566 M
(    the old ones, and the general discount factor DF is updated to) s
5 555 M
(    decrease the relative weight on the older intervals, as follows:) s
5 522 M
(         if \(I_0 > 2 * I_mean\) {) s
5 511 M
(           DF = 2 * I_mean/I_0;) s
5 500 M
(           if \(DF < THRESHOLD\)) s
5 489 M
(             DF = THRESHOLD;) s
5 478 M
(         } else) s
5 467 M
(           DF = 1;) s
5 445 M
(    A nonzero value for THRESHOLD ensures that older loss intervals from) s
5 434 M
(    an earlier time of high congestion are not discounted entirely.  We) s
5 423 M
(    recommend a THRESHOLD of 0.5.  Note that with each new packet) s
5 412 M
(    arrival, I_0 will increase further, and the discount factor DF will) s
5 401 M
(    be updated.) s
5 379 M
(    When a new loss event occurs, the current interval shifts from I_0) s
5 368 M
(    to I_1, loss interval I_i shifts to interval I_\(i+1\), and the loss) s
5 357 M
(    interval I_n is forgotten.  The previous discount factor DF has to) s
5 346 M
(    be incorporated into the discount array.  Because DF_i carries the) s
5 335 M
(    discount factor associated with loss interval I_i, the DF_i array) s
5 324 M
(    has to be shifted as well. This is done as follows:) s
5 302 M
(         for \(i = 1 to n\) {) s
5 291 M
(           DF_i = DF * DF_i;) s
5 280 M
(         }) s
5 269 M
(         for \(i = n-1 to 0 step -1\) {) s
5 258 M
(           DF_\(i+1\) = DF_i;) s
5 247 M
(         }) s
5 236 M
(         I_0 = 1;) s
5 225 M
(         DF_0 = 1;) s
5 214 M
(         DF = 1;) s
5 181 M
(    This completes the description of the optional history discounting) s
5 170 M
(    mechanism. We emphasize that this is an optional mechanism whose) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 5.5.  [Page 22]) s
_R
S
%%Page: (23) 23
%%BeginPageSetup
_S
24 24 translate
/pagenum 23 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    sole purpose is to allow TFRC to response somewhat more quickly to) s
5 676 M
(    the sudden absence of congestion, as represented by a long current) s
5 665 M
(    loss interval.) s
5 632 M
(6.  Data Receiver Protocol) s
5 610 M
(    The receiver periodically sends feedback messages to the sender.) s
5 599 M
(    Feedback packets should normally be sent at least once per RTT,) s
5 588 M
(    unless the sender is sending at a rate of less than one packet per) s
5 577 M
(    RTT, in which case a feedback packet should be send for every data) s
5 566 M
(    packet received.  A feedback packet should also be sent whenever a) s
5 555 M
(    new loss event is detected without waiting for the end of an RTT,) s
5 544 M
(    and whenever an out-of-order data packet is received that removes a) s
5 533 M
(    loss event from the history.) s
5 511 M
(    If the sender is transmitting at a high rate \(many packets per RTT\)) s
5 500 M
(    there may be some advantages to sending periodic feedback messages) s
5 489 M
(    more than once per RTT as this allows faster response to changing) s
5 478 M
(    RTT measurements, and more resilience to feedback packet loss.) s
5 467 M
(    However, there is little gain from sending a large number of) s
5 456 M
(    feedback messages per RTT.) s
5 423 M
(6.1.  Receiver behavior when a data packet is received) s
5 401 M
(    When a data packet is received, the receiver performs the following) s
5 390 M
(    steps:) s
5 368 M
(    1\)  Add the packet to the packet history.) s
5 346 M
(    2\)  Let the previous value of p be p_prev.  Calculate the new value) s
5 335 M
(        of p as described in Section 5.) s
5 313 M
(    3\)  If p > p_prev, cause the feedback timer to expire, and perform) s
5 302 M
(        the actions described in Section 6.2) s
5 280 M
(        If p <= p_prev no action need be performed.) s
5 258 M
(        However an optimization might check to see if the arrival of the) s
5 247 M
(        packet caused a hole in the packet history to be filled and) s
5 236 M
(        consequently two loss intervals were merged into one.  If this) s
5 225 M
(        is the case, the receiver might also send feedback immediately.) s
5 214 M
(        The effects of such an optimization are normally expected to be) s
5 203 M
(        small.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 6.1.  [Page 23]) s
_R
S
%%Page: (24) 24
%%BeginPageSetup
_S
24 24 translate
/pagenum 24 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(6.2.  Expiration of feedback timer) s
5 665 M
(    When the feedback timer at the receiver expires, the action to be) s
5 654 M
(    taken depends on whether data packets have been received since the) s
5 643 M
(    last feedback was sent.) s
5 621 M
(    Let the maximum sequence number of a packet at the receiver so far) s
5 610 M
(    be S_m, and the value of the RTT measurement included in packet S_m) s
5 599 M
(    be R_m. If data packets have been received since the previous) s
5 588 M
(    feedback was sent, the receiver performs the following steps:) s
5 566 M
(    1\)  Calculate the average loss event rate using the algorithm) s
5 555 M
(        described above.) s
5 533 M
(    2\)  Calculate the measured receive rate, X_recv, based on the) s
5 522 M
(        packets received within the previous R_m seconds.) s
5 500 M
(    3\)  Prepare and send a feedback packet containing the information) s
5 489 M
(        described in Section 3.2.2) s
5 467 M
(    4\)  Restart the feedback timer to expire after R_m seconds.) s
5 445 M
(    If no data packets have been received since the last feedback was) s
5 434 M
(    sent, no feedback packet is sent, and the feedback timer is) s
5 423 M
(    restarted to expire after R_m seconds.) s
5 379 M
(6.3.  Receiver initialization) s
5 357 M
(    The receiver is initialized by the first packet that arrives at the) s
5 346 M
(    receiver. Let the sequence number of this packet be i.) s
5 324 M
(    When the first packet is received:) s
5 302 M
(    o   Set p=0) s
5 280 M
(    o   Set  X_recv = 0.) s
5 258 M
(    o   Prepare and send a feedback packet.) s
5 236 M
(    o   Set the feedback timer to expire after R_i seconds.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                      Section 6.3.  [Page 24]) s
_R
S
%%Page: (25) 25
%%BeginPageSetup
_S
24 24 translate
/pagenum 25 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(6.3.1.  Initializing the Loss History after the First Loss Event) s
5 665 M
(    The number of packets until the first loss can not be used to) s
5 654 M
(    compute the sending rate directly, as the sending rate changes) s
5 643 M
(    rapidly during this time.  TFRC assumes that the correct data rate) s
5 632 M
(    after the first loss is half of the sending rate when the loss) s
5 621 M
(    occurred.  TFRC approximates this target rate by X_recv, the receive) s
5 610 M
(    rate over the most recent round-trip time.  After the first loss,) s
5 599 M
(    instead of initializing the first loss interval to the number of) s
5 588 M
(    packets sent until the first loss, the TFRC receiver calculates the) s
5 577 M
(    loss interval that would be required to produce the data rate) s
5 566 M
(    X_recv, and uses this synthetic loss interval to seed the loss) s
5 555 M
(    history mechanism.) s
5 533 M
(    TFRC does this by finding some value p for which the throughput) s
5 522 M
(    equation in Section 3.1 gives a sending rate within 5% of X_recv,) s
5 511 M
(    given the round-trip time R, and the first loss interval is then set) s
5 500 M
(    to 1/p.  If the receiver knows the segment size s used by the) s
5 489 M
(    sender, then the receiver can use the throughput equation for X;) s
5 478 M
(    otherwise, the receiver can meaure the receive rate in packets per) s
5 467 M
(    second instead of bytes per second for this purpose, and use the) s
5 456 M
(    throughput equation for X_pps.  \(The 5% tolerance is introduced) s
5 445 M
(    simply because the throughput equation is difficult to invert, and) s
5 434 M
(    we want to reduce the costs of calculating p numerically.\)) s
5 401 M
(7.  Sender-based Variants) s
5 379 M
(    It would be possible to implement a sender-based variant of TFRC,) s
5 368 M
(    where the receiver uses reliable delivery to send information about) s
5 357 M
(    packet losses to the sender, and the sender computes the packet loss) s
5 346 M
(    rate and the acceptable transmit rate.  However, we do not specify) s
5 335 M
(    the details of a sender-based variant in this document.) s
5 313 M
(    The main advantages of a sender-based variant of TFRC would be that) s
5 302 M
(    the sender would not have to trust the receiver's calculation of the) s
5 291 M
(    packet loss rate.  However, with the requirement of reliable) s
5 280 M
(    delivery of loss information from the receiver to the sender, a) s
5 269 M
(    sender-based TFRC would have much tighter constraints on the) s
5 258 M
(    transport protocol in which it is embedded.) s
5 236 M
(    In contrast, the receiver-based variant of TFRC specified in this) s
5 225 M
(    document is robust to the loss of feedback packets, and therefore) s
5 214 M
(    does not require the reliable delivery of feedback packets.  It is) s
5 203 M
(    also better suited for applications such as streaming media from web) s
5 192 M
(    servers, where it is typically desirable to offload work from the) s
5 181 M
(    server to the client as much as possible.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                        Section 7.  [Page 25]) s
_R
S
%%Page: (26) 26
%%BeginPageSetup
_S
24 24 translate
/pagenum 26 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The sender-based and receiver-based variants also have different) s
5 676 M
(    properties in terms of upgrades.  For example, for changes in the) s
5 665 M
(    procedure for calculating the packet loss rate, the sender would) s
5 654 M
(    have to be upgraded in the sender-based variant, and the receiver) s
5 643 M
(    would have to be upgraded in the receiver-based variant.) s
5 610 M
(8.  Implementation Issues) s
5 588 M
(    This document has specified the TFRC congestion control mechanism,) s
5 577 M
(    for use by applications and transport protocols.  This section) s
5 566 M
(    mentions briefly some of the few implementation issues.) s
5 544 M
(    For t_RTO = 4*R and b = 1, the throughput equation in Section 3.1) s
5 533 M
(    can be expressed as follows:) s
5 500 M
(                 s) s
5 489 M
(         X =  --------) s
5 478 M
(              R * f\(p\)) s
5 456 M
(     for) s
5 423 M
(         f\(p\) =  sqrt\(2*p/3\) + \(12*sqrt\(3*p/8\) * p * \(1+32*p^2\)\).) s
5 401 M
(     A table lookup could be used for the function f\(p\).) s
5 379 M
(    Many of the multiplications \(e.g., q and 1-q for the round-trip time) s
5 368 M
(    average, a factor of 4 for the timeout interval\) are or could be by) s
5 357 M
(    powers of two, and therefore could be implemented as simple shift) s
5 346 M
(    operations.) s
5 324 M
(    We note that the optional sender mechanism for preventing) s
5 313 M
(    oscillations described in Section 4.6 uses a square-root) s
5 302 M
(    computation.) s
5 280 M
(    The calculation of the average loss interval in Section 5.4 involves) s
5 269 M
(    multiplications by the weights w_0 to w_\(n-1\), which for n=8 are:) s
5 247 M
(        1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2.) s
5 225 M
(    With a minor loss of smoothness, it would be possible to use weights) s
5 214 M
(    that were powers of two or sums of powers of two, e.g.,) s
5 192 M
(        1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.25.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                        Section 8.  [Page 26]) s
_R
S
%%Page: (27) 27
%%BeginPageSetup
_S
24 24 translate
/pagenum 27 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    The optional history discounting mechanism described in Section 5.5) s
5 676 M
(    is used in the calculation of the average loss rate.  The history) s
5 665 M
(    discounting mechanism is invoked only when there has been an) s
5 654 M
(    unusually long interval with no packet losses.  For a more efficient) s
5 643 M
(    operation, the discount factor DF_i could be restricted to be a) s
5 632 M
(    power of two.) s
5 599 M
(9.  Changes from RFC 3448) s
5 577 M
(    The changes from RFC 3448 are as follows:) s
5 555 M
(    o   Changes to the initial sending rate: In RFC 3448, the initial) s
5 544 M
(        sending rate was two packets per round trip time.  In this) s
5 533 M
(        document, the initial sending rate can be as high as four) s
5 522 M
(        packets per round trip time, following RFC 3390.) s
5 500 M
(        Following Section 5.1 from [RFC4342], this document also) s
5 489 M
(        specifies that when the sending rate is reduced after an idle) s
5 478 M
(        period, it is not reduced below the initial sending rate.  In) s
5 467 M
(        addition, when the sender has been data-limited and the sender) s
5 456 M
(        is reducing the allowed transmit rate to twice the receive) s
5 445 M
(        rate,, the sender doesn't reduce the allowed transmit rate to) s
5 434 M
(        less than the initial sending rate.) s
5 412 M
(        A larger initial sending rate is of little use if the receiver) s
5 401 M
(        sends a feedback packet after the first packet is received, and) s
5 390 M
(        the sender in response reduces the allowed sending rate to at) s
5 379 M
(        most twice the receive rate.  In the current document, the) s
5 368 M
(        sender does not reduce the allowed sending rate to at most twice) s
5 357 M
(        the receive rate in response to the first feedback packet.) s
5 335 M
(    o   RFC 3448 had contradictory text about whether the sender halved) s
5 324 M
(        its sending rate after *two* round-trip times without receiving) s
5 313 M
(        a feedback report, or after *four* round-trip times.  This) s
5 302 M
(        document clarifies that the sender halves its sending rate after) s
5 291 M
(        four round-trip times without receiving a feedback report) s
5 280 M
(        [RFC3448errata].) s
5 258 M
(    o   Section 4.4 was clarified to specify that on the expiration of) s
5 247 M
(        the nofeedback timer, if p = 0, step \(2\) applies instead of step) s
5 236 M
(        \(1\) [RFC3448errata].) s
5 214 M
(    o   A line in Section 5.5 was changed from ``for \(i = 1 to n\) { DF_i) s
5 203 M
(        = 1; }'' to ``for \(i = 0 to n\) { DF_i = 1; }'' [RFC3448errata].) s
5 181 M
(    o   Section 5.4 was modified to clarify the receiver's calculation) s
5 170 M
(        of the average loss interval when the receiver has not yet seen) s
5 126 M
(Handley/Floyd/Padhye/Widmer                        Section 9.  [Page 27]) s
_R
S
%%Page: (28) 28
%%BeginPageSetup
_S
24 24 translate
/pagenum 28 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(        eight loss intervals.) s
5 665 M
(    o   Section 4.1 was modified to give a specific algorithm that could) s
5 654 M
(        be used for estimating the average segment size.) s
5 632 M
(10.  Security Considerations) s
5 610 M
(    TFRC is not a transport protocol in its own right, but a congestion) s
5 599 M
(    control mechanism that is intended to be used in conjunction with a) s
5 588 M
(    transport protocol.  Therefore security primarily needs to be) s
5 577 M
(    considered in the context of a specific transport protocol and its) s
5 566 M
(    authentication mechanisms.) s
5 544 M
(    Congestion control mechanisms can potentially be exploited to create) s
5 533 M
(    denial of service.  This may occur through spoofed feedback.  Thus) s
5 522 M
(    any transport protocol that uses TFRC should take care to ensure) s
5 511 M
(    that feedback is only accepted from the receiver of the data.  The) s
5 500 M
(    precise mechanism to achieve this will however depend on the) s
5 489 M
(    transport protocol itself.) s
5 467 M
(    In addition, congestion control mechanisms may potentially be) s
5 456 M
(    manipulated by a greedy receiver that wishes to receive more than) s
5 445 M
(    its fair share of network bandwidth.  A receiver might do this by) s
5 434 M
(    claiming to have received packets that in fact were lost due to) s
5 423 M
(    congestion.  Possible defenses against such a receiver would) s
5 412 M
(    normally include some form of nonce that the receiver must feed back) s
5 401 M
(    to the sender to prove receipt.  However, the details of such a) s
5 390 M
(    nonce would depend on the transport protocol, and in particular on) s
5 379 M
(    whether the transport protocol is reliable or unreliable.) s
5 357 M
(    We expect that protocols incorporating ECN with TFRC will also want) s
5 346 M
(    to incorporate feedback from the receiver to the sender using the) s
5 335 M
(    ECN nonce [RFC3540].   The ECN nonce is a modification to ECN that) s
5 324 M
(    protects the sender from the accidental or malicious concealment of) s
5 313 M
(    marked packets.  Again, the details of such a nonce would depend on) s
5 302 M
(    the transport protocol, and are not addressed in this document.) s
5 269 M
(11.  IANA Considerations) s
5 247 M
(    There are no IANA actions required for this document.) s
5 214 M
(12.  Acknowledgments) s
5 192 M
(    We would like to acknowledge feedback and discussions on equation-) s
5 181 M
(    based congestion control with a wide range of people, including) s
5 170 M
(    members of the Reliable Multicast Research Group, the Reliable) s
5 126 M
(Handley/Floyd/Padhye/Widmer                       Section 12.  [Page 28]) s
_R
S
%%Page: (29) 29
%%BeginPageSetup
_S
24 24 translate
/pagenum 29 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    Multicast Transport Working Group, and the End-to-End Research) s
5 676 M
(    Group.   We would like to thank Wim Heirman, Ken Lofgren, Mike Luby,) s
5 665 M
(    Michele R., Vladica Stanisic, Randall Stewart, Eduardo Urzaiz,) s
5 654 M
(    Shushan Wen, and Wendy Lee \(lhh@zsu.edu.cn\) for feedback on earlier) s
5 643 M
(    versions of this document, and to thank Mark Allman for his) s
5 632 M
(    extensive feedback from using the document to produce a working) s
5 621 M
(    implementation.) s
5 599 M
(13.  Normative References) s
5 577 M
(14.  Informational References) s
5 555 M
(     [BRS99]        Balakrishnan, H., Rahul, H., and Seshan, S., "An) s
5 544 M
(                    Integrated Congestion Management Architecture for) s
5 533 M
(                    Internet Hosts," Proc. ACM SIGCOMM, Cambridge, MA,) s
5 522 M
(                    September 1999.) s
5 500 M
(     [FHPW00]       S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 489 M
(                    "Equation-Based Congestion Control for Unicast) s
5 478 M
(                    Applications", August 2000, Proc SIGCOMM 2000.) s
5 456 M
(     [FHPW00a]      S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 445 M
(                    "Equation-Based Congestion Control for Unicast) s
5 434 M
(                    Applications: the Extended Version", ICSI tech) s
5 423 M
(                    report TR-00-03, March 2000.) s
5 401 M
(     [PFTK98]       Padhye, J. and  Firoiu, V. and Towsley, D. and) s
5 390 M
(                    Kurose, J., "Modeling TCP Throughput: A Simple Model) s
5 379 M
(                    and its Empirical Validation", Proc ACM SIGCOMM) s
5 368 M
(                    1998.) s
5 346 M
(     [RFC2119]      S. Bradner, Key Words For Use in RFCs to Indicate) s
5 335 M
(                    Requirement Levels, RFC 2119.) s
5 313 M
(     [RFC2140]      J. Touch, "TCP Control Block Interdependence", RFC) s
5 302 M
(                    2140, April 1997.) s
5 280 M
(     [RFC2988]      V. Paxson and M. Allman, "Computing TCP's) s
5 269 M
(                    Retransmission Timer", RFC 2988, November 2000.) s
5 247 M
(     [RFC3168]      K. Ramakrishnan and S. Floyd, "The Addition of) s
5 236 M
(                    Explicit Congestion Notification \(ECN\) to IP", RFC) s
5 225 M
(                    3168, September 2001.) s
5 203 M
(     [RFC3390]      Allman, M., Floyd, S., and C. Partridge, "Increasing) s
5 192 M
(                    TCP's Initial Window", RFC 3390, October 2002.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                       Section 14.  [Page 29]) s
_R
S
%%Page: (30) 30
%%BeginPageSetup
_S
24 24 translate
/pagenum 30 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(     [RFC3448Err]   RFC 3448 Errata, URL) s
5 676 M
(                    ``http://www.icir.org/tfrc/rfc3448.errata''.) s
5 654 M
(     [RFC3540]      Wetherall, D., Ely, D., and Spring, N., "Robust ECN) s
5 643 M
(                    Signaling with Nonces", RFC 3540, Experimental, June) s
5 632 M
(                    2003) s
5 610 M
(     [RFC4340]      Kohler, E., Handley, M., and S. Floyd, "Datagram) s
5 599 M
(                    Congestion Control Protocol \(DCCP\)", RFC 4340, March) s
5 588 M
(                    2006.) s
5 566 M
(     [RFC4342]      Floyd, S., Kohler, E., and J. Padhye, "Profile for) s
5 555 M
(                    Datagram Congestion Control Protocol \(DCCP\)) s
5 544 M
(                    Congestion Control ID 3: TCP-Friendly Rate Control) s
5 533 M
(                    \(TFRC\)", RFC 4342, March 2006.) s
5 511 M
(     [W00]          Widmer, J., "Equation-Based Congestion Control",) s
5 500 M
(                    Diploma Thesis, University of Mannheim, February) s
5 489 M
(                    2000.  URL "http://www.icir.org/tfrc/".) s
5 456 M
(15.  Authors' Addresses) s
5 126 M
(Handley/Floyd/Padhye/Widmer                       Section 15.  [Page 30]) s
_R
S
%%Page: (31) 31
%%BeginPageSetup
_S
24 24 translate
/pagenum 31 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(         Mark Handley,) s
5 676 M
(         Department of Computer Science) s
5 665 M
(         University College London) s
5 654 M
(         Gower Street) s
5 643 M
(         London WC1E 6BT) s
5 632 M
(         UK) s
5 621 M
(         EMail: M.Handley@cs.ucl.ac.uk) s
5 599 M
(         Sally Floyd) s
5 588 M
(         ICIR/ICSI) s
5 577 M
(         1947 Center St, Suite 600) s
5 566 M
(         Berkeley, CA 94708) s
5 555 M
(         floyd@icir.org) s
5 533 M
(         Jitendra Padhye) s
5 522 M
(         Microsoft Research) s
5 511 M
(         padhye@microsoft.com) s
5 478 M
(         Joerg Widmer) s
5 467 M
(         Lehrstuhl Praktische Informatik IV) s
5 456 M
(         Universitat Mannheim) s
5 445 M
(         L 15, 16 - Room 415) s
5 434 M
(         D-68131 Mannheim) s
5 423 M
(         Germany) s
5 412 M
(         widmer@informatik.uni-mannheim.de) s
5 368 M
(Full Copyright Statement) s
5 346 M
(    Copyright \(C\) The Internet Society 2006.  This document is subject) s
5 335 M
(    to the rights, licenses and restrictions contained in BCP 78, and) s
5 324 M
(    except as set forth therein, the authors retain all their rights.) s
5 302 M
(    This document and the information contained herein are provided on) s
5 291 M
(    an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE) s
5 280 M
(    REPRESENTS OR IS SPONSORED BY \(IF ANY\), THE INTERNET SOCIETY AND THE) s
5 269 M
(    INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR) s
5 258 M
(    IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF) s
5 247 M
(    THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED) s
5 236 M
(    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.) s
5 214 M
(Intellectual Property) s
5 192 M
(    The IETF takes no position regarding the validity or scope of any) s
5 181 M
(    Intellectual Property Rights or other rights that might be claimed) s
5 170 M
(    to pertain to the implementation or use of the technology described) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                    [Page 31]) s
_R
S
%%Page: (32) 32
%%BeginPageSetup
_S
24 24 translate
/pagenum 32 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT           Expires: December 2006                June 2006) s
5 687 M
(    in this document or the extent to which any license under such) s
5 676 M
(    rights might or might not be available; nor does it represent that) s
5 665 M
(    it has made any independent effort to identify any such rights.) s
5 654 M
(    Information on the procedures with respect to rights in RFC) s
5 643 M
(    documents can be found in BCP 78 and BCP 79.) s
5 621 M
(    Copies of IPR disclosures made to the IETF Secretariat and any) s
5 610 M
(    assurances of licenses to be made available, or the result of an) s
5 599 M
(    attempt made to obtain a general license or permission for the use) s
5 588 M
(    of such proprietary rights by implementers or users of this) s
5 577 M
(    specification can be obtained from the IETF on-line IPR repository) s
5 566 M
(    at http://www.ietf.org/ipr.) s
5 544 M
(    The IETF invites any interested party to bring to its attention any) s
5 533 M
(    copyrights, patents or patent applications, or other proprietary) s
5 522 M
(    rights that may cover technology that may be required to implement) s
5 511 M
(    this standard.  Please address the information to the IETF at ietf-) s
5 500 M
(    ipr@ietf.org.) s
5 126 M
(Handley/Floyd/Padhye/Widmer                                    [Page 32]) s
_R
S
%%Trailer
%%Pages: 32
%%DocumentNeededResources: font Courier-Bold Courier 
%%EOF

PAFTECH AB 2003-20262026-04-22 14:19:01