<div dir="ltr"><div>Hi Michael -- glad we are mostly of like mind! Let me try to explain where I was coming from with the super-delayed E2E ACKs below...<br></div><div dir="ltr"><br></div><div dir="ltr">On Thu, Oct 21, 2021 at 1:42 AM Michael Welzl <<a href="mailto:michawe@ifi.uio.no" target="_blank">michawe@ifi.uio.no</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Hi Keith !<div><div><blockquote type="cite"><div><div dir="ltr"><div><ul><li>Protocol 1: The endpoints can now decide what to do with this extra info. For example, they could decide that the endpoint receiver should switch to super delayed ACKs itself (maybe one every N seconds or M megabytes), and the sender will trust the Protocol 2 ACKs for congestion-control and retransmission purposes, while still using the Protocol 1 ACKs for ultimate reliability. (I.e. the sender won't discard outstanding data from a reliable stream until it's been ACKed by the endpoint.)</li></ul></div></div></div></blockquote><div>Not sure I see the point of super delayed ACKs, but …. either way, I think we agree on “The endpoints can now decide what to do with this extra info.”  There can be many variations.</div></div></div></div></blockquote><div><br></div><div> My thinking here was that ACKs serve at least three different purposes in an ARQ-style transport protocol:</div><div><ol><li>congestion control</li><li>loss detection and triggering retransmission of previously sent data (via timeout, dupacks, sender-side timestamp schemes (Sprout/RACK), etc.)<br></li><li>guaranteeing the abstraction of a reliable byte stream, by making the sender retain a copy of the outstanding data (ready for possible retransmission) until ACKed by the receiver</li></ol><div>I think most endpoints might be willing to delegate #1 and #2 to an untrusted intermediary that's along the network path and eager to help (it's no worse than a transparent TCP accelerator today), especially if there's some ability for the endpoints to double-check the intermediary's work and say, "you know what, no thanks" if unsatisfied.</div><div><br></div><div>But #3 feels different -- if an untrusted intermediary's false ACK causes the sender to delete its copy of data that never makes it to the receiver, that threatens the core service model of the protocol. It's not possible to recover from that without escalating to the application. So the sender probably shouldn't discard data irreversibly until it hears a cryptographically authentic ACK from the E2E receiver, but that could come much later and less frequently.<br></div><div><br></div><div>-Keith<br></div></div></div></div>