On 06/04/2020, 02:49, Martin Thomson <m...@lowentropy.net> wrote:
> I think that you are assuming a lot about how the loss recovery part
> of the sender is operating here.
>
> If you receive ACK { 1, 3 }, then it might be reasonable to assume
> that 2 got lost, but it seems to me that assuming anything about 4 is
> premature.

The spec as currently written says that the signal "ACK {1, 3}" means
"retransmit {2, (3, end]}":

   Upon receipt of an ACK for only some messages from a flight, an
   implementation SHOULD retransmit the remaining messages or
   fragments.

This works as expected only if the sender can assume that the receiver
has let enough time pass before generating ACK {1, 3}, but this is not
strongly stated in the description of receiver behaviour.

We should keep in mind that DTLS implementers are not necessarily
transport experts, and that warrants a bit more care in what we say as
well as what we don't say.  In particular, we should try hard to avoid
expert bias.

One example where we can improve: we have a nice sentence about bunching
ACKs at 25% of current RTO halfway through bullet 2 of Section 7.1.  In
fact, avoiding knee-jerk ACKing is one of the basic things to understand
here.  Incidentally, this is how one's solves Hanno's conundrum above
(at least in non-pathological cases) because "retransmit {2, (3, end]}"
would be generated when the receiver has got some confidence about 4 &
co. being actually lost.  Unfortunately, the sentence is oddly placed
and one tends to overlook it and not giving it the high and general
relevance it actually has.

> The sender can also make some adjustments, without necessarily
> adhering to a strict interpretation of the recommendations in the
> spec.

Agree again, but deciding to violate a SHOULD should be an exception,
not the rule.  If I have to implement this, especially on very
low-bandwidth paths that fragment a lot, I probably would never follow
the recommendation: I'd first re-send 3 and sit back for a while waiting
for further ACKs before resending (3, end].

> The draft is imprecise about this logic intentionally.  It recommends
> that the sender send missing data, which will likely work, and be
> fast.  For large flights, yes, this will be suboptimal, but we are
> also assuming that this data is not subject to congestion control
> limits.

Just a note: "large flights" is relative to the available bandwidth so
(very) low-bandwidth would always have suboptimal recovery even if HS
data is not congestion controlled.  And that's the environment where you
absolutely want to have a reliability scheme that is bandwidth
efficient.

> If we go to PQ schemes with large amounts of data, then that requires
> a different set of assumptions.  It might also require that
> implementations take extra steps to avoid the resulting
> inefficiencies.

True that.

Cheers!

IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to