Re: [quicwg/base-drafts] Clarify ACK of ACKs and bundling a PING (#2794)

Martin Thomson <notifications@github.com> Wed, 26 June 2019 04:04 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 103D71200DF for <quic-issues@ietfa.amsl.com>; Tue, 25 Jun 2019 21:04:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8
X-Spam-Level:
X-Spam-Status: No, score=-8 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6raiwp_HjBzK for <quic-issues@ietfa.amsl.com>; Tue, 25 Jun 2019 21:03:52 -0700 (PDT)
Received: from out-4.smtp.github.com (out-4.smtp.github.com [192.30.252.195]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D977E120623 for <quic-issues@ietf.org>; Tue, 25 Jun 2019 21:03:51 -0700 (PDT)
Date: Tue, 25 Jun 2019 21:03:50 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1561521830; bh=NOZbP6z5gZsOwPPAaRC6R234u5UqVgZzTS8uP/8ujqI=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=JYFsxCxifqce2XskIpDgGEf2SkfNIc4wi5OQEORjidEM7XBcDkTD9iLZaBtqtJho8 oB6FUlizAtVWGNBRqR5PaJ9mXX5DAxA+U1DfyO0kD+VbRE3aCSfw3FQBgZhX2hRkSe XAToyYkGmGyluSAtlba+FpJN2M+0PB9A4Pq+Z5Dc=
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJKY6DQQJCEJKZI4ORI53EAQSNEVBNHHBWNLZWA@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/2794/review/254370629@github.com>
In-Reply-To: <quicwg/base-drafts/pull/2794@github.com>
References: <quicwg/base-drafts/pull/2794@github.com>
Subject: Re: [quicwg/base-drafts] Clarify ACK of ACKs and bundling a PING (#2794)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5d12eea65059e_1ab63ff79facd95c6109b7"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/gxW0hL7kv6P2PZRGAbNy4oPKftg>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Jun 2019 04:04:12 -0000

martinthomson commented on this pull request.

Some tweaks, but this is good.

> @@ -2859,13 +2859,16 @@ valid frames? -->
 
 ### Sending ACK Frames
 
-An endpoint MUST NOT send more than one packet containing only an ACK frame per
-received packet that contains frames other than ACK and PADDING frames.
-An endpoint MUST NOT send a packet containing only an ACK frame in response
-to a packet containing only ACK or PADDING frames, even if there are packet
-gaps which precede the received packet. This prevents an indefinite feedback
-loop of ACKs. The endpoint MUST however acknowledge packets containing only
-ACK or PADDING frames when sending ACK frames in response to other packets.
+Packets containing only ACK frames are not congestion controlled, so there are

Is this section missing an intro?

> An endpoint sends an ACK frame to indicate that it has received and processed packets.  Sending ACK frames is the primary mechanism for advancing the state of a connection.

Happy to take this to another issue...

> @@ -2859,13 +2859,16 @@ valid frames? -->
 
 ### Sending ACK Frames
 
-An endpoint MUST NOT send more than one packet containing only an ACK frame per
-received packet that contains frames other than ACK and PADDING frames.
-An endpoint MUST NOT send a packet containing only an ACK frame in response
-to a packet containing only ACK or PADDING frames, even if there are packet
-gaps which precede the received packet. This prevents an indefinite feedback
-loop of ACKs. The endpoint MUST however acknowledge packets containing only
-ACK or PADDING frames when sending ACK frames in response to other packets.
+Packets containing only ACK frames are not congestion controlled, so there are
+limits on how frequently they can be sent.  An endpoint MUST NOT send more than
+one packet containing only an ACK frame per received ACK-eliciting packet
+(one containing frames other than ACK and/or PADDING).  An endpoint MUST NOT
+send a packet containing only an ACK frame in response to a non-ACK-eliciting
+packet (one containing only ACK and/or PADDING frames), even if there are
+packet gaps which precede the received packet. This prevents an indefinite

```suggestion
packet gaps which precede the received packet. Limiting the sending of ACK
frames avoids creating an indefinite feedback loop of acknowledgements,
which could prevent the connection from ever becoming idle.
```
Apologies for the multi-line suggestion.

> @@ -2883,16 +2886,21 @@ needing acknowledgement are received.  The sender can use the receiver's
 Strategies and implications of the frequency of generating acknowledgments are
 discussed in more detail in {{QUIC-RECOVERY}}.
 
+An endpoint that is only sending acknowledgements will not receive
+acknowledgments from its peer unless those acknowledgements are included in
+packets with ACK-eliciting frames.  A sender SHOULD bundle ACK frames with
+other frames when possible.

Maybe instead:

> Though it sending an ACK frame in every packet can be inefficient, a sender SHOULD send ACK frames in ACK-eliciting packets that it sends.

Which leads to a difficult question: how often do you send an ACK frame when you aren't receiving ACK-eliciting packets?  We've agreed to make it possible to use the specs to build an "decently performant" stack.  Is this a point that isn't important, or is there a need for specific advice?



-- 
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/pull/2794#pullrequestreview-254370629