Subject: [quicwg/base-drafts] Fix congestion control permissiveness (#3248)

From: Jana Iyengar <[email-masked]>
Date: Sat, 16 Nov 2019 21:11:28 -0800

Also changes NewReno to Reno because of pedantry (not from Gorry).

Fixes #3247.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/3248

-- Commit Summary --

  * Fix congestion control permissiveness

-- File Changes --

    M draft-ietf-quic-recovery.md (29)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/3248.patch
https://github.com/quicwg/base-drafts/pull/3248.diff

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

---

From: Jana Iyengar <[email-masked]>
Date: Sat, 16 Nov 2019 21:17:42 -0800

@janaiyengar pushed 1 commit.

9ec976d809528fb1ca637425f9ef02b455a69d9a  remove pointless sentences

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3248/files/0acbcfa59c3df7d73911e357027eab56694a62a1..9ec976d809528fb1ca637425f9ef02b455a69d9a

---

From: ianswett <[email-masked]>
Date: Sat, 16 Nov 2019 23:14:59 -0800

ianswett commented on this pull request.

-Implementations MAY use other congestion control algorithms, such as
-Cubic {{?RFC8312}}, and endpoints MAY use different algorithms from one another.
-The signals QUIC provides for congestion control are generic and are designed
-to support different algorithms.
+If an endpoint uses a different controller than that specified in this document,
+it MUST conform to the congestion control guidelines specified in {{!RFC8085}}.
+
+The algorithm in this document specifies and uses the controller's congestion
+window in bytes.
+
+An endpoint MUST NOT send a packet if it would cause bytes_in_flight (see
+{{vars-of-interest}}) to be larger than the congestion window, unless the packet
+is a probe sent on a PTO timer expiration (see {{pto}}).

```suggestion
is sent on a PTO timer expiration (see {{pto}}).
```

-- 
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/3248#pullrequestreview-318004227

---

From: ianswett <[email-masked]>
Date: Sat, 16 Nov 2019 23:17:44 -0800

I think this is design, so it's in limbo at the moment.  Also, I need to re-read RFC8085 and ensure that MUST is viable.

-- 
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/3248#issuecomment-554719980

---

From: Jana Iyengar <[email-masked]>
Date: Sun, 17 Nov 2019 19:55:53 -0800

Yup, the issue this address should be marked design.

-- 
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/3248#issuecomment-554840822

---

From: Jana Iyengar <[email-masked]>
Date: Sun, 17 Nov 2019 19:56:10 -0800

74c57fbe45516e3c25d24d14f32b358dfa53c321  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3248/files/9ec976d809528fb1ca637425f9ef02b455a69d9a..74c57fbe45516e3c25d24d14f32b358dfa53c321

---

From: Martin Thomson <[email-masked]>
Date: Sun, 17 Nov 2019 22:51:50 -0800

martinthomson approved this pull request.

-- 
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/3248#pullrequestreview-318125181

---

From: ianswett <[email-masked]>
Date: Mon, 18 Nov 2019 01:36:14 -0800

ianswett approved this pull request.

-- 
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/3248#pullrequestreview-318197139

---

From: Gorry Fairhurst <[email-masked]>
Date: Mon, 18 Nov 2019 18:14:21 -0800

gorryfair commented on this pull request.

-QUIC hosts MUST NOT send packets if they would increase bytes_in_flight (defined
-in {{vars-of-interest}}) beyond the available congestion window, unless the
-packet is a probe packet sent after a PTO timer expires, as described in
-{{pto}}.
+Endpoints can unilaterally choose a different algorithm to use, such as Cubic

I think this could reads slightly  better if we swapped these two sentences. First state is generic - then that you can choose different alg.

-- 
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/3248#pullrequestreview-318747289

---

From: Jana Iyengar <[email-masked]>
Date: Tue, 19 Nov 2019 23:35:43 -0800

@janaiyengar pushed 18 commits.

00e05fbb38c9079150e06806e97b5f4763c70ac2  Reference 3168 for ECN
3e0c5f00f5aa1e95d2cf8028da01534a642b9d06  Update draft-ietf-quic-recovery.md
c52cd498bfa49a005f25bcd11ad11a043c322d08  ECN editorial
31c1f5a0b4c9f654c8b980cc001dd6755fc837c8  Fix incorrect expression
95ad25c1b3d8bb96947566e0e1f50a9682a3db7c  Set, not seed
e41a121b775409e5b7f6e276ede0e11eca7936d5  Jana's suggestion
f427ed23016ed57959adf1152d08b3041d0704d3  Reference 3168 for ECN (#3241)
c5d0fe922251b4c4ab2b49868805a19f9c42b7ef  Merge pull request #3251 from quicwg/jri/not-seed
bbe9e9bbe1f7a1fb62d32cc52c571242da964f8a  Merge pull request #3250 from quicwg/jri/time-threshold
e526ccf9c43c49e3dd90110e3a22e450f32a76b0  endpoints never requests a CID
7333f466daf11ab512f44ab13005fb477c952098  Avoid using table- prefixes for anchors
08f96e3da48faf241da7fad12cfee7b27fcef691  Merge pull request #3252 from kazuho/kazuho/endpoint-never-request-cid
dfa1d15b6727d17a2a815361dd1d40cf27aae8e1  Merge pull request #3242 from quicwg/ianswett-ecn-editorial
81c610b900c4b78a7a1415d1005b7a8f5fff3464  Merge pull request #3253 from quicwg/table-tag
7ba7687f9e743e0a63db3b8d526e7b46a7402a95  Fix congestion control permissiveness
a8d919426a090d1a14dbf3ed629b681d5686d4c4  remove pointless sentences
f4e0319a5055460bcac3d29d5f1245ead6647f05  gorry comment
7ea7d1a76236c0504d65a5c5b390809f3f13814c  rebase

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3248/files/74c57fbe45516e3c25d24d14f32b358dfa53c321..7ea7d1a76236c0504d65a5c5b390809f3f13814c

---

From: hardie <[email-masked]>
Date: Mon, 25 Nov 2019 12:53:25 -0800

The proposed commit says:  "If an endpoint uses a different controller than that specified in this document, it MUST conform to the congestion control guidelines specified in {{!RFC8085}}."  RFC 8085's section 3.1 appears to be the salient piece here, along with its reference to RFC 2914.   A more direct pointer might be useful.  

I also note that you have a MUST pointer to what amounts to a set of guidelines which are all SHOULD or RECOMMENDED, which  is a level lower.  The result is likely to be a little less strict than the naive reader might believe.

-- 
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/3248#issuecomment-558335166

---

From: ianswett <[email-masked]>
Date: Tue, 26 Nov 2019 21:07:10 -0800

If there are MUSTs we believe are important from 8085 and apply to QUIC and are not already MUSTs in other portions of the QUIC specs, I'd suggest we move those explicitly into this document and then either non-normatively reference 8085 or use a SHOULD for the rest of the document?

-- 
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/3248#issuecomment-558930598

---

From: ianswett <[email-masked]>
Date: Tue, 26 Nov 2019 21:07:44 -0800

ianswett requested changes on this pull request.

Based on Ted's feedback, I think we should move anything that's really a MUST into this document.

-- 
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/3248#pullrequestreview-323431409

---

From: Gorry Fairhurst <[email-masked]>
Date: Wed, 27 Nov 2019 00:32:03 -0800

I'd always believed the intent was for the design for QUIC to fall within the scope of BCP145, which provides the check-list of SHOULD and MUST requirements for UDP-based protocol mechanisms.

Moving blocks of requirements language and surrounding context that relate to QUIC from BCP145, seems like creating a lot of work, with very little positive outcomes. Citing this as normative to an implementation seems like it avoids much of this, and also much reduces the need for detailed checking in last call.

Is there a reason to "move" to the QUIC document itself?  

-- 
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/3248#issuecomment-558984397

---

From: Martin Thomson <[email-masked]>
Date: Wed, 27 Nov 2019 00:41:32 -0800

I suspect that Ian is looking to create a stronger requirement for congestion control than BCP145 has.  BCP145 is full of SHOULD, with no MUST.

-- 
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/3248#issuecomment-558987450

---

From: mirjak <[email-masked]>
Date: Wed, 27 Nov 2019 05:23:51 -0800

RFC8085 has basically only SHOULDs because it tries to cover all kind of cases of UDP-based protocols. So if we can be more specific for QUIC that would be good. However, QUIC is also meant as a general purpose protocol so I'm not sure we can. I think it is most important to have a pointer to RFC8085. Not sure if any other requirements can be made (other than don't break the Internet) unfortunately...

-- 
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/3248#issuecomment-559085526

---

From: Jana Iyengar <[email-masked]>
Date: Thu, 28 Nov 2019 03:22:59 -0800

Rabbit-hole warning. There isn't a real set of requirements anywhere for congestion control articulated any better than what's in 8085. Gorry and I looked through existing documents, realized that we're lacking here, leading to Gorry's [draft-fairhurst-tsvwg-cc-04](https://tools.ietf.org/html/draft-fairhurst-tsvwg-cc-04).

I don't think it makes sense to move text out of 8085 here. The entire point of a normative reference is so we don't do that. Is there any specific text that you have in mind, @ianswett?

The MUST here is so that an implementer is required to consider the UDP guidelines in 8085, but each one of those SHOULDs is evaluated individually. Simply saying SHOULD conform to 8085 is quite different than that.

-- 
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/3248#issuecomment-559454751

---

From: Jana Iyengar <[email-masked]>
Date: Thu, 28 Nov 2019 03:24:33 -0800

4d3b036c1f473d5d6c875c7ff748b4f06121d582  specify section 3.1

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3248/files/7ea7d1a76236c0504d65a5c5b390809f3f13814c..4d3b036c1f473d5d6c875c7ff748b4f06121d582