As part of a prototype implementation of QUIC, I am looking at the "SYN Attack resilience" mechanisms built in the protocol. The server can respond to "Client Hello" by a "REJECT" message that includes a cookie (IP Token), which the client will then repeat in a new "Client Hello". These synchronization messages are sent through stream number 1. The decision to use the stream mechanism to convey negotiation messages makes sense, but it also creates interesting issues.
1) Can the initial Client Hello be spread over several packets? If it can, then the server has to create a full connection context to receive the message, and that opens the door to various abuses.
2) If the server "Rejects" a Client Hello, will the new "Client Hello" be sent in the same connection context, or in a new context? I would like to keep no memory of a failed attempt on the server side, and that implies deleting the context, but I am not sure that I read the spec correctly on that point.
3) If the client believed that the connection will be accepted, it might send some data immediately after the CHLO, using the intermediate encryption key derived from the server config. Upon reception of a REJ, is the client supposed to reset the encryption context to "unencrypted?" What happens to the "immediate data?"
-- Christian Huitema