Subject: [quicwg/base-drafts] Pathological loss recovery case with Finished (#1190)

From: Martin Thomson <[email-masked]>
Date: Wed, 14 Mar 2018 12:12:45 +0000 (UTC)

@marten-seemann writes:

1. Client and server perform the handshake, no packets are lost so far. Client and server both arrive at the CONNECTED state, and the server receives all ACKs for handshake packets it sent. The client receives ACKs for all handshake packets except for the one containing the FINISHED message is lost (the packet containing the ACK for the FINISHED is lost).
2. The client starts using 1-RTT keys, and it sends two packets: First, a packet only containing an ACK, and then a packet containing stream data (e.g. a request). The request packet is then lost.
3. The server receives the ACK in the 1-RTT packet, and it stops accepting unencrypted packets according to 6.1.2 of the TLS draft. It doesn’t generate an ACK in response, since the packet only contained an ACK.
4. The client is now missing acknowledgements for two packets: the (unencrypted) packet containing the FINISHED message, and the (1-RTT) packet containing the request. It runs its loss recovery algorithm (OnLossDetectionAlarm), and since there is one outstanding handshake packet, it retransmit all outstanding handshake packets.

Now we’ve run into a situation we can’t recover from: The server won’t even open packet sent as a retransmission (since these packets are unencrypted, and arrive after it already received a 1-RTT packet), and the client will never retransmit the request packet. Furthermore, the server won't send any other packets, since it's just waiting for a request from the client.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190

---

From: janaiyengar <[email-masked]>
Date: Wed, 14 Mar 2018 12:15:37 +0000 (UTC)

Discussed at editors meeting. We believe the following resolution might work. An endpoint acknowledges everything until (i) the handshake is complete, and (ii) it is certain that the peer has seen an acknowledgement sent after this point. Supporting this, an acknowledgement of an ACK that was sent prior to handshake completion cannot be used to remove ACK ranges from future acknowledgments.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190#issuecomment-373000451

---

From: janaiyengar <[email-masked]>
Date: Wed, 14 Mar 2018 12:44:22 +0000 (UTC)

After the server believes that the handshake is complete (Finished message from the client included), it sends a HS_COMPLETE frame, which is reliable.  When this frame is received at an endpoint, it ceases all retransmissions of any handshake frames.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190#issuecomment-373007615

---

From: Martin Thomson <[email-masked]>
Date: Wed, 14 Mar 2018 13:28:18 +0000 (UTC)

Note: Removing client Finished (as some have suggested) is not sufficient because we need to address this problem for handshakes with client authentication.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190#issuecomment-373020363

---

From: Martin Thomson <[email-masked]>
Date: Tue, 20 Mar 2018 10:45:08 +0000 (UTC)

I had an insight yesterday.  Maybe the newly proposed CRACK frame can elicit acknowledgments.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190#issuecomment-374552242

---

From: ianswett <[email-masked]>
Date: Tue, 20 Mar 2018 07:11:55 -0700

I think that may solve the problem with some constraints, but HANDSHAKE_DONE or some equivalent seems easier to me.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1190#issuecomment-374611928