Hey Martin,

Thanks a lot for your reply!

> I think that you are assuming a lot about how the loss recovery part of the 
> sender is operating here

My assumptions follow what the spec says SHOULD be done, though - nothing more 
and nothing less.

> 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

I agree, but again this is what the spec unambiguously does by saying 
implementations SHOULD resend the complement of what was ACKed.

I think in principle we agree on reasonable measures for improving the ACK 
efficiency. However, I disagree with the assessment that the scheme 
as-described provides sufficient efficiency for common uses, since large 
fragmentation and low MTU networks will be a common characteristic for IoT 
deployments, and DTLS 1.3 'out of the box' implementations should suite these, 
where by out of the box I mean implementations that do precisely what the spec 
says they SHOULD do.

On first sight, an easy improvement seems to be mentioning/recommending 
implementations to buffer ACKs for some time, but we have to be careful with 
this since it affects the semantics of ACKs in a major way which may lead to 
interoperability issues: If ACKs are buffered on the receiver, they can be sent 
recurringly, and also be split. This way, they are no longer 'negative' in the 
sense that they indicate a disruption, as is the case now. If, in turn, ACKs 
are not necessarily buffered but trigger immediate retransmission, 
implementations should not use them recurringly.

Thus, in a nutshell, leaving the question of whether ACKs should be buffered or 
not on the receiver to the implementor, leads to interoperability issues.

Cheers,
Hanno
________________________________
From: TLS <tls-boun...@ietf.org> on behalf of Thomas Fossati 
<thomas.foss...@arm.com>
Sent: Monday, April 6, 2020 12:01 PM
To: Martin Thomson <m...@lowentropy.net>; tls@ietf.org <tls@ietf.org>
Subject: Re: [TLS] Efficiency of ACKing scheme

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