Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ambiguity in section 5.2.2 of RFC 9000 #4928

Closed
su225 opened this issue Jul 26, 2021 · 4 comments
Closed

Ambiguity in section 5.2.2 of RFC 9000 #4928

su225 opened this issue Jul 26, 2021 · 4 comments
Labels
-transport editorial An issue that does not affect the design of the protocol; does not require consensus. future-version An issue that is best addressed in a future version of QUIC, or an extension to it.

Comments

@su225
Copy link

su225 commented Jul 26, 2021

In section "Server Packet Handling"

If a server receives a packet that indicates an unsupported version
and if the packet is large enough to initiate a new connection for
any supported version, the server SHOULD send a Version Negotiation
packet as described in Section 6.1. A server MAY limit the number of
packets to which it responds with a Version Negotiation packet.
Servers MUST drop smaller packets that specify unsupported versions.

What is the threshold for "large enough" and "smaller" packets? Dropping "smaller" packets seem to be a requirement, but how small is "smaller"? If that is implementation dependent, then it should have been mentioned as such.

@MikeBishop
Copy link
Contributor

It's not implementation-dependent, but version-dependent. "...if the packet is large enough to initiate a new connection for any supported version" reflects that the server might support 1..N versions of QUIC, each with their own minimum packet size. We don't know what those minima might be; the minimum for this version is 1200 bytes. The trouble is, here the client is speaking a version the server doesn't recognize, so the server can't know what the minimum is in the attempted version.

The solution is two matching rules. On the server side, if the packet is large enough to represent a connection attempt for any version the server supports, it needs to treat it as a possible connection attempt and respond with a VN packet. On the client side, we have this guidance:

The size of the first packet sent by a client will determine whether
a server sends a Version Negotiation packet. Clients that support
multiple QUIC versions SHOULD ensure that the first UDP datagram they
send is sized to the largest of the minimum datagram sizes from all
versions they support, using PADDING frames (Section 19.1) as
necessary. This ensures that the server responds if there is a
mutually supported version. A server might not send a Version
Negotiation packet if the datagram it receives is smaller than the
minimum size specified in a different version; see Section 14.1.

That is, each QUIC version defines a minimum packet size. A client's first packet will ensure that it satisfies the minimum packet size of all versions it supports, no matter what version it attempts on the first flight. A server responds to connection attempts which are large enough to satisfy any version it supports.

That means if the client's first datagram wasn't large enough to trigger a VN packet, there was no version overlap anyway.

@su225
Copy link
Author

su225 commented Aug 10, 2021

Thank you very much for clarification @MikeBishop . I see that in later sections (especially those related to packet/datagram/frame structure) there are references to relevant sections. Is it possible to add it in parentheses (something like "1200 for this QUIC version" or "see section X.Y")? Should be a small change, but makes jumping around easier? I'll close this as the issue is resolved. Thanks once again!

@su225 su225 closed this as completed Aug 10, 2021
@MikeBishop MikeBishop added editorial An issue that does not affect the design of the protocol; does not require consensus. future-version An issue that is best addressed in a future version of QUIC, or an extension to it. labels Aug 11, 2021
@MikeBishop
Copy link
Contributor

A reasonable suggestion ,but the RFC has been published and I don't think this would qualify as an erratum. I'll mark it as a possibility for a future version, though.

@mirjak
Copy link
Contributor

mirjak commented Aug 11, 2021

one can also mark errata as "hold for future updates". Or this could be an editorial errata, which then would be displayed inline if verified.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport editorial An issue that does not affect the design of the protocol; does not require consensus. future-version An issue that is best addressed in a future version of QUIC, or an extension to it.
Projects
None yet
Development

No branches or pull requests

4 participants