Internet DRAFT - draft-ietf-core-fasor
draft-ietf-core-fasor
CoRE Working Group I. Jarvinen
Internet-Draft M. Kojo
Intended status: Experimental I. Raitahila
Expires: 14 September 2023 University of Helsinki
Z. Cao
Huawei
13 March 2023
Fast-Slow Retransmission Timeout and Congestion Control Algorithm for
CoAP
draft-ietf-core-fasor-02
Abstract
This document specifies an alternative retransmission timeout (RTO)
and congestion control back off algorithm for the CoAP protocol,
called Fast-Slow RTO (FASOR).
The algorithm specified in this document employs an appropriate and
large enough back off of RTO as the major congestion control
mechanism to allow acquiring unambiguous RTT samples with high
probability and to prevent building a persistent queue when
retransmitting. The algorithm also aims to retransmit quickly using
an accurately managed RTO when link-errors are occuring, basing RTO
calculation on unambiguous round-trip time (RTT) samples.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 14 September 2023.
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the
document authors. All rights reserved.
Jarvinen, et al. Expires 14 September 2023 [Page 1]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Problems with Existing CoAP Congestion Control Algorithms . . 3
4. FASOR Algorithm . . . . . . . . . . . . . . . . . . . . . . . 4
4.1. Computing Normal RTO (FastRTO) . . . . . . . . . . . . . 4
4.2. Slow RTO . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3. Retransmission Timeout Backoff Logic . . . . . . . . . . 6
4.3.1. Overview . . . . . . . . . . . . . . . . . . . . . . 6
4.3.2. Retransmission State Machine . . . . . . . . . . . . 7
4.4. Retransmission Count Option . . . . . . . . . . . . . . . 9
4.5. Alternatives for Exchanging Retransmission Count
Information . . . . . . . . . . . . . . . . . . . . . . . 11
5. Security Considerations . . . . . . . . . . . . . . . . . . . 11
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1. Normative References . . . . . . . . . . . . . . . . . . 11
7.2. Informative References . . . . . . . . . . . . . . . . . 12
Appendix A. Pseudocode for Basic FASOR without Dithering . . . . 12
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14
1. Introduction
CoAP senders use retransmission timeout (RTO) to infer losses that
have occurred in the network. For such a heuristic to be correct,
the RTT estimate used for calculating the RTO must match to the real
end-to-end path characteristics. Otherwise, unnecessary
retransmission may occur. Both default RTO mechanism for CoAP
[RFC7252] and the latest version of CoCoA [I-D.ietf-core-cocoa] have
issues in dealing with unnecessary retransmissions and in the worst-
case the situation can persist causing congestion collapse [JRCK18a].
Jarvinen, et al. Expires 14 September 2023 [Page 2]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
This document specifies FASOR retransmission timeout and congestion
control algorithm [JRCK18b]. FASOR algorithm ensures that
unnecessary retransmissions due to an inaccurate RTT estimate will
not persist, avoiding the threat of congestion collapse. FASOR also
aims to quickly restore the accuracy of the RTT estimate. Armed with
an accurate RTT estimate, FASOR not only handles congestion robustly
but also can quickly infer losses due to link errors.
2. Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14, RFC 2119
[RFC2119].
3. Problems with Existing CoAP Congestion Control Algorithms
Correctly inferring losses requires the RTO to be longer than the
real RTT in the network. Under certain circumstances the RTO may be
incorrectly small. If the real end-to-end RTT is larger than the
RTO, it is impossible for the sender to avoid making unnecessary
retransmissions that duplicate data still existing in the network
because the sender cannot receive any feedback in time. Unnecessary
retransmissions cause two basic problems. First, they increase the
perceived end-to-end RTT if the bottleneck has buffering capacity,
and second, they prevent getting unambiguous RTT samples. Making
unnecessary retransmissions is also a pre-condition for the
congestion collapse [RFC0896], which may occur in the worst case if
retransmissions are not well controlled. Therefore, the sender RTO
algorithm should actively attempt to prevent unnecessary
retransmissions from persisting under any circumstance.
Karn's algorithm [KP87] has prevented unnecessary retransmission from
turning into congestion collapse for decades due to robust RTT
estimation and RTO backoff handling. The recent CoAP congestion
control algorithms, however, diverge from the principles of Karn's
algorithm in significant ways and may pose a threat to the stability
of the Internet due to those differences [JRCK18a].
The default RTO mechanism for CoAP [RFC7252] uses only an initial RTO
dithered between 2 and 3 seconds, while CoCoA [I-D.ietf-core-cocoa]
measures RTT both from unambiguous and ambiguous RTT samples and
applies a modified version of the TCP RTO algorithm [RFC6298]. The
algorithm for default CoAP in RFC 7252 lacks solution to persistent
congestion; the binary exponential backoff used for the RTO does not
properly address unnecessary retransmissions when RTT is larger than
the default RTO (ACK_TIMEOUT), because default CoAP does not apply a
larger, backed-off RTO timer value from the previous message exchange
Jarvinen, et al. Expires 14 September 2023 [Page 3]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
to the backoff series of the subsequent message exchange as required
by the Karn's algorithm [KP87]. If a default CoAP sender performs
exchanges over an end-to-end path with such a high RTT, it
persistently keeps making unnecessary retransmissions for every
exchange wasting some fraction of the used resources (network
capacity, battery power) [JRCK18a].
CoCoA [I-D.ietf-core-cocoa] attempts to improve scenarios with link-
error related losses and solve persistent congestion by basing its
RTO value on an estimated RTT. However, there are couple of
exceptions when the RTT estimate is not available or it cannot be
updated:
- At the beginning of a flow where initial RTO of 2 seconds is
used.
- When RTT suddenly jumps high enough to trigger the rule in CoCoA
that prevents taking RTT samples when more than two
retransmissions are needed. This may also occur when the packet
drop rate on the path is high enough.
CoCoA shares with default CoAP the same shortcoming of not applying
the backed-off RTO from the previous message exchange. This combined
with either of the exceptions discussed above results in persistent
unnecessary retransmissions also with CoCoA, when the RTT is high
enough.
4. FASOR Algorithm
FASOR [JRCK18b] is composed of three key components: RTO computation,
Slow RTO, and a novel RTO back off logic.
4.1. Computing Normal RTO (FastRTO)
The FASOR algorithm measures the RTT for a CoAP message exchange over
an end-to-end path and computes the RTO value using the TCP RTO
algorithm specified in [RFC6298]. We call this normal RTO as
FastRTO. In contrast to the TCP RTO mechanism, FASOR SHOULD NOT use
1 second lower-bound when setting the RTO because RTO is the primary
and only loss detection mechanism with CoAP, whereas RTO is only a
backup mechanism for loss detection with TCP. A lower-bound of 1
second would impact timeliness of the loss detection in low RTT
environments. The RTO value MAY be upper-bounded by at least 60
seconds. A CoAP sender using the FASOR algorithm SHOULD set the
initial RTO to 2 seconds. The computed FastRTO value as well as the
initial RTO value is subject to dithering; both are dithered between
RTO + 1/4 x SRTT and RTO + SRTT. For dithering the initial RTO, SRTT
is unset; therefore, SRTT is replaced with initial RTO / 3 which is
Jarvinen, et al. Expires 14 September 2023 [Page 4]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
derived from the RTO formula and equals to a hypothetical initial RTT
sample that would yield the initial RTO of 2 seconds using the SRTT
and RTTVAR initialization rule of RFC 6298. That is, for the initial
RTO of 2 seconds we use SRTT value of 2/3 seconds.
FastRTO is updated only with unambiguous RTT samples. Therefore, it
closely tracks the actual RTT of the network and can quickly trigger
a retransmission when the network state is not dubious.
Retransmitting without extra delay is very useful when the end-to-end
path is subject to losses that are unrelated to congestion. When the
first unambiguous RTT sample (R) is received, the RTT estimator is
initialized with that sample as specified in RFC 6298, except RTTVAR
that is set to R/2K where K = 4 [RFC6298].
4.2. Slow RTO
We introduce Slow RTO as a safe way to ensure that only a single copy
of message is sent before at least one RTT has elapsed. To achieve
this the sender must ensure that its RTO is set to a value that is
larger than the path end-to-end RTT that may be inflated by
unnecessary retransmissions themselves. Therefore, whenever a
message needs to be retransmitted, we measure Slow RTO as the elapsed
time required for getting an acknowledgement. That is, Slow RTO is
measured starting from the original transmission of the message until
the receipt of the acknowledgement, regardless of the number of
retransmissions. In this way, Slow RTO always covers the worst-case
RTT during which a number of unnecessary retransmissions were made
but the acknowledgement is received for the original transmission.
In contrast to computing the FastRTO, Slow RTO is not smoothed
because it is derived from the sending pattern of the retransmissions
(that may turn out unnecessary). In order to drain the potential
unnecessary retransmissions successfully from the network, it makes
sense to wait for the time used for sending them rather than some
smoothed value. However, Slow RTO is multiplied by a factor to allow
some growth in load without expiring Slow RTO too early (by default
the factor of 1.5 is used). Whenever a message is retransmitted,
FASOR applies Slow RTO as one of the backed off timer values used
with the next message (see Section 4.3).
Slow RTO allows rapidly converging towards a stable operating point
because 1) it lets the duplicate copies sent earlier to drain from
the network reducing the perceived end-to-end RTT, and 2) allows
enough time to acquire an unambiguous RTT sample for the FastRTO
computation. Robustly acquiring the RTT sample ensures that the next
RTO is set according to the recent measurement and further
unnecessary retransmissions are avoided. Slow RTO itself is a form
of back off because it includes the accumulated time from the RTO
backoff of the previous exchange. FASOR uses this for its advantage
Jarvinen, et al. Expires 14 September 2023 [Page 5]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
as the time included into Slow RTO is what is needed to drain all
unnecessary retransmissions possibly made during the previous
exchange. Assuming a stable RTT and that all of the retransmissions
were unnecessary, the time to drain them is the time elapsed from the
original transmission to the sending time of the last retransmission
plus one RTT. When the acknowledgement for the original transmission
arrives, one RTT has already elapsed, leaving only the sending time
difference still unaccounted for which is at minimum the value for
Slow RTO (when an RTT sample arrives immediately after the last
retransmission). Even if RTT would be increasing, the draining still
occurs rapidly due to exponentially backed-off frequency in sending
the unnecessary retransmissions.
4.3. Retransmission Timeout Backoff Logic
4.3.1. Overview
FASOR uses FastRTO as the base for binary exponential backoff when no
retransmission were needed for the previous CoAP message exchange.
When retransmission were needed for the previous CoAP message
exchange, the algorithm rules, however, are more complicated than
with the traditional RTO back off because Slow RTO is injected into
the back off series to reduce high impact of using Slow RTO. FASOR
logic chooses from three possible back off series alternatives:
FAST backoff: Perform traditional RTO back off with the FastRTO as
the base. Applied when the previous message was not
retransmitted.
FAST_SLOW_FAST backoff: First use the FastRTO for the original
transmission of the message to improve cases with losses unrelated
to congestion. If the original transmission of the message is
successful without retransmissions, continue with the FAST backoff
for the next message exchange. If the message needs to be
retransmitted, continue by using Slow RTO for the first
retransmission in order to respond to congestion and drain the
network from the unnecessary retransmissions that were potentially
sent during the previous message exchange. If still further RTOs
are needed, continue by backing off the FastRTO further on each
timeout. FAST_SLOW_FAST backoff is applied just once when the
previous message using FAST backoff required one or more
retransmissions.
SLOW_FAST backoff: Perform Slow RTO first for the original
transmission to respond to congestion and to acquire an
unambiguous RTT sample with high probability. Then, if the
original message needs to be retransmitted, continue with the
FastRTO-based RTO back off serie by backing off the FastRTO on
Jarvinen, et al. Expires 14 September 2023 [Page 6]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
each timeout. The SLOW_FAST backoff is applied when the previous
message using the FAST_SLOW_FAST or SLOW_FAST backoff required one
or more retransmissions. Once an acknowledgement for the original
transmission with an unambigous RTT sample is received, continue
with the FAST backoff for the next message exchange.
For the initial message, FAST backoff is used with INITIAL_RTO as the
FastRTO value. From there on, state is updated when an
acknowledgement arrives. Following unambiguous RTT samples, FASOR
always uses FAST backoff. Whenever retransmissions are needed, the
backoff series selection is first downgraded to FAST_SLOW_FAST
backoff and then to SLOW_FAST backoff if further retransmissions are
needed in FAST_SLOW_FAST backoff.
When Slow RTO in the SLOW_FAST backoff series is used as the first
RTO value, the sender is likely to acquire an unambiguous RTT sample
even when the network has high delay due to congestion because Slow
RTO is based on a very recent measurement of the worst-case RTT.
However, using Slow RTO may negatively impact the performance when
losses unrelated to congestion are occurring. Due to its potential
high cost, FASOR algorithm attempts to avoid using Slow RTO
unnecessarily.
The CoAP protocol is often used by devices that are connected through
a wireless network where non-congestion related losses are much more
frequent than in their wired counterparts. This has implications for
the RTO algorithm. While it would be possible to implement FASOR
such that it always immediately uses Slow RTO when a dubious network
state is detected with the previous message, which would handle
congestion very well, it would do significant harm for performance
when RTOs occur due to non-congestion related losses. Instead, in
the FAST_SLOW_FAST state, FASOR uses first the FastRTO for the
transmission of the original message and only responds using Slow RTO
if the FastRTO expires also for that message. Such a pattern quickly
probes if the losses were unrelated to congestion and only slightly
delays acknowledgement if real congestion event is taking place. To
ensure that an unambiguous RTT sample is also acquired on a congested
network path, FASOR then needs to use Slow RTO for the original
transmission of the subsequent message if the probe was not
successful.
4.3.2. Retransmission State Machine
FASOR consists of the three states discussed above while making
retranmission decisions on the backoff logic and RTO to use: FAST,
FAST_SLOW_FAST, and SLOW_FAST. The state machine of the FASOR
algorithm is depicted in Figure 1.
Jarvinen, et al. Expires 14 September 2023 [Page 7]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
+-------------------b----------------+
| |
v |
+--FAST--a-->FAST_SLOW_FAST-----a----->SLOW_FAST--+
| ^ ^ | ^ |
| | | | | |
+-b-+ +------b------+ +-a-+
a: retransmission acknowledged, ambiguous RTT sample acquired;
b: no retransmission, umambiguous RTT sample acquired;
Figure 1: State Machine of FASOR
The FAST state is the initial state and it is applied always when the
previous message was not retransmitted. In the FAST state, if the
original transmission of the message has not been acknowledged by the
receiver within the time defined by FastRTO, the sender will
retransmit it. If there is still no acknowledgement of the
retransmitted packet within 2*FastRTO, the sender performs a second
retransmission and, if necessary, each further retransmission also
applies the binary exponential backoff of the FastRTO. The
retransmission interval in this state is defined as FastRTO, 2^1 *
FastRTO, ..., 2^i * FastRTO.
When an acknowledgement arrives after any retransmission in any of
the states, the sender will calculate SlowRTO value based on the
algorithm defined in Section 4.2.
In the FAST state, if an acknowledgement arrives after any
retransmission, the sender will switch to the second state,
FAST_FLOW_FAST. In this state, the retransmission interval is
defined as FastRTO, Max(SlowRTO, 2*FastRTO), FastRTO * 2^1, ..., 2^i
* FastRTO. The state will be switched back to the FAST state once an
acknowledgement is returned within FastRTO, i.e., no retransmissions
for a message. This is reasonable because it shows the network has
recovered from congestion or a bloated queue.
If at least one retransmission has been made before the acknowledged
arrives in the FAST_SLOW_FAST state, the sender updates the SlowRTO
value, and moves to the third state, SLOW_FAST. The retransmission
interval in the SLOW_FAST state is defined as SlowRTO, FastRTO,
FastRTO * 2^1, ..., 2^i * FastRTO.
In the SLOW_FAST state, the sender switches back to the FAST state if
an unambiguous acknowledgement arrives. Otherwise, if any number of
retransmissions is needed again, the sender stays in the SLOW_FAST
state.
Jarvinen, et al. Expires 14 September 2023 [Page 8]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
4.4. Retransmission Count Option
When retransmissions are needed to deliver a CoAP message, it is not
possible to measure RTT for the RTO computation as the RTT sample
becomes ambiguous. Therefore, it would be beneficial to be able to
distinguish whether an acknowledgement arrives for the original
transmission of the message or for a retransmission of it. This
would allow reliably acquiring an RTT sample for every CoAP message
exchange and thereby compute a more accurate RTO even during periods
of congestion and loss.
The Retransmission Count Option is used to distinguish whether an
Acknowledgement message arrives for the original transmission or one
of the retransmissions of a Confirmable message. However, the
Retransmission Count Option cannot be used with an Empty
Acknowledgement (or Reset) message because the CoAP protocol
specification [RFC7252] does not allow adding options to an Empty
message. Therefore, Retransmission Count Option is useful only for
the common case of Piggybacked Response. In case of Empty
Acknowledgements the operation of FASOR is the same as without the
option. This restriction with Empty Acknowledgements may limit the
usefulness of the Retransmission Count Option in deployment scenarios
where the receiver is a proxy that will typically respond with an
Empty Acknowledgement when it receives a request message.
+=====+===+===+===+===+============+========+========+=========+
| No. | C | U | N | R | Name | Format | Length | Default |
+=====+===+===+===+===+============+========+========+=========+
| TBD | | | X | | Rexmit-Cnt | uint | 0-1 | 0 |
+-----+---+---+---+---+------------+--------+--------+---------+
| C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable |
+--------------------------------------------------------------+
Table 1: Retransmission Count Option
Implementation of the Retransmission Count option is optional and it
is identified as elective. However, when it is present in a CoAP
message and a CoAP endpoint processes it, it MUST be processed as
described in this document. The Retransmission Count option MUST NOT
occur more than once in a single message.
The value of the Retransmission Count option is a variable-size (0 to
1 byte) unsigned integer. The default value for the option is the
number 0 and it is represented with an empty option value (a zero-
length sequence of bytes). However, when a client intends to use
Retransmit Count option, it MUST reserve space for it by limiting the
request message size also when the value is empty in order to fit the
full-sized option into retransmissions.
Jarvinen, et al. Expires 14 September 2023 [Page 9]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
The Retransmission Count option can be present in both the request
and response message. When the option is present in a request it
indicates the ordinal number of the transmission for the request
message.
If the server supports (implements) the Retransmission Count option
and the option is present in a request, the server MUST echo the
option value in its Piggybacked Response unmodified. If the server
replies with an Empty Acknowledgement the server MUST silently ignore
the option and MUST NOT include it in a later separate response to
that request.
When Piggybacked Response carrying the Retransmission Count option
arrives, the client uses the option to match the response message to
the corresponding transmission of the request. In order to measure a
correct RTT, the client must store the timestamp for the original
transmission of the request as well as the timestamp for each
retransmission, if any, of the request. The resulting RTT sample is
used for the RTO computation. If the client retransmitted the
request without the option but the response includes the option, the
client MUST silently ignore the option.
The original transmission of a request is indicated with the number
0, except when sending the first request to a new destination
endpoint (i.e., an endpoint not already in the memory). The first
original transmission of the request to a new endpoint carries the
number 255 (0xFF) and is interpreted the same as an original
transmission carrying the number 0. Once the first Piggybacked
Response from the new endpoint arrives the client learns whether or
not the other endpoint implements the option. If the first response
includes the echoed option, the client learns that the other endpoint
supports the option and may continue including the option to each
retransmitted request. From this point on the original transmissions
of requests implicitly include the option number 0 and a zero-byte
integer will be sent according to the CoAP uint-encoding rules. If
the first Piggybacked Response does not include the option, the
client SHOULD stop including the option into the requests to that
endpoint. Retransmissions, if any, carry the ordinal number of the
retransmission. That is, the client increments the retransmission
count by one for each retransmission of the message.
When the Retransmission Count option is in use, the client bases the
RTO for the FastRTO in the back off series as follows:
max(RTO, Previous-RTT-Sample)
Jarvinen, et al. Expires 14 September 2023 [Page 10]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
Previous-RTT-Sample is the RTT sample acquired from the previous
message exchange. If no RTT sample was available with the previous
message exchange (e.g., the server replied with an Empty
Acknowledgement), RTO computed earlier is used like in case the
Retransmission Count option is not in use.
4.5. Alternatives for Exchanging Retransmission Count Information
An alternative way of exchanging the retransmission count information
between a client and server is to encode it in the Token. The Token
is a client-local identifier and a client solely decides how it
generates the Token. Therefore, including a varying Token value to
retransmissions of the same request is all possible as long as the
client can use the Token to differentiate between requests and match
a response to the corresponding request. The server is required to
make no assumptions about the content or structure of a Token and
always echo the Token unmodified in its response.
How exactly a client encodes the retransmission count into a Token is
an implementation issue. Note that the original transmission of a
request may carry a zero-length Token given that the rules for
generating a Token as specified in RFC 7252 [RFC7252] are followed.
This allows reducing the overhead of including the Token into the
reguests in such cases where Token could otherwise be omitted.
However, similar to Retransmit Count option the maximum request
message size MUST be limited to accommodate the Token with retransmit
count into the retransmissions of the request.
5. Security Considerations
6. IANA Considerations
This memo includes no request to IANA.
7. References
7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent,
"Computing TCP's Retransmission Timer", RFC 6298,
DOI 10.17487/RFC6298, June 2011,
<https://www.rfc-editor.org/info/rfc6298>.
Jarvinen, et al. Expires 14 September 2023 [Page 11]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
Application Protocol (CoAP)", RFC 7252,
DOI 10.17487/RFC7252, June 2014,
<https://www.rfc-editor.org/info/rfc7252>.
7.2. Informative References
[RFC0896] Nagle, J., "Congestion Control in IP/TCP Internetworks",
RFC 896, DOI 10.17487/RFC0896, January 1984,
<https://www.rfc-editor.org/info/rfc896>.
[I-D.ietf-core-cocoa]
Bormann, C., Betzler, A., Gomez, C., and I. Demirkol,
"CoAP Simple Congestion Control/Advanced", Work in
Progress, Internet-Draft, draft-ietf-core-cocoa-03, 21
February 2018, <https://datatracker.ietf.org/doc/html/
draft-ietf-core-cocoa-03>.
[KP87] Karn, P. and C. Partridge, "Improving Round-trip Time
Estimates in Reliable Transport Protocols", SIGCOMM'87
Proceedings of the ACM Workshop on Frontiers in Computer
Communications Technology, August 1987.
[JRCK18a] Jarvinen, I., Raitahila, I., Cao, Z., and M. Kojo, "Is
CoAP Congestion Safe?", Applied Networking Research
Workshop (ANRW'18), July 2018.
[JRCK18b] Jarvinen, I., Raitahila, I., Cao, Z., and M. Kojo, "FASOR
Retransmission Timeout and Congestion Control Mechanism
for CoAP", Proceedings of IEEE Global Communications
Conference (Globecom 2018), December 2018.
Appendix A. Pseudocode for Basic FASOR without Dithering
var state = NORMAL_RTO
rfc6298_init(var fastrto, 2 secs)
var slowrto
SLOWRTO_FACTOR = 1.5
var original_sendtime
var retransmit_count
/*
* Sending Original Copy and Retransmitting 'req'
*/
send_request(req) {
Jarvinen, et al. Expires 14 September 2023 [Page 12]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
original_sendtime = time.now
retransmit_count = 0
arm_rto(calculate_rto())
send(req)
}
rto_for(req) {
retransmit_count += 1
arm_rto(calculate_rto())
send(req)
}
/*
* ACK Processings
*/
ack() {
sample = time.now - original_sendtime
if (retransmit_count == 0)
unambiguous_ack(sample)
else
ambiguous_ack(sample)
}
unambiguous_ack(sample) {
k = 4 // RFC6298 default K = 4
if (rfc6298_is_first_sample(fastrto))
k = 1
rfc6298_update(fastrto, k, sample) // Normal RFC6298 processing
state = NORMAL_RTO
}
ambiguous_nextstate = {
[NORMAL_RTO] = FAST_SLOW_FAST_RTO,
[FAST_SLOW_FAST_RTO] = SLOW_FAST_RTO,
[SLOW_FAST_RTO] = SLOW_FAST_RTO
}
ambiguous_ack(sample) {
slowrto = sample * SLOWRTO_FACTOR
state = ambiguous_nextstate[state]
}
/*
* RTO Calculations
*/
calculate_rto() {
Jarvinen, et al. Expires 14 September 2023 [Page 13]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
return <state>_rtoseries()
}
normal_rtoseries() {
switch (retransmit_count) {
case 0: return fastrto_series_init()
default: return fastrto_series_backoff()
}
}
fastslowfast_rtoseries() {
switch (retransmit_count) {
case 0: return fastrto_series_init()
case 1: return MAX(slowrto, 2*fastrto)
default: return fastrto_series_backoff()
}
}
slowfast_rtoseries() {
switch (retransmit_count) {
case 0: return slowrto
case 1: return fastrto_series_init()
default: return fastrto_series_backoff()
}
}
var backoff_series_timer
fastrto_series_init() {
backoff_series_timer = fastrto
return backoff_series_timer
}
fastrto_series_backoff() {
backoff_series_timer *= 2
return backoff_series_timer
}
Figure 2
Authors' Addresses
Ilpo Jarvinen
University of Helsinki
P.O. Box 68
FI- FI-00014 UNIVERSITY OF HELSINKI
Finland
Email: ilpo.jarvinen@cs.helsinki.fi
Jarvinen, et al. Expires 14 September 2023 [Page 14]
Internet-Draft Fast-Slow RTO and CC Algorithm March 2023
Markku Kojo
University of Helsinki
P.O. Box 68
FI- FI-00014 UNIVERSITY OF HELSINKI
Finland
Email: markku.kojo@cs.helsinki.fi
Iivo Raitahila
University of Helsinki
FI- Helsinki
Finland
Email: iivo.raitahila@alumni.helsinki.fi
Zhen Cao
Huawei
Beijing
China
Email: zhencao.ietf@gmail.com
Jarvinen, et al. Expires 14 September 2023 [Page 15]