| 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. | ||||