ptrd / kwik

A QUIC client, client library and server implementation in Java. Supports HTTP3 with "Flupke" add-on.
GNU General Public License v3.0
390 stars 57 forks source link

Coalesced 0-RTT packet not parsed #46

Closed larseggert closed 2 months ago

larseggert commented 3 months ago

I'm seeing an issue where a Kwik server is not processing a neqo 0-RTT packet that is coalesced with our Initial. I'm attaching the relevant interop runner logs/pcaps. Our 0-RTT packet with packet number 0 is not ACK'ed.

zerortt.zip

ptrd commented 3 months ago

Thanks for reporting! I will investigate.

ptrd commented 2 months ago

Nice catch ;-). Found the cause, server handles very first packet different from the rest and (only) there a possible coalesced packet is ignored.

Thanks a lot for reporting @larseggert, would probably never have noticed it myself.

ptrd commented 2 months ago

This has been fixed now. There are two interop runs with the fix: https://interop.seemann.io/?run=2024-08-20T08:30 and https://interop.seemann.io/?run=2024-08-20T01:41. In both cases the zero-rtt test is red, however the pcaps show that there are 7 0-RTT packets (pn 0 to 6) and that all of them are acknowledged in the first 1-RTT packet the server sends.

I'm not sure why these test still fail. The output says: "Client sent too much data in 1-RTT packets". But based on what I see in the pcaps, I consider the test to be successful.

larseggert commented 2 months ago

I can confirm that the fix is good, the log shows that neqo sees the ACK and doesn't RTX the 0-RTT stream data in 1-RTT anymore.

I think the test is still failing, because neqo sends a 1-RTT PMTU probe, which probably causes that calculation in the interop runner to not work out. I'll disable PMTUD for that testcase on our side and see if that helps.

CC @marten-seemann