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

Frames should have a length field #194

Closed
ekr opened this issue Jan 23, 2017 · 4 comments
Closed

Frames should have a length field #194

ekr opened this issue Jan 23, 2017 · 4 comments
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.

Comments

@ekr
Copy link
Collaborator

ekr commented Jan 23, 2017

In S 5.2.2 QUIC frames are currently specified without any length field. This means that it's not possible to skip over unknown frame types.

There are at least two reasons why this is inconvenient:

  • It makes it hard to write passive analysis tools because those tools will just choke if they encounter unrecognized frames (they cannot process the rest of the packet).
  • It makes it hard to skip over frames you don't care about without parsing them. BLOCKED is a good example of such a frame currently
@marten-seemann
Copy link
Contributor

After completing version negotiation, there should not be any unrecognized frame types. A peer receiving an unknown frame type should treat this as an error and close the connection.

There's no overhead in reading a BLOCKED frame, since it has a fixed length anyway (5 bytes: 1 flag byte and 4 bytes for the stream ID). But even if it hadn't, the overhead to parse it and skip it seems negligible to adding 2 bytes (per frame) to indicate the length of a frame.

@ekr
Copy link
Collaborator Author

ekr commented Jan 23, 2017

"After completing version negotiation, there should not be any unrecognized frame types. A peer receiving an unknown frame type should treat this as an error and close the connection."

Yes, I am aware of this. which is why my point #1 was about passive analysis tools which do not participate in version negotiation and merely have to take whatever is negotiated on the wire. We see this regularly with TLS where Wireshark can properly handle TLS extension it doesn't recognize because they have an embedded length.

"There's no overhead in reading a BLOCKED frame, since it has a fixed length anyway (5 bytes: 1 flag byte and 4 bytes for the stream ID). But even if it hadn't, the overhead to parse it and skip it seems negligible to adding 2 bytes (per frame) to indicate the length of a frame."

This isn't a matter of processing overhead, it's a matter of having to have the complexity of the code to process types you don't care about.

@ianswett
Copy link
Contributor

I think skipping frames you don't care about is a non-goal, since QUIC is an end-to-end transport.

And I don't expect there to be that many extension frames in QUIC, so I don't think it'll be an undue burden for wireshark to keep up.

@mnot mnot added the design An issue that affects the design of the protocol; resolution requires consensus. label Jan 25, 2017
@martinthomson
Copy link
Member

Closing this as a duplicate of #233.

@mnot mnot added the has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. label Sep 26, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.
Projects
None yet
Development

No branches or pull requests

6 participants