分享
 
 
 

RFC2861 - TCP Congestion Window Validation

王朝system·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Network Working Group M. Handley

Request for Comments: 2861 J. Padhye

Category: EXPerimental S. Floyd

ACIRI

June 2000

TCP Congestion Window Validation

Status of this Memo

This memo defines an Experimental Protocol for the Internet

community. It does not specify an Internet standard of any kind.

Discussion and suggestions for improvement are requested.

Distribution of this memo is unlimited.

Copyright Notice

Copyright (C) The Internet Society (2000). All Rights Reserved.

Abstract

TCP's congestion window controls the number of packets a TCP flow may

have in the network at any time. However, long periods when the

sender is idle or application-limited can lead to the invalidation of

the congestion window, in that the congestion window no longer

reflects current information about the state of the network. This

document describes a simple modification to TCP's congestion control

algorithms to decay the congestion window cwnd after the transition

from a sufficiently-long application-limited period, while using the

slow-start threshold ssthresh to save information about the previous

value of the congestion window.

An invalid congestion window also results when the congestion window

is increased (i.e., in TCP's slow-start or congestion avoidance

phases) during application-limited periods, when the previous value

of the congestion window might never have been fully utilized. We

propose that the TCP sender should not increase the congestion window

when the TCP sender has been application-limited (and therefore has

not fully used the current congestion window). We have explored

these algorithms both with simulations and with experiments from an

implementation in FreeBSD.

1. Conventions and Acronyms

The keyWords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,

SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this

document, are to be interpreted as described in [B97].

2. IntrodUCtion

TCP's congestion window controls the number of packets a TCP flow may

have in the network at any time. The congestion window is set using

an Additive-Increase, Multiplicative-Decrease (AIMD) mechanism that

probes for available bandwidth, dynamically adapting to changing

network conditions. This AIMD mechanism works well when the sender

continually has data to send, as is typically the case for TCP used

for bulk-data transfer. In contrast, for TCP used with telnet

applications, the data sender often has little or no data to send,

and the sending rate is often determined by the rate at which data is

generated by the user. With the advent of the web, including

developments such as TCP senders with dynamically-created data and

HTTP 1.1 with persistent-connection TCP, the interaction between

application-limited periods (when the sender sends less than is

allowed by the congestion or receiver windows) and network-limited

periods (when the sender is limited by the TCP window) becomes

increasingly important. More precisely, we define a network-limited

period as any period when the sender is sending a full window of

data.

Long periods when the sender is application-limited can lead to the

invalidation of the congestion window. During periods when the TCP

sender is network-limited, the value of the congestion window is

repeatedly "revalidated" by the successful transmission of a window

of data without loss. When the TCP sender is network-limited, there

is an incoming stream of acknowledgements that "clocks out" new data,

giving concrete evidence of recent available bandwidth in the

network. In contrast, during periods when the TCP sender is

application-limited, the estimate of available capacity represented

by the congestion window may become steadily less accurate over time.

In particular, capacity that had once been used by the network-

limited connection might now be used by other traffic.

Current TCP implementations have a range of behaviors for starting up

after an idle period. Some current TCP implementations slow-start

after an idle period longer than the RTO estimate, as suggested in

[RFC2581] and in the appendix of [VJ88], while other implementations

don't reduce their congestion window after an idle period. RFC2581

[RFC2581] recommends the following: "a TCP SHOULD set cwnd to no more

than RW [the initial window] before beginning transmission if the TCP

has not sent data in an interval exceeding the retransmission

timeout." A proposal for TCP's slow-start after idle has also been

discussed in [HTH98]. The issue of validation of congestion

information during idle periods has also been addressed in contexts

other than TCP and IP, for example in "Use-it or Lose-it" mechanisms

for ATM networks [J96,J95].

To address the revalidation of the congestion window after a

application-limited period, we propose a simple modification to TCP's

congestion control algorithms to decay the congestion window cwnd

after the transition from a sufficiently-long application-limited

period (i.e., at least one roundtrip time) to a network-limited

period. In particular, we propose that after an idle period, the TCP

sender should reduce its congestion window by half for every RTT that

the flow has remained idle.

When the congestion window is reduced, the slow-start threshold

ssthresh remains as "memory" of the recent congestion window.

Specifically, ssthresh is never decreased when cwnd is reduced after

an application-limited period; before cwnd is reduced, ssthresh is

set to the maximum of its current value, and half-way between the old

and the new values of cwnd. This use of ssthresh allows a TCP sender

increasing its sending rate after an application-limited period to

quickly slow-start to recover most of the previous value of the

congestion window. To be more precise, if ssthresh is less than 3/4

cwnd when the congestion window is reduced after an application-

limited period, then ssthresh is increased to 3/4 cwnd before the

reduction of the congestion window.

An invalid congestion window also results when the congestion window

is increased (i.e., in TCP's slow-start or congestion avoidance

phases) during application-limited periods, when the previous value

of the congestion window might never have been fully utilized. As

far as we know, all current TCP implementations increase the

congestion window when an acknowledgement arrives, if allowed by the

receiver's advertised window and the slow-start or congestion

avoidance window increase algorithm, without checking to see if the

previous value of the congestion window has in fact been used. This

document proposes that the window increase algorithm not be invoked

during application-limited periods [MSML99]. In particular, the TCP

sender should not increase the congestion window when the TCP sender

has been application-limited (and therefore has not fully used the

current congestion window). This restriction prevents the congestion

window from growing arbitrarily large, in the absence of evidence

that the congestion window can be supported by the network. From

[MSML99, Section 5.2]: "This restriction assures that [cwnd] only

grows as long as TCP actually succeeds in injecting enough data into

the network to test the path."

A somewhat-orthogonal problem associated with maintaining a large

congestion window after an application-limited period is that the

sender, with a sudden large amount of data to send after a quiescent

period, might immediately send a full congestion window of back-to-

back packets. This problem of sending large bursts of packets back-

to-back can be effectively handled using rate-based pacing (RBP,

[VH97]), or using a maximum burst size control [FF96]. We would

contend that, even with mechanisms for limiting the sending of back-

to-back packets or pacing packets out over the period of a roundtrip

time, an old congestion window that has not been fully used for some

time can not be trusted as an indication of the bandwidth currently

available for that flow. We would contend that the mechanisms to

pace out packets allowed by the congestion window are largely

orthogonal to the algorithms used to determine the appropriate size

of the congestion window.

3. Description

When a TCP sender has sufficient data available to fill the available

network capacity for that flow, cwnd and ssthresh get set to

appropriate values for the network conditions. When a TCP sender

stops sending, the flow stops sampling the network conditions, and so

the value of the congestion window may become inaccurate. We believe

the correct conservative behavior under these circumstances is to

decay the congestion window by half for every RTT that the flow

remains inactive. The value of half is a very conservative figure

based on how quickly multiplicative decrease would have decayed the

window in the presence of loss.

Another possibility is that the sender may not stop sending, but may

become application-limited rather than network-limited, and offer

less data to the network than the congestion window allows to be

sent. In this case the TCP flow is still sampling network

conditions, but is not offering sufficient traffic to be sure that

there is still sufficient capacity in the network for that flow to

send a full congestion window. Under these circumstances we believe

the correct conservative behavior is for the sender to keep track of

the maximum amount of the congestion window used during each RTT, and

to decay the congestion window each RTT to midway between the current

cwnd value and the maximum value used.

Before the congestion window is reduced, ssthresh is set to the

maximum of its current value and 3/4 cwnd. If the sender then has

more data to send than the decayed cwnd allows, the TCP will slow-

start (perform exponential increase) at least half-way back up to the

old value of cwnd.

The justification for this value of "3/4 cwnd" is that 3/4 cwnd is a

conservative estimate of the recent average value of the congestion

window, and the TCP should safely be able to slow-start at least up

to this point. For a TCP in steady-state that has been reducing its

congestion window each time the congestion window reached some

maximum value `maxwin', the average congestion window has been 3/4

maxwin. On average, when the connection becomes application-limited,

cwnd will be 3/4 maxwin, and in this case cwnd itself represents the

average value of the congestion window. However, if the connection

happens to become application-limited when cwnd equals maxwin, then

the average value of the congestion window is given by 3/4 cwnd.

An alternate possibility would be to set ssthresh to the maximum of

the current value of ssthresh, and the old value of cwnd, allowing

TCP to slow-start all of the way back up to the old value of cwnd.

Further experimentation can be used to evaluate these two options for

setting ssthresh.

For the separate issue of the increase of the congestion window in

response to an acknowledgement, we believe the correct behavior is

for the sender to increase the congestion window only if the window

was full when the acknowledgment arrived.

We term this set of modifications to TCP Congestion Window Validation

(CWV) because they are related to ensuring the congestion window is

always a valid reflection of the current network state as probed by

the connection.

3.1. The basic algorithm for reducing the congestion window

A key issue in the CWV algorithm is to determine how to apply the

guideline of reducing the congestion window once for every roundtrip

time that the flow is application-limited. We use TCP's

retransmission timer (RTO) as a reasonable upper bound on the

roundtrip time, and reduce the congestion window roughly once per

RTO.

This basic algorithm could be implemented in TCP as follows: When TCP

sends a new packet it checks to see if more than RTO seconds have

elapsed since the previous packet was sent. If RTO has elapsed,

ssthresh is set to the maximum of 3/4 cwnd and the current value of

ssthresh, and then the congestion window is halved for every RTO that

elapsed since the previous packet was sent. In addition, T_prev is

set to the current time, and W_used is reset to zero. T_prev will be

used to determine the elapsed time since the sender last was network-

limited or had reduced cwnd after an idle period. When the sender is

application-limited, W_used holds the maximum congestion window

actually used since the sender was last network-limited.

The mechanism for determining the number of RTOs in the most recent

idle period could also be implemented by using a timer that expires

every RTO after the last packet was sent instead of a check per

packet - efficiency constraints on different operating systems may

dictate which is more efficient to implement.

After TCP sends a packet, it also checks to see if that packet filled

the congestion window. If so, the sender is network-limited, and

sets the variable T_prev to the current TCP clock time, and the

variable W_used to zero.

When TCP sends a packet that does not fill the congestion window, and

the TCP send queue is empty, then the sender is application-limited.

The sender checks to see if the amount of unacknowledged data is

greater than W_used; if so, W_used is set to the amount of

unacknowledged data. In addition TCP checks to see if the elapsed

time since T_prev is greater than RTO. If so, then the TCP has not

just reduced its congestion window following an idle period. The TCP

has been application-limited rather than network-limited for at least

an entire RTO interval, but for less than two RTO intervals. In this

case, TCP sets ssthresh to the maximum of 3/4 cwnd and the current

value of ssthresh, and reduces its congestion window to

(cwnd+W_used)/2. W_used is then set to zero, and T_prev is set to

the current time, so a further reduction will not take place until at

least another RTO period has elapsed. Thus, during an application-

limited period the CWV algorithm reduces the congestion window once

per RTO.

3.2. Pseudo-code for reducing the congestion window

Initially:

T_last = tcpnow, T_prev = tcpnow, W_used = 0

After sending a data segment:

If tcpnow - T_last >= RTO

(The sender has been idle.)

ssthresh = max(ssthresh, 3*cwnd/4)

For i=1 To (tcpnow - T_last)/RTO

win = min(cwnd, receiver's declared max window)

cwnd = max(win/2, MSS)

T_prev = tcpnow

W_used = 0

T_last = tcpnow

If window is full

T_prev = tcpnow

W_used = 0

Else

If no more data is available to send

W_used = max(W_used, amount of unacknowledged data)

If tcpnow - T_prev >= RTO

(The sender has been application-limited.)

ssthresh = max(ssthresh, 3*cwnd/4)

win = min(cwnd, receiver's declared max window)

cwnd = (win + W_used)/2

T_prev = tcpnow

W_used = 0

4. Simulations

The CWV proposal has been implemented as an option in the network

simulator NS [NS]. The simulations in the validation test suite for

CWV can be run with the command "./test-all-tcp" in the Directory

"tcl/test". The simulations show the use of CWV to reduce the

congestion window after a period when the TCP connection was

application-limited, and to limit the increase in the congestion

window when a transfer is application-limited. As the simulations

illustrate, the use of ssthresh to maintain connection history is a

critical part of the Congestion Window Validation algorithm. [HPF99]

discusses these simulations in more detail.

5. Experiments

We have implemented the CWV mechanism in the TCP implementation in

FreeBSD 3.2. [HPF99] discusses these experiments in more detail.

The first experiment examines the effects of the Congestion Window

Validation mechanisms for limiting cwnd increases during

application-limited periods. The experiment used a real ssh

connection through a modem link emulated using Dummynet [Dummynet].

The link speed is 30Kb/s and the link has five packet buffers

available. Today most modem banks have more buffering available than

this, but the more buffer-limited situation sometimes occurs with

older modems. In the first half of the transfer, the user is typing

away over the connection. About half way through the time, the user

lists a moderately large file, which causes a large burst of traffic

to be transmitted.

For the unmodified TCP, every returning ACK during the first part of

the transfer results in an increase in cwnd. As a result, the large

burst of data arriving from the application to the transport layer is

sent as many back-to-back packets, most of which get lost and

subsequently retransmitted.

For the modified TCP with Congestion Window Validation, the

congestion window is not increased when the window is not full, and

has been decreased during application-limited periods closer to what

the user actually used. The burst of traffic is now constrained by

the congestion window, resulting in a better-behaved flow with

minimal loss. The end result is that the transfer happens

approximately 30% faster than the transfer without CWV, due to

avoiding retransmission timeouts.

The second experiment uses a real ssh connection over a real dialup

ppp connection, where the modem bank has much more buffering. For

the unmodified TCP, the initial burst from the large file does not

cause loss, but does cause the RTT to increase to approximately 5

seconds, where the connection becomes bounded by the receiver's

window.

For the modified TCP with Congestion Window Validation, the flow is

much better behaved, and produces no large burst of traffic. In this

case the linear increase for cwnd results in a slow increase in the

RTT as the buffer slowly fills.

For the second experiment, both the modified and the unmodified TCP

finish delivering the data at precisely the same time. This is

because the link has been fully utilized in both cases due to the

modem buffer being larger than the receiver window. Clearly a modem

buffer of this size is undesirable due to its effect on the RTT of

competing flows, but it is necessary with current TCP implementations

that produce bursts similar to those shown in the top graph.

6. Conclusions

This document has presented several TCP algorithms for Congestion

Window Validation, to be employed after an idle period or a period in

which the sender was application-limited, and before an increase of

the congestion window. The goal of these algorithms is for TCP's

congestion window to reflect recent knowledge of the TCP connection

about the state of the network path, while at the same time keeping

some memory (i.e., in ssthresh) about the earlier state of the path.

We believe that these modifications will be of benefit to both the

network and to the TCP flows themselves, by preventing unnecessary

packet drops due to the TCP sender's failure to update its

information (or lack of information) about current network

conditions. Future work will document and investigate the benefit

provided by these algorithms, using both simulations and experiments.

Additional future work will describe a more complex version of the

CWV algorithm for TCP implementations where the sender does not have

an accurate estimate of the TCP roundtrip time.

7. References

[FF96] Fall, K., and Floyd, S., Simulation-based Comparisons of

Tahoe, Reno, and SACK TCP, Computer Communication Review,

V. 26 N. 3, July 1996, pp. 5-21. URL

"http://www.aciri.org/floyd/papers.Html".

[HPF99] Mark Handley, Jitendra Padhye, Sally Floyd, TCP Congestion

Window Validation, UMass CMPSCI Technical Report 99-77,

September 1999. URL "FTP://www-

net.cs.umass.edu/pub/Handley99-tcpq-tr-99-77.ps.gz".

[HTH98] Amy Hughes, Joe Touch, John Heidemann, "Issues in TCP

Slow-Start Restart After Idle", Work in Progress.

[J88] Jacobson, V., Congestion Avoidance and Control, Originally

from Proceedings of SIGCOMM '88 (Palo Alto, CA, Aug.

1988), and revised in 1992. URL "http://www-

nrg.ee.lbl.gov/nrg-papers.html".

[JKBFL96] Raj Jain, Shiv Kalyanaraman, Rohit Goyal, Sonia Fahmy, and

Fang Lu, Comments on "Use-it or Lose-it", ATM Forum

Document Number: ATM Forum/96-0178, URL

"http://www.netlab.ohio-

state.edu/~jain/atmf/af_rl5b2.htm".

[JKGFL95] R. Jain, S. Kalyanaraman, R. Goyal, S. Fahmy, and F. Lu, A

Fix for Source End System Rule 5, AF-TM 95-1660, December

1995, URL "http://www.netlab.ohio-

state.edu/~jain/atmf/af_rl52.htm".

[MSML99] Matt Mathis, Jeff Semke, Jamshid Mahdavi, and Kevin Lahey,

The Rate-Halving Algorithm for TCP Congestion Control,

June 1999. URL

"http://www.psc.edu/networking/ftp/papers/draft-

ratehalving.txt".

[NS] NS, the UCB/LBNL/VINT Network Simulator. URL

"http://www-mash.cs.berkeley.edu/ns/".

[RFC2581] Allman, M., Paxson, V. and W. Stevens, TCP Congestion

Control, RFC2581, April 1999.

[VH97] Vikram Visweswaraiah and John Heidemann. Improving Restart

of Idle TCP Connections, Technical Report 97-661,

University of Southern California, November, 1997.

[Dummynet] Luigi Rizzo, "Dummynet and Forward Error Correction",

Freenix 98, June 1998, New Orleans. URL

"http://info.iet.unipi.it/~luigi/ip_dummynet/".

8. Security Considerations

General security considerations concerning TCP congestion control are

discussed in RFC2581. This document describes a algorithm for one

ASPect of those congestion control procedures, and so the

considerations described in RFC2581 apply to this algorithm also.

There are no known additional security concerns for this specific

algorithm.

9. Authors' Addresses

Mark Handley

AT&T Center for Internet Research at ICSI (ACIRI)

Phone: +1 510 666 2946

EMail: mjh@aciri.org

URL: http://www.aciri.org/mjh/

Jitendra Padhye

AT&T Center for Internet Research at ICSI (ACIRI)

Phone: +1 510 666 2887

EMail: padhye@aciri.org

URL: http://www-net.cs.umass.edu/~jitu/

Sally Floyd

AT&T Center for Internet Research at ICSI (ACIRI)

Phone: +1 510 666 2989

EMail: floyd@aciri.org

URL: http://www.aciri.org/floyd/

10. Full Copyright Statement

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to

others, and derivative works that comment on or otherwise explain it

or assist in its implementation may be prepared, copied, published

and distributed, in whole or in part, without restriction of any

kind, provided that the above copyright notice and this paragraph are

included on all such copies and derivative works. However, this

document itself may not be modified in any way, such as by removing

the copyright notice or references to the Internet Society or other

Internet organizations, except as needed for the purpose of

developing Internet standards in which case the procedures for

copyrights defined in the Internet Standards process must be

followed, or as required to translate it into languages other than

English.

The limited permissions granted above are perpetual and will not be

revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an

"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING

TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING

BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION

HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF

MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

Funding for the RFCEditor function is currently provided by the

Internet Society.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有