Draft: draft-ietf-quic-transport

Commentary: It is permissible for a client to do 0 - RTT resumption with a NST from one connection and a token from another . This clarifies that a client only needs to associate a token ( from a NEW_TOKEN frame ) with the server it was from and no additional state , and that a server ca n't require that a token be from the same connection as the NST in use . 
 The token is used for deciding whether the server believes the packet it 's receiving actually comes from the address it says it 's coming from . I could believe a server might trust a client only if it 's doing a 1 - RTT handshake , but not trust it if it 's doing a 0 - RTT handshake , so might encode that bit in the token . I do n't think the server should be putting more specific bits like " this is the NST that should be used " or " here are the SETTINGS from the previous connection " in the token . If the server does n't like a token it receives with a 0 - RTT handshake , it can send a Retry packet but still continue with the 0 - RTT crypto handshake ( even though it 's now 1 - RTT from a transport perspective ) . I do n't see the need for there to be fate sharing between accepting a token and accepting 0 - RTT - a server can reject one without rejecting the other . I 've created to express the problem statement as an issue . 
 If you 're going to continue with 0 - RTT , but not trust the token , why not just limit the amount sent by the amplification factor ? The receipt of a Handshake packet constitutes path validation . Also , a Retry does n't allow you to acknowledge the client 's Initial or any 0 - RTT packets . 
 For a 0 - RTT resumption in H3 , a client needs 4 pieces of state previously received from a server : 1 ) a NewSessionTicket 2 ) Transport Parameters 3 ) SETTINGS 4 ) a token ( from a NEW_TOKEN frame ) The last is n't strictly necessary , but without it the server is likely to burn a round trip with a Retry packet to prove the client controls the source address . On a given connection , there is only one server SETTINGS and Transport Parameters , though there may be multiple NewSessionTickets and tokens . The first 3 pieces of state are necessarily required to have come from the same connection . A NST ( from any connection ) is needed since without it resumption ca n't happen . Transport Parameters and SETTINGS must come from somewhere for 0 - RTT to be useful ; the obvious and currently specified place is the SETTINGS and Transport Parameters that were sent on the same connection the NST came from . There 's no such need that the 4th piece of state come from the same connection as the others . The token is used to prove that the client controls the address the packet is purportedly coming from . This can be done separately from any crypto state ( in the NST ) , application state ( SETTINGS ) , or the rest of the transport state ( Transport Parameters ) . For a client to store the state needed for 0 - RTT resumption , one possible implementation is to create cache entries containing an NST , TP , and SETTINGS . It 's easy to do that where the TP and SETTINGS get duplicated N times , assuming N NSTs were received on a connection . If M tokens were received on that connection , and tokens need to be to those cache entries , either the M tokens need to be paired to the N NSTs somehow , or all M tokens are in all N cache entries . This introduces noticeable complexity to a client 's session cache implementation to correlate unrelated things . It should be clarified that the client does n't need to associate the token with the rest of the state needed for 0 - RTT . has suggested wording for that clarification . 
 As pointed out in in , the proposed change essentially forbids a server from storing SETTINGS in the token . I think I 'm persuaded by argument above that we 'd better forbid such coordination , as it would be a burden to certain client implementations . OTOH , I think that untying the relationship between session tickets and tokens does open a new issue , see . 
 I have some editiorial comments , but the design looks fine to me . While we might embed some information related to 0 - RTT configuration in QUIC tokens , they would be decryptable and be usable , so we do not think there would be a problem for us ( thanks to for checking).A couple of editorial suggestions .
Paragraph (version A):
managing the tokens.
Paragraph (version B):
managing the tokens.  A client MAY use a token from any previous
connection to that server.
Paragraph (version B):
Clients MAY use tokens obtained on one connection for any connection
attempt using the same version.  When selecting a token to use,
clients do not need to consider other properties of the connection
that is being attempted, including the choice of possible application
protocols, session tickets, or other connection properties.