From f436b81a90eb36ddfa14eb7862cec142a128a5be Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 17:59:49 -0400 Subject: [PATCH 01/13] kMaxDatagramSize -> max_datagram_size Clarifies that this is the maximum datagram size currently in use on the connection. Fixes #3041 --- draft-ietf-quic-recovery.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index ad96b97d6f..16fa3601ed 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -746,7 +746,8 @@ Sending multiple packets into the network without any delay between them creates a packet burst that might cause short-term congestion and losses. Implementations MUST either use pacing or limit such bursts to the initial congestion window, which is recommended to be the minimum of -10 * kMaxDatagramSize and max(2* kMaxDatagramSize, 14720)). +10 * max_datagram_size and max(2* max_datagram_size, 14720)), where +max_datagram_size is the current maximum size of a datagram for the connection. As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc) @@ -1224,20 +1225,15 @@ Constants used in congestion control are based on a combination of RFCs, papers, and common practice. Some may need to be changed or negotiated in order to better suit a variety of environments. -kMaxDatagramSize: -: The sender's maximum payload size. Does not include UDP or IP overhead. The - max packet size is used for calculating initial and minimum congestion - windows. The RECOMMENDED value is 1200 bytes. - kInitialWindow: : Default limit on the initial amount of data in flight, in bytes. Taken from {{?RFC6928}}, but increased slightly to account for the smaller 8 byte overhead of UDP vs 20 bytes for TCP. The RECOMMENDED value is the minimum - of 10 * kMaxDatagramSize and max(2* kMaxDatagramSize, 14720)). + of 10 * max_datagram_size and max(2 * max_datagram_size, 14720)). kMinimumWindow: : Minimum congestion window in bytes. The RECOMMENDED value is - 2 * kMaxDatagramSize. + 2 * max_datagram_size. kLossReductionFactor: : Reduction in congestion window when a new loss event is detected. @@ -1258,6 +1254,11 @@ kPersistentCongestionThreshold: Variables required to implement the congestion control mechanisms are described in this section. +max_datagram_size: +: The sender's current maximum payload size. Does not include UDP or IP + overhead. The max datagram size is used for calculating initial and + minimum congestion windows. The RECOMMENDED value is 1200 bytes. + ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space by the peer in an ACK frame. This value is used to detect increases in the @@ -1335,7 +1336,7 @@ acked_packet from sent_packets. congestion_window += acked_packet.size else: // Congestion avoidance. - congestion_window += kMaxDatagramSize * acked_packet.size + congestion_window += max_datagram_size * acked_packet.size / congestion_window ~~~ From 9309a0ac194307cf002b92d965403ee08d882500 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 18:36:18 -0400 Subject: [PATCH 02/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 16fa3601ed..ac20f19a48 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1257,7 +1257,8 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for calculating initial and - minimum congestion windows. The RECOMMENDED value is 1200 bytes. + minimum congestion windows. The RECOMMENDED value is 1200 bytes, may be larger, + and can not be smaller. ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space From 19200d397bd9bef6a81151169111597b3edcbcc6 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 18:40:14 -0400 Subject: [PATCH 03/13] Cite 14.1 of Transport --- draft-ietf-quic-recovery.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index ac20f19a48..57e107bc25 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -747,7 +747,8 @@ creates a packet burst that might cause short-term congestion and losses. Implementations MUST either use pacing or limit such bursts to the initial congestion window, which is recommended to be the minimum of 10 * max_datagram_size and max(2* max_datagram_size, 14720)), where -max_datagram_size is the current maximum size of a datagram for the connection. +max_datagram_size is the current maximum size of a datagram for the connection +as described (see Section 14.1 of {{QUIC-TRANSPORT}}). As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc) From e8b1251eb9a99928db70c8cc44df5c3bccff5373 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 19:00:03 -0400 Subject: [PATCH 04/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 57e107bc25..a66892160b 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1258,8 +1258,8 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for calculating initial and - minimum congestion windows. The RECOMMENDED value is 1200 bytes, may be larger, - and can not be smaller. + minimum congestion windows. The RECOMMENDED value is 1200 bytes, may be + larger, and can not be smaller. ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space From b1ff885bd354b9218e37b00de1366904335210e7 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 19:47:57 -0400 Subject: [PATCH 05/13] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index a66892160b..56131324df 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1258,7 +1258,7 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for calculating initial and - minimum congestion windows. The RECOMMENDED value is 1200 bytes, may be +The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for calculating minimum congestion windows. An endpoint sets the value of this variable based on its PMTU, with a minimum value of 1200 bytes (see Section 14 of {{QUIC-TRANSPORT}}). larger, and can not be smaller. ecn_ce_counters\[kPacketNumberSpace]: From d27a37d1d171440cde763c730e4dc4d7bd245180 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 19:50:24 -0400 Subject: [PATCH 06/13] Jana's suggestion --- draft-ietf-quic-recovery.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 56131324df..9b7739316f 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1257,9 +1257,9 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP - overhead. The max datagram size is used for calculating initial and -The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for calculating minimum congestion windows. An endpoint sets the value of this variable based on its PMTU, with a minimum value of 1200 bytes (see Section 14 of {{QUIC-TRANSPORT}}). - larger, and can not be smaller. + overhead. The max datagram size is used for calculating the minimum congestion + window. An endpoint sets the value of this variable based on its PMTU, with a + minimum value of 1200 bytes (see Section 14.1 of {{QUIC-TRANSPORT}}). ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space From 48573bf0a5755e0f341aed6f6124cad13537bc1a Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 19:51:04 -0400 Subject: [PATCH 07/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 9b7739316f..c3a7c2682f 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -747,8 +747,7 @@ creates a packet burst that might cause short-term congestion and losses. Implementations MUST either use pacing or limit such bursts to the initial congestion window, which is recommended to be the minimum of 10 * max_datagram_size and max(2* max_datagram_size, 14720)), where -max_datagram_size is the current maximum size of a datagram for the connection -as described (see Section 14.1 of {{QUIC-TRANSPORT}}). +max_datagram_size is the current maximum size of a datagram for the connection. As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc) From ed3b3f93ef292a596e827e56aab78eca1e2b6688 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 19:57:56 -0400 Subject: [PATCH 08/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index c3a7c2682f..62cedaed3e 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1256,9 +1256,10 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP - overhead. The max datagram size is used for calculating the minimum congestion - window. An endpoint sets the value of this variable based on its PMTU, with a - minimum value of 1200 bytes (see Section 14.1 of {{QUIC-TRANSPORT}}). + overhead. The max datagram size is used for calculating the minimum + congestion window. An endpoint sets the value of this variable based on its + PMTU, with a minimum value of 1200 bytes + (see Section 14.1 of {{QUIC-TRANSPORT}}). ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space From 2d5f46faab5cf09442fff533c89d499e4f80fc6c Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 29 Oct 2019 20:11:37 -0400 Subject: [PATCH 09/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 62cedaed3e..932da46a55 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1256,7 +1256,7 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP - overhead. The max datagram size is used for calculating the minimum + overhead. The max datagram size is used for calculating the minimum congestion window. An endpoint sets the value of this variable based on its PMTU, with a minimum value of 1200 bytes (see Section 14.1 of {{QUIC-TRANSPORT}}). From 52b3c343033b749355dfa8d34421a651f69238e5 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 30 Oct 2019 08:58:30 -0400 Subject: [PATCH 10/13] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 932da46a55..7bc7464da0 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1256,7 +1256,7 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP - overhead. The max datagram size is used for calculating the minimum + overhead. The max datagram size is used for congestion window congestion window. An endpoint sets the value of this variable based on its PMTU, with a minimum value of 1200 bytes (see Section 14.1 of {{QUIC-TRANSPORT}}). From 694975600a94a0244dce16e54559c60fde771c79 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 30 Oct 2019 08:58:37 -0400 Subject: [PATCH 11/13] Update draft-ietf-quic-recovery.md Co-Authored-By: Jana Iyengar --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 7bc7464da0..906e424166 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1257,7 +1257,7 @@ are described in this section. max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for congestion window - congestion window. An endpoint sets the value of this variable based on its + computations. An endpoint sets the value of this variable based on its PMTU, with a minimum value of 1200 bytes (see Section 14.1 of {{QUIC-TRANSPORT}}). From cf63bd95f00d0cf7b48253742237b69f218c24aa Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 30 Oct 2019 08:59:44 -0400 Subject: [PATCH 12/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 906e424166..d1df37ea7b 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1258,8 +1258,8 @@ max_datagram_size: : The sender's current maximum payload size. Does not include UDP or IP overhead. The max datagram size is used for congestion window computations. An endpoint sets the value of this variable based on its - PMTU, with a minimum value of 1200 bytes - (see Section 14.1 of {{QUIC-TRANSPORT}}). + PMTU (see Section 14.1 of {{QUIC-TRANSPORT}}), with a minimum value of + 1200 bytes. ecn_ce_counters\[kPacketNumberSpace]: : The highest value reported for the ECN-CE counter in the packet number space From 373b0abdb02c74076c6dcfa87552e3946bcf1eb2 Mon Sep 17 00:00:00 2001 From: ianswett Date: Thu, 31 Oct 2019 10:46:39 -0400 Subject: [PATCH 13/13] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index d1df37ea7b..4a17109ac4 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -747,7 +747,8 @@ creates a packet burst that might cause short-term congestion and losses. Implementations MUST either use pacing or limit such bursts to the initial congestion window, which is recommended to be the minimum of 10 * max_datagram_size and max(2* max_datagram_size, 14720)), where -max_datagram_size is the current maximum size of a datagram for the connection. +max_datagram_size is the current maximum size of a datagram for the connection, +not including UDP or IP overhead. As an example of a well-known and publicly available implementation of a flow pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc)