Subject: [quicwg/base-drafts] When to send Version Negotiation (#1038)

From: martinduke <[email-masked]>
Date: Sun, 07 Jan 2018 19:39:53 -0800

The invariants draft only reserves the 0x80 and 0x40 codepoints in the first byte of the packet. The Initial Packet byte (0xff) is not invariant.

The transport draft suggests that only initial packets should trigger version negotiation. However, if QUIC v2 picks an initial packet byte that is not 0xff, then servers will ignore it and VN breaks.

There are two solutions that came up on the mailing list.

1) Servers must send VN packets for any long header type where the version is unsupported . We explored the possibility that 0RTT packets larger than 1200 bytes would create a storm of VN packets, but this is not an amplification attack vector. Furthermore, the case where a client has 0RTT keys but not an accurate list of server versions is a rare one. Even in this rare case, if the Initial is lost this change could actually save us an RTT.

2) Make 0xff for the Initial Packet an invariant. This is easy, but raises the question about the proper response to other Long Headers that arrive first (short headers will trigger stateless reset).

I don't have a strong opinion on which we should do, as long as we do one. I'm happy to do a PR for either. What do people think, or is there a third option?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1038

---

From: Martin Thomson <[email-masked]>
Date: Sun, 07 Jan 2018 20:11:03 -0800

I think that I would rather not do the second option here.  The text could be clearer, but the intent was to have Version Negotiation triggered by any packet that might initiate a new connection.  What that packet looks like will vary between versions, so I don't think we can specify a single type.

I prefer making this text from Section 7.1 clearer:

> For servers, packets that aren’t associated with a connection potentially create a new connection. However, only packets that use the long packet header and that are at least the minimum size defined for the protocol version can be initial packets. 

That is, if the packet uses the long header AND it is at least big enough to initiate a connection with any version that the server supports, then Version Negotiation SHOULD be sent.   I use "SHOULD" only because of the caveats regarding rate limiting.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1038#issuecomment-355881449

---

From: martinduke <[email-masked]>
Date: Mon, 08 Jan 2018 04:12:02 +0000 (UTC)

@martinthomson Cool, I'll file a PR.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1038#issuecomment-355881524