target = "https://www.rfc-editor.org/rfc/rfc9002#section-6.1.2" # 6.1.2. Time Threshold # # Once a later packet within the same packet number space has been # acknowledged, an endpoint SHOULD declare an earlier packet lost if it # 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 # least the local timer granularity, as indicated by the kGranularity # constant. The time threshold is: # # max(kTimeThreshold * max(smoothed_rtt, latest_rtt), kGranularity) # # If packets sent prior to the largest acknowledged packet cannot yet # be declared lost, then a timer SHOULD be set for the remaining time. # # Using max(smoothed_rtt, latest_rtt) protects from the two following # cases: # # * the latest RTT sample is lower than the smoothed RTT, perhaps due # to reordering where the acknowledgment encountered a shorter path; # # * the latest RTT sample is higher than the smoothed RTT, perhaps due # to a sustained increase in the actual RTT, but the smoothed RTT # has not yet caught up. # # The RECOMMENDED time threshold (kTimeThreshold), expressed as an RTT # multiplier, is 9/8. The RECOMMENDED value of the timer granularity # (kGranularity) is 1 millisecond. # # | Note: TCP's RACK [RFC8985] 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 # from previous connections, adaptive thresholds, or the including of # RTT variation. Smaller thresholds reduce reordering resilience and # increase spurious retransmissions, and larger thresholds increase # loss detection delay. [[spec]] level = "SHOULD" quote = ''' Once a later packet within the same packet number space has been acknowledged, an endpoint SHOULD declare an earlier packet lost if it was sent a threshold amount of time in the past. ''' [[spec]] level = "MUST" quote = ''' To avoid declaring packets as lost too early, this time threshold MUST be set to at least the local timer granularity, as indicated by the kGranularity constant. ''' [[spec]] level = "SHOULD" quote = ''' If packets sent prior to the largest acknowledged packet cannot yet be declared lost, then a timer SHOULD be set for the remaining time. ''' [[spec]] level = "SHOULD" quote = ''' The RECOMMENDED time threshold (kTimeThreshold), expressed as an RTT multiplier, is 9/8. ''' [[spec]] level = "SHOULD" quote = ''' The RECOMMENDED value of the timer granularity (kGranularity) is 1 millisecond. ''' [[spec]] level = "MAY" quote = ''' Implementations MAY experiment with absolute thresholds, thresholds from previous connections, adaptive thresholds, or the including of RTT variation. '''