You’re very observant!
I was actually hoping this week, once these two commits have passed internal review, to submit this design doc for community feedback, along with the TCP_FASTOPEN one.
So, watch out for those. Edit: These are now posted and being discussed here: Two new blueprints/design drafts seeking feedback: Replacing TLS with Noise and TCP_FASTOPEN
Great idea about letting the race happen with the handshake only. We’ve actually talked about that for a while, and yeah as you point out, the main downside is you can’t do that anymore if you eliminate handshakes entirely.
I still think QUIC is salvageable, but it’s perhaps using it off label without TLS.
To your point about engineering time, the Noise blueprint actually references a number of Gerrit commits, which constitute a full implementation. We actually already have Noise working in a test environment! So, instead of having to build this all for the first time, we will only need to make it match what ends up being accepted from a blueprint perspective.
In the long term, we also have an ongoing effort to allow for dynamic long tail generation/cancelation. We still would like to avoid wasting resources that will ultimately get canceled, even without handshakes, so, we’re working on a technique that keeps track of which connections in a set are ones we’re waiting on, and heuristics of if we should add more. That’s actually also fairly far along. We’ll have something to show there soon too.
Thanks for this feedback! I expect SNOs in particular will have much more feedback on the TCP_FASTOPEN design doc once that’s in, so please watch out for that too.