google / quiche

BSD 3-Clause "New" or "Revised" License
635 stars 132 forks source link

Can chrome send NEW_CONNECTION_ID frame to server after h3 handshake ? #60

Open bixuelantian opened 10 months ago

bixuelantian commented 10 months ago

hello everyone,when I test http3 with chrome and my server, I find a question. between the handshake, the server send the param quic_active_connection_id_limit to client is 5, but the chrome doesn't send NEW_CONNECTION_ID frame to server after the handshake. I don't know why, or chrome not implement the protocol ? when the client address changes, without new unused client id, the server cann't response to connection migration.

bixuelantian commented 10 months ago

@danzh1989 @bnc-google need help Sincerely

danzh2010 commented 10 months ago

Chrome doesn't need client issued connection id at all, which is only needed if it does load balancing. If you look at a packet header Chrome receives, the destination connection id length field is 0. The connection id gets changed during a connection migration is the server issued one.

bixuelantian commented 10 months ago

@danzh2010 the problem I encountered is nat address was changed, according to the rfc900 below: if the server has no unused connection IDs which is issued by chrome client, it will not be able to send anything on the new path until the peer provides one. image

danzh2010 commented 10 months ago

Server never needs any client issued connection id to talk to Chrome at any time because Chrome chooses not to include a source connection id in the INITIAL packets.

Note that destination connection id is optional unless the endpoint uses it to do load balancing.