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
>

Reply via email to