rfc9959v2.txt   rfc9959.txt 
skipping to change at line 13 skipping to change at line 13
Request for Comments: 9959 Thales Alenia Space Request for Comments: 9959 Thales Alenia Space
Category: Standards Track E. Stephan Category: Standards Track E. Stephan
ISSN: 2070-1721 Orange ISSN: 2070-1721 Orange
G. Fairhurst G. Fairhurst
R. Secchi R. Secchi
University of Aberdeen University of Aberdeen
C. Huitema C. Huitema
Private Octopus Inc. Private Octopus Inc.
April 2026 April 2026
Convergence of Congestion Control from Retained State Careful Resume: Convergence of Congestion Control from Retained State
Abstract Abstract
This document specifies a cautious method for Internet transports This document specifies a cautious method for Internet transports
that enables fast startup of congestion control for a wide range of that enables fast startup of Congestion Control (CC) for a wide range
connections, known as "Careful Resume". It reuses a set of computed of connections, known as "Careful Resume". It reuses a set of
congestion control parameters that are based on previously observed computed CC parameters that are based on previously observed path
path characteristics between the same pair of transport endpoints. characteristics between the same pair of transport endpoints. These
These parameters are saved, allowing them to be later used to modify parameters are saved, allowing them to be later used to modify the CC
the congestion control behaviour of a subsequent connection. behaviour of a subsequent connection.
This document describes the assumptions and defines the requirements This document describes the assumptions and defines the requirements
for how a sender utilises these parameters to provide opportunities for how a sender utilises these parameters to provide opportunities
for a connection to more rapidly get up to speed and utilise for a connection to more rapidly get up to speed and utilise
available capacity. It discusses how the use of this method impacts available capacity. It discusses how the use of this method impacts
the capacity at a shared network bottleneck and the safe response the capacity at a shared network bottleneck and the safe response
that is needed after any indication that the new rate is that is needed after any indication that the new rate is
inappropriate. inappropriate.
Status of This Memo Status of This Memo
skipping to change at line 126 skipping to change at line 126
All Internet transports are required to either use a Congestion All Internet transports are required to either use a Congestion
Control (CC) algorithm or to constrain their rate of transmission Control (CC) algorithm or to constrain their rate of transmission
[RFC2914] [RFC8085]. In 2010, a survey of alternative CC algorithms [RFC2914] [RFC8085]. In 2010, a survey of alternative CC algorithms
[RFC5783] noted that there are challenges when a CC algorithm [RFC5783] noted that there are challenges when a CC algorithm
operates across an Internet path with a high and/or varying operates across an Internet path with a high and/or varying
Bandwidth-Delay Product (BDP). The specified method targets a Bandwidth-Delay Product (BDP). The specified method targets a
solution for these challenges. solution for these challenges.
A CC algorithm typically takes time to ramp up the sending rate. A CC algorithm typically takes time to ramp up the sending rate.
This is called the "Slow-Start Phase" and is informally known as the This is called the "Slow Start Phase" and is informally known as the
time to "get up to speed". This defines a time during which a sender time to "get up to speed". This defines a time during which a sender
intentionally uses less capacity than might be available, with the intentionally uses less capacity than might be available, with the
intention to avoid or limit overshoot of the available capacity for intention to avoid or limit overshoot of the available capacity for
the path. In the context of CC, a path is associated with the end- the path. In the context of CC, a path is associated with the end-
to-end communication between a pair of transport endpoints, each to-end communication between a pair of transport endpoints, each
identified by a source IP address and a unicast or anycast identified by a source IP address and a unicast or anycast
destination IP address. (This document does not define support for destination IP address. (This document does not define support for
broadcast or multicast destination addresses.) A path can also be broadcast or multicast destination addresses.) A path can also be
associated with a specific Differentiated Services Code Point (DSCP). associated with a specific Differentiated Services Code Point (DSCP).
Below the transport layer, a specific path could be realised in Below the transport layer, a specific path could be realised in
skipping to change at line 160 skipping to change at line 160
the capacity at a common bottleneck [RFC2914]). the capacity at a common bottleneck [RFC2914]).
A separate instance of a CC algorithm typically executes over a A separate instance of a CC algorithm typically executes over a
transport path. This seeks to avoid an increase in the queuing transport path. This seeks to avoid an increase in the queuing
(latency or jitter) and/or congestion packet loss for the flow. In (latency or jitter) and/or congestion packet loss for the flow. In
the case of a multipath transport, there can be more than one path the case of a multipath transport, there can be more than one path
with a separate CC context for each path. with a separate CC context for each path.
This document specifies Careful Resume, a method that seeks to reduce This document specifies Careful Resume, a method that seeks to reduce
the time to complete a transfer when the sending rate is limited by the time to complete a transfer when the sending rate is limited by
the congestion controller using the congestion window (CWND). That the congestion controller using the congestion window (CWND).
is, when a transfer seeks to send significantly more data than Specifically, this is when a transfer seeks to send significantly
allowed by the initial congestion window (IW) and where the BDP of more data than allowed by the initial congestion window (IW) and
the path is also significantly more than the product of the IW and where the BDP of the path is also significantly more than the product
path Round Trip Time (RTT). of the IW and path Round Trip Time (RTT).
Careful Resume introduces an alternative method to select initial CC Careful Resume introduces an alternative method to select initial CC
parameters that seeks to more rapidly and safely grow the sending parameters that seeks to more rapidly and safely grow the sending
rate controlled by the CWND. rate controlled by the CWND.
Careful Resume is based on temporal sharing (sometimes known as Careful Resume is based on temporal sharing (sometimes known as
"caching") of a saved set of CC parameters that relate to previous "caching") of a saved set of CC parameters that relate to previous
observations of the same path. The parameters are saved and used to observations of the same path. The parameters are saved and used to
modify the CC behaviour of a subsequent connection between the same modify the CC behaviour of a subsequent connection between the same
endpoints. endpoints.
skipping to change at line 213 skipping to change at line 213
1.2. Receiver Preference 1.2. Receiver Preference
Whilst the sender could take optimisation decisions without Whilst the sender could take optimisation decisions without
considering the receiver's preference, there are cases where a considering the receiver's preference, there are cases where a
receiver could have information that is not available at the sender receiver could have information that is not available at the sender
or might benefit from understanding that Careful Resume might be or might benefit from understanding that Careful Resume might be
used. In these cases, a receiver could use a transport mechanism to used. In these cases, a receiver could use a transport mechanism to
explicitly ask to either enable or inhibit Careful Resume when an explicitly ask to either enable or inhibit Careful Resume when an
application initiates a new connection. application initiates a new connection.
Examples where a receiver might request to inhibit using Careful Receivers might request the ability to inhibit the use of Careful
Resume include: Resume in some situations, for example:
1. a receiver that can predict the pattern of traffic (e.g., insight 1. when a receiver can predict the pattern of traffic (e.g., insight
into the volume of data to be sent, the expected length of a into the volume of data to be sent, the expected length of a
connection, or the requested maximum transfer rate); connection, or the requested maximum transfer rate);
2. a receiver with a local indication that a path/local interface 2. when a receiver with a local indication that a path/local
has changed since the CC parameters were saved; interface has changed since the CC parameters were saved;
3. knowledge of the current hardware limitations at a receiver; 3. when a receiver has knowledge of the current hardware
limitations;
4. a receiver that can predict additional capacity will be needed 4. when a receiver can predict additional capacity will be needed
for other concurrent or later flows (i.e., it prefers to activate for other concurrent or later flows (i.e., it prefers to activate
Careful Resume for a different connection). Careful Resume for a different connection).
1.3. Transport Protocol Interaction 1.3. Transport Protocol Interaction
The CWND is one factor that limits the sending rate of a transport The CWND is one factor that limits the sending rate of a transport
protocol. Other mechanisms also constrain the maximum sending rate. protocol. Other mechanisms also constrain the maximum sending rate.
These include the sender pacing rate and the receiver-advertised These include the sender pacing rate and the receiver-advertised
window [RFC9293] or flow credit [RFC9000]; see Section 4.7. window [RFC9293] or flow control credit [RFC9000]; see Section 4.7.
1.4. Examples of Scenarios of Interest 1.4. Examples of Scenarios of Interest
This section provides a set of examples where Careful Resume is This section provides a set of examples where Careful Resume is
expected to improve performance. Either endpoint can assume the role expected to improve performance. Either endpoint can assume the role
of a sender or a receiver. Careful Resume can also be independently of a sender or a receiver. Careful Resume can also be independently
used for each direction of a bidirectional connection. used for each direction of a bidirectional connection.
For example, consider an application that uses a series of For example, consider an application that uses a series of
connections over a path: Without a new method, each connection would connections over a path: Without a new method, each connection would
skipping to change at line 290 skipping to change at line 291
changed so much that the saved values are no longer valid. We changed so much that the saved values are no longer valid. We
describe that as the "Reconnaissance Phase". During that phase, describe that as the "Reconnaissance Phase". During that phase,
the sender will not send more data than allowed for any new the sender will not send more data than allowed for any new
connection, e.g., using the recommended maximum IW for the first connection, e.g., using the recommended maximum IW for the first
RTT of transmitting data [RFC6928] [RFC9002]. The sender will RTT of transmitting data [RFC6928] [RFC9002]. The sender will
only proceed with the resume process if the reconnaissance only proceed with the resume process if the reconnaissance
succeeds. If it fails (for example, if previous packets in a succeeds. If it fails (for example, if previous packets in a
connection experience congestion or the RTT is significantly connection experience congestion or the RTT is significantly
different), the sender will follow the standard process for a new different), the sender will follow the standard process for a new
connection. This provides some protection against aggravating connection. This provides some protection against aggravating
severe congestion and to establish the minimum RTT. severe congestion and allows establishing the minimum RTT.
2. The second precaution is to cautiously use the saved parameters 2. The second precaution is to cautiously use the saved parameters
when resuming. This is called the "Unvalidated Phase". For when resuming. This is called the "Unvalidated Phase". For
example, the jump in the size of CWND/rate is restricted to a example, the jump in the size of CWND/rate is restricted to a
fraction (1/2) of the saved_cwnd, to avoid starving other flows fraction (1/2) of the saved_cwnd, to avoid starving other flows
that may have started or increased their capacity after the last that may have started or increased their capacity after the last
capacity measurement. The same principle applies for CC capacity measurement. The same principle applies for CC
algorithms that use different parameters to classic TCP CC: i.e., algorithms that use different parameters to classic TCP CC: i.e.,
a sender must not send faster than allowed by a fraction of the a sender must not send faster than allowed by a fraction of the
saved CC parameters. For example, a connection using a rate- saved CC parameters. For example, a connection using a rate-
skipping to change at line 314 skipping to change at line 315
does not exceed the previously used rate. This is intended to does not exceed the previously used rate. This is intended to
avoid a sudden influx of packets that could result in building a avoid a sudden influx of packets that could result in building a
bottleneck queue and disrupting existing flows. Successful bottleneck queue and disrupting existing flows. Successful
validation can allow further increases of the CWND, after first validation can allow further increases of the CWND, after first
validating that the used rate did not result in congestion. validating that the used rate did not result in congestion.
3. The third precaution is to enter a "Safe Retreat Phase" if the 3. The third precaution is to enter a "Safe Retreat Phase" if the
validation fails, for example, if congestion is detected during validation fails, for example, if congestion is detected during
validation. The risk here is that the trial use of the saved CC validation. The risk here is that the trial use of the saved CC
parameters could have disrupted existing connections. For parameters could have disrupted existing connections. For
example, consider a connection using Reno CC: When exiting "slow example, consider a connection using Reno CC: When exiting "Slow
start" mode due to loss, Reno would normally update the CWND to a Start" mode due to loss, Reno would normally update the CWND to a
"slow start threshold" set to half the volume of data in flight. "Slow Start threshold" set to half the volume of data in flight.
However, during this validation, the CWND is restored from the However, during this validation, the CWND is restored from the
saved CC parameters. The resultant sending rate could be much saved CC parameters. The resultant sending rate could be much
larger than the value that would have been reached by a larger than the value that would have been reached by a
"standard" slow start process, resulting in an overload of the "standard" Slow Start process, resulting in an overload of the
path that potentially could cause significant congestion to other path that potentially could cause significant congestion to other
flows. Instead of continuing with that "too large" value, the flows. Instead of continuing with that "too large" value, the
retreat process resets the congestion window (rate) to a value no retreat process resets the congestion window (rate) to a value no
greater than what a standard process would have discovered. For greater than what a standard process would have discovered. For
other CC algorithms, such as Cubic [RFC9438] or BBR, the other CC algorithms, such as CUBIC [RFC9438] or BBR, the
implementation details may differ, but the principle remains: implementation details may differ, but the principle remains:
Trying and failing should not unduly disadvantage existing Trying and failing should not unduly disadvantage existing
connections that share a common bottleneck (e.g., resulting in connections that share a common bottleneck (e.g., resulting in
starving these connections). starving these connections).
2. Language, Notation, and Terms 2. Language, Notation, and Terms
This section provides a brief summary of key terms and the This section provides a brief summary of key terms and the
requirements language. requirements language.
skipping to change at line 370 skipping to change at line 371
information could improve the path differentiation, it could reduce information could improve the path differentiation, it could reduce
the reusability of saved parameters. the reusability of saved parameters.
The saved CC parameters can only be used to modify the startup when The saved CC parameters can only be used to modify the startup when
the Remote Endpoint is not known to have changed (see Section 3.2). the Remote Endpoint is not known to have changed (see Section 3.2).
2.3. Logging Support 2.3. Logging Support
This document defines triggers to support logging key events. For This document defines triggers to support logging key events. For
example, [LOG] provides definitions that enable a Careful Resume example, [LOG] provides definitions that enable a Careful Resume
implementation to generate qlog events when using QUIC. implementation to generate QLOG events when using QUIC.
2.4. Notation and Terms 2.4. Notation and Terms
The document uses language drawn from a range of RFCs. The following The document uses language drawn from a range of RFCs. The following
terms are defined: terms are defined:
ACK: The indication at the transport layer that the Remote Endpoint ACK: The indication at the transport layer that the Remote Endpoint
has correctly received the acknowledged data. In a CC algorithm, has correctly received the acknowledged data. In a CC algorithm,
an ACK also confirms that the acknowledged data is no longer in an ACK also confirms that the acknowledged data is no longer in
flight. flight.
Beta: A scaling factor between 0.5 and 1; the default value is 0.5. Beta: A scaling factor between 0.5 and 1; the default value is 0.5.
Careful Resume (CR): The method specified in this document to select Careful Resume: The method specified in this document to select
initial CC parameters and to more rapidly and safely increase the initial CC parameters and to more rapidly and safely increase the
initial sending rate. initial sending rate.
Congestion Control (CC) parameters: A set of saved CC parameters Congestion Control (CC) parameters: A set of saved CC parameters
from observing the capacity of an established connection (see from observing the capacity of an established connection (see
Section 1.1). Section 1.1).
congestion window (CWND): The congestion window or equivalent CC congestion window (CWND): The congestion window or equivalent CC
variable limiting the maximum sending rate (see [RFC5681]). variable limiting the maximum sending rate (see [RFC5681]).
skipping to change at line 470 skipping to change at line 471
* Observing (saved_cwnd): The currently utilised capacity for the * Observing (saved_cwnd): The currently utilised capacity for the
connection is measured as the volume of bytes sent during an RTT connection is measured as the volume of bytes sent during an RTT
and is recorded in the saved_cwnd. This could be computed by and is recorded in the saved_cwnd. This could be computed by
measuring the volume of data acknowledged in one RTT. If the measuring the volume of data acknowledged in one RTT. If the
measured CWND is less than four times the IW, the sender can measured CWND is less than four times the IW, the sender can
choose to not save the CC parameters, because the additional choose to not save the CC parameters, because the additional
actions associated with performing Careful Resume for a small CWND actions associated with performing Careful Resume for a small CWND
would not justify its use. would not justify its use.
* Observing (saved_rtt): The minimum RTT at the time of observation * Observing (saved_rtt): The minimum RTT at the time of observation
is saved as the saved_rrt. is saved as the saved_rtt.
* Observing (updating saved CC parameters): A sender MUST NOT retain * Observing (updating saved CC parameters): A sender MUST NOT retain
more than one set of CC parameters for a Remote Endpoint, but the more than one set of CC parameters for a Remote Endpoint, but the
set of CC parameters SHOULD be updated (or replaced) after a later set of CC parameters SHOULD be updated (or replaced) after a later
observation of a path to the same Remote Endpoint. observation of a path to the same Remote Endpoint.
Implementation notes are provided in Section 4.1. Implementation notes are provided in Section 4.1.
3.2. Reconnaissance Phase 3.2. Reconnaissance Phase
skipping to change at line 495 skipping to change at line 496
The sender enters the Reconnaissance Phase after connection setup The sender enters the Reconnaissance Phase after connection setup
(using normal CC). In this phase, the CWND is initialised to the IW, (using normal CC). In this phase, the CWND is initialised to the IW,
and the sender transmits any initial data. and the sender transmits any initial data.
In the Reconnaissance Phase, the sender performs the following In the Reconnaissance Phase, the sender performs the following
action: action:
* Reconnaissance Phase (received acknowledgment): The CWND is * Reconnaissance Phase (received acknowledgment): The CWND is
increased using normal CC as each ACK confirms delivery of increased using normal CC as each ACK confirms delivery of
previously unacknowledged data (i.e., the base congestion control previously unacknowledged data (i.e., the base CC algorithm
algorithm continues to operate normally). continues to operate normally).
The sender exits the Reconnaissance Phase and stops using Careful The sender exits the Reconnaissance Phase and stops using Careful
Resume when one of the following events occurs: Resume when one of the following events occurs:
* Reconnaissance Phase (detected congestion): If the sender detects * Reconnaissance Phase (detected congestion): If the sender detects
congestion (e.g., packet loss or ECN-CE marking), this indicates congestion (e.g., packet loss or ECN-CE marking), this indicates
that use of the saved CC parameters is inappropriate. The sender that use of the saved CC parameters is inappropriate. The sender
stops using Careful Resume and MUST continue using normal CC to stops using Careful Resume and MUST continue using normal CC to
react to the detected congestion. react to the detected congestion.
skipping to change at line 520 skipping to change at line 521
Careful Resume and return to use normal CC. Careful Resume and return to use normal CC.
* Reconnaissance Phase (path change): If the Remote Endpoint is not * Reconnaissance Phase (path change): If the Remote Endpoint is not
the same as any saved_remote_endpoint, or the sender receives a the same as any saved_remote_endpoint, or the sender receives a
signal from the local stack indicating that the path is now signal from the local stack indicating that the path is now
different to the observed path, the sender MUST stop using Careful different to the observed path, the sender MUST stop using Careful
Resume and returns to use normal CC. Resume and returns to use normal CC.
* Reconnaissance Phase (lifetime of saved CC parameters): The CC * Reconnaissance Phase (lifetime of saved CC parameters): The CC
parameters are temporal. If the Lifetime of the observed CC parameters are temporal. If the Lifetime of the observed CC
parameters is exceeded, this set of CC parameters is not used; the parameters is exceeded, this set of CC parameters is not used.
saved CC parameters are deleted and MUST stop using Careful Resume The saved CC parameters are deleted, and the sender MUST stop
and returns to use normal CC. using Careful Resume and return to using normal CC.
* Reconnaissance Phase (minimum RTT too small): If the minimum RTT * Reconnaissance Phase (minimum RTT too small): If the minimum RTT
recorded in the Reconnaissance Phase is less than or equal to recorded in the Reconnaissance Phase is less than or equal to
(saved_rtt / 2) (see Section 4.2.1), the sender MUST stop using (saved_rtt / 2) (see Section 4.2.1), the sender MUST stop using
Careful Resume (e.g., logged as rtt_not_validated in [LOG]) and Careful Resume (e.g., logged as rtt_not_validated in [LOG]) and
returns to use normal CC. This is because the calculation of a returns to use normal CC. This is because the calculation of a
sending rate from a saved_cwnd is directly impacted by the RTT; sending rate from a saved_cwnd is directly impacted by the RTT;
therefore, a significant change in the RTT is a strong indication therefore, a significant change in the RTT is a strong indication
that the previously observed CC parameters are not valid for the that the previously observed CC parameters are not valid for the
current path. current path.
skipping to change at line 620 skipping to change at line 621
packet): The sender enters the Validating Phase when an ACK is packet): The sender enters the Validating Phase when an ACK is
received that acknowledges the first packet number (or higher) received that acknowledges the first packet number (or higher)
that was sent in the Unvalidated Phase (e.g., logged as that was sent in the Unvalidated Phase (e.g., logged as
first_unvalidated_packet_acknowledged in [LOG]). first_unvalidated_packet_acknowledged in [LOG]).
* Unvalidated Phase (limiting time in the Unvalidated Phase): The * Unvalidated Phase (limiting time in the Unvalidated Phase): The
sender enters the Validating Phase if more than one RTT has sender enters the Validating Phase if more than one RTT has
elapsed while in the Unvalidated Phase (e.g., logged as elapsed while in the Unvalidated Phase (e.g., logged as
rtt_exceeded in [LOG]). rtt_exceeded in [LOG]).
Unvalidated Phase (check flight_size): Upon any of these events (and Unvalidated Phase (check flight_size): Upon any of these events, and
after processing any Acknowledgments that update the PipeSize and after processing any Acknowledgments that update the PipeSize and
flight_size), the sender checks if (flight_size is less than the IW) flight_size, the sender checks if the flight_size is less than the IW
or (flight_size is less than or equal to the PipeSize) then the CWND or if the flight_size is less than or equal to the PipeSize, and if
is reset to the PipeSize (e.g., logged as rate_limited in [LOG]) and true, resets the CWND to the PipeSize (e.g., logged as rate_limited
the sender stops using Careful Resume and returns to use normal CC. in [LOG]) and stops using Careful Resume and returns to use normal
In the absence of detected congestion, the CWND is not reduced below CC. In the absence of detected congestion, the CWND is not reduced
the IW. (The PipeSize does not include the part of the jump_cwnd below the IW. (The PipeSize does not include the part of the
that was not utilised.) Otherwise, the CWND MUST be set to the jump_cwnd that was not utilised.) Otherwise, the CWND MUST be set to
flight_size and the sender progresses to the Validating Phase. the flight_size and the sender progresses to the Validating Phase.
Implementation notes are provided in Section 4.3. Implementation notes are provided in Section 4.3.
Notes for BBR are provided in Appendix C.1. Notes for BBR are provided in Appendix C.1.
3.4. Validating Phase 3.4. Validating Phase
The Validating Phase checks whether all packets sent in the The Validating Phase checks whether all packets sent in the
Unvalidated Phase were received without inducing congestion. The Unvalidated Phase were received without inducing congestion. The
CWND remains unvalidated and the sender typically remains in this CWND remains unvalidated and the sender typically remains in this
phase for one RTT. phase for one RTT.
In the Validating Phase, the sender performs the following actions: In the Validating Phase, the sender performs the following actions:
* Validating Phase (tracking PipeSize): The PipeSize is increased by * Validating Phase (tracking PipeSize): The PipeSize is increased by
the volume of acknowledged data for each received ACK that the volume of acknowledged data for each received ACK that
indicates a packet was successfully sent over the path. indicates a packet was successfully sent over the path.
* Validating Phase (updating the CWND): The CWND is updated using * Validating Phase (updating the CWND): The CWND is updated using
the normal rules for the current congestion controller. This the normal rules for the current congestion controller. This
typically will use "slow start", which allows the CWND to be typically will use "Slow Start", which allows the CWND to be
increased for each received ACK that indicates a packet has been increased for each received ACK that indicates a packet has been
successfully sent across the path. successfully sent across the path.
The sender exits the Validating Phase when one of the following The sender exits the Validating Phase when one of the following
events occurs: events occurs:
* Validating Phase (detected congestion): If the sender determines * Validating Phase (detected congestion): If the sender determines
that congestion was detected (e.g., packet loss or ECN-CE that congestion was detected (e.g., packet loss or ECN-CE
marking), Careful Resume enters the Safe Retreat Phase (e.g., marking), Careful Resume enters the Safe Retreat Phase (e.g.,
logged as either packet_loss or ECN_CE in [LOG]). logged as either packet_loss or ECN_CE in [LOG]).
skipping to change at line 720 skipping to change at line 721
* Safe Retreat Phase (acknowledgment of unvalidated packets): When * Safe Retreat Phase (acknowledgment of unvalidated packets): When
the last packet (or a later packet) sent during the Unvalidated the last packet (or a later packet) sent during the Unvalidated
Phase has been acknowledged, the sender stops using Careful Resume Phase has been acknowledged, the sender stops using Careful Resume
and returns to use normal CC. and returns to use normal CC.
On leaving the Safe Retreat Phase, the ssthresh MUST be set to no On leaving the Safe Retreat Phase, the ssthresh MUST be set to no
larger than the most recently measured PipeSize * Beta, where Beta is larger than the most recently measured PipeSize * Beta, where Beta is
a scaling factor between 0.5 and 1. The default value is 0.5, chosen a scaling factor between 0.5 and 1. The default value is 0.5, chosen
to reduce the probability of inducing a second round of congestion. to reduce the probability of inducing a second round of congestion.
Cubic defines a Beta__cubic of 0.7 [RFC9438] (e.g., logged as CUBIC defines a Beta__cubic of 0.7 [RFC9438] (e.g., logged as
exit_recovery in [LOG]). exit_recovery in [LOG]).
Implementation notes are provided in Section 4.5. Implementation notes are provided in Section 4.5.
Notes for BBR are described in Appendix C.3. Notes for BBR are described in Appendix C.3.
3.6. Detecting Persistent Congestion While Using Careful Resume 3.6. Detecting Persistent Congestion While Using Careful Resume
A sender that experiences persistent congestion (e.g., a A sender that experiences persistent congestion (e.g., a
Retransmission Time Out (RTO) or expiry in TCP) ceases to use Careful Retransmission Time Out (RTO) or expiry in TCP) ceases to use Careful
skipping to change at line 743 skipping to change at line 744
cause it to enter the Drain state while the "carefully-resuming" flag cause it to enter the Drain state while the "carefully-resuming" flag
is set to True; see Appendix C.3. is set to True; see Appendix C.3.
As in loss recovery, data sent in the Unvalidated Phase could be As in loss recovery, data sent in the Unvalidated Phase could be
later acknowledged after an RTO event. later acknowledged after an RTO event.
3.7. Returning to Use Normal CC 3.7. Returning to Use Normal CC
After exiting Careful Resume, the sender returns to using the normal After exiting Careful Resume, the sender returns to using the normal
CC algorithm (e.g., in congestion avoidance when the CWND is more CC algorithm (e.g., in congestion avoidance when the CWND is more
than ssthresh, or slow start when less than or equal to ssthresh). than ssthresh, or Slow Start when less than or equal to ssthresh).
Implementation notes are provided in Section 4.6. Implementation notes are provided in Section 4.6.
4. Implementation Notes and Guidelines 4. Implementation Notes and Guidelines
This section provides guidance for implementation and use. This section provides guidance for implementation and use.
4.1. Observing the Path Capacity 4.1. Observing the Path Capacity
There are various approaches to measuring the capacity used by a There are various approaches to measuring the capacity used by a
connection. Congestion controllers, such as such as Reno [RFC5681] connection. Congestion controllers, such as Reno [RFC5681] or CUBIC
or Cubic [RFC9438], could estimate the capacity based on the CWND, [RFC9438], could estimate the capacity based on the CWND,
flight_size, acknowledged rate, etc. A different approach could flight_size, acknowledged rate, etc. A different approach could
estimate the same parameters for a rate-based congestion controller, estimate the same parameters for a rate-based congestion controller,
such as BBR [BBR-CC], or by observing the rate at which data is such as BBR [BBR-CC], or by observing the rate at which data is
acknowledged by the Remote Endpoint. acknowledged by the Remote Endpoint.
Implementations are required to calculate a saved_rtt, measuring the Implementations are required to calculate a saved_rtt, measuring the
minimum RTT while observing the capacity. For example, this could be minimum RTT while observing the capacity. For example, this could be
the minimum of a set RTT of measurements measured over the previous 5 the minimum of a set RTT of measurements measured over the previous 5
minutes. minutes.
* There are cases where the current CWND does not reflect the path * There are cases where the current CWND does not reflect the path
capacity. At the end of slow start, the CWND can be significantly capacity. At the end of Slow Start, the CWND can be significantly
larger than needed to fully utilise the path (i.e., a CWND larger than needed to fully utilise the path (i.e., a CWND
overshoot). It is inappropriate to use an overshoot in the CWND overshoot). It is inappropriate to use an overshoot in the CWND
as a basis for estimating the capacity. In most cases, the CWND as a basis for estimating the capacity. In most cases, the CWND
will converge to a stable value after several more RTTs. One will converge to a stable value after several more RTTs. One
mitigation when a connection is in Slow Start could be to set the mitigation when a connection is in Slow Start could be to set the
saved_cwnd based on the validated pipe size (i.e., CWND / 2). saved_cwnd based on the validated pipe size (i.e., CWND / 2).
* When the sender is rate limited or in the RTT following a burst of * When the sender is rate limited or in the RTT following a burst of
transmission, a sender typically transmits less data than allowed transmission, a sender typically transmits less data than allowed
by the CWND. Such observations could be discounted when by the CWND. Such observations could be discounted when
skipping to change at line 819 skipping to change at line 820
A sender that is rate limited [RFC7661] sends insufficient data to be A sender that is rate limited [RFC7661] sends insufficient data to be
able to validate transmission at a higher rate. Such a sender is able to validate transmission at a higher rate. Such a sender is
allowed to remain in the Reconnaissance Phase and to not transition allowed to remain in the Reconnaissance Phase and to not transition
to the Unvalidated Phase until there is more data in the transmission to the Unvalidated Phase until there is more data in the transmission
buffer than would normally be permitted by the CC algorithm. buffer than would normally be permitted by the CC algorithm.
4.2.1. Confirming the Path 4.2.1. Confirming the Path
Path characteristics can change over time for many reasons. This can Path characteristics can change over time for many reasons. This can
result in the previously observed CC parameters becoming irrelevant. result in the previously observed CC parameters becoming irrelevant.
To help confirm the path, the sender compares the saved_rrt with each To help confirm the path, the sender compares the saved_rtt with each
current RTT sample. current RTT sample.
If the current RTT sample is less than a half of the saved_rrt, this If the current RTT sample is less than a half of the saved_rtt, this
is regarded as too small. This is an indicator of a path change. is regarded as too small. This is an indicator of a path change.
This factor of two arises because the jump_cwnd is calculated as half This factor of two arises because the jump_cwnd is calculated as half
the measured saved_cwnd and the sending rate ought not to exceed the the measured saved_cwnd and the sending rate ought not to exceed the
observed rate when the saved_cwnd was measured. observed rate when the saved_cwnd was measured.
If the current RTT is larger than the saved_rtt, this would result in If the current RTT is larger than the saved_rtt, this would result in
a proportionally lower rate for the unvalidated packets, because the a proportionally lower rate for the unvalidated packets, because the
transmission is paced based on the current RTT. Hence, this rate is transmission is paced based on the current RTT. Hence, this rate is
still safe. If the current RTT has been incorrectly measured as still safe. If the current RTT has been incorrectly measured as
larger than the actual path RTT, the sender will receive an ACK for larger than the actual path RTT, the sender will receive an ACK for
an unvalidated packet before it has completed the Unvalidated Phase. an unvalidated packet before it has completed the Unvalidated Phase.
This ACK resets the CWND to reflect the flight_size, and the sender This ACK resets the CWND to reflect the flight_size, and the sender
then enters the Validating Phase. The flight_size reflects the then enters the Validating Phase. The flight_size reflects the
amount of outstanding data in the network rather than the maximum amount of outstanding data in the network rather than the maximum
that is permitted by the CWND. that is permitted by the CWND.
A current RTT that is more than ten times the saved_rrt is indicative A current RTT that is more than ten times the saved_rtt is indicative
of a path change. The value of ten accommodates both increases in of a path change. The value of ten accommodates both increases in
latency from buffering on a path and any variation between RTT latency from buffering on a path and any variation between RTT
samples. samples.
Note 1: In the Reconnaissance Phase, the sender calculates a minimum Note 1: In the Reconnaissance Phase, the sender calculates a minimum
RTT over the phase and checks this on entry to the Unvalidated Phase. RTT over the phase and checks this on entry to the Unvalidated Phase.
This avoids a need to check after each current RTT sample. This avoids a need to check after each current RTT sample.
Note 2: During the Unvalidated Phase, the minimum RTT cannot Note 2: During the Unvalidated Phase, the minimum RTT cannot
increase, and hence the minimum RTT can never be larger than increase, and hence the minimum RTT can never be larger than
(saved_rtt x 10) during the Unvalidated Phase. (saved_rtt x 10) during the Unvalidated Phase.
The sender also verifies that the initial data was acknowledged. Any The sender also verifies that the initial data was acknowledged. Any
loss could be indicative of persistent congestion. If a sender in loss could be indicative of persistent congestion. If a sender in
the Reconnaissance Phase detects congestion, it stops using Careful the Reconnaissance Phase detects congestion, it stops using Careful
Resume and returns to using normal CC. Some transport protocols Resume and returns to using normal CC. Some transport protocols
implement CC mechanisms that infer potential congestion from an implement CC mechanisms that infer potential congestion from an
increase in the current RTT. Designs need to consider if such an increase in the current RTT. Designs need to consider whether such
indication is a suitable trigger to revert to stop using Careful an indication is a suitable trigger to stop using Careful Resume and
Resume. revert to using normal CC.
4.3. Safety in the Unvalidated Phase 4.3. Safety in the Unvalidated Phase
This section considers the safety for using saved CC parameters to This section considers the safety for using saved CC parameters to
tentatively update the CWND. This seeks to avoid starving other tentatively update the CWND. This seeks to avoid starving other
flows that could have either started or increased their use of flows that could have either started or increased their use of
capacity since observing the capacity of a path. capacity since observing the capacity of a path.
To avoid inducing significant congestion to any connections that have To avoid inducing significant congestion to any connections that have
started to use a shared bottleneck, a sender must not directly use started to use a shared bottleneck, a sender must not directly use
skipping to change at line 903 skipping to change at line 904
period. However, [RFC7661] targets rate-limited connections using period. However, [RFC7661] targets rate-limited connections using
normal CC. Careful Resume includes additional mechanisms to avoid normal CC. Careful Resume includes additional mechanisms to avoid
and mitigate the effects of overshoot, and therefore a longer period and mitigate the effects of overshoot, and therefore a longer period
can be justified when using a saved_cwnd with Careful Resume. can be justified when using a saved_cwnd with Careful Resume.
When the path characteristics are known to be dynamic, or the path When the path characteristics are known to be dynamic, or the path
varies, a small Lifetime is desirable (e.g., measured in minutes). varies, a small Lifetime is desirable (e.g., measured in minutes).
For stable paths, and where the sender does not expect the path to be For stable paths, and where the sender does not expect the path to be
shared by many senders, a longer Lifetime (e.g., measured in hours) shared by many senders, a longer Lifetime (e.g., measured in hours)
could be used. A bottleneck that is shared by a large number of could be used. A bottleneck that is shared by a large number of
senders brings greater risk that CR connections could contribute senders brings greater risk that Careful Resume connections could
congestion that leads to prolonged overload with starvation. This contribute congestion that leads to prolonged overload with
can be mitigated by setting a small Lifetime. starvation. This can be mitigated by setting a small Lifetime.
4.3.2. Pacing in the Unvalidated Phase 4.3.2. Pacing in the Unvalidated Phase
A sender needs to avoid any step increase in the CWND resulting in a A sender needs to avoid any step increase in the CWND resulting in a
burst of packets that is greater than the size of the CC algorithm's burst of packets that is greater than the size of the CC algorithm's
IW. This is consistent with [RFC8085] and [RFC9000]. IW. This is consistent with [RFC8085] and [RFC9000].
Pacing packets as a function of the current RTT, rather than the Pacing packets as a function of the current RTT, rather than the
saved_rrt, provides additional safety during the Unvalidated Phase, saved_rtt, provides additional safety during the Unvalidated Phase,
because it avoids a smaller saved_rrt inflating the sending rate. because it avoids a smaller saved_rtt inflating the sending rate.
The lower bound to the minimum acceptable current RTT avoids sending The lower bound to the minimum acceptable current RTT avoids sending
unvalidated packets at a rate that would be higher than was unvalidated packets at a rate that would be higher than was
previously observed. previously observed.
The following example provides a relevant pacing rhythm: An Inter- The following example provides a relevant pacing rhythm: An Inter-
packet Transmission Time (ITT) is determined by using the current packet Transmission Time (ITT) is determined by using the current
Maximum Packet Size (MPS), including headers, the saved_cwnd, and the Maximum Packet Size (MPS), including headers, the saved_cwnd, and the
current RTT. A safety margin can be configured to avoid sending more current RTT. A safety margin can be configured to avoid sending more
than a maximum (max_jump): than a maximum (max_jump):
skipping to change at line 986 skipping to change at line 987
for unvalidated packets. for unvalidated packets.
The Safe Retreat Phase sets a safe CWND value to drain any The Safe Retreat Phase sets a safe CWND value to drain any
unvalidated packets from the path after a packet loss has been unvalidated packets from the path after a packet loss has been
detected or when ACKs that indicate the sent packets were marked as detected or when ACKs that indicate the sent packets were marked as
ECN-CE. The CC parameters that were used are invalid and are ECN-CE. The CC parameters that were used are invalid and are
removed. removed.
The Safe Retreat reaction differs from a traditional reaction to The Safe Retreat reaction differs from a traditional reaction to
detected congestion, because a jump_cwnd can result in a detected congestion, because a jump_cwnd can result in a
significantly higher rate than would be allowed by Slow-Start. Such significantly higher rate than would be allowed by Slow Start. Such
a jump could aggressively feed a congested bottleneck, resulting in a jump could aggressively feed a congested bottleneck, resulting in
overshoot where a disproportionate number of packets from existing overshoot where a disproportionate number of packets from existing
flows are displaced from the buffer at the congested bottleneck. For flows are displaced from the buffer at the congested bottleneck. For
this reason, a sender in the Safe Retreat Phase needs to react to this reason, a sender in the Safe Retreat Phase needs to react to
detected congestion by reducing the CWND significantly below the detected congestion by reducing the CWND significantly below the
saved_cwnd. saved_cwnd.
During loss recovery, a receiver can cumulatively acknowledge data During loss recovery, a receiver can cumulatively acknowledge data
that was previously sent in the Unvalidated Phase in addition to that was previously sent in the Unvalidated Phase in addition to
acknowledging the successful retransmission of data. [RFC3465] acknowledging the successful retransmission of data. [RFC3465]
skipping to change at line 1115 skipping to change at line 1116
if a server is configured to send using Careful Resume, there is an if a server is configured to send using Careful Resume, there is an
onus to appropriately manage the use of saved CC parameters (see onus to appropriately manage the use of saved CC parameters (see
Section 4.2). Section 4.2).
The way in which this is realised will depend upon the design choices The way in which this is realised will depend upon the design choices
in configuring the network and the servers. On the one hand, if all in configuring the network and the servers. On the one hand, if all
the servers responding to a given IP address share the same location the servers responding to a given IP address share the same location
(e.g., are in the same data center), then a method could be provided (e.g., are in the same data center), then a method could be provided
to coordinate their sharing of the CC parameters that are used to to coordinate their sharing of the CC parameters that are used to
send data using Careful Resume. On the other hand, if the service send data using Careful Resume. On the other hand, if the service
configuration is such that subsquent use of the IP anycast address configuration is such that subsequent use of the IP anycast address
might result in a very different path to a server (e.g., at a might result in a very different path to a server (e.g., at a
different location where the path would be unable to support the same different location where the path would be unable to support the same
capacity), a sender should not use Careful Resume based on saved CC capacity), a sender should not use Careful Resume based on saved CC
parameters. parameters.
6. IANA Considerations 6. IANA Considerations
This document has no IANA actions. This document has no IANA actions.
7. Security Considerations 7. Security Considerations
The security considerations are the same as for other sender-based The security considerations are the same as for other sender-based CC
congestion control methods. Such methods rely on the receiver methods. Such methods rely on the receiver appropriately
appropriately acknowledging receipt of data. The ability of an on- acknowledging receipt of data. The ability of an on-path or off-path
path or off-path attacker to influence congestion control depends attacker to influence CC depends upon the security properties of the
upon the security properties of the transport protocol being used. transport protocol being used.
8. References 8. References
8.1. Normative References 8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
skipping to change at line 1283 skipping to change at line 1284
restart-00>. restart-00>.
Appendix A. Notes on the Careful Resume Phases Appendix A. Notes on the Careful Resume Phases
The table below is provided to illustrate the operation of Careful The table below is provided to illustrate the operation of Careful
Resume. This table is informative; please refer to the body of the Resume. This table is informative; please refer to the body of the
document for the normative specification. The description is based document for the normative specification. The description is based
on a normal CC that uses Reno. The PipeSize tracks the validated on a normal CC that uses Reno. The PipeSize tracks the validated
CWND. CWND.
The table uses the following abbreviations: The phases in Table 1 correspond to Sections 3.2 through 3.5. This
table also uses the following abbreviations:
SS = Slow-Start SS = Slow Start
FS = flight_size FS = flight_size
PS = PipeSize PS = PipeSize
ACK = highest acknowledged packet ACK = highest acknowledged packet
CC =Congestion Control
CR = Careful Resume
IW = Initial congestion Window
CWND = Congestion Window
+======+=========+============+=============+===========+===========+ +=======+=========+============+============+===========+===========+
|Phase |Normal |Recon. |Unvalidated |Validating |Safe Ret. | |Phase |Normal |Recon. |Unvalidated |Validating |Safe Ret. |
+======+=========+============+=============+===========+===========+ +=======+=========+============+============+===========+===========+
| |Observing|Confirm path|Send faster |Validate |Drain path;| | |Observing|Confirm path|Send faster |Validate |Drain path;|
| |CC params| |using |new CWND; |Update PS | | |CC params| |using |new CWND; |Update PS |
| | | |saved_cwnd |Update PS | | | | | |saved_cwnd |Update PS | |
+------+---------+------------+-------------+-----------+-----------+ +-------+---------+------------+------------+-----------+-----------+
|On | - |CWND=IW |PS=FS |If (FS>PS) |CWND=(PS/2)| |On | - |CWND=IW |PS=FS |If (FS>PS) |CWND=(PS/2)|
|entry:| | |jump_cwnd |{CWND=FS} | | |entry: | | |jump_cwnd |{CWND=FS} | |
| | | |=saved_cwnd |else | | | | | |=saved_cwnd |else | |
| | | |/2; CWND |{CWND=PS; | | | | | |/2; CWND |{CWND=PS; | |
| | | |=jump_cwnd |use Normal | | | | | |=jump_cwnd |use Normal | |
| | | | |CC} | | | | | | |CC} | |
+------+---------+------------+-------------+-----------+-----------+ +-------+---------+------------+------------+-----------+-----------+
|CWND: |When in |CWND |CWND is not |CWND can |CWND is not| |CWND: |When in |CWND |CWND is not |CWND can |CWND is not|
| |observe, |increases |increased |increase |increased | | |observe, |increases |increased |increase |increased |
| |measure |using SS | |using | | | |measure |using SS | |using | |
| |saved | | |normal CC | | | |saved | | |normal CC | |
| |_cwnd | | | | | | |_cwnd | | | | |
+------+---------+------------+-------------+-----------+-----------+ +-------+---------+------------+------------+-----------+-----------+
|PS: | - | - |PS+=ACked | |PS: | - | - |PS+=ACKed |
+------+---------+------------+-------------+-----------+-----------+ +-------+---------+------------+------------+-----------+-----------+
|RTT: |Measure |Measure | - | - | - | |RTT: |Measure |Measure | - | - | - |
| |saved_rtt|current RTT | | | | | |saved_rtt|current RTT | | | |
+------+---------+------------+-------------+-----------+-----------+ +-------+---------+------------+------------+-----------+-----------+
|If |Normal CC|Normal CC; |Enter Safe Retreat | - | |If loss|Normal CC|Normal CC; |Enter Safe Retreat | - |
|loss | |CR is not | | | |or ECN-| |CR is not | | |
|or | |allowed | | | |CE: | |allowed | | |
|ECNCE:| | | | | +-------+---------+------------+------------+-----------+-----------+
+------+---------+------------+-------------+-----------+-----------+ |Next |Observing|If (CWND, |If (FS>CWND |If (ACK >= |If (ACK >= |
|Next |Observing|If (CWND, |If (FS>CWND |If (ACK >= |If (ACK >= | |Phase: |(as |Lifetime, |or >1 RTT |last |last |
|Phase:|(as |Lifetime, |or >1 RTT |last |last | | |needed) |and RTT |has passed |unvalidated|unvalidated|
| |needed) |and RTT |has passed |unvalidated|unvalidated| | | |confirmed), |or ACK >= |packet), |packet), |
| | |confirmed), |or ACK >= |packet), |packet), | | | |enter |first |use Normal |ssthresh = |
| | |enter |first |use Normal |ssthresh = | | | |Unvalidated;|unvalidated |CC |PS x Beta; |
| | |Unvalidated;|unvalidated |CC |PS x Beta; | | | |else |packet), If | |and use |
| | |else |packet), If | |and use | | | |CWND=Max |((FS>CWND) | |Normal CC |
| | |CWND=Max |((FS>CWND) | |Normal CC | | | |(PS,IW); and|or | | |
| | |(PS,IW); and|or (FS<=PS)) | | | | | |use Normal |(FS<=PS)) | | |
| | |use Normal |cwnd=PS; and | | | | | |CC |cwnd=PS; | | |
| | |CC |use Normal | | | | | | |and use | | |
| | | |CC else | | | | | | |Normal CC | | |
| | | |cwnd=FS; | | | | | | |else | | |
| | | |enter | | | | | | |cwnd=FS; | | |
| | | |Validating | | | | | | |enter | | |
+------+---------+------------+-------------+-----------+-----------+ | | | |Validating | | |
+-------+---------+------------+------------+-----------+-----------+
Table 1: Illustration of the Operation of Careful Resume Table 1: Illustration of the Operation of Careful Resume
Appendix B. Examples of the Careful Resume Phases Appendix B. Examples of the Careful Resume Phases
The following examples consider an implementation that keeps track of The following examples consider an implementation that keeps track of
transmitted data in terms of packets and provide informative examples transmitted data in terms of packets and provide informative examples
of use. of use.
In the Unvalidated Phase, the first unvalidated packet corresponds to In the Unvalidated Phase, the first unvalidated packet corresponds to
skipping to change at line 1390 skipping to change at line 1397
When the first unvalidated packet is acknowledged (packet number 30), When the first unvalidated packet is acknowledged (packet number 30),
the sender enters the Validating Phase. (This transition would also the sender enters the Validating Phase. (This transition would also
occur if the flight_size increased to equal the CWND.) During this occur if the flight_size increased to equal the CWND.) During this
phase, the CWND can be increased for each ACK that acknowledges an phase, the CWND can be increased for each ACK that acknowledges an
unvalidated packet, because this indicates that the packet was unvalidated packet, because this indicates that the packet was
validated. validated.
When an ACK is received that acknowledges the last packet that was When an ACK is received that acknowledges the last packet that was
sent in the Unvalidated Phase, the sender stops using Careful Resume. sent in the Unvalidated Phase, the sender stops using Careful Resume.
For example, if the CWND is less than ssthresh, a Reno or Cubic For example, if the CWND is less than ssthresh, a Reno or CUBIC
sender using normal CC is permitted to use Slow-Start to grow the sender using normal CC is permitted to use Slow Start to grow the
CWND towards the ssthresh and will then enter congestion avoidance. CWND towards the ssthresh and will then enter congestion avoidance.
B.2. Example with No Loss, Rate Limited B.2. Example with No Loss, Rate Limited
A rate-limited sender will not fully utilise the available CWND when A rate-limited sender will not fully utilise the available CWND when
using Careful Resume, and the CWND is therefore reset on entry to the using Careful Resume, and the CWND is therefore reset on entry to the
Validating Phase, as described below. Validating Phase, as described below.
The sender starts by sending up to IW packets (10) in the The sender starts by sending up to IW packets (10) in the
Reconnaissance Phase. It commences as described in the first Reconnaissance Phase. It commences as described in the first
skipping to change at line 1464 skipping to change at line 1471
acknowledged. This conservative CWND calculation ensures the sender acknowledged. This conservative CWND calculation ensures the sender
drains the path after this potentially severe congestion event. drains the path after this potentially severe congestion event.
There is no further increase in the CWND in this phase. There is no further increase in the CWND in this phase.
The sender continues to receive ACKs that acknowledge the remaining The sender continues to receive ACKs that acknowledge the remaining
86 (121-35) unvalidated packets. Recall that the 35th unvalidated 86 (121-35) unvalidated packets. Recall that the 35th unvalidated
packet was lost and had packet number 64 (29+35). The PipeSize packet was lost and had packet number 64 (29+35). The PipeSize
tracks the capacity discovered by ACKs that acknowledge the tracks the capacity discovered by ACKs that acknowledge the
unvalidated packets (i.e., the PipeSize is increased for each unvalidated packets (i.e., the PipeSize is increased for each
received ACK that acknowledges new data). Although this PipeSize received ACK that acknowledges new data). Although this PipeSize
cannot be used to safety initialise the CWND (because it was measured cannot be used to safely initialise the CWND (because it was measured
when the sender had aggressively created overload), the estimated when the sender had aggressively created overload), the estimated
PipeSize (which, in this case, is 121-1 = 120 packets) can be used to PipeSize (which, in this case, is 121-1 = 120 packets) can be used to
set the ssthresh on exit from Safe Retreat, since it does indicate a set the ssthresh on exit from Safe Retreat, since it does indicate a
measured upper limit to the current capacity. measured upper limit to the current capacity.
At the point where all the unvalidated packets that were sent in the At the point where all the unvalidated packets that were sent in the
Unvalidated Phase have been either acknowledged or have been declared Unvalidated Phase have been either acknowledged or have been declared
lost, the sender updates the ssthresh to be no larger than the lost, the sender updates the ssthresh to be no larger than the
recently measured PipeSize multiplied by Beta (the final action of recently measured PipeSize multiplied by Beta (the final action of
the Safe Retreat Phase), and the sender stops using Careful Resume. the Safe Retreat Phase), and the sender stops using Careful Resume.
Because the CWND will now be less than ssthresh, a sender using Because the CWND will now be less than ssthresh, a sender using
normal CC is permitted to use Slow-Start to grow the CWND towards the normal CC is permitted to use Slow Start to grow the CWND towards the
ssthresh, after which it will enter congestion avoidance. ssthresh, after which it will enter congestion avoidance.
Appendix C. Implementation Notes for Using BBR Appendix C. Implementation Notes for Using BBR
Bottleneck Bandwidth and Round-trip propagation time (BBR) uses Bottleneck Bandwidth and Round-trip propagation time (BBR) uses
recent measurements of a transport connection's delivery rate, Round recent measurements of a transport connection's delivery rate, Round
Trip Time (RTT), and packet loss rate to build an explicit model of Trip Time (RTT), and packet loss rate to build an explicit model of
the network path. BBR then uses this model to control both how fast the network path. BBR then uses this model to control both how fast
it sends data and the maximum volume of data it allows in flight in it sends data and the maximum volume of data it allows in flight in
the network at any time [BBR-CC]. the network at any time [BBR-CC].
 End of changes. 42 change blocks. 
120 lines changed or deleted 127 lines changed or added

This html diff was produced by rfcdiff 1.48.