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. 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.
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