facebook / mvfst

An implementation of the QUIC transport protocol.
MIT License
1.5k stars 242 forks source link

mvfst ignores ACK and does not send anti-deadlock packets #362

Open jmuecke opened 3 weeks ago

jmuecke commented 3 weeks ago

I used mvfst as QUIC client with a modified quic-go server, which responds with an acknowledgment without coalesced ServerHello in response to the ClientHello. After reception the mvfst should program an anti-deadlock PTO at 3x the first experienced RTT. Looking at the pcap of the connection I do not see a probe packet after 3x first RTT.

This issue is most noticeable when the server is slow to complete the handshake or in a deadlock situation To simulate this, I introduced a delay after the ACK. I used the latest mvfst interop-runner docker image for testing. A pcap file is attached, with the ACK visible in Wireshark as packet No. 6. I have also attached the Qlog.

The ACK should allow the client to accurately estimate the RTT, program the PTO, and send probe packets upon PTO expiry. Currently, mvfst does not react to the acknowledgment by sending probe packets. Also the default PTO does not seem to expire, which can lead to a deadlock.

trace_node_left.pcapng.gz 013673d91b510647.qlog.txt

kvtsoy commented 3 weeks ago

To simulate this, I introduced a delay after the ACK. I used the latest mvfst interop-runner docker image for testing

Do you have an example ACK delay change for quic-go and how you actually run the server to reproduce?

kvtsoy commented 3 weeks ago

Actually nvm we were able to reproduce this, we'll work on a fix.