quicwg / base-drafts

Internet-Drafts that make up the base QUIC specification
https://quicwg.org
1.63k stars 205 forks source link

Keeping losing ACK for Handshake packet leads 0 cwnd #2779

Closed tatsuhiro-t closed 5 years ago

tatsuhiro-t commented 5 years ago

Upon timeout, the sender MUST retransmit all unacknowledged CRYPTO data if possible. The sender MUST NOT declare in-flight crypto packets as lost when the crypto timer expires.

So timer expiration does not remove in-flight unacknowleged CRYPTO data from bytes_in_flight. This means if ACK continues to be lost for Handshake packet, endpoint has no cwnd left to send any packet. loss time based detection does not kick in because no ACK is received.

mikkelfj commented 5 years ago

If the handshake cannot make progress here, perhaps it is better to give up?

tatsuhiro-t commented 5 years ago

It could, but why not reclaim data credit by making CRYPTO data lost?

marten-seemann commented 5 years ago

I think the CRYPTO retransmissions are intended to be analogous to PTOs. For PTOs, we only declare any packet lost when we receive an acknowledgement. If that's indeed the intention here, we would also need to treat CRYPTO retransmissions as probe packets, which are not blocked by the congestion controller.

ianswett commented 5 years ago

Marten is correct. It's on my TODO list to try to merge these mechanisms(redo of #2655), but it takes very careful thought and that PR quickly became conflict-heavy.

ianswett commented 5 years ago

As discussed on #2984, this is fixed in the editor's copy.