One document matched: draft-ietf-dccp-rfc3448bis-03.ps


%!PS-Adobe-3.0
%%BoundingBox: 24 24 588 768
%%Title: Enscript Output
%%For: Sally Floyd
%%Creator: GNU enscript 1.6.1
%%CreationDate: Sun Nov 18 22:30:14 2007
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentMedia: Letter 612 792 0 () ()
%%DocumentNeededResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset Enscript-Prolog 1.6 1
%
% Procedures.
%

/_S {	% save current state
  /_s save def
} def
/_R {	% restore from saved state
  _s restore
} def

/S {	% showpage protecting gstate
  gsave
  showpage
  grestore
} bind def

/MF {	% fontname newfontname -> -	make a new encoded font
  /newfontname exch def
  /fontname exch def

  /fontdict fontname findfont def
  /newfont fontdict maxlength dict def

  fontdict {
    exch
    dup /FID eq {
      % skip FID pair
      pop pop
    } {
      % copy to the new font dictionary
      exch newfont 3 1 roll put
    } ifelse
  } forall

  newfont /FontName newfontname put

  % insert only valid encoding vectors
  encoding_vector length 256 eq {
    newfont /Encoding encoding_vector put
  } if

  newfontname newfont definefont pop
} def

/SF { % fontname width height -> -	set a new font
  /height exch def
  /width exch def

  findfont
  [width 0 0 height 0 0] makefont setfont
} def

/SUF { % fontname width height -> -	set a new user font
  /height exch def
  /width exch def

  /F-gs-user-font MF
  /F-gs-user-font width height SF
} def

/M {moveto} bind def
/s {show} bind def

/Box {	% x y w h -> -			define box path
  /d_h exch def /d_w exch def /d_y exch def /d_x exch def
  d_x d_y  moveto
  d_w 0 rlineto
  0 d_h rlineto
  d_w neg 0 rlineto
  closepath
} def

/bgs {	% x y height blskip gray str -> -	show string with bg color
  /str exch def
  /gray exch def
  /blskip exch def
  /height exch def
  /y exch def
  /x exch def

  gsave
    x y blskip sub str stringwidth pop height Box
    gray setgray
    fill
  grestore
  x y M str s
} def

% Highlight bars.
/highlight_bars {	% nlines lineheight output_y_margin gray -> -
  gsave
    setgray
    /ymarg exch def
    /lineheight exch def
    /nlines exch def

    % This 2 is just a magic number to sync highlight lines to text.
    0 d_header_y ymarg sub 2 sub translate

    /cw d_output_w cols div def
    /nrows d_output_h ymarg 2 mul sub lineheight div cvi def

    % for each column
    0 1 cols 1 sub {
      cw mul /xp exch def

      % for each rows
      0 1 nrows 1 sub {
        /rn exch def
        rn lineheight mul neg /yp exch def
        rn nlines idiv 2 mod 0 eq {
	  % Draw highlight bar.  4 is just a magic indentation.
	  xp 4 add yp cw 8 sub lineheight neg Box fill
	} if
      } for
    } for

  grestore
} def

% Line highlight bar.
/line_highlight {	% x y width height gray -> -
  gsave
    /gray exch def
    Box gray setgray fill
  grestore
} def

% Column separator lines.
/column_lines {
  gsave
    .1 setlinewidth
    0 d_footer_h translate
    /cw d_output_w cols div def
    1 1 cols 1 sub {
      cw mul 0 moveto
      0 d_output_h rlineto stroke
    } for
  grestore
} def

% Column borders.
/column_borders {
  gsave
    .1 setlinewidth
    0 d_footer_h moveto
    0 d_output_h rlineto
    d_output_w 0 rlineto
    0 d_output_h neg rlineto
    closepath stroke
  grestore
} def

% Do the actual underlay drawing
/draw_underlay {
  ul_style 0 eq {
    ul_str true charpath stroke
  } {
    ul_str show
  } ifelse
} def

% Underlay
/underlay {	% - -> -
  gsave
    0 d_page_h translate
    d_page_h neg d_page_w atan rotate

    ul_gray setgray
    ul_font setfont
    /dw d_page_h dup mul d_page_w dup mul add sqrt def
    ul_str stringwidth pop dw exch sub 2 div ul_h_ptsize -2 div moveto
    draw_underlay
  grestore
} def

/user_underlay {	% - -> -
  gsave
    ul_x ul_y translate
    ul_angle rotate
    ul_gray setgray
    ul_font setfont
    0 0 ul_h_ptsize 2 div sub moveto
    draw_underlay
  grestore
} def

% Page prefeed
/page_prefeed {		% bool -> -
  statusdict /prefeed known {
    statusdict exch /prefeed exch put
  } {
    pop
  } ifelse
} def

% Wrapped line markers
/wrapped_line_mark {	% x y charwith charheight type -> -
  /type exch def
  /h exch def
  /w exch def
  /y exch def
  /x exch def

  type 2 eq {
    % Black boxes (like TeX does)
    gsave
      0 setlinewidth
      x w 4 div add y M
      0 h rlineto w 2 div 0 rlineto 0 h neg rlineto
      closepath fill
    grestore
  } {
    type 3 eq {
      % Small arrows
      gsave
        .2 setlinewidth
        x w 2 div add y h 2 div add M
        w 4 div 0 rlineto
        x w 4 div add y lineto stroke

        x w 4 div add w 8 div add y h 4 div add M
        x w 4 div add y lineto
	w 4 div h 8 div rlineto stroke
      grestore
    } {
      % do nothing
    } ifelse
  } ifelse
} def

% EPSF import.

/BeginEPSF {
  /b4_Inc_state save def    		% Save state for cleanup
  /dict_count countdictstack def	% Count objects on dict stack
  /op_count count 1 sub def		% Count objects on operand stack
  userdict begin
  /showpage { } def
  0 setgray 0 setlinecap
  1 setlinewidth 0 setlinejoin
  10 setmiterlimit [ ] 0 setdash newpath
  /languagelevel where {
    pop languagelevel
    1 ne {
      false setstrokeadjust false setoverprint
    } if
  } if
} bind def

/EndEPSF {
  count op_count sub { pos } repeat	% Clean up stacks
  countdictstack dict_count sub { end } repeat
  b4_Inc_state restore
} bind def

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

PAFTECH AB 2003-20262026-04-23 00:05:44