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

active_connection_id_limit is unknown for 0-RTT #3423

Closed
marten-seemann opened this issue Feb 5, 2020 · 7 comments · Fixed by #3425
Closed

active_connection_id_limit is unknown for 0-RTT #3423

marten-seemann opened this issue Feb 5, 2020 · 7 comments · Fixed by #3425
Assignees
Labels
-transport design has-consensus

Comments

@marten-seemann
Copy link
Contributor

@marten-seemann marten-seemann commented Feb 5, 2020

This value is not remembered for 0-RTT. A client therefore cannot send NCID frames in 0-RTT without risking to violate the server’s limit.

@MikeBishop
Copy link
Contributor

@MikeBishop MikeBishop commented Feb 5, 2020

The alternative would be to add it to the list of things to remember, but yes, we should fix it.

@marten-seemann
Copy link
Contributor Author

@marten-seemann marten-seemann commented Feb 5, 2020

@MikeBishop That would mean that the server needs to remember / save in the session ticket, and can’t reduce in the resumed connection. My understand was that we only remember those values that are absolutely necessary to make 0-RTT make sense, i.e. flow control and stream number limits.

@mnot mnot added this to Triage in Late Stage Processing Feb 5, 2020
@larseggert larseggert added the design label Feb 5, 2020
@project-bot project-bot bot moved this from Triage to Design Issues in Late Stage Processing Feb 5, 2020
@larseggert
Copy link
Member

@larseggert larseggert commented Feb 5, 2020

Discussed in ZRH. @marten-seemann to write up a PR for his preferred option.

martinthomson added a commit that referenced this issue Feb 5, 2020
Simple.  It appears as though I missed this when @marten-seeman added
this transport parameter.  We shouldn't make more exceptions for 0-RTT.

Closes #3423.
@MikeBishop
Copy link
Contributor

@MikeBishop MikeBishop commented Feb 5, 2020

Post-discussion and having re-read, I believe the current text covers this for NEW_CONNECTION_ID:

  • The client has already issued one CID to the server during the handshake, which might be zero-length
  • Sending NEW_CONNECTION_ID is forbidden if you are using zero-length CIDs; receipt of one is a protocol violation
  • The default and minimum value of active_connection_id applies until the server's value is received, which is two if the client is using non-zero-length CIDs
  • Exceeding the limit is a protocol violation

So the client can send no more than one NEW_CONNECTION_ID frame in 0-RTT, or it's a protocol violation. If it sends exactly one, that never exceeds the server's limit, provided that it has a non-zero-length Source Connection ID.

It also covers it for RETIRE_CONNECTION_ID:

  • The client has exactly one CID for the server during 0-RTT
  • It is a protocol violation for RETIRE_CONNECTION_ID to retire the CID used by the containing packet

@MikeBishop
Copy link
Contributor

@MikeBishop MikeBishop commented Feb 5, 2020

Over supper, @marten-seemann wanted to know why a client would include a new connection ID in its 0-RTT packets. The answer is that the client's handshake CID has no associated SRT. If the client wants the ability to send stateless resets, it might very well put NCID(N=1, RPT=1) in its 0-RTT flight. The server will retire the handshake connection ID in 0.5-RTT and begin using the CID with an associated token.

@larseggert
Copy link
Member

@larseggert larseggert commented Feb 6, 2020

Discussed in ZRH. Proposed resolution is written up in #3425.

@larseggert larseggert added the proposal-ready label Feb 6, 2020
@project-bot project-bot bot moved this from Design Issues to Consensus Emerging in Late Stage Processing Feb 6, 2020
@LPardue LPardue moved this from Consensus Emerging to Consensus Call issued in Late Stage Processing Feb 19, 2020
@LPardue LPardue removed the proposal-ready label Feb 19, 2020
@ianswett
Copy link
Contributor

@ianswett ianswett commented Feb 25, 2020

The meeting notes record that there was a 12 to 1 vote for saving the value instead of using the default of 2.
https://github.com/quicwg/wg-materials/blob/master/interim-20-02/minutes.md#3423-active_connection_id_limit-is-unknown-for-0-rtt-1

I believe I was convinced by the argument that a server could just always use the default and never change it, so it doesn't really matter for servers.

@LPardue LPardue added the call-issued label Feb 26, 2020
@LPardue LPardue added has-consensus and removed call-issued labels Mar 4, 2020
@project-bot project-bot bot moved this from Consensus Call issued to Consensus Declared in Late Stage Processing Mar 4, 2020
Late Stage Processing automation moved this from Consensus Declared to Text Incorporated Mar 4, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport design has-consensus
Projects
Late Stage Processing
  
Issue Handled
Development

Successfully merging a pull request may close this issue.

5 participants