| draft-ietf-quic-recovery-30.txt | draft-ietf-quic-recovery-31.txt | |||
|---|---|---|---|---|
| QUIC J. Iyengar, Ed. | QUIC J. Iyengar, Ed. | |||
| Internet-Draft Fastly | Internet-Draft Fastly | |||
| Intended status: Standards Track I. Swett, Ed. | Intended status: Standards Track I. Swett, Ed. | |||
| Expires: March 14, 2021 Google | Expires: 29 March 2021 Google | |||
| September 10, 2020 | 25 September 2020 | |||
| QUIC Loss Detection and Congestion Control | QUIC Loss Detection and Congestion Control | |||
| draft-ietf-quic-recovery-30 | draft-ietf-quic-recovery-31 | |||
| Abstract | Abstract | |||
| This document describes loss detection and congestion control | This document describes loss detection and congestion control | |||
| mechanisms for QUIC. | mechanisms for QUIC. | |||
| Note to Readers | Note to Readers | |||
| Discussion of this draft takes place on the QUIC working group | Discussion of this draft takes place on the QUIC working group | |||
| mailing list (quic@ietf.org (mailto:quic@ietf.org)), which is | mailing list (quic@ietf.org (mailto:quic@ietf.org)), which is | |||
| skipping to change at page 1, line 43 ¶ | skipping to change at page 1, line 43 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on March 14, 2021. | This Internet-Draft will expire on 29 March 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 3, line 40 ¶ | skipping to change at page 3, line 40 ¶ | |||
| B.1. Constants of interest . . . . . . . . . . . . . . . . . . 39 | B.1. Constants of interest . . . . . . . . . . . . . . . . . . 39 | |||
| B.2. Variables of interest . . . . . . . . . . . . . . . . . . 40 | B.2. Variables of interest . . . . . . . . . . . . . . . . . . 40 | |||
| B.3. Initialization . . . . . . . . . . . . . . . . . . . . . 40 | B.3. Initialization . . . . . . . . . . . . . . . . . . . . . 40 | |||
| B.4. On Packet Sent . . . . . . . . . . . . . . . . . . . . . 41 | B.4. On Packet Sent . . . . . . . . . . . . . . . . . . . . . 41 | |||
| B.5. On Packet Acknowledgement . . . . . . . . . . . . . . . . 41 | B.5. On Packet Acknowledgement . . . . . . . . . . . . . . . . 41 | |||
| B.6. On New Congestion Event . . . . . . . . . . . . . . . . . 42 | B.6. On New Congestion Event . . . . . . . . . . . . . . . . . 42 | |||
| B.7. Process ECN Information . . . . . . . . . . . . . . . . . 43 | B.7. Process ECN Information . . . . . . . . . . . . . . . . . 43 | |||
| B.8. On Packets Lost . . . . . . . . . . . . . . . . . . . . . 43 | B.8. On Packets Lost . . . . . . . . . . . . . . . . . . . . . 43 | |||
| B.9. Upon dropping Initial or Handshake keys . . . . . . . . . 43 | B.9. Upon dropping Initial or Handshake keys . . . . . . . . . 43 | |||
| Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 44 | Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 44 | |||
| C.1. Since draft-ietf-quic-recovery-29 . . . . . . . . . . . . 44 | C.1. Since draft-ietf-quic-recovery-30 . . . . . . . . . . . . 44 | |||
| C.2. Since draft-ietf-quic-recovery-28 . . . . . . . . . . . . 44 | C.2. Since draft-ietf-quic-recovery-29 . . . . . . . . . . . . 44 | |||
| C.3. Since draft-ietf-quic-recovery-27 . . . . . . . . . . . . 44 | C.3. Since draft-ietf-quic-recovery-28 . . . . . . . . . . . . 44 | |||
| C.4. Since draft-ietf-quic-recovery-26 . . . . . . . . . . . . 45 | C.4. Since draft-ietf-quic-recovery-27 . . . . . . . . . . . . 45 | |||
| C.5. Since draft-ietf-quic-recovery-25 . . . . . . . . . . . . 45 | C.5. Since draft-ietf-quic-recovery-26 . . . . . . . . . . . . 45 | |||
| C.6. Since draft-ietf-quic-recovery-24 . . . . . . . . . . . . 45 | C.6. Since draft-ietf-quic-recovery-25 . . . . . . . . . . . . 45 | |||
| C.7. Since draft-ietf-quic-recovery-23 . . . . . . . . . . . . 45 | C.7. Since draft-ietf-quic-recovery-24 . . . . . . . . . . . . 45 | |||
| C.8. Since draft-ietf-quic-recovery-22 . . . . . . . . . . . . 46 | C.8. Since draft-ietf-quic-recovery-23 . . . . . . . . . . . . 45 | |||
| C.9. Since draft-ietf-quic-recovery-21 . . . . . . . . . . . . 46 | C.9. Since draft-ietf-quic-recovery-22 . . . . . . . . . . . . 46 | |||
| C.10. Since draft-ietf-quic-recovery-20 . . . . . . . . . . . . 46 | C.10. Since draft-ietf-quic-recovery-21 . . . . . . . . . . . . 46 | |||
| C.11. Since draft-ietf-quic-recovery-19 . . . . . . . . . . . . 46 | C.11. Since draft-ietf-quic-recovery-20 . . . . . . . . . . . . 46 | |||
| C.12. Since draft-ietf-quic-recovery-18 . . . . . . . . . . . . 46 | C.12. Since draft-ietf-quic-recovery-19 . . . . . . . . . . . . 46 | |||
| C.13. Since draft-ietf-quic-recovery-17 . . . . . . . . . . . . 47 | C.13. Since draft-ietf-quic-recovery-18 . . . . . . . . . . . . 47 | |||
| C.14. Since draft-ietf-quic-recovery-16 . . . . . . . . . . . . 47 | C.14. Since draft-ietf-quic-recovery-17 . . . . . . . . . . . . 47 | |||
| C.15. Since draft-ietf-quic-recovery-14 . . . . . . . . . . . . 48 | C.15. Since draft-ietf-quic-recovery-16 . . . . . . . . . . . . 47 | |||
| C.16. Since draft-ietf-quic-recovery-13 . . . . . . . . . . . . 48 | C.16. Since draft-ietf-quic-recovery-14 . . . . . . . . . . . . 48 | |||
| C.17. Since draft-ietf-quic-recovery-12 . . . . . . . . . . . . 48 | C.17. Since draft-ietf-quic-recovery-13 . . . . . . . . . . . . 48 | |||
| C.18. Since draft-ietf-quic-recovery-11 . . . . . . . . . . . . 49 | C.18. Since draft-ietf-quic-recovery-12 . . . . . . . . . . . . 48 | |||
| C.19. Since draft-ietf-quic-recovery-10 . . . . . . . . . . . . 49 | C.19. Since draft-ietf-quic-recovery-11 . . . . . . . . . . . . 49 | |||
| C.20. Since draft-ietf-quic-recovery-09 . . . . . . . . . . . . 49 | C.20. Since draft-ietf-quic-recovery-10 . . . . . . . . . . . . 49 | |||
| C.21. Since draft-ietf-quic-recovery-08 . . . . . . . . . . . . 49 | C.21. Since draft-ietf-quic-recovery-09 . . . . . . . . . . . . 49 | |||
| C.22. Since draft-ietf-quic-recovery-07 . . . . . . . . . . . . 49 | C.22. Since draft-ietf-quic-recovery-08 . . . . . . . . . . . . 49 | |||
| C.23. Since draft-ietf-quic-recovery-06 . . . . . . . . . . . . 49 | C.23. Since draft-ietf-quic-recovery-07 . . . . . . . . . . . . 49 | |||
| C.24. Since draft-ietf-quic-recovery-05 . . . . . . . . . . . . 49 | C.24. Since draft-ietf-quic-recovery-06 . . . . . . . . . . . . 49 | |||
| C.25. Since draft-ietf-quic-recovery-04 . . . . . . . . . . . . 50 | C.25. Since draft-ietf-quic-recovery-05 . . . . . . . . . . . . 49 | |||
| C.26. Since draft-ietf-quic-recovery-03 . . . . . . . . . . . . 50 | C.26. Since draft-ietf-quic-recovery-04 . . . . . . . . . . . . 50 | |||
| C.27. Since draft-ietf-quic-recovery-02 . . . . . . . . . . . . 50 | C.27. Since draft-ietf-quic-recovery-03 . . . . . . . . . . . . 50 | |||
| C.28. Since draft-ietf-quic-recovery-01 . . . . . . . . . . . . 50 | C.28. Since draft-ietf-quic-recovery-02 . . . . . . . . . . . . 50 | |||
| C.29. Since draft-ietf-quic-recovery-00 . . . . . . . . . . . . 50 | C.29. Since draft-ietf-quic-recovery-01 . . . . . . . . . . . . 50 | |||
| C.30. Since draft-iyengar-quic-loss-recovery-01 . . . . . . . . 50 | C.30. Since draft-ietf-quic-recovery-00 . . . . . . . . . . . . 50 | |||
| C.31. Since draft-iyengar-quic-loss-recovery-01 . . . . . . . . 50 | ||||
| Appendix D. Contributors . . . . . . . . . . . . . . . . . . . . 51 | Appendix D. Contributors . . . . . . . . . . . . . . . . . . . . 51 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 51 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 1. Introduction | 1. Introduction | |||
| QUIC is a new multiplexed and secure transport protocol atop UDP, | QUIC is a new multiplexed and secure transport protocol atop UDP, | |||
| specified in [QUIC-TRANSPORT]. This document describes congestion | specified in [QUIC-TRANSPORT]. This document describes congestion | |||
| control and loss recovery for QUIC. Mechanisms described in this | control and loss recovery for QUIC. Mechanisms described in this | |||
| document follow the spirit of existing TCP congestion control and | document follow the spirit of existing TCP congestion control and | |||
| skipping to change at page 13, line 16 ¶ | skipping to change at page 13, line 16 ¶ | |||
| The RECOMMENDED initial value for the packet reordering threshold | The RECOMMENDED initial value for the packet reordering threshold | |||
| (kPacketThreshold) is 3, based on best practices for TCP loss | (kPacketThreshold) is 3, based on best practices for TCP loss | |||
| detection ([RFC5681], [RFC6675]). In order to remain similar to TCP, | detection ([RFC5681], [RFC6675]). In order to remain similar to TCP, | |||
| implementations SHOULD NOT use a packet threshold less than 3; see | implementations SHOULD NOT use a packet threshold less than 3; see | |||
| [RFC5681]. | [RFC5681]. | |||
| Some networks may exhibit higher degrees of packet reordering, | Some networks may exhibit higher degrees of packet reordering, | |||
| causing a sender to detect spurious losses. Additionally, packet | causing a sender to detect spurious losses. Additionally, packet | |||
| reordering could be more common with QUIC than TCP, because network | reordering could be more common with QUIC than TCP, because network | |||
| elements that could observe and reorder out-of-order TCP packets | elements that could observe and reorder TCP packets cannot do that | |||
| cannot do that for QUIC, because packet numbers are encrypted. | for QUIC, because QUIC packet numbers are encrypted. Algorithms that | |||
| Algorithms that increase the reordering threshold after spuriously | increase the reordering threshold after spuriously detecting losses, | |||
| detecting losses, such as RACK [RACK], have proven to be useful in | such as RACK [RACK], have proven to be useful in TCP and are expected | |||
| TCP and are expected to be at least as useful in QUIC. | to be at least as useful in QUIC. | |||
| 6.1.2. Time Threshold | 6.1.2. Time Threshold | |||
| Once a later packet within the same packet number space has been | Once a later packet within the same packet number space has been | |||
| acknowledged, an endpoint SHOULD declare an earlier packet lost if it | acknowledged, an endpoint SHOULD declare an earlier packet lost if it | |||
| was sent a threshold amount of time in the past. To avoid declaring | was sent a threshold amount of time in the past. To avoid declaring | |||
| packets as lost too early, this time threshold MUST be set to at | packets as lost too early, this time threshold MUST be set to at | |||
| least the local timer granularity, as indicated by the kGranularity | least the local timer granularity, as indicated by the kGranularity | |||
| constant. The time threshold is: | constant. The time threshold is: | |||
| skipping to change at page 14, line 5 ¶ | skipping to change at page 13, line 51 ¶ | |||
| path; | path; | |||
| * the latest RTT sample is higher than the smoothed RTT, perhaps due | * the latest RTT sample is higher than the smoothed RTT, perhaps due | |||
| to a sustained increase in the actual RTT, but the smoothed RTT | to a sustained increase in the actual RTT, but the smoothed RTT | |||
| has not yet caught up. | has not yet caught up. | |||
| The RECOMMENDED time threshold (kTimeThreshold), expressed as a | The RECOMMENDED time threshold (kTimeThreshold), expressed as a | |||
| round-trip time multiplier, is 9/8. The RECOMMENDED value of the | round-trip time multiplier, is 9/8. The RECOMMENDED value of the | |||
| timer granularity (kGranularity) is 1ms. | timer granularity (kGranularity) is 1ms. | |||
| Note: TCP's RACK ([RACK]) specifies a slightly larger threshold, | ||||
| equivalent to 5/4, for a similar purpose. Experience with QUIC | ||||
| shows that 9/8 works well. | ||||
| Implementations MAY experiment with absolute thresholds, thresholds | Implementations MAY experiment with absolute thresholds, thresholds | |||
| from previous connections, adaptive thresholds, or including RTT | from previous connections, adaptive thresholds, or including RTT | |||
| variation. Smaller thresholds reduce reordering resilience and | variation. Smaller thresholds reduce reordering resilience and | |||
| increase spurious retransmissions, and larger thresholds increase | increase spurious retransmissions, and larger thresholds increase | |||
| loss detection delay. | loss detection delay. | |||
| 6.2. Probe Timeout | 6.2. Probe Timeout | |||
| A Probe Timeout (PTO) triggers sending one or two probe datagrams | A Probe Timeout (PTO) triggers sending one or two probe datagrams | |||
| when ack-eliciting packets are not acknowledged within the expected | when ack-eliciting packets are not acknowledged within the expected | |||
| skipping to change at page 15, line 48 ¶ | skipping to change at page 15, line 51 ¶ | |||
| This exponential reduction in the sender's rate is important because | This exponential reduction in the sender's rate is important because | |||
| consecutive PTOs might be caused by loss of packets or | consecutive PTOs might be caused by loss of packets or | |||
| acknowledgements due to severe congestion. Even when there are ack- | acknowledgements due to severe congestion. Even when there are ack- | |||
| eliciting packets in-flight in multiple packet number spaces, the | eliciting packets in-flight in multiple packet number spaces, the | |||
| exponential increase in probe timeout occurs across all spaces to | exponential increase in probe timeout occurs across all spaces to | |||
| prevent excess load on the network. For example, a timeout in the | prevent excess load on the network. For example, a timeout in the | |||
| Initial packet number space doubles the length of the timeout in the | Initial packet number space doubles the length of the timeout in the | |||
| Handshake packet number space. | Handshake packet number space. | |||
| The time length of a connection that is experiencing consecutive PTOs | The total length of time over which consecutive PTOs expire is | |||
| is limited by the endpoint's idle timeout. | limited by the idle timeout. | |||
| The probe timer MUST NOT be set if the time threshold (Section 6.1.2) | The probe timer MUST NOT be set if the time threshold (Section 6.1.2) | |||
| loss detection timer is set. The time threshold loss detection timer | loss detection timer is set. The time threshold loss detection timer | |||
| is expected to both expire earlier than the PTO and be less likely to | is expected to both expire earlier than the PTO and be less likely to | |||
| spuriously retransmit data. | spuriously retransmit data. | |||
| 6.2.2. Handshakes and New Paths | 6.2.2. Handshakes and New Paths | |||
| Resumed connections over the same network MAY use the previous | Resumed connections over the same network MAY use the previous | |||
| connection's final smoothed RTT value as the resumed connection's | connection's final smoothed RTT value as the resumed connection's | |||
| skipping to change at page 16, line 51 ¶ | skipping to change at page 16, line 51 ¶ | |||
| Since the server could be blocked until more datagrams are received | Since the server could be blocked until more datagrams are received | |||
| from the client, it is the client's responsibility to send packets to | from the client, it is the client's responsibility to send packets to | |||
| unblock the server until it is certain that the server has finished | unblock the server until it is certain that the server has finished | |||
| its address validation (see Section 8 of [QUIC-TRANSPORT]). That is, | its address validation (see Section 8 of [QUIC-TRANSPORT]). That is, | |||
| the client MUST set the probe timer if the client has not received an | the client MUST set the probe timer if the client has not received an | |||
| acknowledgement for one of its Handshake packets and the handshake is | acknowledgement for one of its Handshake packets and the handshake is | |||
| not confirmed (see Section 4.1.2 of [QUIC-TLS]), even if there are no | not confirmed (see Section 4.1.2 of [QUIC-TLS]), even if there are no | |||
| packets in flight. When the PTO fires, the client MUST send a | packets in flight. When the PTO fires, the client MUST send a | |||
| Handshake packet if it has Handshake keys, otherwise it MUST send an | Handshake packet if it has Handshake keys, otherwise it MUST send an | |||
| Initial packet in a UDP datagram of at least 1200 bytes. | Initial packet in a UDP datagram with a payload of at least 1200 | |||
| bytes. | ||||
| 6.2.3. Speeding Up Handshake Completion | 6.2.3. Speeding Up Handshake Completion | |||
| When a server receives an Initial packet containing duplicate CRYPTO | When a server receives an Initial packet containing duplicate CRYPTO | |||
| data, it can assume the client did not receive all of the server's | data, it can assume the client did not receive all of the server's | |||
| CRYPTO data sent in Initial packets, or the client's estimated RTT is | CRYPTO data sent in Initial packets, or the client's estimated RTT is | |||
| too small. When a client receives Handshake or 1-RTT packets prior | too small. When a client receives Handshake or 1-RTT packets prior | |||
| to obtaining Handshake keys, it may assume some or all of the | to obtaining Handshake keys, it may assume some or all of the | |||
| server's Initial packets were lost. | server's Initial packets were lost. | |||
| To speed up handshake completion under these conditions, an endpoint | To speed up handshake completion under these conditions, an endpoint | |||
| MAY send a packet containing unacknowledged CRYPTO data earlier than | MAY send a packet containing unacknowledged CRYPTO data earlier than | |||
| the PTO expiry, subject to the address validation limits in | the PTO expiry, subject to the address validation limits in | |||
| Section 8.1 of [QUIC-TRANSPORT]. | Section 8.1 of [QUIC-TRANSPORT]. | |||
| Endpoints can also use coalesced packets to ensure that each datagram | Endpoints can also use coalesced packets (see Section 12.2 of | |||
| elicits at least one acknowledgement. For example, a client can | [QUIC-TRANSPORT]) to ensure that each datagram elicits at least one | |||
| coalesce an Initial packet containing PING and PADDING frames with a | acknowledgement. For example, a client can coalesce an Initial | |||
| 0-RTT data packet and a server can coalesce an Initial packet | packet containing PING and PADDING frames with a 0-RTT data packet | |||
| containing a PING frame with one or more packets in its first flight. | and a server can coalesce an Initial packet containing a PING frame | |||
| with one or more packets in its first flight. | ||||
| 6.2.4. Sending Probe Packets | 6.2.4. Sending Probe Packets | |||
| When a PTO timer expires, a sender MUST send at least one ack- | When a PTO timer expires, a sender MUST send at least one ack- | |||
| eliciting packet in the packet number space as a probe. An endpoint | eliciting packet in the packet number space as a probe. An endpoint | |||
| MAY send up to two full-sized datagrams containing ack-eliciting | MAY send up to two full-sized datagrams containing ack-eliciting | |||
| packets, to avoid an expensive consecutive PTO expiration due to a | packets, to avoid an expensive consecutive PTO expiration due to a | |||
| single lost datagram or transmit data from multiple packet number | single lost datagram or transmit data from multiple packet number | |||
| spaces. All probe packets sent on a PTO MUST be ack-eliciting. | spaces. All probe packets sent on a PTO MUST be ack-eliciting. | |||
| skipping to change at page 20, line 12 ¶ | skipping to change at page 20, line 12 ¶ | |||
| The algorithm in this document specifies and uses the controller's | The algorithm in this document specifies and uses the controller's | |||
| congestion window in bytes. | congestion window in bytes. | |||
| An endpoint MUST NOT send a packet if it would cause bytes_in_flight | An endpoint MUST NOT send a packet if it would cause bytes_in_flight | |||
| (see Appendix B.2) to be larger than the congestion window, unless | (see Appendix B.2) to be larger than the congestion window, unless | |||
| the packet is sent on a PTO timer expiration (see Section 6.2) or | the packet is sent on a PTO timer expiration (see Section 6.2) or | |||
| when entering recovery (see Section 7.3.2). | when entering recovery (see Section 7.3.2). | |||
| 7.1. Explicit Congestion Notification | 7.1. Explicit Congestion Notification | |||
| If a path has been verified to support ECN ([RFC3168], [RFC8311]), | If a path has been validated to support ECN ([RFC3168], [RFC8311]), | |||
| QUIC treats a Congestion Experienced (CE) codepoint in the IP header | QUIC treats a Congestion Experienced (CE) codepoint in the IP header | |||
| as a signal of congestion. This document specifies an endpoint's | as a signal of congestion. This document specifies an endpoint's | |||
| response when its peer receives packets with the ECN-CE codepoint. | response when its peer receives packets with the ECN-CE codepoint. | |||
| 7.2. Initial and Minimum Congestion Window | 7.2. Initial and Minimum Congestion Window | |||
| QUIC begins every connection in slow start with the congestion window | QUIC begins every connection in slow start with the congestion window | |||
| set to an initial value. Endpoints SHOULD use an initial congestion | set to an initial value. Endpoints SHOULD use an initial congestion | |||
| window of 10 times the maximum datagram size (max_datagram_size), | window of 10 times the maximum datagram size (max_datagram_size), | |||
| limited to the larger of 14720 or twice the maximum datagram size. | limited to the larger of 14720 bytes or twice the maximum datagram | |||
| This follows the analysis and recommendations in [RFC6928], | size. This follows the analysis and recommendations in [RFC6928], | |||
| increasing the byte limit to account for the smaller 8 byte overhead | increasing the byte limit to account for the smaller 8 byte overhead | |||
| of UDP compared to the 20 byte overhead for TCP. | of UDP compared to the 20 byte overhead for TCP. | |||
| If the maximum datagram size changes during the connection, the | If the maximum datagram size changes during the connection, the | |||
| initial congestion window SHOULD be recalculated with the new size. | initial congestion window SHOULD be recalculated with the new size. | |||
| If the maximum datagram size is decreased in order to complete the | If the maximum datagram size is decreased in order to complete the | |||
| handshake, the congestion window SHOULD be set to the new initial | handshake, the congestion window SHOULD be set to the new initial | |||
| congestion window. | congestion window. | |||
| Prior to validating the client's address, the server can be further | Prior to validating the client's address, the server can be further | |||
| skipping to change at page 26, line 36 ¶ | skipping to change at page 26, line 36 ¶ | |||
| trip time. Expressed as a rate in bytes: | trip time. Expressed as a rate in bytes: | |||
| rate = N * congestion_window / smoothed_rtt | rate = N * congestion_window / smoothed_rtt | |||
| Or, expressed as an inter-packet interval: | Or, expressed as an inter-packet interval: | |||
| interval = smoothed_rtt * packet_size / congestion_window / N | interval = smoothed_rtt * packet_size / congestion_window / N | |||
| Using a value for "N" that is small, but at least 1 (for example, | Using a value for "N" that is small, but at least 1 (for example, | |||
| 1.25) ensures that variations in round-trip time do not result in | 1.25) ensures that variations in round-trip time do not result in | |||
| under-utilization of the congestion window. Values of 'N' larger | under-utilization of the congestion window. | |||
| than 1 ultimately result in sending packets as acknowledgments are | ||||
| received rather than when timers fire, provided the congestion window | ||||
| is fully utilized and acknowledgments arrive at regular intervals. | ||||
| Practical considerations, such as packetization, scheduling delays, | Practical considerations, such as packetization, scheduling delays, | |||
| and computational efficiency, can cause a sender to deviate from this | and computational efficiency, can cause a sender to deviate from this | |||
| rate over time periods that are much shorter than a round-trip time. | rate over time periods that are much shorter than a round-trip time. | |||
| One possible implementation strategy for pacing uses a leaky bucket | One possible implementation strategy for pacing uses a leaky bucket | |||
| algorithm, where the capacity of the "bucket" is limited to the | algorithm, where the capacity of the "bucket" is limited to the | |||
| maximum burst size and the rate the "bucket" fills is determined by | maximum burst size and the rate the "bucket" fills is determined by | |||
| the above function. | the above function. | |||
| skipping to change at page 28, line 31 ¶ | skipping to change at page 28, line 31 ¶ | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This document has no IANA actions. | This document has no IANA actions. | |||
| 10. References | 10. References | |||
| 10.1. Normative References | 10.1. Normative References | |||
| [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
| QUIC", Work in Progress, Internet-Draft, draft-ietf-quic- | QUIC", Work in Progress, Internet-Draft, draft-ietf-quic- | |||
| tls-30, September 10, 2020, | tls-31, 25 September 2020, | |||
| <https://tools.ietf.org/html/draft-ietf-quic-tls-30>. | <https://tools.ietf.org/html/draft-ietf-quic-tls-31>. | |||
| [QUIC-TRANSPORT] | [QUIC-TRANSPORT] | |||
| Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", Work in Progress, | Multiplexed and Secure Transport", Work in Progress, | |||
| Internet-Draft, draft-ietf-quic-transport-30, September | Internet-Draft, draft-ietf-quic-transport-31, 25 September | |||
| 10, 2020, <https://tools.ietf.org/html/draft-ietf-quic- | 2020, <https://tools.ietf.org/html/draft-ietf-quic- | |||
| transport-30>. | transport-31>. | |||
| [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>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
| March 2017, <https://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/info/rfc8085>. | |||
| skipping to change at page 29, line 17 ¶ | skipping to change at page 29, line 17 ¶ | |||
| [FACK] Mathis, M. and J. Mahdavi, "Forward Acknowledgement: | [FACK] Mathis, M. and J. Mahdavi, "Forward Acknowledgement: | |||
| Refining TCP Congestion Control", ACM SIGCOMM , August | Refining TCP Congestion Control", ACM SIGCOMM , August | |||
| 1996. | 1996. | |||
| [PRR] Mathis, M., Dukkipati, N., and Y. Cheng, "Proportional | [PRR] Mathis, M., Dukkipati, N., and Y. Cheng, "Proportional | |||
| Rate Reduction for TCP", RFC 6937, DOI 10.17487/RFC6937, | Rate Reduction for TCP", RFC 6937, DOI 10.17487/RFC6937, | |||
| May 2013, <https://www.rfc-editor.org/info/rfc6937>. | May 2013, <https://www.rfc-editor.org/info/rfc6937>. | |||
| [RACK] Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, "The | [RACK] Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, "The | |||
| RACK-TLP loss detection algorithm for TCP", Work in | RACK-TLP loss detection algorithm for TCP", Work in | |||
| Progress, Internet-Draft, draft-ietf-tcpm-rack-10, August | Progress, Internet-Draft, draft-ietf-tcpm-rack-10, 22 | |||
| 22, 2020, <http://www.ietf.org/internet-drafts/draft-ietf- | August 2020, <http://www.ietf.org/internet-drafts/draft- | |||
| tcpm-rack-10.txt>. | ietf-tcpm-rack-10.txt>. | |||
| [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | |||
| of Explicit Congestion Notification (ECN) to IP", | of Explicit Congestion Notification (ECN) to IP", | |||
| RFC 3168, DOI 10.17487/RFC3168, September 2001, | RFC 3168, DOI 10.17487/RFC3168, September 2001, | |||
| <https://www.rfc-editor.org/info/rfc3168>. | <https://www.rfc-editor.org/info/rfc3168>. | |||
| [RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte | [RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte | |||
| Counting (ABC)", RFC 3465, DOI 10.17487/RFC3465, February | Counting (ABC)", RFC 3465, DOI 10.17487/RFC3465, February | |||
| 2003, <https://www.rfc-editor.org/info/rfc3465>. | 2003, <https://www.rfc-editor.org/info/rfc3465>. | |||
| skipping to change at page 44, line 25 ¶ | skipping to change at page 44, line 25 ¶ | |||
| pto_count = 0 | pto_count = 0 | |||
| SetLossDetectionTimer() | SetLossDetectionTimer() | |||
| Appendix C. Change Log | Appendix C. Change Log | |||
| *RFC Editor's Note:* Please remove this section prior to | *RFC Editor's Note:* Please remove this section prior to | |||
| publication of a final version of this document. | publication of a final version of this document. | |||
| Issue and pull request numbers are listed with a leading octothorp. | Issue and pull request numbers are listed with a leading octothorp. | |||
| C.1. Since draft-ietf-quic-recovery-29 | C.1. Since draft-ietf-quic-recovery-30 | |||
| Editorial changes only. | ||||
| C.2. Since draft-ietf-quic-recovery-29 | ||||
| * Allow caching of packets that can't be decrypted, by allowing the | * Allow caching of packets that can't be decrypted, by allowing the | |||
| reported acknowledgment delay to exceed max_ack_delay prior to | reported acknowledgment delay to exceed max_ack_delay prior to | |||
| confirming the handshake (#3821, #3980, #4035, #3874) | confirming the handshake (#3821, #3980, #4035, #3874) | |||
| * Persistent congestion cannot include packets sent before the first | * Persistent congestion cannot include packets sent before the first | |||
| RTT sample for the path (#3875, #3889) | RTT sample for the path (#3875, #3889) | |||
| * Recommend reset of min_rtt in persistent congestion (#3927, #3975) | * Recommend reset of min_rtt in persistent congestion (#3927, #3975) | |||
| * Persistent congestion is independent of packet number space | * Persistent congestion is independent of packet number space | |||
| (#3939, #3961) | (#3939, #3961) | |||
| * Only limit bursts to the initial window without information about | * Only limit bursts to the initial window without information about | |||
| the path (#3892, #3936) | the path (#3892, #3936) | |||
| * Add normative requirements for increasing and reducing the | * Add normative requirements for increasing and reducing the | |||
| congestion window (#3944, #3978, #3997, #3998) | congestion window (#3944, #3978, #3997, #3998) | |||
| C.2. Since draft-ietf-quic-recovery-28 | C.3. Since draft-ietf-quic-recovery-28 | |||
| * Refactored pseudocode to correct PTO calculation (#3564, #3674, | * Refactored pseudocode to correct PTO calculation (#3564, #3674, | |||
| #3681) | #3681) | |||
| C.3. Since draft-ietf-quic-recovery-27 | C.4. Since draft-ietf-quic-recovery-27 | |||
| * Added recommendations for speeding up handshake under some loss | * Added recommendations for speeding up handshake under some loss | |||
| conditions (#3078, #3080) | conditions (#3078, #3080) | |||
| * PTO count is reset when handshake progress is made (#3272, #3415) | * PTO count is reset when handshake progress is made (#3272, #3415) | |||
| * PTO count is not reset by a client when the server might be | * PTO count is not reset by a client when the server might be | |||
| awaiting address validation (#3546, #3551) | awaiting address validation (#3546, #3551) | |||
| * Recommend repairing losses immediately after entering the recovery | * Recommend repairing losses immediately after entering the recovery | |||
| period (#3335, #3443) | period (#3335, #3443) | |||
| * Clarified what loss conditions can be ignored during the handshake | * Clarified what loss conditions can be ignored during the handshake | |||
| (#3456, #3450) | (#3456, #3450) | |||
| * Allow, but don't recommend, using RTT from previous connection to | * Allow, but don't recommend, using RTT from previous connection to | |||
| seed RTT (#3464, #3496) | seed RTT (#3464, #3496) | |||
| * Recommend use of adaptive loss detection thresholds (#3571, #3572) | * Recommend use of adaptive loss detection thresholds (#3571, #3572) | |||
| C.4. Since draft-ietf-quic-recovery-26 | C.5. Since draft-ietf-quic-recovery-26 | |||
| No changes. | No changes. | |||
| C.5. Since draft-ietf-quic-recovery-25 | C.6. Since draft-ietf-quic-recovery-25 | |||
| No significant changes. | No significant changes. | |||
| C.6. Since draft-ietf-quic-recovery-24 | C.7. Since draft-ietf-quic-recovery-24 | |||
| * Require congestion control of some sort (#3247, #3244, #3248) | * Require congestion control of some sort (#3247, #3244, #3248) | |||
| * Set a minimum reordering threshold (#3256, #3240) | * Set a minimum reordering threshold (#3256, #3240) | |||
| * PTO is specific to a packet number space (#3067, #3074, #3066) | * PTO is specific to a packet number space (#3067, #3074, #3066) | |||
| C.7. Since draft-ietf-quic-recovery-23 | C.8. Since draft-ietf-quic-recovery-23 | |||
| * Define under-utilizing the congestion window (#2630, #2686, #2675) | * Define under-utilizing the congestion window (#2630, #2686, #2675) | |||
| * PTO MUST send data if possible (#3056, #3057) | * PTO MUST send data if possible (#3056, #3057) | |||
| * Connection Close is not ack-eliciting (#3097, #3098) | * Connection Close is not ack-eliciting (#3097, #3098) | |||
| * MUST limit bursts to the initial congestion window (#3160) | * MUST limit bursts to the initial congestion window (#3160) | |||
| * Define the current max_datagram_size for congestion control | * Define the current max_datagram_size for congestion control | |||
| (#3041, #3167) | (#3041, #3167) | |||
| C.8. Since draft-ietf-quic-recovery-22 | C.9. Since draft-ietf-quic-recovery-22 | |||
| * PTO should always send an ack-eliciting packet (#2895) | * PTO should always send an ack-eliciting packet (#2895) | |||
| * Unify the Handshake Timer with the PTO timer (#2648, #2658, #2886) | * Unify the Handshake Timer with the PTO timer (#2648, #2658, #2886) | |||
| * Move ACK generation text to transport draft (#1860, #2916) | * Move ACK generation text to transport draft (#1860, #2916) | |||
| C.9. Since draft-ietf-quic-recovery-21 | C.10. Since draft-ietf-quic-recovery-21 | |||
| * No changes | * No changes | |||
| C.10. Since draft-ietf-quic-recovery-20 | C.11. Since draft-ietf-quic-recovery-20 | |||
| * Path validation can be used as initial RTT value (#2644, #2687) | * Path validation can be used as initial RTT value (#2644, #2687) | |||
| * max_ack_delay transport parameter defaults to 0 (#2638, #2646) | * max_ack_delay transport parameter defaults to 0 (#2638, #2646) | |||
| * ACK delay only measures intentional delays induced by the | * ACK delay only measures intentional delays induced by the | |||
| implementation (#2596, #2786) | implementation (#2596, #2786) | |||
| C.11. Since draft-ietf-quic-recovery-19 | C.12. Since draft-ietf-quic-recovery-19 | |||
| * Change kPersistentThreshold from an exponent to a multiplier | * Change kPersistentThreshold from an exponent to a multiplier | |||
| (#2557) | (#2557) | |||
| * Send a PING if the PTO timer fires and there's nothing to send | * Send a PING if the PTO timer fires and there's nothing to send | |||
| (#2624) | (#2624) | |||
| * Set loss delay to at least kGranularity (#2617) | * Set loss delay to at least kGranularity (#2617) | |||
| * Merge application limited and sending after idle sections. Always | * Merge application limited and sending after idle sections. Always | |||
| skipping to change at page 46, line 51 ¶ | skipping to change at page 47, line 5 ¶ | |||
| packet is ack-eliciting but the largest_acked is not (#2592) | packet is ack-eliciting but the largest_acked is not (#2592) | |||
| * Don't arm the handshake timer if there is no handshake data | * Don't arm the handshake timer if there is no handshake data | |||
| (#2590) | (#2590) | |||
| * Clarify that the time threshold loss alarm takes precedence over | * Clarify that the time threshold loss alarm takes precedence over | |||
| the crypto handshake timer (#2590, #2620) | the crypto handshake timer (#2590, #2620) | |||
| * Change initial RTT to 500ms to align with RFC6298 (#2184) | * Change initial RTT to 500ms to align with RFC6298 (#2184) | |||
| C.12. Since draft-ietf-quic-recovery-18 | C.13. Since draft-ietf-quic-recovery-18 | |||
| * Change IW byte limit to 14720 from 14600 (#2494) | * Change IW byte limit to 14720 from 14600 (#2494) | |||
| * Update PTO calculation to match RFC6298 (#2480, #2489, #2490) | * Update PTO calculation to match RFC6298 (#2480, #2489, #2490) | |||
| * Improve loss detection's description of multiple packet number | * Improve loss detection's description of multiple packet number | |||
| spaces and pseudocode (#2485, #2451, #2417) | spaces and pseudocode (#2485, #2451, #2417) | |||
| * Declare persistent congestion even if non-probe packets are sent | * Declare persistent congestion even if non-probe packets are sent | |||
| and don't make persistent congestion more aggressive than RTO | and don't make persistent congestion more aggressive than RTO | |||
| verified was (#2365, #2244) | verified was (#2365, #2244) | |||
| * Move pseudocode to the appendices (#2408) | * Move pseudocode to the appendices (#2408) | |||
| * What to send on multiple PTOs (#2380) | * What to send on multiple PTOs (#2380) | |||
| C.13. Since draft-ietf-quic-recovery-17 | C.14. Since draft-ietf-quic-recovery-17 | |||
| * After Probe Timeout discard in-flight packets or send another | * After Probe Timeout discard in-flight packets or send another | |||
| (#2212, #1965) | (#2212, #1965) | |||
| * Endpoints discard initial keys as soon as handshake keys are | * Endpoints discard initial keys as soon as handshake keys are | |||
| available (#1951, #2045) | available (#1951, #2045) | |||
| * 0-RTT state is discarded when 0-RTT is rejected (#2300) | * 0-RTT state is discarded when 0-RTT is rejected (#2300) | |||
| * Loss detection timer is cancelled when ack-eliciting frames are in | * Loss detection timer is cancelled when ack-eliciting frames are in | |||
| skipping to change at page 47, line 45 ¶ | skipping to change at page 47, line 48 ¶ | |||
| controller (#2138, 2187) | controller (#2138, 2187) | |||
| * Process ECN counts before marking packets lost (#2142) | * Process ECN counts before marking packets lost (#2142) | |||
| * Mark packets lost before resetting crypto_count and pto_count | * Mark packets lost before resetting crypto_count and pto_count | |||
| (#2208, #2209) | (#2208, #2209) | |||
| * Congestion and loss recovery state are discarded when keys are | * Congestion and loss recovery state are discarded when keys are | |||
| discarded (#2327) | discarded (#2327) | |||
| C.14. Since draft-ietf-quic-recovery-16 | C.15. Since draft-ietf-quic-recovery-16 | |||
| * Unify TLP and RTO into a single PTO; eliminate min RTO, min TLP | * Unify TLP and RTO into a single PTO; eliminate min RTO, min TLP | |||
| and min crypto timeouts; eliminate timeout validation (#2114, | and min crypto timeouts; eliminate timeout validation (#2114, | |||
| #2166, #2168, #1017) | #2166, #2168, #1017) | |||
| * Redefine how congestion avoidance in terms of when the period | * Redefine how congestion avoidance in terms of when the period | |||
| starts (#1928, #1930) | starts (#1928, #1930) | |||
| * Document what needs to be tracked for packets that are in flight | * Document what needs to be tracked for packets that are in flight | |||
| (#765, #1724, #1939) | (#765, #1724, #1939) | |||
| skipping to change at page 48, line 30 ¶ | skipping to change at page 48, line 30 ¶ | |||
| * Limit ack_delay by max_ack_delay (#2060, #2099) | * Limit ack_delay by max_ack_delay (#2060, #2099) | |||
| * Initial keys are discarded once Handshake keys are available | * Initial keys are discarded once Handshake keys are available | |||
| (#1951, #2045) | (#1951, #2045) | |||
| * Reorder ECN and loss detection in pseudocode (#2142) | * Reorder ECN and loss detection in pseudocode (#2142) | |||
| * Only cancel loss detection timer if ack-eliciting packets are in | * Only cancel loss detection timer if ack-eliciting packets are in | |||
| flight (#2093, #2117) | flight (#2093, #2117) | |||
| C.15. Since draft-ietf-quic-recovery-14 | C.16. Since draft-ietf-quic-recovery-14 | |||
| * Used max_ack_delay from transport params (#1796, #1782) | * Used max_ack_delay from transport params (#1796, #1782) | |||
| * Merge ACK and ACK_ECN (#1783) | * Merge ACK and ACK_ECN (#1783) | |||
| C.16. Since draft-ietf-quic-recovery-13 | C.17. Since draft-ietf-quic-recovery-13 | |||
| * Corrected the lack of ssthresh reduction in CongestionEvent | * Corrected the lack of ssthresh reduction in CongestionEvent | |||
| pseudocode (#1598) | pseudocode (#1598) | |||
| * Considerations for ECN spoofing (#1426, #1626) | * Considerations for ECN spoofing (#1426, #1626) | |||
| * Clarifications for PADDING and congestion control (#837, #838, | * Clarifications for PADDING and congestion control (#837, #838, | |||
| #1517, #1531, #1540) | #1517, #1531, #1540) | |||
| * Reduce early retransmission timer to RTT/8 (#945, #1581) | * Reduce early retransmission timer to RTT/8 (#945, #1581) | |||
| * Packets are declared lost after an RTO is verified (#935, #1582) | * Packets are declared lost after an RTO is verified (#935, #1582) | |||
| C.17. Since draft-ietf-quic-recovery-12 | C.18. Since draft-ietf-quic-recovery-12 | |||
| * Changes to manage separate packet number spaces and encryption | * Changes to manage separate packet number spaces and encryption | |||
| levels (#1190, #1242, #1413, #1450) | levels (#1190, #1242, #1413, #1450) | |||
| * Added ECN feedback mechanisms and handling; new ACK_ECN frame | * Added ECN feedback mechanisms and handling; new ACK_ECN frame | |||
| (#804, #805, #1372) | (#804, #805, #1372) | |||
| C.18. Since draft-ietf-quic-recovery-11 | C.19. Since draft-ietf-quic-recovery-11 | |||
| No significant changes. | No significant changes. | |||
| C.19. Since draft-ietf-quic-recovery-10 | C.20. Since draft-ietf-quic-recovery-10 | |||
| * Improved text on ack generation (#1139, #1159) | * Improved text on ack generation (#1139, #1159) | |||
| * Make references to TCP recovery mechanisms informational (#1195) | * Make references to TCP recovery mechanisms informational (#1195) | |||
| * Define time_of_last_sent_handshake_packet (#1171) | * Define time_of_last_sent_handshake_packet (#1171) | |||
| * Added signal from TLS the data it includes needs to be sent in a | * Added signal from TLS the data it includes needs to be sent in a | |||
| Retry packet (#1061, #1199) | Retry packet (#1061, #1199) | |||
| * Minimum RTT (min_rtt) is initialized with an infinite value | * Minimum RTT (min_rtt) is initialized with an infinite value | |||
| (#1169) | (#1169) | |||
| C.20. Since draft-ietf-quic-recovery-09 | C.21. Since draft-ietf-quic-recovery-09 | |||
| No significant changes. | No significant changes. | |||
| C.21. Since draft-ietf-quic-recovery-08 | C.22. Since draft-ietf-quic-recovery-08 | |||
| * Clarified pacing and RTO (#967, #977) | * Clarified pacing and RTO (#967, #977) | |||
| C.22. Since draft-ietf-quic-recovery-07 | C.23. Since draft-ietf-quic-recovery-07 | |||
| * Include ACK delay in RTO(and TLP) computations (#981) | * Include ACK delay in RTO(and TLP) computations (#981) | |||
| * ACK delay in SRTT computation (#961) | * ACK delay in SRTT computation (#961) | |||
| * Default RTT and Slow Start (#590) | * Default RTT and Slow Start (#590) | |||
| * Many editorial fixes. | * Many editorial fixes. | |||
| C.23. Since draft-ietf-quic-recovery-06 | C.24. Since draft-ietf-quic-recovery-06 | |||
| No significant changes. | No significant changes. | |||
| C.24. Since draft-ietf-quic-recovery-05 | C.25. Since draft-ietf-quic-recovery-05 | |||
| * Add more congestion control text (#776) | * Add more congestion control text (#776) | |||
| C.25. Since draft-ietf-quic-recovery-04 | C.26. Since draft-ietf-quic-recovery-04 | |||
| No significant changes. | No significant changes. | |||
| C.26. Since draft-ietf-quic-recovery-03 | C.27. Since draft-ietf-quic-recovery-03 | |||
| No significant changes. | No significant changes. | |||
| C.27. Since draft-ietf-quic-recovery-02 | C.28. Since draft-ietf-quic-recovery-02 | |||
| * Integrate F-RTO (#544, #409) | * Integrate F-RTO (#544, #409) | |||
| * Add congestion control (#545, #395) | * Add congestion control (#545, #395) | |||
| * Require connection abort if a skipped packet was acknowledged | * Require connection abort if a skipped packet was acknowledged | |||
| (#415) | (#415) | |||
| * Simplify RTO calculations (#142, #417) | * Simplify RTO calculations (#142, #417) | |||
| C.28. Since draft-ietf-quic-recovery-01 | C.29. Since draft-ietf-quic-recovery-01 | |||
| * Overview added to loss detection | * Overview added to loss detection | |||
| * Changes initial default RTT to 100ms | * Changes initial default RTT to 100ms | |||
| * Added time-based loss detection and fixes early retransmit | * Added time-based loss detection and fixes early retransmit | |||
| * Clarified loss recovery for handshake packets | * Clarified loss recovery for handshake packets | |||
| * Fixed references and made TCP references informative | * Fixed references and made TCP references informative | |||
| C.29. Since draft-ietf-quic-recovery-00 | C.30. Since draft-ietf-quic-recovery-00 | |||
| * Improved description of constants and ACK behavior | * Improved description of constants and ACK behavior | |||
| C.30. Since draft-iyengar-quic-loss-recovery-01 | C.31. Since draft-iyengar-quic-loss-recovery-01 | |||
| * Adopted as base for draft-ietf-quic-recovery | * Adopted as base for draft-ietf-quic-recovery | |||
| * Updated authors/editors list | * Updated authors/editors list | |||
| * Added table of contents | * Added table of contents | |||
| Appendix D. Contributors | Appendix D. Contributors | |||
| The IETF QUIC Working Group received an enormous amount of support | The IETF QUIC Working Group received an enormous amount of support | |||
| from many people. The following people provided substantive | from many people. The following people provided substantive | |||
| contributions to this document: Alessandro Ghedini, Benjamin | contributions to this document: | |||
| Saunders, Gorry Fairhurst, 奥 一穂 (Kazuho Oku), Lars Eggert, Magnus | ||||
| Westerlund, Marten Seemann, Martin Duke, Martin Thomson, Nick Banks, | * Alessandro Ghedini | |||
| Praveen Balasubramanian. | ||||
| * Benjamin Saunders | ||||
| * Gorry Fairhurst | ||||
| * 山本和彦 (Kazu Yamamoto) | ||||
| * 奥 一穂 (Kazuho Oku) | ||||
| * Lars Eggert | ||||
| * Magnus Westerlund | ||||
| * Marten Seemann | ||||
| * Martin Duke | ||||
| * Martin Thomson | ||||
| * Mirja Kühlewind | ||||
| * Nick Banks | ||||
| * Praveen Balasubramanian | ||||
| Acknowledgments | Acknowledgments | |||
| Authors' Addresses | Authors' Addresses | |||
| Jana Iyengar (editor) | Jana Iyengar (editor) | |||
| Fastly | Fastly | |||
| Email: jri.ietf@gmail.com | Email: jri.ietf@gmail.com | |||
| End of changes. 47 change blocks. | ||||
| 97 lines changed or deleted | 129 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||