Subject: [quicwg/base-drafts] Lost client Initial is never retransmitted (#3056)

From: Benjamin Saunders <[email-masked]>
Date: Fri, 20 Sep 2019 20:26:28 -0700

As of https://github.com/quicwg/base-drafts/pull/2806, if the client's Initial is lost, there is no required behavior that leads to it being retransmitted. Because the client has received no ACKs, no `loss_time` is set, and no loss is detected, leading to the client only sending probe packets, which are not required to bear any particular data ("A probe packet **MAY** carry retransmitted unacknowledged data") so long as they are ACK-eliciting. The server, having no established connection state, cannot do anything with these packets. 

Quinn probes are currently a single PING frame (plus padding, when appropriate) for simplicity, so implementing the new logic immediately broke our tests. If recovery logic now requires probe packets to bear specific data to function correctly in certain circumstances, this should be specified explicitly.

-- 
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/3056

---

From: Tatsuhiro Tsujikawa <[email-masked]>
Date: Fri, 20 Sep 2019 21:33:03 -0700

I also hit this issue too.  After several hours tries and error, I came to the conclusion that implementation should mark the in-flight Initial packet lost in this case, and resend it.  Draft-22 has explicit statement that implementation should not mark in-flight crypto packet lost, but draft-23 does not have it anymore.
BTW, draft-23 does not allow PING in Initial or Handshake packet.

-- 
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/3056#issuecomment-533766800

---

From: Benjamin Saunders <[email-masked]>
Date: Fri, 20 Sep 2019 21:53:35 -0700

> implementation should mark the in-flight Initial packet lost

Why not retransmit the data without declaring the in-flight packet lost?

-- 
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/3056#issuecomment-533767769

---

From: Tatsuhiro Tsujikawa <[email-masked]>
Date: Fri, 20 Sep 2019 22:22:42 -0700

I think it is rather implementation detail to internally mark in-flight packet lost but keep it in order to catch late ACK.

-- 
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/3056#issuecomment-533769324

---

From: Benjamin Saunders <[email-masked]>
Date: Sat, 21 Sep 2019 14:17:29 -0700

There's a related problem where if the server's first flight goes missing, the only response the new logic has is to send a probe at unspecified, i.e. highest known, encryption level. The server will generally have 1-RTT keys at this point, so it sends a 1-RTT probe, which the client, not having received anything prior, cannot decrypt and drops.

-- 
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/3056#issuecomment-533830875

---

From: ianswett <[email-masked]>
Date: Mon, 23 Sep 2019 08:00:39 -0700

The packets should not be marked as lost, but data needs to be retransmitted before sending a PING.

I sent out a PR #3057, feel free to make further suggestions there.

-- 
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/3056#issuecomment-534138698

---

From: ianswett <[email-masked]>
Date: Mon, 23 Sep 2019 18:05:45 -0700

I'm marking this design because it adds some normative language, though I'll note that it doesn't change what I originally intended the text to say.

-- 
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/3056#issuecomment-534343222