target = "https://www.rfc-editor.org/rfc/rfc9002#section-7.6.2" # 7.6.2. Establishing Persistent Congestion # # A sender establishes persistent congestion after the receipt of an # acknowledgment if two packets that are ack-eliciting are declared # lost, and: # # * across all packet number spaces, none of the packets sent between # the send times of these two packets are acknowledged; # # * the duration between the send times of these two packets exceeds # the persistent congestion duration (Section 7.6.1); and # # * a prior RTT sample existed when these two packets were sent. # # These two packets MUST be ack-eliciting, since a receiver is required # to acknowledge only ack-eliciting packets within its maximum # acknowledgment delay; see Section 13.2 of [QUIC-TRANSPORT]. # # The persistent congestion period SHOULD NOT start until there is at # least one RTT sample. Before the first RTT sample, a sender arms its # PTO timer based on the initial RTT (Section 6.2.2), which could be # substantially larger than the actual RTT. Requiring a prior RTT # sample prevents a sender from establishing persistent congestion with # potentially too few probes. # # Since network congestion is not affected by packet number spaces, # persistent congestion SHOULD consider packets sent across packet # number spaces. A sender that does not have state for all packet # number spaces or an implementation that cannot compare send times # across packet number spaces MAY use state for just the packet number # space that was acknowledged. This might result in erroneously # declaring persistent congestion, but it will not lead to a failure to # detect persistent congestion. # # When persistent congestion is declared, the sender's congestion # window MUST be reduced to the minimum congestion window # (kMinimumWindow), similar to a TCP sender's response on an RTO # [RFC5681]. [[spec]] level = "MUST" quote = ''' These two packets MUST be ack-eliciting, since a receiver is required to acknowledge only ack-eliciting packets within its maximum acknowledgment delay; see Section 13.2 of [QUIC-TRANSPORT]. ''' [[spec]] level = "SHOULD" quote = ''' The persistent congestion period SHOULD NOT start until there is at least one RTT sample. ''' [[spec]] level = "SHOULD" quote = ''' Since network congestion is not affected by packet number spaces, persistent congestion SHOULD consider packets sent across packet number spaces. ''' [[spec]] level = "MAY" quote = ''' A sender that does not have state for all packet number spaces or an implementation that cannot compare send times across packet number spaces MAY use state for just the packet number space that was acknowledged. ''' [[spec]] level = "MUST" quote = ''' When persistent congestion is declared, the sender's congestion window MUST be reduced to the minimum congestion window (kMinimumWindow), similar to a TCP sender's response on an RTO [RFC5681]. '''