rfc9937v3.txt   rfc9937.txt 
skipping to change at line 357 skipping to change at line 357
[First_TCP_PRR] and is similar to [RFC6675], which specifies setting [First_TCP_PRR] and is similar to [RFC6675], which specifies setting
cwnd to ssthresh at the start of recovery. cwnd to ssthresh at the start of recovery.
Since [RFC6937] was written, PRR has also been adapted to perform Since [RFC6937] was written, PRR has also been adapted to perform
multiplicative window reduction for non-loss-based congestion control multiplicative window reduction for non-loss-based congestion control
algorithms, such as for Explicit Congestion Notification (ECN) as algorithms, such as for Explicit Congestion Notification (ECN) as
described in [RFC3168]. This can be done by using some parts of the described in [RFC3168]. This can be done by using some parts of the
loss recovery state machine (in particular, the RecoveryPoint from loss recovery state machine (in particular, the RecoveryPoint from
[RFC6675]) to invoke the PRR ACK processing for exactly one round [RFC6675]) to invoke the PRR ACK processing for exactly one round
trip worth of ACKs. However, note that using PRR for cwnd reductions trip worth of ACKs. However, note that using PRR for cwnd reductions
for ECN [RFC3168] has been observed, with some approaches to Active for the [RFC3168] variant of ECN has been observed, with some
Queue Management (AQM), to cause an excess cwnd reduction during ECN- approaches to Active Queue Management (AQM), to cause an excess cwnd
triggered congestion episodes, as noted in [VCC]. reduction during ECN-triggered congestion episodes, as noted in
[VCC].
5. Relationships to Other Standards 5. Relationships to Other Standards
PRR MAY be used in conjunction with any congestion control algorithm PRR MAY be used in conjunction with any congestion control algorithm
that intends to make a multiplicative decrease in its sending rate that intends to make a multiplicative decrease in its sending rate
over approximately the time scale of one round-trip time, as long as over approximately the time scale of one round-trip time, as long as
the current volume of in-flight data is limited by a congestion the current volume of in-flight data is limited by a congestion
window (cwnd) and the target volume of in-flight data during that window (cwnd) and the target volume of in-flight data during that
reduction is a fixed value given by ssthresh. In particular, PRR is reduction is a fixed value given by ssthresh. In particular, PRR is
applicable to both Reno [RFC5681] and CUBIC [RFC9438] congestion applicable to both Reno [RFC5681] and CUBIC [RFC9438] congestion
skipping to change at line 496 skipping to change at line 497
indicating that the current ACK reported good progress. SafeACK is indicating that the current ACK reported good progress. SafeACK is
true only when the ACK has cumulatively acknowledged new data and the true only when the ACK has cumulatively acknowledged new data and the
ACK does not indicate further losses. For example, an ACK triggering ACK does not indicate further losses. For example, an ACK triggering
"rescue" retransmission (Section 4 of [RFC6675], NextSeg() condition "rescue" retransmission (Section 4 of [RFC6675], NextSeg() condition
4) may indicate further losses. Both conditions indicate the 4) may indicate further losses. Both conditions indicate the
recovery is making good progress and the sender can send more recovery is making good progress and the sender can send more
aggressively, increasing inflight, if appropriate. aggressively, increasing inflight, if appropriate.
Finally, the sender uses DeliveredData, inflight, SafeACK, and other Finally, the sender uses DeliveredData, inflight, SafeACK, and other
PRR state to compute SndCnt, a local variable indicating exactly how PRR state to compute SndCnt, a local variable indicating exactly how
many bytes should be sent in response to each ACK and then uses many bytes should be sent in response to each ACK, and then uses
SndCnt to update cwnd. SndCnt to update cwnd.
The full sequence of per-ACK PRR algorithm steps is as follows: The full sequence of per-ACK PRR algorithm steps is as follows:
if (DeliveredData is 0) if (DeliveredData is 0)
Return Return
prr_delivered += DeliveredData prr_delivered += DeliveredData
inflight = (estimated volume of in-flight data) inflight = (estimated volume of in-flight data)
SafeACK = (SND.UNA advances and no further loss indicated) SafeACK = (SND.UNA advances and no further loss indicated)
skipping to change at line 654 skipping to change at line 655
losses. PRR-SSRB is a compromise that permits a sender to send one losses. PRR-SSRB is a compromise that permits a sender to send one
extra segment per ACK as compared to the Packet Conserving Bound when extra segment per ACK as compared to the Packet Conserving Bound when
the ACK indicates the recovery is in good progress without further the ACK indicates the recovery is in good progress without further
losses. From the perspective of a strict Packet Conserving Bound, losses. From the perspective of a strict Packet Conserving Bound,
PRR-SSRB does indeed open the window during recovery; however, it is PRR-SSRB does indeed open the window during recovery; however, it is
significantly less aggressive than [RFC6675] in the presence of burst significantly less aggressive than [RFC6675] in the presence of burst
losses. losses.
8. Examples 8. Examples
This section illustrates the PRR and [RFC6675] algorithm by showing This section illustrates the PRR and [RFC6675] algorithms by showing
their different behaviors for two example scenarios: a connection their different behaviors for two example scenarios: a connection
experiencing either a single loss or a burst of 15 consecutive experiencing either a single loss or a burst of 15 consecutive
losses. All cases use bulk data transfers (no application pauses), losses. All cases use bulk data transfers (no application pauses),
Reno congestion control [RFC5681], and cwnd = FlightSize = inflight = Reno congestion control [RFC5681], and cwnd = FlightSize = inflight =
20 segments, so ssthresh will be set to 10 at the beginning of 20 segments, so ssthresh will be set to 10 at the beginning of
recovery. The scenarios use standard Fast Retransmit [RFC5681] and recovery. The scenarios use standard Fast Retransmit [RFC5681] and
Limited Transmit [RFC3042], so the sender will send two new segments Limited Transmit [RFC3042], so the sender will send two new segments
followed by one retransmit in response to the first three duplicate followed by one retransmit in response to the first three duplicate
ACKs following the losses. ACKs following the losses.
skipping to change at line 912 skipping to change at line 913
<https://www.rfc-editor.org/info/rfc9293>. <https://www.rfc-editor.org/info/rfc9293>.
[RFC9438] Xu, L., Ha, S., Rhee, I., Goel, V., and L. Eggert, Ed., [RFC9438] Xu, L., Ha, S., Rhee, I., Goel, V., and L. Eggert, Ed.,
"CUBIC for Fast and Long-Distance Networks", RFC 9438, "CUBIC for Fast and Long-Distance Networks", RFC 9438,
DOI 10.17487/RFC9438, August 2023, DOI 10.17487/RFC9438, August 2023,
<https://www.rfc-editor.org/info/rfc9438>. <https://www.rfc-editor.org/info/rfc9438>.
14.2. Informative References 14.2. Informative References
[FACK] Mathis, M. and J. Mahdavi, "Forward Acknowledgment: [FACK] Mathis, M. and J. Mahdavi, "Forward Acknowledgment:
Refining TCP Congestion Control", ACM SIGCOMM Computer Refining TCP Congestion Control", SIGCOMM '96: Conference
Communication Review, vol. 26, no. 4, pp. 281-291, Proceedings on Applications, Technologies, Architectures,
DOI 10.1145/248157.248181, August 1996, and Protocols for Computer Communications, pp. 281-291,
<https://dl.acm.org/doi/pdf/10.1145/248157.248181>. DOI 10.1145/248156.248181, August 1996,
<https://dl.acm.org/doi/10.1145/248156.248181>.
[First_TCP_PRR] [First_TCP_PRR]
"Proportional Rate Reduction for TCP.", commit "Proportional Rate Reduction for TCP.", commit
a262f0cdf1f2916ea918dc329492abb5323d9a6c, August 2011, a262f0cdf1f2916ea918dc329492abb5323d9a6c, August 2011,
<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/ <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/
linux.git/ linux.git/
commit/?id=a262f0cdf1f2916ea918dc329492abb5323d9a6c>. commit/?id=a262f0cdf1f2916ea918dc329492abb5323d9a6c>.
[Flach2016policing] [Flach2016policing]
Flach, T., Papageorge, P., Terzis, A., Pedrosa, L., Cheng, Flach, T., Papageorge, P., Terzis, A., Pedrosa, L., Cheng,
skipping to change at line 937 skipping to change at line 939
Internet-Wide Analysis of Traffic Policing", SIGCOMM '16: Internet-Wide Analysis of Traffic Policing", SIGCOMM '16:
Proceedings of the 2016 ACM SIGCOMM Conference, pp. Proceedings of the 2016 ACM SIGCOMM Conference, pp.
468-482, DOI 10.1145/2934872.2934873, August 2016, 468-482, DOI 10.1145/2934872.2934873, August 2016,
<https://doi.org/10.1145/2934872.2934873>. <https://doi.org/10.1145/2934872.2934873>.
[Hoe96Startup] [Hoe96Startup]
Hoe, J., "Improving the Start-up Behavior of a Congestion Hoe, J., "Improving the Start-up Behavior of a Congestion
Control Scheme for TCP", SIGCOMM '96: Conference Control Scheme for TCP", SIGCOMM '96: Conference
Proceedings on Applications, Technologies, Architectures, Proceedings on Applications, Technologies, Architectures,
and Protocols for Computer Communications, pp. 270-280, and Protocols for Computer Communications, pp. 270-280,
DOI 10.1145/248157.248180, August 1996, DOI 10.1145/248156.248180, August 1996,
<https://doi.org/10.1145/248157.248180>. <https://doi.org/10.1145/248156.248180>.
[IMC11] Dukkipati, N., Mathis, M., Cheng, Y., and M. Ghobadi, [IMC11] Dukkipati, N., Mathis, M., Cheng, Y., and M. Ghobadi,
"Proportional Rate Reduction for TCP", IMC '11: "Proportional Rate Reduction for TCP", IMC '11:
Proceedings of the 2011 ACM SIGCOMM Conference on Internet Proceedings of the 2011 ACM SIGCOMM Conference on Internet
Measurement Conference, pp. 155-170, Measurement Conference, pp. 155-170,
DOI 10.1145/2068816.2068832, November 2011, DOI 10.1145/2068816.2068832, November 2011,
<https://doi.org/10.1145/2068816.2068832>. <https://doi.org/10.1145/2068816.2068832>.
[Jacobson88] [Jacobson88]
Jacobson, V., "Congestion Avoidance and Control", Jacobson, V., "Congestion Avoidance and Control",
 End of changes. 5 change blocks. 
11 lines changed or deleted 13 lines changed or added

This html diff was produced by rfcdiff 1.48.