Hi all, Thanks for the discussion it helps.
Reading Kazuho’s details, it feels that the errata should be verified. I will keep this as reported for one more week to get more comments/views , and if the discussions would not lead to any change of opinion, I will verify it after this period is over. // Zahed On Thu, 23 Jan 2025 at 19:08, Ian Swett <iansw...@google.com> wrote: > I agree with Kazuho's points, and thanks for the detailed discussion. > > On Wed, Jan 15, 2025 at 1:33 AM Kazuho Oku <kazuho...@gmail.com> wrote: > >> >> >> 2025年1月7日(火) 13:35 Christian Huitema <huit...@huitema.net>: >> >>> I think that if we go there, we need a much larger errata. >>> >>> For starter, RFC 9002 has a definition of "Ack-eliciting frames", "All >>> frames other than ACK, PADDING, and CONNECTION_CLOSE are considered >>> ack-eliciting." So we have a definition per enumeration in RFC 9002 and >>> then a parallel definition by table in section 12.4 of RFC 9000. That's >>> obviously a recipe for contradiction. IMHO, RFC 9002 is wrong. It should >>> replace the definition by enumeration by a reference to the definition >>> in RFC 9000/12.4. >>> >>> We have the of "extension" frame types. We are asking the extension >>> creator to specify whether the frame is "ack eliciting" or not. For >>> frames that are NOT ack-eliciting, should we add a requirement to >>> specify whether they count for congestion or not? For example, should >>> the multipath draft say something like that for the PATH_ACK frames? >>> >>> Of course, we do NOT have such a definition in RFC 9002. Instead, it >>> says "Packets are considered in flight when they are ack-eliciting or >>> contain a PADDING frame, and they have been sent but are not >>> acknowledged, declared lost, or discarded along with old keys." We are >>> making up something in RFC 9000 with the C flag. >>> >>> Then, there is the little problem that this definition of "bytes in >>> flight" in RFC 9002 is probably wrong. What we want to say is that ACKs >>> and Close Connection frames are exception to congestion control. >> >> >> I do not think that was our conclusion. We discussed this "design issue" >> and reached consensus on this problem in >> https://github.com/quicwg/base-drafts/issues/3097. The arguments that I >> see are: >> * CONNECTION_CLOSE does not elicit an ACK and therefore is not governed >> by CC >> * it makes sense to send CONNECTION_CLOSE even when CC is blocking data. >> >> The "Spec" column was introduced as an "editorial" change in >> https://github.com/quicwg/base-drafts/pull/3776, after the changes for >> #3097 went in. But as pointed out, the value of the "Spec" column for >> CONNECTION_CLOSE frame contradicts the text introduced by #3097. >> >> >>> But >>> mathematically, every packet sent on a path and not yet acked or >>> discarded should be counted as "bytes in flight", and the count should >>> be used when estimating the capacity of the flight. >>> >> >> I am not sure if that was the model behind RFC 9002. >> >> IIUC, we defined congestion control as a mechanism that works >> independently in each direction. Data is sent in one direction and ACKs are >> sent in the other direction. Senders of data use ACKs they receive for >> congestion control. >> >> Considering these aspects, I think the correct way forward is to change >> the "Spec" column of CONNECTION_CLOSE to "NC," building on the consensus >> established in #3097. >> >> >>> What I think RFC9002 is trying to say is that it is fine to send ACKs or >>> Close Connection packets even if the amount of bytes in flight already >>> exceeds the congestion window, because they are important and should be >>> sent immediately. Of course, this is a debatable statement. For example, >>> what happens in multipath when PATH_ACK are sent on another path? (see >>> https://github.com/quicwg/multipath/issues/454). It is also an >>> incomplete statement. Some congestion control algorithms (e.g., BBR) >>> control traffic by specifying both a pacing rate and a congestion >>> window. We don't want ACK to be delayed by the congestion window. >>> >>> Do we want them to be delayed by pacing? My personal opinion is, yes we >>> do. We want ACKs to be sent as soon as they are needed and pacing >>> permits, so the "paced" ACK contains the most recent value of the ACK >>> list, filled with a "just in time" logic. Not all implementations will >>> want to do that. But all implementations probably should try to not send >>> so many ACK frames that they overwhelm the path capacity. Sending ACK >>> frames to see the network randomly drop them cannot be the right >>> strategy. >>> >>> Bottom line, the "C" flag in RFC 9000 is kinda misleading, and is not >>> needed by RFC 9002. There are some frames that implementations will send >>> without regard for congestion control, but the corresponding packets >>> should absolutely count as "bytes in flight". >> >> If we do an errata, I >>> would propose to just remove the C flag instances and definition. And >>> let developers think and do the right thing. After all, congestion >>> control is a local decision, and does not affect interoperability. >>> >>> -- Christian Huitema >>> >>> >>> On 1/6/2025 6:26 PM, Ian Swett wrote: >>> > I thought the intent was to clarify that congestion control should not >>> > prevent you from sending the connection close frame? >>> > >>> > I agree that there is no congestion control once the frame is sent, >>> since >>> > the connection doesn't exist anymore. >>> > >>> > Thanks, Ian >>> > >>> > On Mon, Jan 6, 2025 at 6:47 PM Christian Huitema <huit...@huitema.net> >>> > wrote: >>> > >>> >> As mentioned in another email, I disagree. This is not necessary, and >>> is >>> >> in fact confusing. It would imply that congestion control still >>> applies >>> >> after sending the connection close frame, which makes no sense. >>> >> >>> >> -- Christian Huitema >>> >> >>> >> On 1/6/2025 10:08 AM, Ian Swett wrote: >>> >>> This LGTM, but I'd like Jana or Martin to approve as well. >>> >>> >>> >>> On Mon, Jan 6, 2025 at 1:43 AM RFC Errata System < >>> >> rfc-edi...@rfc-editor.org> >>> >>> wrote: >>> >>> >>> >>>> The following errata report has been submitted for RFC9000, >>> >>>> "QUIC: A UDP-Based Multiplexed and Secure Transport". >>> >>>> >>> >>>> -------------------------------------- >>> >>>> You may review the report below and at: >>> >>>> https://www.rfc-editor.org/errata/eid8240 >>> >>>> >>> >>>> -------------------------------------- >>> >>>> Type: Technical >>> >>>> Reported by: Jaikiran Pai <jai.forums2...@gmail.com> >>> >>>> >>> >>>> Section: 12.4 >>> >>>> >>> >>>> Original Text >>> >>>> ------------- >>> >>>> 0x1c-0x1d CONNECTION_CLOSE Section 19.19 ih01 N >>> >>>> >>> >>>> Corrected Text >>> >>>> -------------- >>> >>>> 0x1c-0x1d CONNECTION_CLOSE Section 19.19 ih01 NC >>> >>>> >>> >>>> Notes >>> >>>> ----- >>> >>>> QUIC congestion control RFC 9002 ( >>> >> https://www.rfc-editor.org/rfc/rfc9002) >>> >>>> section 3 states: >>> >>>> >>> >>>> "The types of frames contained in a packet affect recovery and >>> >> congestion >>> >>>> control logic: >>> >>>> ... >>> >>>> Packets containing frames besides ACK or CONNECTION_CLOSE frames >>> count >>> >>>> toward congestion control limits and are considered to be in >>> flight." >>> >>>> >>> >>>> So as per RFC-9002, it means that ACK and CONNECTION_CLOSE frames >>> do not >>> >>>> contribute to congestion control limits. >>> >>>> >>> >>>> On the other hand, RFC-9000, section 12.4 has a Table 3 ( >>> >>>> https://www.rfc-editor.org/rfc/rfc9000#frame-types) which states: >>> >>>> >>> >>>> "The "Spec" column in Table 3 summarizes any special rules >>> governing the >>> >>>> processing or generation of the frame type, as indicated by the >>> >> following >>> >>>> characters: >>> >>>> ... >>> >>>> C: Packets containing only frames with this marking do not count >>> toward >>> >>>> bytes in flight for congestion control purposes; see >>> [QUIC-RECOVERY]." >>> >>>> >>> >>>> However, in that table, the CONNECTION_CLOSE frame isn't marked >>> with the >>> >>>> "C" character and only the ACK frame is. This appears to be an >>> >> oversight in >>> >>>> that table in RFC-9000. >>> >>>> >>> >>>> P.S: I raised this as a question in the QUIC working group mailing >>> list >>> >>>> before raising this errata. That mail thread is here >>> >>>> >>> https://mailarchive.ietf.org/arch/msg/quic/aBYUxanWVO-yEQASSxUNGbQQ8Kk/ >>> >>>> >>> >>>> Instructions: >>> >>>> ------------- >>> >>>> This erratum is currently posted as "Reported". (If it is spam, it >>> >>>> will be removed shortly by the RFC Production Center.) Please >>> >>>> use "Reply All" to discuss whether it should be verified or >>> >>>> rejected. When a decision is reached, the verifying party >>> >>>> will log in to change the status and edit the report, if necessary. >>> >>>> >>> >>>> -------------------------------------- >>> >>>> RFC9000 (draft-ietf-quic-transport-34) >>> >>>> -------------------------------------- >>> >>>> Title : QUIC: A UDP-Based Multiplexed and Secure >>> Transport >>> >>>> Publication Date : May 2021 >>> >>>> Author(s) : J. Iyengar, Ed., M. Thomson, Ed. >>> >>>> Category : PROPOSED STANDARD >>> >>>> Source : QUIC >>> >>>> Stream : IETF >>> >>>> Verifying Party : IESG >>> >>>> >>> >>>> >>> >>> >> >> -- >> Kazuho Oku >> >