draft-ietf-tsvwg-tcp-frto-00.txt   draft-ietf-tsvwg-tcp-frto-01.txt 
Internet Engineering Task Force P. Sarolahti Internet Engineering Task Force P. Sarolahti
INTERNET DRAFT Nokia Research Center INTERNET DRAFT Nokia Research Center
File: draft-ietf-tsvwg-tcp-frto-00.txt M. Kojo File: draft-ietf-tsvwg-tcp-frto-01.txt M. Kojo
University of Helsinki University of Helsinki
October, 2003 February, 2004
Expires: April, 2004 Expires: August, 2004
F-RTO: An Algorithm for Detecting F-RTO: An Algorithm for Detecting
Spurious Retransmission Timeouts with TCP and SCTP Spurious Retransmission Timeouts with TCP and SCTP
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of [RFC2026]. all provisions of Section 10 of [RFC2026].
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
skipping to change at page 2, line 6 skipping to change at page 2, line 6
a TCP sender only algorithm that does not require any TCP options to a TCP sender only algorithm that does not require any TCP options to
operate. After retransmitting the first unacknowledged segment operate. After retransmitting the first unacknowledged segment
triggered by an RTO, the F-RTO algorithm at a TCP sender monitors the triggered by an RTO, the F-RTO algorithm at a TCP sender monitors the
incoming acknowledgements to determine whether the timeout was incoming acknowledgements to determine whether the timeout was
spurious and to decide whether to send new segments or retransmit spurious and to decide whether to send new segments or retransmit
unacknowledged segments. The algorithm effectively helps to avoid unacknowledged segments. The algorithm effectively helps to avoid
additional unnecessary retransmissions and thereby improves TCP additional unnecessary retransmissions and thereby improves TCP
performance in case of a spurious timeout. The F-RTO algorithm can performance in case of a spurious timeout. The F-RTO algorithm can
also be applied with the SCTP protocol. also be applied with the SCTP protocol.
Terminology
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 [RFC2119].
1. Introduction 1. Introduction
The TCP protocol [Pos81] has two methods for triggering The TCP protocol [Pos81] has two methods for triggering
retransmissions. Primarily, the TCP sender relies on incoming retransmissions. Primarily, the TCP sender relies on incoming
duplicate ACKs, which indicate that the receiver is missing some of duplicate ACKs, which indicate that the receiver is missing some of
the data. After a required amount of successive duplicate ACKs have the data. After a required number of successive duplicate ACKs have
arrived at the sender, it retransmits the first unacknowledged arrived at the sender, it retransmits the first unacknowledged
segment [APS99]. Secondarily, the TCP sender maintains a segment [APS99]. Secondarily, the TCP sender maintains a
retransmission timer which triggers retransmission of segments, if retransmission timer which triggers retransmission of segments, if
they have not been acknowledged within the retransmission timer they have not been acknowledged within the retransmission timer
expiration period. When the retransmission timer expires, the TCP expiration period. When the retransmission timer expires, the TCP
sender enters the RTO recovery where congestion window is initialized sender enters the RTO recovery where congestion window is initialized
to one segment and unacknowledged segments are retransmitted using to one segment and unacknowledged segments are retransmitted using
the slow-start algorithm. The retransmission timer is adjusted the slow-start algorithm. The retransmission timer is adjusted
dynamically based on the measured round-trip times [PA00]. dynamically based on the measured round-trip times [PA00].
It has been pointed out that the retransmission timer can expire It has been pointed out that the retransmission timer can expire
spuriously and trigger unnecessary retransmissions when no segments spuriously and trigger unnecessary retransmissions when no segments
have been lost [GL02]. After a spurious RTO the late acknowledgements have been lost [LK00, GL02, LM03]. After a spurious retransmission
of original segments arrive at the sender, usually triggering timeout the late acknowledgements of original segments arrive at the
unnecessary retransmissions of whole window of segments during the sender, usually triggering unnecessary retransmissions of whole
RTO recovery. Furthermore, after a spurious RTO a conventional TCP window of segments during the RTO recovery. Furthermore, after a
sender increases the congestion window on each late acknowledgement spurious retransmission timeout a conventional TCP sender increases
in slow start, injecting a large number of data segments to the the congestion window on each late acknowledgement in slow start,
network within one round-trip time. injecting a large number of data segments to the network within one
round-trip time.
There are a number of potential reasons for spurious RTOs. First, There are a number of potential reasons for spurious retransmission
some mobile networking technologies involve sudden delay peaks on timeouts. First, some mobile networking technologies involve sudden
transmission because of actions taken during a hand-off. Second, delay peaks on transmission because of actions taken during a hand-
arrival of competing traffic, possibly with higher priority, on a off. Second, arrival of competing traffic, possibly with higher
low-bandwidth link or some other change in available bandwidth priority, on a low-bandwidth link or some other change in available
involves a sudden increase of round-trip time which may trigger a bandwidth involves a sudden increase of round-trip time which may
spurious retransmission timeout. A persistently reliable link layer trigger a spurious retransmission timeout. A persistently reliable
can also cause a sudden delay when several data frames are lost for link layer can also cause a sudden delay when several data frames are
some reason. This document does not distinguish the different causes lost for some reason. This document does not distinguish the
of such a delay, but discusses the spurious RTOs caused by a delay in different causes of such a delay, but discusses the spurious
general. retransmission timeouts caused by a delay in general.
This document describes an alternative RTO recovery algorithm called This document describes an alternative RTO recovery algorithm called
"Forward RTO-Recovery" (F-RTO) to be used for detecting spurious RTOs "Forward RTO-Recovery" (F-RTO) to be used for detecting spurious RTOs
and thus avoiding unnecessary retransmissions following the RTO. When and thus avoiding unnecessary retransmissions following the RTO. When
the RTO is not spurious, the F-RTO algorithm reverts back to the the RTO is not spurious, the F-RTO algorithm reverts back to the
conventional RTO recovery algorithm and should have similar behavior conventional RTO recovery algorithm and should have similar behavior
and performance. F-RTO does not require any TCP options in its and performance. F-RTO does not require any TCP options in its
operation, and it can be implemented by modifying only the TCP operation, and it can be implemented by modifying only the TCP
sender. This is different from alternative algorithms (Eifel [LK00], sender. This is different from alternative algorithms (Eifel [LK00],
[LM03] and DSACK-based algorithms [BA02]) that have been suggested [LM03] and DSACK-based algorithms [BA02]) that have been suggested
for detecting unnecessary retransmissions. The Eifel algorithm uses for detecting unnecessary retransmissions. The Eifel algorithm uses
TCP timestamps [BBJ92] for detecting a spurious timeout and the TCP timestamps [BBJ92] for detecting a spurious timeout upon arrival
DSACK-based algorithms require that the TCP Selective Acknowledgment of the first acknowledgement after the retransmission. The DSACK-
Option [MMFR96] with DSACK extension [FMMP00] is in use. With DSACK, based algorithms require that the TCP Selective Acknowledgment Option
the TCP receiver can report if it has received a duplicate segment, [MMFR96] with DSACK extension [FMMP00] is in use. With DSACK, the TCP
making it possible for the sender to detect afterwards whether it has receiver can report if it has received a duplicate segment, making it
retransmitted segments unnecessarily. possible for the sender to detect afterwards whether it has
retransmitted segments unnecessarily. In addition, the F-RTO
algorithm only attempts to detect and avoid unnecessary
retransmissions after an RTO. Eifel and DSACK can also be used in
detecting unnecessary retransmissions in other events, for example
due to packet reordering.
When an RTO occurs, the F-RTO sender retransmits the first When an RTO occurs, the F-RTO sender retransmits the first
unacknowledged segment normally, but tries to transmit new, unacknowledged segment as usual. Deviating from the normal operation
previously unsent data after that. If the next two acknowledgements after a timeout, it then tries to transmit new, previously unsent
cover segments that were not retransmitted, the F-RTO sender can data, for the first acknowledgement that arrives after the timeout
declare the RTO spurious and exit the RTO recovery. However, if given that the acknowledgement advances the window. If the second
either of the next two acknowledgements is a duplicate ACK, there was acknowledgement that arrives after the timeout also advances the
no sufficient evidence of spurious RTO; therefore the F-RTO sender window, i.e., acknowledges data that was not retransmitted, the F-RTO
retransmits the unacknowledged segments in slow start similarly to sender declares the RTO spurious and exit the RTO recovery. However,
the traditional algorithm. With a SACK-enhanced version of the F-RTO if either of the next two acknowledgements is a duplicate ACK, there
algorithm, spurious RTOs may be detected even if duplicate ACKs was no sufficient evidence of spurious RTO; therefore the F-RTO
arrive after an RTO. The F-RTO algorithm only attempts to detect and sender retransmits the unacknowledged segments in slow start
avoid unnecessary retransmissions after an RTO. Eifel and DSACK can similarly to the traditional algorithm. With a SACK-enhanced version
also be used in detecting unnecessary retransmissions in other of the F-RTO algorithm, spurious RTOs may be detected even if
events, for example due to packet reordering. duplicate ACKs arrive after an RTO.
The F-RTO algorithm can also be applied with the SCTP protocol The F-RTO algorithm can also be applied with the SCTP protocol
[Ste00], because SCTP has similar acknowledgement and packet [Ste00], because SCTP has similar acknowledgement and packet
retransmission concepts as TCP. When a SCTP retransmission timeout retransmission concepts as TCP. When a SCTP retransmission timeout
occurs, the SCTP sender is required to retransmit the outstanding occurs, the SCTP sender is required to retransmit the outstanding
data similarly to TCP, thus being prone to unnecessary data similarly to TCP, thus being prone to unnecessary
retransmissions and congestion control adjustments, if delay spikes retransmissions and congestion control adjustments, if delay spikes
occur in the network. The SACK-enhanced version of F-RTO should be occur in the network. The SACK-enhanced version of F-RTO should be
directly applicable to SCTP, which has selective acknowledgements as directly applicable to SCTP, which has selective acknowledgements as
a built-in feature. For simplicity, this document mostly refers to a built-in feature. For simplicity, this document mostly refers to
skipping to change at page 4, line 38 skipping to change at page 5, line 4
the highest sequence number transmitted so far in variable the highest sequence number transmitted so far in variable
"send_high". "send_high".
2) When the first acknowledgement after the RTO arrives at the 2) When the first acknowledgement after the RTO arrives at the
sender, the sender chooses the following actions depending on sender, the sender chooses the following actions depending on
whether the ACK advances the window or whether it is a duplicate whether the ACK advances the window or whether it is a duplicate
ACK. ACK.
a) If the acknowledgement is a duplicate ACK OR it is a) If the acknowledgement is a duplicate ACK OR it is
acknowledging a sequence number equal to (or above) the value acknowledging a sequence number equal to (or above) the value
of send_high, the TCP sender MUST revert to the conventional of send_high OR it does not acknowledge all of the data that
RTO recovery, and continue by retransmitting unacknowledged was retransmitted in step 1, the TCP sender MUST revert to the
data in slow start. The TCP sender MUST NOT enter step 3 of conventional RTO recovery and continue by retransmitting
this algorithm, and the SpuriousRecovery variable remains as unacknowledged data in slow start. The TCP sender MUST NOT
FALSE. enter step 3 of this algorithm, and the SpuriousRecovery
variable remains as FALSE.
b) If the acknowledgement advances the window AND it is below the b) If the acknowledgement advances the window AND it is below the
value of send_high, the TCP sender SHOULD transmit up to two value of send_high, the TCP sender SHOULD transmit up to two
new (previously unsent) segments and enter step 3 of this new (previously unsent) segments and enter step 3 of this
algorithm. If the TCP sender does not have enough unsent data, algorithm. If the TCP sender does not have enough unsent data,
it SHOULD send only one segment. In addition, the TCP sender it SHOULD send only one segment. In addition, the TCP sender
MAY override the Nagle algorithm and send immediately an MAY override the Nagle algorithm and send immediately an
undersized segment if needed. If the TCP sender does not have undersized segment if needed. If the TCP sender does not have
any new data to send, the TCP sender SHOULD transmit a segment any new data to send, the TCP sender SHOULD transmit a segment
from the retransmission queue. If TCP sender retransmits the from the retransmission queue. If TCP sender retransmits the
first unacknowledged segment, it MUST NOT enter step 3 of this first unacknowledged segment, it MUST NOT enter step 3 of this
algorithm but continue with the conventional RTO recovery algorithm but continue with the conventional RTO recovery
algorithm. algorithm. In this case acknowledgement of the next segment
would not unambiguously indicate that the original transmission
arrived at the receiver.
3) When the second acknowledgement after the RTO arrives at the 3) When the second acknowledgement after the RTO arrives at the
sender, either declare the RTO spurious, or start retransmitting sender, either declare the RTO spurious, or start retransmitting
the unacknowledged segments. the unacknowledged segments.
a) If the acknowledgement is a duplicate ACK, the TCP sender MUST a) If the acknowledgement is a duplicate ACK, the TCP sender MUST
set congestion window to no more than 3 * MSS, and continue set congestion window to no more than 3 * MSS, and continue
with the slow start algorithm retransmitting unacknowledged with the slow start algorithm retransmitting unacknowledged
segments. The sender leaves SpuriousRecovery to FALSE. segments. The sender leaves SpuriousRecovery set to FALSE.
b) If the acknowledgement advances the window, i.e. it b) If the acknowledgement advances the window, i.e. it
acknowledges data that was not retransmitted after the RTO, the acknowledges data that was not retransmitted after the RTO, the
TCP sender SHOULD declare the RTO spurious, set TCP sender SHOULD declare the RTO spurious, set
SpuriousRecovery to SPUR_TO and set the value of send_high SpuriousRecovery to SPUR_TO and set the value of send_high
variable to SND.UNA. variable to SND.UNA.
The F-RTO sender takes cautious actions when it receives duplicate The F-RTO sender takes cautious actions when it receives duplicate
acknowledgements after an RTO. Since duplicate ACKs may indicate that acknowledgements after an RTO. Since duplicate ACKs may indicate that
segments have been lost, reliably detecting a spurious RTO is segments have been lost, reliably detecting a spurious RTO is
skipping to change at page 5, line 35 skipping to change at page 6, line 4
The F-RTO sender takes cautious actions when it receives duplicate The F-RTO sender takes cautious actions when it receives duplicate
acknowledgements after an RTO. Since duplicate ACKs may indicate that acknowledgements after an RTO. Since duplicate ACKs may indicate that
segments have been lost, reliably detecting a spurious RTO is segments have been lost, reliably detecting a spurious RTO is
difficult in the lack of additional information. Therefore the safest difficult in the lack of additional information. Therefore the safest
alternative is to follow the conventional TCP recovery in those alternative is to follow the conventional TCP recovery in those
cases. cases.
If the first acknowledgement after RTO covers the send_high point at If the first acknowledgement after RTO covers the send_high point at
algorithm step (2a), there is not enough evidence that a non- algorithm step (2a), there is not enough evidence that a non-
retransmitted segment has arrived at the receiver after the RTO. retransmitted segment has arrived at the receiver after the RTO.
This is a common case when a fast retransmission is lost and it has This is a common case when a fast retransmission is lost and it has
been retransmitted again after an RTO, while the rest of the been retransmitted again after an RTO, while the rest of the
unacknowledged segments have successfully been delivered to the TCP unacknowledged segments have successfully been delivered to the TCP
receiver before the RTO. Therefore the RTO cannot be declared receiver before the RTO. Therefore the RTO cannot be declared
spurious in this case. spurious in this case.
If the first acknowledgement after RTO does not acknowledge all of If the first acknowledgement after RTO does not acknowledge all of
the data that was retransmitted in step 1, the TCP sender must not the data that was retransmitted in step 1, the TCP sender reverts to
enter step 3 of this algorithm, but revert to the conventional RTO the conventional RTO recovery. Otherwise, a malicious receiver
recovery. Otherwise, a malicious receiver acknowledging partial acknowledging partial segments could cause the sender to declare the
segments could cause the sender to declare the RTO spurious in a case RTO spurious in a case where data was lost.
where data was lost.
The TCP sender is allowed to send two new segments in algorithm The TCP sender is allowed to send two new segments in algorithm
branch (2b), because the conventional TCP sender would retransmit two branch (2b), because the conventional TCP sender would transmit two
segments after one round-trip has elapsed since the RTO. If sending segments when the first new ACK arrives after the RTO. If sending new
new data is not possible in algorithm branch (2b), or the receiver data is not possible in algorithm branch (2b), or the receiver window
window limits the transmission, it has to send something in order to limits the transmission, the TCP sender has to send something in
prevent the TCP transfer from stalling. In that case the following order to prevent the TCP transfer from stalling. If no segments were
options are available for the sender. sent, the pipe between sender and receiver may run out of segments,
and no further acknowledgements arrive. If transmitting previously
unsent data is not possible, the following options are available for
the sender.
- Continue with the conventional RTO recovery algorithm and do not - Continue with the conventional RTO recovery algorithm and do not
try to detect the spurious RTO. The disadvantage is that the sender try to detect the spurious RTO. The disadvantage is that the sender
may do unnecessary retransmissions due to possible spurious RTO. On may do unnecessary retransmissions due to possible spurious RTO. On
the other hand, we believe that the benefits of detecting spurious the other hand, we believe that the benefits of detecting spurious
RTO in an application limited or receiver limited situations are RTO in an application limited or receiver limited situations are
not very remarkable. not very remarkable.
- Use additional information if available, e.g. TCP timestamps with - Use additional information if available, e.g. TCP timestamps with
the Eifel Detection algorithm, for detecting a spurious RTO. the Eifel Detection algorithm, for detecting a spurious RTO.
However, Eifel detection may yield different results from F-RTO However, Eifel detection may yield different results from F-RTO
when ACK losses and a RTO occur within the same round-trip time when ACK losses and a RTO occur within the same round-trip time
[SKR02]. [SKR03].
- Retransmit data from the tail of the retransmission queue and - Retransmit data from the tail of the retransmission queue and
continue with step 3 of the F-RTO algorithm. It is possible that continue with step 3 of the F-RTO algorithm. It is possible that
the retransmission is unnecessarily made, hence this option is not the retransmission is unnecessarily made, hence this option is not
encouraged, except for hosts that are known to operate in an encouraged, except for hosts that are known to operate in an
environment that is highly likely to have spurious RTOs. On the environment that is highly likely to have spurious RTOs. On the
other hand, with this method it is possible to avoid several other hand, with this method it is possible to avoid several
unnecessary retransmissions due to spurious RTO by doing only one unnecessary retransmissions due to spurious RTO by doing only one
retransmission that may be unnecessary. retransmission that may be unnecessary.
skipping to change at page 6, line 43 skipping to change at page 7, line 14
from the incoming acknowledgement whether the RTO was spurious. from the incoming acknowledgement whether the RTO was spurious.
While this method does not send data unnecessarily, it delays the While this method does not send data unnecessarily, it delays the
recovery by one round-trip time in cases where the RTO was not recovery by one round-trip time in cases where the RTO was not
spurious, and therefore is not encouraged. spurious, and therefore is not encouraged.
- In receiver-limited cases, send one octet of new data regardless of - In receiver-limited cases, send one octet of new data regardless of
the advertised window limit, and continue with step 3 of the F-RTO the advertised window limit, and continue with step 3 of the F-RTO
algorithm. It is possible that the receiver has free buffer space algorithm. It is possible that the receiver has free buffer space
to receive the data by the time the segment has propagated through to receive the data by the time the segment has propagated through
the network, in which case no harm is done. If the receiver is not the network, in which case no harm is done. If the receiver is not
capable of receiving the segment, it rejects the segment, and sends capable of receiving the segment, it rejects the segment and sends
a duplicate ACK. a duplicate ACK.
If the RTO is declared spurious, the TCP sender sets the value of If the RTO is declared spurious, the TCP sender sets the value of
send_high variable to SND.UNA in order to disable the NewReno send_high variable to SND.UNA in order to disable the NewReno
"bugfix" [FH99]. The send_high variable was proposed for avoiding "bugfix" [FH99]. The send_high variable was proposed for avoiding
unnecessary multiple fast retransmits when RTO expires during fast unnecessary multiple fast retransmits when RTO expires during fast
recovery with NewReno TCP. As the sender has not retransmitted other recovery with NewReno TCP. As the sender has not retransmitted other
segments but the one that triggered RTO, the problem addressed by the segments but the one that triggered RTO, the problem addressed by the
bugfix cannot occur. Therefore, if there are three duplicate ACKs bugfix cannot occur. Therefore, if there are three duplicate ACKs
arriving at the sender after the RTO, they are likely to indicate a arriving at the sender after the RTO, they are likely to indicate a
skipping to change at page 7, line 27 skipping to change at page 7, line 46
Eifel detection algorithm has a similar property, while the DSACK Eifel detection algorithm has a similar property, while the DSACK
option can be used to detect whether the retransmitted segment was option can be used to detect whether the retransmitted segment was
successfully delivered to the receiver. successfully delivered to the receiver.
The F-RTO algorithm has a side-effect on the TCP round-trip time The F-RTO algorithm has a side-effect on the TCP round-trip time
measurement. Because the TCP sender can avoid most of the unnecessary measurement. Because the TCP sender can avoid most of the unnecessary
retransmissions after detecting a spurious RTO, the sender is able to retransmissions after detecting a spurious RTO, the sender is able to
take round-trip time samples on the delayed segments. If the regular take round-trip time samples on the delayed segments. If the regular
RTO recovery was used without TCP timestamps, this would not be RTO recovery was used without TCP timestamps, this would not be
possible due to retransmission ambiguity. As a result, the RTO possible due to retransmission ambiguity. As a result, the RTO
estimator is likely have more accurate and larger values with F-RTO estimator is likely to be more accurate and have larger values with
than with the regular TCP after a spurious RTO that was triggered due F-RTO than with the regular TCP after a spurious RTO that was
to delayed segments. We believe this is an advantage in the networks triggered due to delayed segments. We believe this is an advantage in
that are prone to delay spikes. the networks that are prone to delay spikes.
It is possible that the F-RTO algorithm does not always avoid It is possible that the F-RTO algorithm does not always avoid
unnecessary retransmissions after a spurious RTO. If packet unnecessary retransmissions after a spurious RTO. If packet
reordering or packet duplication occurs on the segment that triggered reordering or packet duplication occurs on the segment that triggered
the spurious RTO, the F-RTO algorithm may not detect the spurious RTO the spurious RTO, the F-RTO algorithm may not detect the spurious RTO
due to incoming duplicate ACKs. Additionally, if a spurious RTO due to incoming duplicate ACKs. Additionally, if a spurious RTO
occurs during fast recovery, the F-RTO algorithm often cannot detect occurs during fast recovery, the F-RTO algorithm often cannot detect
the spurious RTO. However, we consider these cases relatively rare, the spurious RTO. However, we consider these cases relatively rare,
and note that in cases where F-RTO fails to detect the spurious RTO, and note that in cases where F-RTO fails to detect the spurious RTO,
it performs similarly to the regular RTO recovery. it performs similarly to the regular RTO recovery.
skipping to change at page 9, line 21 skipping to change at page 9, line 39
those segments SHOULD be retransmitted similarly to the conventional those segments SHOULD be retransmitted similarly to the conventional
SACK recovery algorithm [BAFW03]. If the algorithm exits with SACK recovery algorithm [BAFW03]. If the algorithm exits with
SpuriousRecovery set to SPUR_TO, send_high SHOULD be set to SND.UNA, SpuriousRecovery set to SPUR_TO, send_high SHOULD be set to SND.UNA,
thus allowing fast recovery on incoming duplicate acknowledgements. thus allowing fast recovery on incoming duplicate acknowledgements.
4. Taking Actions after Detecting Spurious RTO 4. Taking Actions after Detecting Spurious RTO
Upon retransmission timeout, a conventional TCP sender assumes that Upon retransmission timeout, a conventional TCP sender assumes that
outstanding segments are lost and starts retransmitting the outstanding segments are lost and starts retransmitting the
unacknowledged segments. When the RTO is detected to be spurious, the unacknowledged segments. When the RTO is detected to be spurious, the
TCP sender should not start retransmitting based on the RTO. For TCP sender should not continue retransmitting based on the RTO. For
example, if the sender was in congestion avoidance phase transmitting example, if the sender was in congestion avoidance phase transmitting
new previously unsent segments, it should continue transmitting new previously unsent segments, it should continue transmitting
previously unsent segments after detecting spurious RTO. In addition, previously unsent segments after detecting spurious RTO. In addition,
it is suggested that the RTO estimation is reinitialized and the RTO it is suggested that the RTO estimation is reinitialized and the RTO
timer is adjusted to a more conservative value in order to avoid timer is adjusted to a more conservative value in order to avoid
subsequent spurious RTOs [LG03]. subsequent spurious RTOs [LG03].
Different approaches have been suggested for adjusting the congestion Different approaches have been discussed for adjusting the congestion
control state after a spurious RTO. This document does not control state after a spurious RTO in various research papers [SKR03,
specifically recommend any of the alternatives below, but considers GL03, Sar03] and Internet-Drafts [SL03, LG03]. The different response
the response to spurious RTO as a subject of further research. suggestions vary in whether the spurious retransmission timeout
should be taken as a congestion signal, thus causing the congestion
1) Revert the congestion control parameters to the state before the window or slow start threshold to be reduced at the sender, or
RTO [LG03]. This appears to be a justified decision, because it is whether the congestion control state should be fully reverted to the
similar to the situation in which the RTO did not expire state valid prior to the retransmission timeout.
spuriously. However, two concerns exists with this approach:
First, some detection mechanisms, such as F-RTO or the Eifel
Detection algorithm, do not notice the loss of the spurious
retransmission, thus introducing a small risk of violation of the
congestion control principles. Second, a spurious RTO indicates
that some part of the network was unable to deliver packets for a
while, which can be considered as a potential indication of
congestion.
2) Reduce congestion window to half of its earlier value but revert
slow start threshold to its earlier value [SL03]. This
alternative takes measures to validate the congestion window after
a period during which no data has been transmitted. This would be
a justified action to take if the spurious RTO is assumed to be
caused due to changes in the network conditions, such as a change
in the available bandwidth or a wireless handoff to another point
of attachment in the network.
3) Reduce ssthresh and congestion window when detecting a spurious This document does not give recommendation on selecting the response
RTO [SKR02]. For example, ssthresh and cwnd could be set to half alternative, but considers the response to spurious RTO as a subject
of their earlier values, as done with the other congestion of further research.
notification events. This alternative would be conservative enough
considering the possibility of not detecting a packet loss of the
RTO-triggered retransmission, but the TCP sender should avoid
reducing the congestion window more than once in a round-trip
time. Furthermore, if a spurious RTO occurs in the beginning of a
TCP connection, this alternative causes the slow start to be
canceled, which may sacrifice TCP performance.
5. SCTP Considerations 5. SCTP Considerations
The SACK-enhanced F-RTO algorithm can be applied with the SCTP proto- The basic F-RTO or the SACK-enhanced F-RTO algorithm can be applied
col. However, SCTP contains features that are not present with TCP with the SCTP protocol. However, SCTP contains features that are not
that need to be discussed when applying the F-RTO algorithm. present with TCP that need to be discussed when applying the F-RTO
algorithm.
SCTP association can be multi-homed. The current retransmission pol- SCTP association can be multi-homed. The current retransmission pol-
icy states that retransmissions should go to alternative addresses. icy states that retransmissions should go to alternative addresses.
If the retransmission was due to spurious RTO caused by a delay If the retransmission was due to spurious RTO caused by a delay
spike, it is possible that the acknowledgement for the retransmission spike, it is possible that the acknowledgement for the retransmission
arrives back at the sender before the acknowledgements of the origi- arrives back at the sender before the acknowledgements of the origi-
nal transmissions arrive. If this happens, a possible loss of the nal transmissions arrive. If this happens, a possible loss of the
original transmission of the data chunk that was retransmitted due to original transmission of the data chunk that was retransmitted due to
RTO may remain undetected when applying the F-RTO algorithm and there the spurious RTO may remain undetected when applying the F-RTO algo-
was a delay spike that triggered the RTO. Because the RTO was caused rithm. Because the RTO was caused by the delay, and it was spurious
by the delay, and it was spurious in that respect, a suitable in that respect, a suitable response is to continue by sending new
response is to continue by sending new data. However, if the original data. However, if the original transmission was lost, fully reverting
transmission was lost, fully reverting the congestion control parame- the congestion control parameters is too aggressive. Therefore, tak-
ters is too aggressive. Therefore, taking conservative actions on ing conservative actions on congestion control is recommended, if the
congestion control is recommended, if the SCTP association is multi- SCTP association is multi-homed and retransmissions go to alternative
homed and retransmissions go to alternative address. The information address. The information in duplicate TSNs can be then used for
in duplicate TSNs can be then used for reverting congestion control, reverting congestion control, if desired [BA02].
if desired [BA02].
Note that the forward transmissions made in F-RTO algorithm step (2b) Note that the forward transmissions made in F-RTO algorithm step (2b)
should be destined to the primary address, since they are not should be destined to the primary address, since they are not
retransmissions. retransmissions.
When making a retransmission, a SCTP sender can bundle a number of When making a retransmission, a SCTP sender can bundle a number of
unacknowledged data chunks and include them in the same packet. This unacknowledged data chunks and include them in the same packet. This
needs to be considered when implementing F-RTO for SCTP. The basic needs to be considered when implementing F-RTO for SCTP. The basic
principle of F-RTO still holds: in order to declare the RTO spurious, principle of F-RTO still holds: in order to declare the RTO spurious,
the sender must get an acknowledgement for a data chunk that was not the sender must get an acknowledgement for a data chunk that was not
retransmitted after the RTO. In other words, acknowledgements of data retransmitted after the RTO. In other words, acknowledgements of data
chunks that were bundled in RTO retransmission must not be used for chunks that were bundled in RTO retransmission must not be used for
declaring the RTO spurious. declaring the RTO spurious.
6. Security Considerations 6. Security Considerations
The main security threat regarding F-RTO is the possibility of The main security threat regarding F-RTO is the possibility of a
receiver misleading the sender to set too large a congestion window receiver misleading the sender to set too large a congestion window
after an RTO. There are two possible ways a malicious receiver could after an RTO. There are two possible ways a malicious receiver could
trigger a wrong output from the F-RTO algorithm. First, the receiver trigger a wrong output from the F-RTO algorithm. First, the receiver
can acknowledge data that it has not received. Second, it can delay can acknowledge data that it has not received. Second, it can delay
acknowledgement of a segment it has received earlier, and acknowledge acknowledgement of a segment it has received earlier, and acknowledge
the segment after the TCP sender has been deluded to enter algorithm the segment after the TCP sender has been deluded to enter algorithm
step 3. step 3.
If the receiver acknowledges a segment it has not really received, If the receiver acknowledges a segment it has not really received,
the sender can be lead to declare RTO spurious in F-RTO algorithm the sender can be lead to declare RTO spurious in F-RTO algorithm
skipping to change at page 12, line 37 skipping to change at page 12, line 33
[Ste00] R. Stewart, et. al. Stream Control Transmission Protocol. [Ste00] R. Stewart, et. al. Stream Control Transmission Protocol.
RFC 2960, October 2000. RFC 2960, October 2000.
Informative References Informative References
[ABF01] M. Allman, H. Balakrishnan, and S. Floyd. Enhancing TCP's [ABF01] M. Allman, H. Balakrishnan, and S. Floyd. Enhancing TCP's
Loss Recovery Using Limited Transmit. RFC 3042, January Loss Recovery Using Limited Transmit. RFC 3042, January
2001. 2001.
[BA02] E. Blanton and M. Allman. On Making TCP more Robust to [BA02] E. Blanton and M. Allman. On Making TCP more Robust to
Packet Reordering. ACM Computer Communication Review, Packet Reordering. ACM SIGCOMM Computer Communication
32(1), January 2002. Review, 32(1), January 2002.
[BBJ92] D. Borman, R. Braden, and V. Jacobson. TCP Extensions for [BBJ92] D. Borman, R. Braden, and V. Jacobson. TCP Extensions for
High Performance. RFC 1323, May 1992. High Performance. RFC 1323, May 1992.
[FH99] S. Floyd and T. Henderson. The NewReno Modification to [FH99] S. Floyd and T. Henderson. The NewReno Modification to
TCP's Fast Recovery Algorithm. RFC 2582, April 1999. TCP's Fast Recovery Algorithm. RFC 2582, April 1999.
[FMMP00] S. Floyd, J. Mahdavi, M. Mathis, and M. Podolsky. An Exten- [FMMP00] S. Floyd, J. Mahdavi, M. Mathis, and M. Podolsky. An Exten-
sion to the Selective Acknowledgement (SACK) Option to TCP. sion to the Selective Acknowledgement (SACK) Option to TCP.
RFC 2883, July 2000. RFC 2883, July 2000.
[GL02] A. Gurtov and R. Ludwig. Evaluating the Eifel Algorithm for [GL02] A. Gurtov and R. Ludwig. Evaluating the Eifel Algorithm for
TCP in a GPRS Network. In Proc. of European Wireless, Flo- TCP in a GPRS Network. In Proc. of European Wireless, Flo-
rence, Italy, February 2002 rence, Italy, February 2002
[GL03] A. Gurtov and R. Ludwig, Responding to Spurious Timeouts in
TCP, In Proceedings of IEEE INFOCOM 03, March 2003.
[LG03] R. Ludwig and A. Gurtov. The Eifel Response Algorithm for [LG03] R. Ludwig and A. Gurtov. The Eifel Response Algorithm for
TCP. Internet draft "draft-ietf-tsvwg-tcp-eifel- TCP. Internet draft "draft-ietf-tsvwg-tcp-eifel-
response-03.txt". March 2003. Work in progress. response-04.txt". October 2003. Work in progress.
[LK00] R. Ludwig and R.H. Katz. The Eifel Algorithm: Making TCP [LK00] R. Ludwig and R.H. Katz. The Eifel Algorithm: Making TCP
Robust Against Spurious Retransmissions. ACM Computer Com- Robust Against Spurious Retransmissions. ACM SIGCOMM Com-
munication Review, 30(1), January 2000. puter Communication Review, 30(1), January 2000.
[LM03] R. Ludwig and M. Meyer. The Eifel Detection Algorithm for [LM03] R. Ludwig and M. Meyer. The Eifel Detection Algorithm for
TCP. RFC 3522, April 2003. TCP. RFC 3522, April 2003.
[SKR02] P. Sarolahti, M. Kojo, and K. Raatikainen. F-RTO: A New [SKR03] P. Sarolahti, M. Kojo, and K. Raatikainen. F-RTO: An
Recovery Algorithm for TCP Retransmission Timeouts. Univer- Enhanced Recovery Algorithm for TCP Retransmission Time-
sity of Helsinki, Dept. of Computer Science. Series of Pub- outs. ACM SIGCOMM Computer Communication Review, 33(2),
lications C, No. C-2002-07. February 2002. Available at: April 2003.
http://www.cs.helsinki.fi/research/iwtcp/papers/f-rto.ps
[Sar03] P. Sarolahti. Congestion Control on Spurious TCP Retrans-
mission Timeouts. In Proceedings of IEEE Globecom 2003.
December 2003.
[SL03] Y. Swami and K. Le. DCLOR: De-correlated Loss Recovery [SL03] Y. Swami and K. Le. DCLOR: De-correlated Loss Recovery
using SACK option for spurious timeouts. Internet draft using SACK option for spurious timeouts. Internet draft
"draft-swami-tsvwg-tcp-dclor-01.txt". April 2003. Work in "draft-swami-tsvwg-tcp-dclor-02.txt". September 2003. Work
progress. in progress.
Appendix A: Scenarios Appendix A: Scenarios
This section discusses different scenarios where RTOs occur and how This section discusses different scenarios where RTOs occur and how
the basic F-RTO algorithm performs in those scenarios. The the basic F-RTO algorithm performs in those scenarios. The
interesting scenarios are a sudden delay triggering RTO, loss of a interesting scenarios are a sudden delay triggering RTO, loss of a
retransmitted packet during fast recovery, link outage causing the retransmitted packet during fast recovery, link outage causing the
loss of several packets, and packet reordering. A performance loss of several packets, and packet reordering. A performance
evaluation with a more thorough analysis on a real implementation of evaluation with a more thorough analysis on a real implementation of
F-RTO is given in [SKR02]. F-RTO is given in [SKR03].
A.1. Sudden delay A.1. Sudden delay
The main motivation of F-RTO algorithm is to improve TCP performance The main motivation of F-RTO algorithm is to improve TCP performance
when a delay spike triggers a spurious retransmission timeout. The when a delay spike triggers a spurious retransmission timeout. The
example below illustrates the segments and acknowledgements example below illustrates the segments and acknowledgements
transmitted by the TCP end hosts when a spurious RTO occurs, but no transmitted by the TCP end hosts when a spurious RTO occurs, but no
packets are lost. For simplicity, delayed acknowledgements are not packets are lost. For simplicity, delayed acknowledgements are not
used in the example. The example below reduces the congestion window used in the example. The example below reduces the congestion window
and slow start threshold by half after detecting a spurious RTO. and slow start threshold by half after detecting a spurious RTO.
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/