One document matched: draft-floyd-rfc3448bis-00.ps
%!PS-Adobe-3.0
%%BoundingBox: 24 24 588 768
%%Title: Enscript Output
%%For: Sally Floyd
%%Creator: GNU enscript 1.6.1
%%CreationDate: Wed Jun 21 11:45:26 2006
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentMedia: Letter 612 792 0 () ()
%%DocumentNeededResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset Enscript-Prolog 1.6 1
%
% Procedures.
%
/_S { % save current state
/_s save def
} def
/_R { % restore from saved state
_s restore
} def
/S { % showpage protecting gstate
gsave
showpage
grestore
} bind def
/MF { % fontname newfontname -> - make a new encoded font
/newfontname exch def
/fontname exch def
/fontdict fontname findfont def
/newfont fontdict maxlength dict def
fontdict {
exch
dup /FID eq {
% skip FID pair
pop pop
} {
% copy to the new font dictionary
exch newfont 3 1 roll put
} ifelse
} forall
newfont /FontName newfontname put
% insert only valid encoding vectors
encoding_vector length 256 eq {
newfont /Encoding encoding_vector put
} if
newfontname newfont definefont pop
} def
/SF { % fontname width height -> - set a new font
/height exch def
/width exch def
findfont
[width 0 0 height 0 0] makefont setfont
} def
/SUF { % fontname width height -> - set a new user font
/height exch def
/width exch def
/F-gs-user-font MF
/F-gs-user-font width height SF
} def
/M {moveto} bind def
/s {show} bind def
/Box { % x y w h -> - define box path
/d_h exch def /d_w exch def /d_y exch def /d_x exch def
d_x d_y moveto
d_w 0 rlineto
0 d_h rlineto
d_w neg 0 rlineto
closepath
} def
/bgs { % x y height blskip gray str -> - show string with bg color
/str exch def
/gray exch def
/blskip exch def
/height exch def
/y exch def
/x exch def
gsave
x y blskip sub str stringwidth pop height Box
gray setgray
fill
grestore
x y M str s
} def
% Highlight bars.
/highlight_bars { % nlines lineheight output_y_margin gray -> -
gsave
setgray
/ymarg exch def
/lineheight exch def
/nlines exch def
% This 2 is just a magic number to sync highlight lines to text.
0 d_header_y ymarg sub 2 sub translate
/cw d_output_w cols div def
/nrows d_output_h ymarg 2 mul sub lineheight div cvi def
% for each column
0 1 cols 1 sub {
cw mul /xp exch def
% for each rows
0 1 nrows 1 sub {
/rn exch def
rn lineheight mul neg /yp exch def
rn nlines idiv 2 mod 0 eq {
% Draw highlight bar. 4 is just a magic indentation.
xp 4 add yp cw 8 sub lineheight neg Box fill
} if
} for
} for
grestore
} def
% Line highlight bar.
/line_highlight { % x y width height gray -> -
gsave
/gray exch def
Box gray setgray fill
grestore
} def
% Column separator lines.
/column_lines {
gsave
.1 setlinewidth
0 d_footer_h translate
/cw d_output_w cols div def
1 1 cols 1 sub {
cw mul 0 moveto
0 d_output_h rlineto stroke
} for
grestore
} def
% Column borders.
/column_borders {
gsave
.1 setlinewidth
0 d_footer_h moveto
0 d_output_h rlineto
d_output_w 0 rlineto
0 d_output_h neg rlineto
closepath stroke
grestore
} def
% Do the actual underlay drawing
/draw_underlay {
ul_style 0 eq {
ul_str true charpath stroke
} {
ul_str show
} ifelse
} def
% Underlay
/underlay { % - -> -
gsave
0 d_page_h translate
d_page_h neg d_page_w atan rotate
ul_gray setgray
ul_font setfont
/dw d_page_h dup mul d_page_w dup mul add sqrt def
ul_str stringwidth pop dw exch sub 2 div ul_h_ptsize -2 div moveto
draw_underlay
grestore
} def
/user_underlay { % - -> -
gsave
ul_x ul_y translate
ul_angle rotate
ul_gray setgray
ul_font setfont
0 0 ul_h_ptsize 2 div sub moveto
draw_underlay
grestore
} def
% Page prefeed
/page_prefeed { % bool -> -
statusdict /prefeed known {
statusdict exch /prefeed exch put
} {
pop
} ifelse
} def
% Wrapped line markers
/wrapped_line_mark { % x y charwith charheight type -> -
/type exch def
/h exch def
/w exch def
/y exch def
/x exch def
type 2 eq {
% Black boxes (like TeX does)
gsave
0 setlinewidth
x w 4 div add y M
0 h rlineto w 2 div 0 rlineto 0 h neg rlineto
closepath fill
grestore
} {
type 3 eq {
% Small arrows
gsave
.2 setlinewidth
x w 2 div add y h 2 div add M
w 4 div 0 rlineto
x w 4 div add y lineto stroke
x w 4 div add w 8 div add y h 4 div add M
x w 4 div add y lineto
w 4 div h 8 div rlineto stroke
grestore
} {
% do nothing
} ifelse
} ifelse
} def
% EPSF import.
/BeginEPSF {
/b4_Inc_state save def % Save state for cleanup
/dict_count countdictstack def % Count objects on dict stack
/op_count count 1 sub def % Count objects on operand stack
userdict begin
/showpage { } def
0 setgray 0 setlinecap
1 setlinewidth 0 setlinejoin
10 setmiterlimit [ ] 0 setdash newpath
/languagelevel where {
pop languagelevel
1 ne {
false setstrokeadjust false setoverprint
} if
} if
} bind def
/EndEPSF {
count op_count sub { pos } repeat % Clean up stacks
countdictstack dict_count sub { end } repeat
b4_Inc_state restore
} bind def
% Check PostScript language level.
/languagelevel where {
pop /gs_languagelevel languagelevel def
} {
/gs_languagelevel 1 def
} ifelse
%%EndResource
%%BeginResource: procset Enscript-Encoding-88591 1.6 1
/encoding_vector [
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/space /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
/zero /one /two /three
/four /five /six /seven
/eight /nine /colon /semicolon
/less /equal /greater /question
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
/quoteleft /a /b /c
/d /e /f /g
/h /i /j /k
/l /m /n /o
/p /q /r /s
/t /u /v /w
/x /y /z /braceleft
/bar /braceright /tilde /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
/space /exclamdown /cent /sterling
/currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft
/logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior
/acute /mu /paragraph /bullet
/cedilla /onesuperior /ordmasculine /guillemotright
/onequarter /onehalf /threequarters /questiondown
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /ydieresis
] def
%%EndResource
%%EndProlog
%%BeginSetup
%%IncludeResource: font Courier-Bold
%%IncludeResource: font Courier
/HFpt_w 10 def
/HFpt_h 10 def
/Courier-Bold /HF-gs-font MF
/HF /HF-gs-font findfont [HFpt_w 0 0 HFpt_h 0 0] makefont def
/Courier /F-gs-font MF
/F-gs-font 10 10 SF
/#copies 1 def
% Pagedevice definitions:
gs_languagelevel 1 gt {
<<
/PageSize [612 792]
>> setpagedevice
} if
/d_page_w 564 def
/d_page_h 744 def
/d_header_x 0 def
/d_header_y 744 def
/d_header_w 564 def
/d_header_h 0 def
/d_footer_x 0 def
/d_footer_y 0 def
/d_footer_w 564 def
/d_footer_h 0 def
/d_output_w 564 def
/d_output_h 744 def
/cols 1 def
%%EndSetup
%%Page: (1) 1
%%BeginPageSetup
_S
24 24 translate
/pagenum 1 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 731 M
(Internet Engineering Task Force M. Handley) s
5 720 M
(INTERNET-DRAFT University College London) s
5 709 M
(draft-floyd-rfc3448bis-00.txt S. Floyd) s
5 698 M
(Expires: December 2006 ICIR) s
5 687 M
( J. Padhye) s
5 676 M
( Microsoft) s
5 665 M
( J. Widmer) s
5 654 M
( University of Mannheim) s
5 643 M
( 18 June 2006) s
5 610 M
( TCP Friendly Rate Control \(TFRC\):) s
5 599 M
( Protocol Specification) s
5 544 M
(Status of this Memo) s
5 522 M
( By submitting this Internet-Draft, each author represents that any) s
5 511 M
( applicable patent or other IPR claims of which he or she is aware) s
5 500 M
( have been or will be disclosed, and any of which he or she becomes) s
5 489 M
( aware will be disclosed, in accordance with Section 6 of BCP 79.) s
5 467 M
( Internet-Drafts are working documents of the Internet Engineering) s
5 456 M
( Task Force \(IETF\), its areas, and its working groups. Note that) s
5 445 M
( other groups may also distribute working documents as Internet-) s
5 434 M
( Drafts.) s
5 412 M
( Internet-Drafts are draft documents valid for a maximum of six) s
5 401 M
( months and may be updated, replaced, or obsoleted by other documents) s
5 390 M
( at any time. It is inappropriate to use Internet-Drafts as) s
5 379 M
( reference material or to cite them other than as "work in progress.") s
5 357 M
( The list of current Internet-Drafts can be accessed at) s
5 346 M
( http://www.ietf.org/ietf/1id-abstracts.txt.) s
5 324 M
( The list of Internet-Draft Shadow Directories can be accessed at) s
5 313 M
( http://www.ietf.org/shadow.html.) s
5 291 M
( This Internet-Draft will expire on December 2006.) s
5 203 M
(Handley/Floyd/Padhye/Widmer [Page 1]) s
_R
S
%%Page: (2) 2
%%BeginPageSetup
_S
24 24 translate
/pagenum 2 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(Abstract) s
5 665 M
( This document specifies TCP-Friendly Rate Control \(TFRC\). TFRC is a) s
5 654 M
( congestion control mechanism for unicast flows operating in a best-) s
5 643 M
( effort Internet environment. It is reasonably fair when competing) s
5 632 M
( for bandwidth with TCP flows, but has a much lower variation of) s
5 621 M
( throughput over time compared with TCP, making it more suitable for) s
5 610 M
( applications such as telephony or streaming media where a relatively) s
5 599 M
( smooth sending rate is of importance.) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 2]) s
_R
S
%%Page: (3) 3
%%BeginPageSetup
_S
24 24 translate
/pagenum 3 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(Table of Contents) s
5 665 M
( 1. Introduction ...................................................6) s
5 654 M
( 2. Conventions ....................................................7) s
5 643 M
( 3. Protocol Mechanism .............................................7) s
5 632 M
( 3.1. TCP Throughput Equation ...................................8) s
5 621 M
( 3.2. Packet Contents ...........................................9) s
5 610 M
( 3.2.1. Data Packets ......................................10) s
5 599 M
( 3.2.2. Feedback Packets ..................................10) s
5 588 M
( 4. Data Sender Protocol ..........................................11) s
5 577 M
( 4.1. Measuring the Segment Size ...............................11) s
5 566 M
( 4.2. Sender Initialization ....................................12) s
5 555 M
( 4.3. Sender behavior when a feedback packet is received .......13) s
5 544 M
( 4.4. Expiration of nofeedback timer ...........................14) s
5 533 M
( 4.5. Sending a packet after an idle period ....................15) s
5 522 M
( 4.6. Preventing Oscillations ..................................15) s
5 511 M
( 4.7. Scheduling of Packet Transmissions .......................16) s
5 500 M
( 5. Calculation of the Loss Event Rate \(p\) ........................17) s
5 489 M
( 5.1. Detection of Lost or Marked Packets ......................17) s
5 478 M
( 5.2. Translation from Loss History to Loss Events .............18) s
5 467 M
( 5.3. Inter-loss Event Interval ................................19) s
5 456 M
( 5.4. Average Loss Interval ....................................19) s
5 445 M
( 5.5. History Discounting ......................................20) s
5 434 M
( 6. Data Receiver Protocol ........................................23) s
5 423 M
( 6.1. Receiver behavior when a data packet is received .........23) s
5 412 M
( 6.2. Expiration of feedback timer .............................24) s
5 401 M
( 6.3. Receiver initialization ..................................24) s
5 390 M
( 6.3.1. Initializing the Loss History after the First Loss) s
5 379 M
( Event ....................................................25) s
5 368 M
( 7. Sender-based Variants .........................................25) s
5 357 M
( 8. Implementation Issues .........................................26) s
5 346 M
( 9. Changes from RFC 3448 .........................................27) s
5 335 M
( 10. Security Considerations ......................................28) s
5 324 M
( 11. IANA Considerations ..........................................28) s
5 313 M
( 12. Acknowledgments ..............................................28) s
5 302 M
( 13. Normative References .........................................29) s
5 291 M
( 14. Informational References .....................................29) s
5 280 M
( 15. Authors' Addresses ...........................................30) s
5 269 M
( Full Copyright Statement .........................................31) s
5 258 M
( Intellectual Property ............................................31) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 3]) s
_R
S
%%Page: (4) 4
%%BeginPageSetup
_S
24 24 translate
/pagenum 4 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( NOTE TO RFC EDITOR: PLEASE DELETE THIS NOTE UPON PUBLICATION.) s
5 676 M
( Changes from RFC 3448:) s
5 654 M
( * Incorporated changes in the RFC 3448 errata:) s
5 632 M
( - "If the sender does not receive a feedback report for) s
5 621 M
( four round trip times, it cuts its sending rate in half.") s
5 610 M
( \("Two" changed to "four", for consistency with the rest) s
5 599 M
( of the document. Reported by Joerg Widmer\).) s
5 577 M
( - "If the nofeedback timer expires when the sender does not) s
5 566 M
( yet have an RTT sample, and has not yet received any) s
5 555 M
( feedback from the receiver, or when p == 0,...") s
5 544 M
( \(Added "or when p == 0,", reported by Wim Heirman\).) s
5 522 M
( - In Section 5.5, changed:) s
5 511 M
( for \(i = 1 to n\) { DF_i = 1; }) s
5 500 M
( to:) s
5 489 M
( for \(i = 0 to n\) { DF_i = 1; }) s
5 478 M
( Reported by Michele R.) s
5 456 M
( * Changed RFC 3448 to correspond to the larger initial windows) s
5 445 M
( specified in RFC 3390. This includes the following:) s
5 423 M
( - Incorporated Section 5.1 from [RFC4342], saying that) s
5 412 M
( when reducing the sending rate after an idle period, don't) s
5 401 M
( reduce the sending rate below the initial sending rate.) s
5 379 M
( - Change for a datalimited sender:) s
5 368 M
( When the sender has been datalimited, the sender doesn't) s
5 357 M
( let the receive rate limit it to a sending rate less than) s
5 346 M
( the initial rate.) s
5 324 M
( - Small change to slow-start:) s
5 313 M
( Changed so that for the first feedback packet received,) s
5 302 M
( or for the first feedback packet received after an idle) s
5 291 M
( period, the receive rate is not used to limit the) s
5 280 M
( sending rate. This is because the receiver might not yet) s
5 269 M
( have seen an entire window of data.) s
5 247 M
( * Clarified how the average loss interval is calculated when) s
5 236 M
( the receiver has not yet seen eight loss intervals.) s
5 214 M
( * Discussed more about estimating the average segment size:) s
5 192 M
( - For initializing the loss history after the first loss event,) s
5 181 M
( either the receiver knows the sender's value for s, or) s
5 170 M
( the receiver uses the throughput equation for X_pps and does) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 4]) s
_R
S
%%Page: (5) 5
%%BeginPageSetup
_S
24 24 translate
/pagenum 5 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( not need to know an estimate for s.) s
5 665 M
( - Added a discussion about estimating the average segment size) s
5 654 M
( s in Section 4.1 on "Measuring the Segment Size".) s
5 632 M
( - Changed "packet size" to "segment size".) s
5 610 M
( END OF NOTE TO RFC EDITOR.) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 5]) s
_R
S
%%Page: (6) 6
%%BeginPageSetup
_S
24 24 translate
/pagenum 6 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(1. Introduction) s
5 665 M
( This document specifies TCP-Friendly Rate Control \(TFRC\). TFRC is a) s
5 654 M
( congestion control mechanism designed for unicast flows operating in) s
5 643 M
( an Internet environment and competing with TCP traffic [FHPW00].) s
5 632 M
( Instead of specifying a complete protocol, this document simply) s
5 621 M
( specifies a congestion control mechanism that could be used in a) s
5 610 M
( transport protocol such as DCCP \(Datagram Congestion Control) s
5 599 M
( Protocol\) [RFC4340], in an application incorporating end-to-end) s
5 588 M
( congestion control at the application level, or in the context of) s
5 577 M
( endpoint congestion management [BRS99]. This document does not) s
5 566 M
( discuss packet formats or reliability. Implementation-related) s
5 555 M
( issues are discussed only briefly, in Section 8.) s
5 533 M
( TFRC is designed to be reasonably fair when competing for bandwidth) s
5 522 M
( with TCP flows, where a flow is "reasonably fair" if its sending) s
5 511 M
( rate is generally within a factor of two of the sending rate of a) s
5 500 M
( TCP flow under the same conditions. However, TFRC has a much lower) s
5 489 M
( variation of throughput over time compared with TCP, which makes it) s
5 478 M
( more suitable for applications such as telephony or streaming media) s
5 467 M
( where a relatively smooth sending rate is of importance.) s
5 445 M
( The penalty of having smoother throughput than TCP while competing) s
5 434 M
( fairly for bandwidth is that TFRC responds slower than TCP to) s
5 423 M
( changes in available bandwidth. Thus TFRC should only be used when) s
5 412 M
( the application has a requirement for smooth throughput, in) s
5 401 M
( particular, avoiding TCP's halving of the sending rate in response) s
5 390 M
( to a single packet drop. For applications that simply need to) s
5 379 M
( transfer as much data as possible in as short a time as possible we) s
5 368 M
( recommend using TCP, or if reliability is not required, using an) s
5 357 M
( Additive-Increase, Multiplicative-Decrease \(AIMD\) congestion control) s
5 346 M
( scheme with similar parameters to those used by TCP.) s
5 324 M
( TFRC is designed for applications that use a fixed segment size, and) s
5 313 M
( vary their sending rate in packets per second in response to) s
5 302 M
( congestion. TFRC can also be used by applications that don't have a) s
5 291 M
( fixed segment size, but where the segment size varies according to) s
5 280 M
( the needs of the application \(e.g., video applications\).) s
5 258 M
( Some applications \(e.g., some audio applications\) require a fixed) s
5 247 M
( interval of time between packets and vary their segment size instead) s
5 236 M
( of their packet rate in response to congestion. The congestion) s
5 225 M
( control mechanism in this document is not designed for those) s
5 214 M
( applications; TFRC-SP \(Small-Packet TFRC\) is a variant of TFRC for) s
5 203 M
( applications that have a fixed sending rate in packets per second) s
5 192 M
( but either use small packets, or vary their packet size in response) s
5 181 M
( to congestion. TFRC-SP will be specified in a later document.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 1. [Page 6]) s
_R
S
%%Page: (7) 7
%%BeginPageSetup
_S
24 24 translate
/pagenum 7 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( This document specifies TFRC as a receiver-based mechanism, with the) s
5 676 M
( calculation of the congestion control information \(i.e., the loss) s
5 665 M
( event rate\) in the data receiver rather in the data sender. This is) s
5 654 M
( well-suited to an application where the sender is a large server) s
5 643 M
( handling many concurrent connections, and the receiver has more) s
5 632 M
( memory and CPU cycles available for computation. In addition, a) s
5 621 M
( receiver-based mechanism is more suitable as a building block for) s
5 610 M
( multicast congestion control. However, it is also possible to) s
5 599 M
( implement TFRC in sender-based variants, as allowed in DCCP's) s
5 588 M
( Congestion Control ID 3 \(CCID 3\) [RFC4342].) s
5 566 M
(2. Conventions) s
5 544 M
( The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",) s
5 533 M
( "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this) s
5 522 M
( document are to be interpreted as described in RFC 2119.) s
5 500 M
(3. Protocol Mechanism) s
5 478 M
( For its congestion control mechanism, TFRC directly uses a) s
5 467 M
( throughput equation for the allowed sending rate as a function of) s
5 456 M
( the loss event rate and round-trip time. In order to compete fairly) s
5 445 M
( with TCP, TFRC uses the TCP throughput equation, which roughly) s
5 434 M
( describes TCP's sending rate as a function of the loss event rate,) s
5 423 M
( round-trip time, and segment size. We define a loss event as one or) s
5 412 M
( more lost or marked packets from a window of data, where a marked) s
5 401 M
( packet refers to a congestion indication from Explicit Congestion) s
5 390 M
( Notification \(ECN\) [RFC3168].) s
5 368 M
( Generally speaking, TFRC's congestion control mechanism works as) s
5 357 M
( follows:) s
5 335 M
( o The receiver measures the loss event rate and feeds this) s
5 324 M
( information back to the sender.) s
5 302 M
( o The sender also uses these feedback messages to measure the) s
5 291 M
( round-trip time \(RTT\).) s
5 269 M
( o The loss event rate and RTT are then fed into TFRC's throughput) s
5 258 M
( equation, giving the acceptable transmit rate.) s
5 236 M
( o The sender then adjusts its transmit rate to match the) s
5 225 M
( calculated rate.) s
5 203 M
( The dynamics of TFRC are sensitive to how the measurements are) s
5 192 M
( performed and applied. We recommend specific mechanisms below to) s
5 181 M
( perform and apply these measurements. Other mechanisms are) s
5 170 M
( possible, but it is important to understand how the interactions) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 3. [Page 7]) s
_R
S
%%Page: (8) 8
%%BeginPageSetup
_S
24 24 translate
/pagenum 8 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( between mechanisms affect the dynamics of TFRC.) s
5 665 M
(3.1. TCP Throughput Equation) s
5 643 M
( Any realistic equation giving TCP throughput as a function of loss) s
5 632 M
( event rate and RTT should be suitable for use in TFRC. However, we) s
5 621 M
( note that the TCP throughput equation used must reflect TCP's) s
5 610 M
( retransmit timeout behavior, as this dominates TCP throughput at) s
5 599 M
( higher loss rates. We also note that the assumptions implicit in) s
5 588 M
( the throughput equation about the loss event rate parameter have to) s
5 577 M
( be a reasonable match to how the loss rate or loss event rate is) s
5 566 M
( actually measured. While this match is not perfect for the) s
5 555 M
( throughput equation and loss rate measurement mechanisms given) s
5 544 M
( below, in practice the assumptions turn out to be close enough.) s
5 522 M
( The throughput equation we currently recommend for TFRC is a) s
5 511 M
( slightly simplified version of the throughput equation for Reno TCP) s
5 500 M
( from [PFTK98]. Ideally we'd prefer a throughput equation based on) s
5 489 M
( SACK TCP, but no one has yet derived the throughput equation for) s
5 478 M
( SACK TCP, and from both simulations and experiments, the differences) s
5 467 M
( between the two equations are relatively minor.) s
5 445 M
( The throughput equation is:) s
5 412 M
( s) s
5 401 M
( X = ----------------------------------------------------------) s
5 390 M
( R*sqrt\(2*b*p/3\) + \(t_RTO * \(3*sqrt\(3*b*p/8\) * p * \(1+32*p^2\)\)\)) s
5 346 M
( Where:) s
5 324 M
( X is the transmit rate in bytes/second.) s
5 302 M
( s is the segment size in bytes.) s
5 280 M
( R is the round trip time in seconds.) s
5 258 M
( p is the loss event rate, between 0 and 1.0, of the number of) s
5 247 M
( loss events as a fraction of the number of packets transmitted.) s
5 225 M
( t_RTO is the TCP retransmission timeout value in seconds.) s
5 203 M
( b is the number of packets acknowledged by a single TCP) s
5 192 M
( acknowledgement.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 3.1. [Page 8]) s
_R
S
%%Page: (9) 9
%%BeginPageSetup
_S
24 24 translate
/pagenum 9 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( We further simplify this by setting t_RTO = 4*R. A more accurate) s
5 676 M
( calculation of t_RTO is possible, but experiments with the current) s
5 665 M
( setting have resulted in reasonable fairness with existing TCP) s
5 654 M
( implementations [W00]. Another possibility would be to set t_RTO =) s
5 643 M
( max\(4R, one second\), to match the recommended minimum of one second) s
5 632 M
( on the RTO [RFC2988].) s
5 610 M
( Many current TCP connections use delayed acknowledgements, sending) s
5 599 M
( an acknowledgement for every two data packets received, and thus) s
5 588 M
( have a sending rate modeled by b = 2. However, TCP is also allowed) s
5 577 M
( to send an acknowledgement for every data packet, and this would be) s
5 566 M
( modeled by b = 1. Because many TCP implementations do not use) s
5 555 M
( delayed acknowledgements, we recommend b = 1.) s
5 533 M
( In future, different TCP equations may be substituted for this) s
5 522 M
( equation. The requirement is that the throughput equation be a) s
5 511 M
( reasonable approximation of the sending rate of TCP for conformant) s
5 500 M
( TCP congestion control.) s
5 478 M
( The throughput equation can also be expressed as) s
5 445 M
( X = X_pps * s ,) s
5 423 M
( with X_pps, the sending rate in packets per second, given as) s
5 390 M
( 1) s
5 379 M
( X_pps = --------------------------------------------------------) s
5 368 M
( R*sqrt\(2*b*p/3\) + \(t_RTO*\(3*sqrt\(3*b*p/8\)*p*\(1+32*p^2\)\)\)) s
5 324 M
( The parameters s \(segment size\), p \(loss event rate\) and R \(RTT\)) s
5 313 M
( need to be measured or calculated by a TFRC implementation. The) s
5 302 M
( measurement of s is specified in Section 4.1, measurement of R is) s
5 291 M
( specified in Section 4.3, and measurement of p is specified in) s
5 280 M
( Section 5. In the rest of this document all data rates are measured) s
5 269 M
( in bytes/second.) s
5 247 M
(3.2. Packet Contents) s
5 225 M
( Before specifying the sender and receiver functionality, we describe) s
5 214 M
( the contents of the data packets sent by the sender and feedback) s
5 203 M
( packets sent by the receiver. As TFRC will be used along with a) s
5 192 M
( transport protocol, we do not specify packet formats, as these) s
5 181 M
( depend on the details of the transport protocol used.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 3.2. [Page 9]) s
_R
S
%%Page: (10) 10
%%BeginPageSetup
_S
24 24 translate
/pagenum 10 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(3.2.1. Data Packets) s
5 665 M
( Each data packet sent by the data sender contains the following) s
5 654 M
( information:) s
5 632 M
( o A sequence number. This number is incremented by one for each) s
5 621 M
( data packet transmitted. The field must be sufficiently large) s
5 610 M
( that it does not wrap causing two different packets with the) s
5 599 M
( same sequence number to be in the receiver's recent packet) s
5 588 M
( history at the same time.) s
5 566 M
( o A timestamp indicating when the packet is sent. We denote by) s
5 555 M
( ts_i the timestamp of the packet with sequence number i. The) s
5 544 M
( resolution of the timestamp should typically be measured in) s
5 533 M
( milliseconds.) s
5 522 M
( This timestamp is used by the receiver to determine which losses) s
5 511 M
( belong to the same loss event. The timestamp is also echoed by) s
5 500 M
( the receiver to enable the sender to estimate the round-trip) s
5 489 M
( time, for senders that do not save timestamps of transmitted) s
5 478 M
( data packets.) s
5 467 M
( We note that as an alternative to a timestamp incremented in) s
5 456 M
( milliseconds, a "timestamp" that increments every quarter of a) s
5 445 M
( round-trip time would be sufficient for determining when losses) s
5 434 M
( belong to the same loss event, in the context of a protocol) s
5 423 M
( where this is understood by both sender and receiver, and where) s
5 412 M
( the sender saves the timestamps of transmitted data packets.) s
5 390 M
( o The sender's current estimate of the round trip time. The) s
5 379 M
( estimate reported in packet i is denoted by R_i. The round-trip) s
5 368 M
( time estimate is used by the receiver, along with the timestamp,) s
5 357 M
( to determine when multiple losses belong to the same loss event.) s
5 346 M
( If the sender sends a coarse-grained "timestamp" that increments) s
5 335 M
( every quarter of a round-trip time, as discussed above, then the) s
5 324 M
( sender does not need to send its current estimate of the round) s
5 313 M
( trip time.) s
5 269 M
(3.2.2. Feedback Packets) s
5 247 M
( Each feedback packet sent by the data receiver contains the) s
5 236 M
( following information:) s
5 214 M
( o The timestamp of the last data packet received. We denote this) s
5 203 M
( by t_recvdata. If the last packet received at the receiver has) s
5 192 M
( sequence number i, then t_recvdata = ts_i.) s
5 181 M
( This timestamp is used by the sender to estimate the round-trip) s
5 170 M
( time, and is only needed if the sender does not save timestamps) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 3.2.2. [Page 10]) s
_R
S
%%Page: (11) 11
%%BeginPageSetup
_S
24 24 translate
/pagenum 11 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( of transmitted data packets.) s
5 665 M
( o The amount of time elapsed between the receipt of the last data) s
5 654 M
( packet at the receiver, and the generation of this feedback) s
5 643 M
( report. We denote this by t_delay.) s
5 621 M
( o The rate at which the receiver estimates that data was received) s
5 610 M
( since the last feedback report was sent. We denote this by) s
5 599 M
( X_recv.) s
5 577 M
( o The receiver's current estimate of the loss event rate, p.) s
5 544 M
(4. Data Sender Protocol) s
5 522 M
( The data sender sends a stream of data packets to the data receiver) s
5 511 M
( at a controlled rate. When a feedback packet is received from the) s
5 500 M
( data receiver, the data sender changes its sending rate, based on) s
5 489 M
( the information contained in the feedback report. If the sender does) s
5 478 M
( not receive a feedback report for four round trip times, it cuts its) s
5 467 M
( sending rate in half. This is achieved by means of a timer called) s
5 456 M
( the nofeedback timer.) s
5 434 M
( We specify the sender-side protocol in the following steps:) s
5 412 M
( o Measurement of the mean segment size being sent.) s
5 390 M
( o The sender behavior when a feedback packet is received.) s
5 368 M
( o The sender behavior when the nofeedback timer expires.) s
5 346 M
( o Oscillation prevention \(optional\)) s
5 324 M
( o Scheduling of transmission on non-realtime operating systems.) s
5 291 M
(4.1. Measuring the Segment Size) s
5 269 M
( The parameter s \(segment size\) is normally known to an application.) s
5 258 M
( This may not be so in two cases:) s
5 236 M
( o \(1\) The segment size naturally varies depending on the data. In) s
5 225 M
( this case, although the segment size varies, that variation is) s
5 214 M
( not coupled to the transmit rate. The TFRC sender can either) s
5 203 M
( compute the average segment size or use the maximum segment size) s
5 192 M
( for the segment size s.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.1. [Page 11]) s
_R
S
%%Page: (12) 12
%%BeginPageSetup
_S
24 24 translate
/pagenum 12 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( o \(2\) The application needs to change the segment size rather than) s
5 676 M
( the number of segments per second to perform congestion control.) s
5 665 M
( This would normally be the case with packet audio applications) s
5 654 M
( where a fixed interval of time needs to be represented by each) s
5 643 M
( packet. Such applications need to have a completely different) s
5 632 M
( way of measuring parameters.) s
5 610 M
( For the first class of applications where the segment size varies) s
5 599 M
( depending on the data, the sender MAY estimate the segment size s as) s
5 588 M
( the average segment size over the last four loss intervals. The) s
5 577 M
( sender MAY also estimate the average segment size over longer time) s
5 566 M
( intervals, if so desired. The TFRC sender uses the segment size s) s
5 555 M
( in the throughput equation, in the setting of the maximum receive) s
5 544 M
( rate and the minimum sending rate, and in the setting of the) s
5 533 M
( nofeedback timer.) s
5 511 M
( The TFRC receiver may use the average segment size s in initializing) s
5 500 M
( the loss history after the first loss event, but Section 6.3.1 also) s
5 489 M
( gives an alternate procedure that does not use the average segment) s
5 478 M
( size s.) s
5 456 M
( The second class of applications are discussed separately in a) s
5 445 M
( separate document on TFRC-SP. For the remainder of this section we) s
5 434 M
( assume the sender can estimate the segment size, and that congestion) s
5 423 M
( control is performed by adjusting the number of packets sent per) s
5 412 M
( second.) s
5 379 M
(4.2. Sender Initialization) s
5 357 M
( The initial values for X and tld are undefined until they are set as) s
5 346 M
( described below. If the sender is ready to send data when it does) s
5 335 M
( not yet have a round trip sample, the value of X is set to 1) s
5 324 M
( packet/second, the nofeedback timer is set to expire after 2) s
5 313 M
( seconds, and the tld, the Time Last Doubled during slow-start, is) s
5 302 M
( set to -1. Upon receiving a round trip time measurement \(e.g.,) s
5 291 M
( after the first feedback packet\), tld is set to the current time,) s
5 280 M
( and the transmit rate X is set to W_init/R, for W_init below from) s
5 269 M
( [RFC3390]:) s
5 236 M
( W_init = min\(4*MSS, max\(2*MSS, 4380\)\),) s
5 214 M
( for MSS the Maximum Segment Size. For responding to the initial) s
5 203 M
( feedback packet, this replaces step \(4\) of Section 4.3 below.) s
5 181 M
( If the sender does have a round trip sample when it is ready to) s
5 170 M
( first send data \(e.g., from the SYN exchange or from a previous) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.2. [Page 12]) s
_R
S
%%Page: (13) 13
%%BeginPageSetup
_S
24 24 translate
/pagenum 13 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( connection [RFC2140]\), the initial transmit rate X is set to) s
5 676 M
( W_init/R, and tld is set to the current time.) s
5 654 M
(4.3. Sender behavior when a feedback packet is received) s
5 632 M
( The sender knows its current sending rate, X, and maintains an) s
5 621 M
( estimate of the current round trip time, R, and an estimate of the) s
5 610 M
( timeout interval, t_RTO.) s
5 588 M
( When a feedback packet is received by the sender at time t_now, the) s
5 577 M
( following actions should be performed:) s
5 544 M
( 1\) Calculate a new round trip sample.) s
5 533 M
( R_sample = \(t_now - t_recvdata\) - t_delay.) s
5 511 M
( 2\) Update the round trip time estimate:) s
5 489 M
( If no feedback has been received before) s
5 478 M
( R = R_sample;) s
5 467 M
( Else) s
5 456 M
( R = q*R + \(1-q\)*R_sample;) s
5 434 M
( TFRC is not sensitive to the precise value for the filter) s
5 423 M
( constant q, but we recommend a default value of 0.9.) s
5 401 M
( 3\) Update the timeout interval:) s
5 379 M
( t_RTO = 4*R.) s
5 346 M
( 4\) Update the sending rate as follows:) s
5 324 M
( If \(sender has been idle or data-limited\)) s
5 313 M
( min_rate = max\(2*X_recv, W_init/R\);) s
5 302 M
( Else) s
5 291 M
( min_rate = 2*X_recv;) s
5 280 M
( If \(p > 0\)) s
5 269 M
( Calculate X_calc using the TCP throughput equation.) s
5 258 M
( X = max\(min\(X_calc, min_rate\), s/t_mbi\);) s
5 247 M
( Else if \(not the first feedback packet, and) s
5 236 M
( not the first feedback packet after a nofeedback timer\)) s
5 225 M
( If \(t_now - tld >= R\)) s
5 214 M
( X = max\(min\(2*X, min_rate\), s/R\);) s
5 203 M
( tld = t_now;) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.3. [Page 13]) s
_R
S
%%Page: (14) 14
%%BeginPageSetup
_S
24 24 translate
/pagenum 14 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The condition ``if \(sender has been idle or data-limited\)'' prevents) s
5 676 M
( an idle or data-limited sender from having to reduce the sending) s
5 665 M
( rate to less than the initial sending rate as a result of) s
5 654 M
( limitations from a small receive rate. The condition ``if \(not the) s
5 643 M
( first feedback packet, and not the first feedback packet after a) s
5 632 M
( nofeedback timer\)'' prevents a sender from reducing the sending rate) s
5 621 M
( in response to a feedback packet that reports the receipt of only a) s
5 610 M
( few packets after start-up or after an idle period.) s
5 588 M
( Note that if p == 0, then the sender is in slow-start phase, where) s
5 577 M
( it approximately doubles the sending rate each round-trip time until) s
5 566 M
( a loss occurs. The s/R term gives a minimum sending rate during) s
5 555 M
( slow-start of one packet per RTT. The parameter t_mbi is 64) s
5 544 M
( seconds, and represents the maximum inter-packet backoff interval in) s
5 533 M
( the persistent absence of feedback. Thus, when p > 0 the sender) s
5 522 M
( sends at least one packet every 64 seconds.) s
5 500 M
( 5\) Reset the nofeedback timer to expire after max\(4*R, 2*s/X\)) s
5 489 M
( seconds.) s
5 467 M
(4.4. Expiration of nofeedback timer) s
5 445 M
( If the nofeedback timer expires, the sender should perform the) s
5 434 M
( following actions:) s
5 412 M
( 1\) Cut the sending rate in half. If the sender has received) s
5 401 M
( feedback from the receiver, this is done by modifying the) s
5 390 M
( sender's cached copy of X_recv \(the receive rate\). Because the) s
5 379 M
( sending rate is limited to at most twice X_recv, modifying) s
5 368 M
( X_recv limits the current sending rate, but allows the sender to) s
5 357 M
( slow-start, doubling its sending rate each RTT, if feedback) s
5 346 M
( messages resume reporting no losses.) s
5 324 M
( If \(X_calc > 2*X_recv\)) s
5 313 M
( X_recv = max\(X_recv/2, s/\(2*t_mbi\)\);) s
5 302 M
( Else) s
5 291 M
( X_recv = X_calc/4;) s
5 258 M
( The term s/\(2*t_mbi\) limits the backoff to one packet every 64) s
5 247 M
( seconds in the case of persistent absence of feedback.) s
5 214 M
( 2\) The value of X must then be recalculated as described under) s
5 203 M
( point \(4\) above.) s
5 181 M
( If the nofeedback timer expires when the sender does not yet) s
5 170 M
( have an RTT sample and has not yet received any feedback from) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.4. [Page 14]) s
_R
S
%%Page: (15) 15
%%BeginPageSetup
_S
24 24 translate
/pagenum 15 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( the receiver, or when p == 0, then step \(1\) can be skipped, and) s
5 676 M
( the sending rate cut in half directly:) s
5 654 M
( X = max\(X/2, s/t_mbi\)) s
5 610 M
( 3\) Restart the nofeedback timer to expire after max\(4*R, 2*s/X\)) s
5 599 M
( seconds.) s
5 577 M
( Note that when the sender stops sending, the receiver will stop) s
5 566 M
( sending feedback. This will cause the nofeedback timer to start to) s
5 555 M
( expire and decrease X_recv. If the sender subsequently starts to) s
5 544 M
( send again, X_recv will limit the transmit rate, and a normal) s
5 533 M
( slowstart phase will occur until the transmit rate reaches X_calc.) s
5 511 M
(4.5. Sending a packet after an idle period) s
5 489 M
( If the sender has been idle \(unable to send because there is no data) s
5 478 M
( from the application\), the allowed sending rate could have been) s
5 467 M
( reduced due to the nofeedback timer, as specified in the section) s
5 456 M
( above. Because the sender is always restricted to sending at most) s
5 445 M
( twice the receive rate reported by the receiver, the sender will be) s
5 434 M
( limited to at most doubling its sending rate each round-trip time,) s
5 423 M
( until the sending rate reaches the allowed sending rate calculated) s
5 412 M
( by the throughput equation.) s
5 390 M
(4.6. Preventing Oscillations) s
5 357 M
( To prevent oscillatory behavior in environments with a low degree of) s
5 346 M
( statistical multiplexing it is useful to modify sender's transmit) s
5 335 M
( rate to provide congestion avoidance behavior by reducing the) s
5 324 M
( transmit rate as the queuing delay \(and hence RTT\) increases. To do) s
5 313 M
( this the sender maintains an estimate of the long-term RTT and) s
5 302 M
( modifies its sending rate depending on how the most recent sample of) s
5 291 M
( the RTT differs from this value. The long-term sample is R_sqmean,) s
5 280 M
( and is set as follows:) s
5 258 M
( If no feedback has been received before) s
5 247 M
( R_sqmean = sqrt\(R_sample\);) s
5 236 M
( Else) s
5 225 M
( R_sqmean = q2*R_sqmean + \(1-q2\)*sqrt\(R_sample\);) s
5 203 M
( Thus R_sqmean gives the exponentially weighted moving average of the) s
5 192 M
( square root of the RTT samples. The constant q2 should be set) s
5 181 M
( similarly to q, and we recommend a value of 0.9 as the default.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.6. [Page 15]) s
_R
S
%%Page: (16) 16
%%BeginPageSetup
_S
24 24 translate
/pagenum 16 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The sender obtains the base transmit rate, X, from the throughput) s
5 676 M
( function. It then calculates a modified instantaneous transmit rate) s
5 665 M
( X_inst, as follows:) s
5 643 M
( X_inst = X * R_sqmean / sqrt\(R_sample\);) s
5 610 M
( When sqrt\(R_sample\) is greater than R_sqmean then the queue is) s
5 599 M
( typically increasing and so the transmit rate needs to be decreased) s
5 588 M
( for stable operation.) s
5 566 M
( Note: This modification is not always strictly required, especially) s
5 555 M
( if the degree of statistical multiplexing in the network is high.) s
5 544 M
( However, we recommend that it is done because it does make TFRC) s
5 533 M
( behave better in environments with a low level of statistical) s
5 522 M
( multiplexing. If it is not done, we recommend using a very low) s
5 511 M
( value of q, such that q is close to or exactly zero.) s
5 489 M
(4.7. Scheduling of Packet Transmissions) s
5 467 M
( As TFRC is rate-based, and as operating systems typically cannot) s
5 456 M
( schedule events precisely, it is necessary to be opportunistic about) s
5 445 M
( sending data packets so that the correct average rate is maintained) s
5 434 M
( despite the course-grain or irregular scheduling of the operating) s
5 423 M
( system. Thus a typical sending loop will calculate the correct) s
5 412 M
( inter-packet interval, t_ipi, as follows:) s
5 390 M
( t_ipi = s/X_inst;) s
5 368 M
( When a sender first starts sending at time t_0, it calculates t_ipi,) s
5 357 M
( and calculates a nominal send time t_1 = t_0 + t_ipi for packet 1.) s
5 346 M
( When the application becomes idle, it checks the current time,) s
5 335 M
( t_now, and then requests re-scheduling after \(t_ipi - \(t_now - t_0\)\)) s
5 324 M
( seconds. When the application is re-scheduled, it checks the) s
5 313 M
( current time, t_now, again. If \(t_now > t_1 - delta\) then packet 1) s
5 302 M
( is sent.) s
5 280 M
( Now a new t_ipi may be calculated, and used to calculate a nominal) s
5 269 M
( send time t_2 for packet 2: t2 = t_1 + t_ipi. The process then) s
5 258 M
( repeats, with each successive packet's send time being calculated) s
5 247 M
( from the nominal send time of the previous packet.) s
5 225 M
( In some cases, when the nominal send time, t_i, of the next packet) s
5 214 M
( is calculated, it may already be the case that t_now > t_i - delta.) s
5 203 M
( In such a case the packet should be sent immediately. Thus if the) s
5 192 M
( operating system has coarse timer granularity and the transmit rate) s
5 181 M
( is high, then TFRC may send short bursts of several packets) s
5 170 M
( separated by intervals of the OS timer granularity.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 4.7. [Page 16]) s
_R
S
%%Page: (17) 17
%%BeginPageSetup
_S
24 24 translate
/pagenum 17 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The parameter delta is to allow a degree of flexibility in the send) s
5 676 M
( time of a packet. If the operating system has a scheduling timer) s
5 665 M
( granularity of t_gran seconds, then delta would typically be set to:) s
5 643 M
( delta = min\(t_ipi/2, t_gran/2\);) s
5 621 M
( t_gran is 10ms on many Unix systems. If t_gran is not known, a) s
5 610 M
( value of 10ms can be safely assumed.) s
5 588 M
(5. Calculation of the Loss Event Rate \(p\)) s
5 566 M
( Obtaining an accurate and stable measurement of the loss event rate) s
5 555 M
( is of primary importance for TFRC. Loss rate measurement is) s
5 544 M
( performed at the receiver, based on the detection of lost or marked) s
5 533 M
( packets from the sequence numbers of arriving packets. We describe) s
5 522 M
( this process before describing the rest of the receiver protocol.) s
5 500 M
(5.1. Detection of Lost or Marked Packets) s
5 478 M
( TFRC assumes that all packets contain a sequence number that is) s
5 467 M
( incremented by one for each packet that is sent. For the purposes) s
5 456 M
( of this specification, we require that if a lost packet is) s
5 445 M
( retransmitted, the retransmission is given a new sequence number) s
5 434 M
( that is the latest in the transmission sequence, and not the same) s
5 423 M
( sequence number as the packet that was lost. If a transport) s
5 412 M
( protocol has the requirement that it must retransmit with the) s
5 401 M
( original sequence number, then the transport protocol designer must) s
5 390 M
( figure out how to distinguish delayed from retransmitted packets and) s
5 379 M
( how to detect lost retransmissions.) s
5 357 M
( The receiver maintains a data structure that keeps track of which) s
5 346 M
( packets have arrived and which are missing. For the purposes of) s
5 335 M
( specification, we assume that the data structure consists of a list) s
5 324 M
( of packets that have arrived along with the receiver timestamp when) s
5 313 M
( each packet was received. In practice this data structure will) s
5 302 M
( normally be stored in a more compact representation, but this is) s
5 291 M
( implementation-specific.) s
5 269 M
( The loss of a packet is detected by the arrival of at least NDUPACK) s
5 258 M
( packets with a higher sequence number than the lost packet, for) s
5 247 M
( NDUPACK set to 3. The requirement for NDUPACK subsequent packets is) s
5 236 M
( the same as with TCP, and is to make TFRC more robust in the) s
5 225 M
( presence of reordering. In contrast to TCP, if a packet arrives) s
5 214 M
( late \(after NDUPACK subsequent packets arrived\) in TFRC, the late) s
5 203 M
( packet can fill the hole in TFRC's reception record, and the) s
5 192 M
( receiver can recalculate the loss event rate. Future versions of) s
5 181 M
( TFRC might make the requirement for NDUPACK subsequent packets) s
5 170 M
( adaptive based on experienced packet reordering, but we do not) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.1. [Page 17]) s
_R
S
%%Page: (18) 18
%%BeginPageSetup
_S
24 24 translate
/pagenum 18 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( specify such a mechanism here.) s
5 665 M
( For an ECN-capable connection, a marked packet is detected as a) s
5 654 M
( congestion event as soon as it arrives, without having to wait for) s
5 643 M
( the arrival of subsequent packets.) s
5 610 M
(5.2. Translation from Loss History to Loss Events) s
5 588 M
( TFRC requires that the loss fraction be robust to several) s
5 577 M
( consecutive packets lost where those packets are part of the same) s
5 566 M
( loss event. This is similar to TCP, which \(typically\) only performs) s
5 555 M
( one halving of the congestion window during any single RTT. Thus) s
5 544 M
( the receiver needs to map the packet loss history into a loss event) s
5 533 M
( record, where a loss event is one or more packets lost in an RTT.) s
5 522 M
( To perform this mapping, the receiver needs to know the RTT to use,) s
5 511 M
( and this is supplied periodically by the sender, typically as) s
5 500 M
( control information piggy-backed onto a data packet. TFRC is not) s
5 489 M
( sensitive to how the RTT measurement sent to the receiver is made,) s
5 478 M
( but we recommend using the sender's calculated RTT, R, \(see Section) s
5 467 M
( 4.3\) for this purpose.) s
5 445 M
( To determine whether a lost or marked packet should start a new loss) s
5 434 M
( event, or be counted as part of an existing loss event, we need to) s
5 423 M
( compare the sequence numbers and timestamps of the packets that) s
5 412 M
( arrived at the receiver. For a marked packet S_new, its reception) s
5 401 M
( time T_new can be noted directly. For a lost packet, we can) s
5 390 M
( interpolate to infer the nominal "arrival time". Assume:) s
5 368 M
( S_loss is the sequence number of a lost packet.) s
5 346 M
( S_before is the sequence number of the last packet to arrive) s
5 335 M
( with sequence number before S_loss.) s
5 313 M
( S_after is the sequence number of the first packet to arrive) s
5 302 M
( with sequence number after S_loss.) s
5 280 M
( T_before is the reception time of S_before.) s
5 258 M
( T_after is the reception time of S_after.) s
5 236 M
( Note that T_before can either be before or after T_after due to) s
5 225 M
( reordering.) s
5 203 M
( For a lost packet S_loss, we can interpolate its nominal "arrival) s
5 192 M
( time" at the receiver from the arrival times of S_before and) s
5 181 M
( S_after. Thus:) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.2. [Page 18]) s
_R
S
%%Page: (19) 19
%%BeginPageSetup
_S
24 24 translate
/pagenum 19 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( T_loss = T_before + \( \(T_after - T_before\)) s
5 676 M
( * \(S_loss - S_before\)/\(S_after - S_before\) \);) s
5 643 M
( Note that if the sequence space wrapped between S_before and) s
5 632 M
( S_after, then the sequence numbers must be modified to take this) s
5 621 M
( into account before performing this calculation. If the largest) s
5 610 M
( possible sequence number is S_max, and S_before > S_after, then) s
5 599 M
( modifying each sequence number S by S' = \(S + \(S_max + 1\)/2\) mod) s
5 588 M
( \(S_max + 1\) would normally be sufficient.) s
5 566 M
( If the lost packet S_old was determined to have started the previous) s
5 555 M
( loss event, and we have just determined that S_new has been lost,) s
5 544 M
( then we interpolate the nominal arrival times of S_old and S_new,) s
5 533 M
( called T_old and T_new respectively.) s
5 511 M
( If T_old + R >= T_new, then S_new is part of the existing loss) s
5 500 M
( event. Otherwise S_new is the first packet in a new loss event.) s
5 467 M
(5.3. Inter-loss Event Interval) s
5 445 M
( If a loss interval, A, is determined to have started with packet) s
5 434 M
( sequence number S_A and the next loss interval, B, started with) s
5 423 M
( packet sequence number S_B, then the number of packets in loss) s
5 412 M
( interval A is given by \(S_B - S_A\).) s
5 368 M
(5.4. Average Loss Interval) s
5 346 M
( To calculate the loss event rate p, we first calculate the average) s
5 335 M
( loss interval. This is done using a filter that weights the n most) s
5 324 M
( recent loss event intervals in such a way that the measured loss) s
5 313 M
( event rate changes smoothly.) s
5 291 M
( Weights w_0 to w_\(n-1\) are calculated as:) s
5 269 M
( If \(i < n/2\)) s
5 258 M
( w_i = 1;) s
5 247 M
( Else) s
5 236 M
( w_i = 1 - \(i - \(n/2 - 1\)\)/\(n/2 + 1\);) s
5 203 M
( Thus if n=8, the values of w_0 to w_7 are:) s
5 181 M
( 1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.4. [Page 19]) s
_R
S
%%Page: (20) 20
%%BeginPageSetup
_S
24 24 translate
/pagenum 20 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The value n for the number of loss intervals used in calculating the) s
5 676 M
( loss event rate determines TFRC's speed in responding to changes in) s
5 665 M
( the level of congestion. As currently specified, TFRC should not be) s
5 654 M
( used for values of n significantly greater than 8, for traffic that) s
5 643 M
( might compete in the global Internet with TCP. At the very least,) s
5 632 M
( safe operation with values of n greater than 8 would require a) s
5 621 M
( slight change to TFRC's mechanisms to include a more severe response) s
5 610 M
( to two or more round-trip times with heavy packet loss.) s
5 588 M
( When calculating the average loss interval we need to decide whether) s
5 577 M
( to include the interval since the most recent packet loss event. We) s
5 566 M
( only do this if it is sufficiently large to increase the average) s
5 555 M
( loss interval.) s
5 533 M
( Let the most recent loss intervals be I_0 to I_k, where I_0 is the) s
5 522 M
( interval since the most recent loss event. If there have been at) s
5 511 M
( least n loss intervals, then k is set to n; otherwise k is the) s
5 500 M
( maximum number of loss intervals seen so far. We calculate the) s
5 489 M
( average loss interval I_mean is:) s
5 467 M
( I_tot0 = 0;) s
5 456 M
( I_tot1 = 0;) s
5 445 M
( W_tot = 0;) s
5 434 M
( for \(i = 0 to k-1\) {) s
5 423 M
( I_tot0 = I_tot0 + \(I_i * w_i\);) s
5 412 M
( W_tot = W_tot + w_i;) s
5 401 M
( }) s
5 390 M
( for \(i = 1 to k\) {) s
5 379 M
( I_tot1 = I_tot1 + \(I_i * w_\(i-1\)\);) s
5 368 M
( }) s
5 357 M
( I_tot = max\(I_tot0, I_tot1\);) s
5 346 M
( I_mean = I_tot/W_tot;) s
5 324 M
( The loss event rate, p is simply:) s
5 302 M
( p = 1 / I_mean;) s
5 269 M
(5.5. History Discounting) s
5 247 M
( As described in Section 5.4, the most recent loss interval is only) s
5 236 M
( assigned 1/\(0.75*n\) of the total weight in calculating the average) s
5 225 M
( loss interval, regardless of the size of the most recent loss) s
5 214 M
( interval. This section describes an optional history discounting) s
5 203 M
( mechanism, discussed further in [FHPW00a] and [W00], that allows the) s
5 192 M
( TFRC receiver to adjust the weights, concentrating more of the) s
5 181 M
( relative weight on the most recent loss interval, when the most) s
5 170 M
( recent loss interval is more than twice as large as the computed) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.5. [Page 20]) s
_R
S
%%Page: (21) 21
%%BeginPageSetup
_S
24 24 translate
/pagenum 21 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( average loss interval.) s
5 665 M
( To carry out history discounting, we associate a discount factor) s
5 654 M
( DF_i with each loss interval L_i, for i > 0, where each discount) s
5 643 M
( factor is a floating point number. The discount array maintains the) s
5 632 M
( cumulative history of discounting for each loss interval. At the) s
5 621 M
( beginning, the values of DF_i in the discount array are initialized) s
5 610 M
( to 1:) s
5 588 M
( for \(i = 0 to n\) {) s
5 577 M
( DF_i = 1;) s
5 566 M
( }) s
5 544 M
( History discounting also uses a general discount factor DF, also a) s
5 533 M
( floating point number, that is also initialized to 1. First we show) s
5 522 M
( how the discount factors are used in calculating the average loss) s
5 511 M
( interval, and then we describe later in this section how the) s
5 500 M
( discount factors are modified over time.) s
5 478 M
( As described in Section 5.4 the average loss interval is calculated) s
5 467 M
( using the n previous loss intervals I_1, ..., I_n, and the interval) s
5 456 M
( I_0 that represents the number of packets received since the last) s
5 445 M
( loss event. The computation of the average loss interval using the) s
5 434 M
( discount factors is a simple modification of the procedure in) s
5 423 M
( Section 5.4, as follows:) s
5 401 M
( I_tot0 = I_0 * w_0) s
5 390 M
( I_tot1 = 0;) s
5 379 M
( W_tot0 = w_0) s
5 368 M
( W_tot1 = 0;) s
5 357 M
( for \(i = 1 to n-1\) {) s
5 346 M
( I_tot0 = I_tot0 + \(I_i * w_i * DF_i * DF\);) s
5 335 M
( W_tot0 = W_tot0 + w_i * DF_i * DF;) s
5 324 M
( }) s
5 313 M
( for \(i = 1 to n\) {) s
5 302 M
( I_tot1 = I_tot1 + \(I_i * w_\(i-1\) * DF_i\);) s
5 291 M
( W_tot1 = W_tot1 + w_\(i-1\) * DF_i;) s
5 280 M
( }) s
5 269 M
( p = min\(W_tot0/I_tot0, W_tot1/I_tot1\);) s
5 247 M
( The general discounting factor, DF is updated on every packet) s
5 236 M
( arrival as follows. First, the receiver computes the weighted) s
5 225 M
( average I_mean of the loss intervals I_1, ..., I_n:) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.5. [Page 21]) s
_R
S
%%Page: (22) 22
%%BeginPageSetup
_S
24 24 translate
/pagenum 22 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( I_tot = 0;) s
5 676 M
( W_tot = 0;) s
5 665 M
( for \(i = 1 to n\) {) s
5 654 M
( W_tot = W_tot + w_\(i-1\) * DF_i;) s
5 643 M
( I_tot = I_tot + \(I_i * w_\(i-1\) * DF_i\);) s
5 632 M
( }) s
5 621 M
( I_mean = I_tot / W_tot;) s
5 599 M
( This weighted average I_mean is compared to I_0, the number of) s
5 588 M
( packets received since the last loss event. If I_0 is greater than) s
5 577 M
( twice I_mean, then the new loss interval is considerably larger than) s
5 566 M
( the old ones, and the general discount factor DF is updated to) s
5 555 M
( decrease the relative weight on the older intervals, as follows:) s
5 522 M
( if \(I_0 > 2 * I_mean\) {) s
5 511 M
( DF = 2 * I_mean/I_0;) s
5 500 M
( if \(DF < THRESHOLD\)) s
5 489 M
( DF = THRESHOLD;) s
5 478 M
( } else) s
5 467 M
( DF = 1;) s
5 445 M
( A nonzero value for THRESHOLD ensures that older loss intervals from) s
5 434 M
( an earlier time of high congestion are not discounted entirely. We) s
5 423 M
( recommend a THRESHOLD of 0.5. Note that with each new packet) s
5 412 M
( arrival, I_0 will increase further, and the discount factor DF will) s
5 401 M
( be updated.) s
5 379 M
( When a new loss event occurs, the current interval shifts from I_0) s
5 368 M
( to I_1, loss interval I_i shifts to interval I_\(i+1\), and the loss) s
5 357 M
( interval I_n is forgotten. The previous discount factor DF has to) s
5 346 M
( be incorporated into the discount array. Because DF_i carries the) s
5 335 M
( discount factor associated with loss interval I_i, the DF_i array) s
5 324 M
( has to be shifted as well. This is done as follows:) s
5 302 M
( for \(i = 1 to n\) {) s
5 291 M
( DF_i = DF * DF_i;) s
5 280 M
( }) s
5 269 M
( for \(i = n-1 to 0 step -1\) {) s
5 258 M
( DF_\(i+1\) = DF_i;) s
5 247 M
( }) s
5 236 M
( I_0 = 1;) s
5 225 M
( DF_0 = 1;) s
5 214 M
( DF = 1;) s
5 181 M
( This completes the description of the optional history discounting) s
5 170 M
( mechanism. We emphasize that this is an optional mechanism whose) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 5.5. [Page 22]) s
_R
S
%%Page: (23) 23
%%BeginPageSetup
_S
24 24 translate
/pagenum 23 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( sole purpose is to allow TFRC to response somewhat more quickly to) s
5 676 M
( the sudden absence of congestion, as represented by a long current) s
5 665 M
( loss interval.) s
5 632 M
(6. Data Receiver Protocol) s
5 610 M
( The receiver periodically sends feedback messages to the sender.) s
5 599 M
( Feedback packets should normally be sent at least once per RTT,) s
5 588 M
( unless the sender is sending at a rate of less than one packet per) s
5 577 M
( RTT, in which case a feedback packet should be send for every data) s
5 566 M
( packet received. A feedback packet should also be sent whenever a) s
5 555 M
( new loss event is detected without waiting for the end of an RTT,) s
5 544 M
( and whenever an out-of-order data packet is received that removes a) s
5 533 M
( loss event from the history.) s
5 511 M
( If the sender is transmitting at a high rate \(many packets per RTT\)) s
5 500 M
( there may be some advantages to sending periodic feedback messages) s
5 489 M
( more than once per RTT as this allows faster response to changing) s
5 478 M
( RTT measurements, and more resilience to feedback packet loss.) s
5 467 M
( However, there is little gain from sending a large number of) s
5 456 M
( feedback messages per RTT.) s
5 423 M
(6.1. Receiver behavior when a data packet is received) s
5 401 M
( When a data packet is received, the receiver performs the following) s
5 390 M
( steps:) s
5 368 M
( 1\) Add the packet to the packet history.) s
5 346 M
( 2\) Let the previous value of p be p_prev. Calculate the new value) s
5 335 M
( of p as described in Section 5.) s
5 313 M
( 3\) If p > p_prev, cause the feedback timer to expire, and perform) s
5 302 M
( the actions described in Section 6.2) s
5 280 M
( If p <= p_prev no action need be performed.) s
5 258 M
( However an optimization might check to see if the arrival of the) s
5 247 M
( packet caused a hole in the packet history to be filled and) s
5 236 M
( consequently two loss intervals were merged into one. If this) s
5 225 M
( is the case, the receiver might also send feedback immediately.) s
5 214 M
( The effects of such an optimization are normally expected to be) s
5 203 M
( small.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 6.1. [Page 23]) s
_R
S
%%Page: (24) 24
%%BeginPageSetup
_S
24 24 translate
/pagenum 24 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(6.2. Expiration of feedback timer) s
5 665 M
( When the feedback timer at the receiver expires, the action to be) s
5 654 M
( taken depends on whether data packets have been received since the) s
5 643 M
( last feedback was sent.) s
5 621 M
( Let the maximum sequence number of a packet at the receiver so far) s
5 610 M
( be S_m, and the value of the RTT measurement included in packet S_m) s
5 599 M
( be R_m. If data packets have been received since the previous) s
5 588 M
( feedback was sent, the receiver performs the following steps:) s
5 566 M
( 1\) Calculate the average loss event rate using the algorithm) s
5 555 M
( described above.) s
5 533 M
( 2\) Calculate the measured receive rate, X_recv, based on the) s
5 522 M
( packets received within the previous R_m seconds.) s
5 500 M
( 3\) Prepare and send a feedback packet containing the information) s
5 489 M
( described in Section 3.2.2) s
5 467 M
( 4\) Restart the feedback timer to expire after R_m seconds.) s
5 445 M
( If no data packets have been received since the last feedback was) s
5 434 M
( sent, no feedback packet is sent, and the feedback timer is) s
5 423 M
( restarted to expire after R_m seconds.) s
5 379 M
(6.3. Receiver initialization) s
5 357 M
( The receiver is initialized by the first packet that arrives at the) s
5 346 M
( receiver. Let the sequence number of this packet be i.) s
5 324 M
( When the first packet is received:) s
5 302 M
( o Set p=0) s
5 280 M
( o Set X_recv = 0.) s
5 258 M
( o Prepare and send a feedback packet.) s
5 236 M
( o Set the feedback timer to expire after R_i seconds.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 6.3. [Page 24]) s
_R
S
%%Page: (25) 25
%%BeginPageSetup
_S
24 24 translate
/pagenum 25 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
(6.3.1. Initializing the Loss History after the First Loss Event) s
5 665 M
( The number of packets until the first loss can not be used to) s
5 654 M
( compute the sending rate directly, as the sending rate changes) s
5 643 M
( rapidly during this time. TFRC assumes that the correct data rate) s
5 632 M
( after the first loss is half of the sending rate when the loss) s
5 621 M
( occurred. TFRC approximates this target rate by X_recv, the receive) s
5 610 M
( rate over the most recent round-trip time. After the first loss,) s
5 599 M
( instead of initializing the first loss interval to the number of) s
5 588 M
( packets sent until the first loss, the TFRC receiver calculates the) s
5 577 M
( loss interval that would be required to produce the data rate) s
5 566 M
( X_recv, and uses this synthetic loss interval to seed the loss) s
5 555 M
( history mechanism.) s
5 533 M
( TFRC does this by finding some value p for which the throughput) s
5 522 M
( equation in Section 3.1 gives a sending rate within 5% of X_recv,) s
5 511 M
( given the round-trip time R, and the first loss interval is then set) s
5 500 M
( to 1/p. If the receiver knows the segment size s used by the) s
5 489 M
( sender, then the receiver can use the throughput equation for X;) s
5 478 M
( otherwise, the receiver can meaure the receive rate in packets per) s
5 467 M
( second instead of bytes per second for this purpose, and use the) s
5 456 M
( throughput equation for X_pps. \(The 5% tolerance is introduced) s
5 445 M
( simply because the throughput equation is difficult to invert, and) s
5 434 M
( we want to reduce the costs of calculating p numerically.\)) s
5 401 M
(7. Sender-based Variants) s
5 379 M
( It would be possible to implement a sender-based variant of TFRC,) s
5 368 M
( where the receiver uses reliable delivery to send information about) s
5 357 M
( packet losses to the sender, and the sender computes the packet loss) s
5 346 M
( rate and the acceptable transmit rate. However, we do not specify) s
5 335 M
( the details of a sender-based variant in this document.) s
5 313 M
( The main advantages of a sender-based variant of TFRC would be that) s
5 302 M
( the sender would not have to trust the receiver's calculation of the) s
5 291 M
( packet loss rate. However, with the requirement of reliable) s
5 280 M
( delivery of loss information from the receiver to the sender, a) s
5 269 M
( sender-based TFRC would have much tighter constraints on the) s
5 258 M
( transport protocol in which it is embedded.) s
5 236 M
( In contrast, the receiver-based variant of TFRC specified in this) s
5 225 M
( document is robust to the loss of feedback packets, and therefore) s
5 214 M
( does not require the reliable delivery of feedback packets. It is) s
5 203 M
( also better suited for applications such as streaming media from web) s
5 192 M
( servers, where it is typically desirable to offload work from the) s
5 181 M
( server to the client as much as possible.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 7. [Page 25]) s
_R
S
%%Page: (26) 26
%%BeginPageSetup
_S
24 24 translate
/pagenum 26 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The sender-based and receiver-based variants also have different) s
5 676 M
( properties in terms of upgrades. For example, for changes in the) s
5 665 M
( procedure for calculating the packet loss rate, the sender would) s
5 654 M
( have to be upgraded in the sender-based variant, and the receiver) s
5 643 M
( would have to be upgraded in the receiver-based variant.) s
5 610 M
(8. Implementation Issues) s
5 588 M
( This document has specified the TFRC congestion control mechanism,) s
5 577 M
( for use by applications and transport protocols. This section) s
5 566 M
( mentions briefly some of the few implementation issues.) s
5 544 M
( For t_RTO = 4*R and b = 1, the throughput equation in Section 3.1) s
5 533 M
( can be expressed as follows:) s
5 500 M
( s) s
5 489 M
( X = --------) s
5 478 M
( R * f\(p\)) s
5 456 M
( for) s
5 423 M
( f\(p\) = sqrt\(2*p/3\) + \(12*sqrt\(3*p/8\) * p * \(1+32*p^2\)\).) s
5 401 M
( A table lookup could be used for the function f\(p\).) s
5 379 M
( Many of the multiplications \(e.g., q and 1-q for the round-trip time) s
5 368 M
( average, a factor of 4 for the timeout interval\) are or could be by) s
5 357 M
( powers of two, and therefore could be implemented as simple shift) s
5 346 M
( operations.) s
5 324 M
( We note that the optional sender mechanism for preventing) s
5 313 M
( oscillations described in Section 4.6 uses a square-root) s
5 302 M
( computation.) s
5 280 M
( The calculation of the average loss interval in Section 5.4 involves) s
5 269 M
( multiplications by the weights w_0 to w_\(n-1\), which for n=8 are:) s
5 247 M
( 1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2.) s
5 225 M
( With a minor loss of smoothness, it would be possible to use weights) s
5 214 M
( that were powers of two or sums of powers of two, e.g.,) s
5 192 M
( 1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.25.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 8. [Page 26]) s
_R
S
%%Page: (27) 27
%%BeginPageSetup
_S
24 24 translate
/pagenum 27 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( The optional history discounting mechanism described in Section 5.5) s
5 676 M
( is used in the calculation of the average loss rate. The history) s
5 665 M
( discounting mechanism is invoked only when there has been an) s
5 654 M
( unusually long interval with no packet losses. For a more efficient) s
5 643 M
( operation, the discount factor DF_i could be restricted to be a) s
5 632 M
( power of two.) s
5 599 M
(9. Changes from RFC 3448) s
5 577 M
( The changes from RFC 3448 are as follows:) s
5 555 M
( o Changes to the initial sending rate: In RFC 3448, the initial) s
5 544 M
( sending rate was two packets per round trip time. In this) s
5 533 M
( document, the initial sending rate can be as high as four) s
5 522 M
( packets per round trip time, following RFC 3390.) s
5 500 M
( Following Section 5.1 from [RFC4342], this document also) s
5 489 M
( specifies that when the sending rate is reduced after an idle) s
5 478 M
( period, it is not reduced below the initial sending rate. In) s
5 467 M
( addition, when the sender has been data-limited and the sender) s
5 456 M
( is reducing the allowed transmit rate to twice the receive) s
5 445 M
( rate,, the sender doesn't reduce the allowed transmit rate to) s
5 434 M
( less than the initial sending rate.) s
5 412 M
( A larger initial sending rate is of little use if the receiver) s
5 401 M
( sends a feedback packet after the first packet is received, and) s
5 390 M
( the sender in response reduces the allowed sending rate to at) s
5 379 M
( most twice the receive rate. In the current document, the) s
5 368 M
( sender does not reduce the allowed sending rate to at most twice) s
5 357 M
( the receive rate in response to the first feedback packet.) s
5 335 M
( o RFC 3448 had contradictory text about whether the sender halved) s
5 324 M
( its sending rate after *two* round-trip times without receiving) s
5 313 M
( a feedback report, or after *four* round-trip times. This) s
5 302 M
( document clarifies that the sender halves its sending rate after) s
5 291 M
( four round-trip times without receiving a feedback report) s
5 280 M
( [RFC3448errata].) s
5 258 M
( o Section 4.4 was clarified to specify that on the expiration of) s
5 247 M
( the nofeedback timer, if p = 0, step \(2\) applies instead of step) s
5 236 M
( \(1\) [RFC3448errata].) s
5 214 M
( o A line in Section 5.5 was changed from ``for \(i = 1 to n\) { DF_i) s
5 203 M
( = 1; }'' to ``for \(i = 0 to n\) { DF_i = 1; }'' [RFC3448errata].) s
5 181 M
( o Section 5.4 was modified to clarify the receiver's calculation) s
5 170 M
( of the average loss interval when the receiver has not yet seen) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 9. [Page 27]) s
_R
S
%%Page: (28) 28
%%BeginPageSetup
_S
24 24 translate
/pagenum 28 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( eight loss intervals.) s
5 665 M
( o Section 4.1 was modified to give a specific algorithm that could) s
5 654 M
( be used for estimating the average segment size.) s
5 632 M
(10. Security Considerations) s
5 610 M
( TFRC is not a transport protocol in its own right, but a congestion) s
5 599 M
( control mechanism that is intended to be used in conjunction with a) s
5 588 M
( transport protocol. Therefore security primarily needs to be) s
5 577 M
( considered in the context of a specific transport protocol and its) s
5 566 M
( authentication mechanisms.) s
5 544 M
( Congestion control mechanisms can potentially be exploited to create) s
5 533 M
( denial of service. This may occur through spoofed feedback. Thus) s
5 522 M
( any transport protocol that uses TFRC should take care to ensure) s
5 511 M
( that feedback is only accepted from the receiver of the data. The) s
5 500 M
( precise mechanism to achieve this will however depend on the) s
5 489 M
( transport protocol itself.) s
5 467 M
( In addition, congestion control mechanisms may potentially be) s
5 456 M
( manipulated by a greedy receiver that wishes to receive more than) s
5 445 M
( its fair share of network bandwidth. A receiver might do this by) s
5 434 M
( claiming to have received packets that in fact were lost due to) s
5 423 M
( congestion. Possible defenses against such a receiver would) s
5 412 M
( normally include some form of nonce that the receiver must feed back) s
5 401 M
( to the sender to prove receipt. However, the details of such a) s
5 390 M
( nonce would depend on the transport protocol, and in particular on) s
5 379 M
( whether the transport protocol is reliable or unreliable.) s
5 357 M
( We expect that protocols incorporating ECN with TFRC will also want) s
5 346 M
( to incorporate feedback from the receiver to the sender using the) s
5 335 M
( ECN nonce [RFC3540]. The ECN nonce is a modification to ECN that) s
5 324 M
( protects the sender from the accidental or malicious concealment of) s
5 313 M
( marked packets. Again, the details of such a nonce would depend on) s
5 302 M
( the transport protocol, and are not addressed in this document.) s
5 269 M
(11. IANA Considerations) s
5 247 M
( There are no IANA actions required for this document.) s
5 214 M
(12. Acknowledgments) s
5 192 M
( We would like to acknowledge feedback and discussions on equation-) s
5 181 M
( based congestion control with a wide range of people, including) s
5 170 M
( members of the Reliable Multicast Research Group, the Reliable) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 12. [Page 28]) s
_R
S
%%Page: (29) 29
%%BeginPageSetup
_S
24 24 translate
/pagenum 29 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( Multicast Transport Working Group, and the End-to-End Research) s
5 676 M
( Group. We would like to thank Wim Heirman, Ken Lofgren, Mike Luby,) s
5 665 M
( Michele R., Vladica Stanisic, Randall Stewart, Eduardo Urzaiz,) s
5 654 M
( Shushan Wen, and Wendy Lee \(lhh@zsu.edu.cn\) for feedback on earlier) s
5 643 M
( versions of this document, and to thank Mark Allman for his) s
5 632 M
( extensive feedback from using the document to produce a working) s
5 621 M
( implementation.) s
5 599 M
(13. Normative References) s
5 577 M
(14. Informational References) s
5 555 M
( [BRS99] Balakrishnan, H., Rahul, H., and Seshan, S., "An) s
5 544 M
( Integrated Congestion Management Architecture for) s
5 533 M
( Internet Hosts," Proc. ACM SIGCOMM, Cambridge, MA,) s
5 522 M
( September 1999.) s
5 500 M
( [FHPW00] S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 489 M
( "Equation-Based Congestion Control for Unicast) s
5 478 M
( Applications", August 2000, Proc SIGCOMM 2000.) s
5 456 M
( [FHPW00a] S. Floyd, M. Handley, J. Padhye, and J. Widmer,) s
5 445 M
( "Equation-Based Congestion Control for Unicast) s
5 434 M
( Applications: the Extended Version", ICSI tech) s
5 423 M
( report TR-00-03, March 2000.) s
5 401 M
( [PFTK98] Padhye, J. and Firoiu, V. and Towsley, D. and) s
5 390 M
( Kurose, J., "Modeling TCP Throughput: A Simple Model) s
5 379 M
( and its Empirical Validation", Proc ACM SIGCOMM) s
5 368 M
( 1998.) s
5 346 M
( [RFC2119] S. Bradner, Key Words For Use in RFCs to Indicate) s
5 335 M
( Requirement Levels, RFC 2119.) s
5 313 M
( [RFC2140] J. Touch, "TCP Control Block Interdependence", RFC) s
5 302 M
( 2140, April 1997.) s
5 280 M
( [RFC2988] V. Paxson and M. Allman, "Computing TCP's) s
5 269 M
( Retransmission Timer", RFC 2988, November 2000.) s
5 247 M
( [RFC3168] K. Ramakrishnan and S. Floyd, "The Addition of) s
5 236 M
( Explicit Congestion Notification \(ECN\) to IP", RFC) s
5 225 M
( 3168, September 2001.) s
5 203 M
( [RFC3390] Allman, M., Floyd, S., and C. Partridge, "Increasing) s
5 192 M
( TCP's Initial Window", RFC 3390, October 2002.) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 14. [Page 29]) s
_R
S
%%Page: (30) 30
%%BeginPageSetup
_S
24 24 translate
/pagenum 30 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( [RFC3448Err] RFC 3448 Errata, URL) s
5 676 M
( ``http://www.icir.org/tfrc/rfc3448.errata''.) s
5 654 M
( [RFC3540] Wetherall, D., Ely, D., and Spring, N., "Robust ECN) s
5 643 M
( Signaling with Nonces", RFC 3540, Experimental, June) s
5 632 M
( 2003) s
5 610 M
( [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram) s
5 599 M
( Congestion Control Protocol \(DCCP\)", RFC 4340, March) s
5 588 M
( 2006.) s
5 566 M
( [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for) s
5 555 M
( Datagram Congestion Control Protocol \(DCCP\)) s
5 544 M
( Congestion Control ID 3: TCP-Friendly Rate Control) s
5 533 M
( \(TFRC\)", RFC 4342, March 2006.) s
5 511 M
( [W00] Widmer, J., "Equation-Based Congestion Control",) s
5 500 M
( Diploma Thesis, University of Mannheim, February) s
5 489 M
( 2000. URL "http://www.icir.org/tfrc/".) s
5 456 M
(15. Authors' Addresses) s
5 126 M
(Handley/Floyd/Padhye/Widmer Section 15. [Page 30]) s
_R
S
%%Page: (31) 31
%%BeginPageSetup
_S
24 24 translate
/pagenum 31 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( Mark Handley,) s
5 676 M
( Department of Computer Science) s
5 665 M
( University College London) s
5 654 M
( Gower Street) s
5 643 M
( London WC1E 6BT) s
5 632 M
( UK) s
5 621 M
( EMail: M.Handley@cs.ucl.ac.uk) s
5 599 M
( Sally Floyd) s
5 588 M
( ICIR/ICSI) s
5 577 M
( 1947 Center St, Suite 600) s
5 566 M
( Berkeley, CA 94708) s
5 555 M
( floyd@icir.org) s
5 533 M
( Jitendra Padhye) s
5 522 M
( Microsoft Research) s
5 511 M
( padhye@microsoft.com) s
5 478 M
( Joerg Widmer) s
5 467 M
( Lehrstuhl Praktische Informatik IV) s
5 456 M
( Universitat Mannheim) s
5 445 M
( L 15, 16 - Room 415) s
5 434 M
( D-68131 Mannheim) s
5 423 M
( Germany) s
5 412 M
( widmer@informatik.uni-mannheim.de) s
5 368 M
(Full Copyright Statement) s
5 346 M
( Copyright \(C\) The Internet Society 2006. This document is subject) s
5 335 M
( to the rights, licenses and restrictions contained in BCP 78, and) s
5 324 M
( except as set forth therein, the authors retain all their rights.) s
5 302 M
( This document and the information contained herein are provided on) s
5 291 M
( an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE) s
5 280 M
( REPRESENTS OR IS SPONSORED BY \(IF ANY\), THE INTERNET SOCIETY AND THE) s
5 269 M
( INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR) s
5 258 M
( IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF) s
5 247 M
( THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED) s
5 236 M
( WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.) s
5 214 M
(Intellectual Property) s
5 192 M
( The IETF takes no position regarding the validity or scope of any) s
5 181 M
( Intellectual Property Rights or other rights that might be claimed) s
5 170 M
( to pertain to the implementation or use of the technology described) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 31]) s
_R
S
%%Page: (32) 32
%%BeginPageSetup
_S
24 24 translate
/pagenum 32 def
/fname (rfc3448bis.txt) def
/fdir () def
/ftail (rfc3448bis.txt) def
/user_header_p false def
%%EndPageSetup
5 720 M
(INTERNET-DRAFT Expires: December 2006 June 2006) s
5 687 M
( in this document or the extent to which any license under such) s
5 676 M
( rights might or might not be available; nor does it represent that) s
5 665 M
( it has made any independent effort to identify any such rights.) s
5 654 M
( Information on the procedures with respect to rights in RFC) s
5 643 M
( documents can be found in BCP 78 and BCP 79.) s
5 621 M
( Copies of IPR disclosures made to the IETF Secretariat and any) s
5 610 M
( assurances of licenses to be made available, or the result of an) s
5 599 M
( attempt made to obtain a general license or permission for the use) s
5 588 M
( of such proprietary rights by implementers or users of this) s
5 577 M
( specification can be obtained from the IETF on-line IPR repository) s
5 566 M
( at http://www.ietf.org/ipr.) s
5 544 M
( The IETF invites any interested party to bring to its attention any) s
5 533 M
( copyrights, patents or patent applications, or other proprietary) s
5 522 M
( rights that may cover technology that may be required to implement) s
5 511 M
( this standard. Please address the information to the IETF at ietf-) s
5 500 M
( ipr@ietf.org.) s
5 126 M
(Handley/Floyd/Padhye/Widmer [Page 32]) s
_R
S
%%Trailer
%%Pages: 32
%%DocumentNeededResources: font Courier-Bold Courier
%%EOF
| PAFTECH AB 2003-2026 | 2026-04-22 14:19:01 |