From 672a0b7e01fbfd001bf066b71a2edfff4f4387d8 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Mar 2018 13:37:51 -0400 Subject: [PATCH 01/11] Reference RFC6928 Partially fixes #592 --- draft-ietf-quic-recovery.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index f651ac103a..be31b863b9 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -959,8 +959,9 @@ kDefaultMss (default 1460 bytes): : The default max packet size used for calculating default and minimum congestion windows. -kInitialWindow (default 10 * kDefaultMss): -: Default limit on the amount of outstanding data in bytes. +kInitialWindow (default 14600 bytes): +: Default limit on the initial amount of outstanding data in bytes. + Taken from {{?RFC6928}}. kMinimumWindow (default 2 * kDefaultMss): : Default minimum congestion window. From 1099e081073b330e2cd5ec32a46fb172af4c73b8 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Mar 2018 13:44:37 -0400 Subject: [PATCH 02/11] Reference RFC5681 --- draft-ietf-quic-recovery.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index be31b863b9..8058da93d2 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -955,10 +955,6 @@ 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. -kDefaultMss (default 1460 bytes): -: The default max packet size used for calculating default and minimum - congestion windows. - kInitialWindow (default 14600 bytes): : Default limit on the initial amount of outstanding data in bytes. Taken from {{?RFC6928}}. @@ -975,6 +971,10 @@ kLossReductionFactor (default 0.5): Variables required to implement the congestion control mechanisms are described in this section. +sender_mss: +: The sender's maximum payload size. Does not include UDP or IP + overhead. Similar to SMSS defined for TCP in {{?RFC5681}} + bytes_in_flight: : The sum of the size in bytes of all sent packets that contain at least one retransmittable frame, and have not been acked or declared From bdd2bfe33e9d57edfb4ebfb64f58d7d6e022ac67 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 20 Mar 2018 13:47:44 -0400 Subject: [PATCH 03/11] Update pseudocode --- draft-ietf-quic-recovery.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 8058da93d2..7ee22f7cd9 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -959,9 +959,6 @@ kInitialWindow (default 14600 bytes): : Default limit on the initial amount of outstanding data in bytes. Taken from {{?RFC6928}}. -kMinimumWindow (default 2 * kDefaultMss): -: Default minimum congestion window. - kLossReductionFactor (default 0.5): : Reduction in congestion window when a new loss event is detected. @@ -975,6 +972,9 @@ sender_mss: : The sender's maximum payload size. Does not include UDP or IP overhead. Similar to SMSS defined for TCP in {{?RFC5681}} +minimum_window : +: Minimum congestion window. Set to 2 * sender_mss. + bytes_in_flight: : The sum of the size in bytes of all sent packets that contain at least one retransmittable frame, and have not been acked or declared @@ -1001,6 +1001,7 @@ variables as follows: ~~~ congestion_window = kInitialWindow + minimum_window = 2 * sender_mss bytes_in_flight = 0 end_of_recovery = 0 ssthresh = infinite @@ -1037,7 +1038,7 @@ acked_packet from sent_packets. else: // Congestion avoidance. congestion_window += - kDefaultMss * acked_packet.bytes / congestion_window + sender_mss * acked_packet.bytes / congestion_window ~~~ ### On Packets Lost @@ -1056,7 +1057,7 @@ are detected lost. if (!InRecovery(largest_lost_packet.packet_number)): end_of_recovery = largest_sent_packet congestion_window *= kLossReductionFactor - congestion_window = max(congestion_window, kMinimumWindow) + congestion_window = max(congestion_window, minimum_window) ssthresh = congestion_window ~~~ @@ -1067,7 +1068,7 @@ retransmission timeout has been verified. ~~~ OnRetransmissionTimeoutVerified() - congestion_window = kMinimumWindow + congestion_window = minimum_window ~~~ # IANA Considerations From 437b60b5ed1d2a2bc6bf041f27ab56a804ff7427 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 14:38:33 -0400 Subject: [PATCH 04/11] 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 4b0fae3b9e..99c57b632c 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1002,7 +1002,7 @@ kInitialMss (RECOMMENDED 1460 bytes): : The max packet size is used for calculating initial and minimum congestion windows. -kInitialWindow (default 14600 bytes): +kInitialWindow (RECOMMENDED min (10*MSS, max (2*MSS, 14600))): : Default limit on the initial amount of outstanding data in bytes. Taken from {{?RFC6928}}. From 2b5af83077beac4bd8d5d8b8473a4fc8eb3e6c96 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 14:40:45 -0400 Subject: [PATCH 05/11] max_datagram_size --- draft-ietf-quic-recovery.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 99c57b632c..93ec972983 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1018,12 +1018,12 @@ kLossReductionFactor (RECOMMENDED 0.5): Variables required to implement the congestion control mechanisms are described in this section. -sender_mss: +max_datagram_size: : The sender's maximum payload size. Does not include UDP or IP overhead. Similar to SMSS defined for TCP in {{?RFC5681}} minimum_window : -: Minimum congestion window. Set to 2 * sender_mss. +: Minimum congestion window. Set to 2 * max_datagram_size. ecn_ce_counter: @@ -1058,7 +1058,7 @@ variables as follows: ~~~ congestion_window = kInitialWindow - minimum_window = 2 * sender_mss + minimum_window = 2 * max_datagram_size bytes_in_flight = 0 end_of_recovery = 0 ssthresh = infinite @@ -1096,7 +1096,7 @@ acked_packet from sent_packets. else: // Congestion avoidance. congestion_window += - sender_mss * acked_packet.bytes / congestion_window + max_datagram_size * acked_packet.bytes / congestion_window ~~~ ### On New Congestion Event From dcfb306b7ce4c052eabd9a1c05397426723871eb Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 14:53:56 -0400 Subject: [PATCH 06/11] kMaxDatagramSize --- draft-ietf-quic-recovery.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 93ec972983..59604e9cce 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -998,15 +998,17 @@ 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. -kInitialMss (RECOMMENDED 1460 bytes): -: The max packet size is used for calculating initial and minimum - congestion windows. +kMaxDatagramSize (RECOMMENDED 1200 bytes): +: 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. -kInitialWindow (RECOMMENDED min (10*MSS, max (2*MSS, 14600))): +kInitialWindow (RECOMMENDED min(10 * kMaxDatagramSize, + max(2* kMaxDatagramSize, 14600))): : Default limit on the initial amount of outstanding data in bytes. Taken from {{?RFC6928}}. -kMinimumWindow (RECOMMENDED 2 * kInitialMss): +kMinimumWindow (RECOMMENDED 2 * kMaxDatagramSize): : Minimum congestion window in bytes. kLossReductionFactor (RECOMMENDED 0.5): @@ -1018,13 +1020,6 @@ kLossReductionFactor (RECOMMENDED 0.5): Variables required to implement the congestion control mechanisms are described in this section. -max_datagram_size: -: The sender's maximum payload size. Does not include UDP or IP - overhead. Similar to SMSS defined for TCP in {{?RFC5681}} - -minimum_window : -: Minimum congestion window. Set to 2 * max_datagram_size. - ecn_ce_counter: : The highest value reported for the ECN-CE counter by the peer in an ACK_ECN From a89af60b695422b589760bd2727b3d4839a9c671 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 14:55:21 -0400 Subject: [PATCH 07/11] 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 59604e9cce..ae72116678 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1053,7 +1053,7 @@ variables as follows: ~~~ congestion_window = kInitialWindow - minimum_window = 2 * max_datagram_size + minimum_window = 2 * kMaxDatagramSize bytes_in_flight = 0 end_of_recovery = 0 ssthresh = infinite @@ -1091,7 +1091,7 @@ acked_packet from sent_packets. else: // Congestion avoidance. congestion_window += - max_datagram_size * acked_packet.bytes / congestion_window + kMaxDatagramSize * acked_packet.bytes / congestion_window ~~~ ### On New Congestion Event From a660cfd1bf38f212d95b9afdcc06dc49beacdacc Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 14:56:29 -0400 Subject: [PATCH 08/11] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index ae72116678..b7b0909a3d 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1053,7 +1053,6 @@ variables as follows: ~~~ congestion_window = kInitialWindow - minimum_window = 2 * kMaxDatagramSize bytes_in_flight = 0 end_of_recovery = 0 ssthresh = infinite @@ -1106,7 +1105,7 @@ detected. Starts a new recovery period and reduces the congestion window. if (!InRecovery(packet_number)): end_of_recovery = largest_sent_packet congestion_window *= kMarkReductionFactor - congestion_window = max(congestion_window, minimum_window) + congestion_window = max(congestion_window, kMinimumWindow) ~~~ ### Process ECN Information @@ -1149,7 +1148,7 @@ retransmission timeout has been verified. ~~~ OnRetransmissionTimeoutVerified() - congestion_window = minimum_window + congestion_window = kMinimumWindow ~~~ # IANA Considerations From e5476589706ae5c7d6fc81ee4bbac8351ee6fdf8 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 15:15:12 -0400 Subject: [PATCH 09/11] 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 b7b0909a3d..cb80e4094d 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1003,7 +1003,7 @@ kMaxDatagramSize (RECOMMENDED 1200 bytes): overhead. The max packet size is used for calculating initial and minimum congestion windows. -kInitialWindow (RECOMMENDED min(10 * kMaxDatagramSize, +kInitialWindow (RECOMMENDED min(10 * kMaxDatagramSize, max(2* kMaxDatagramSize, 14600))): : Default limit on the initial amount of outstanding data in bytes. Taken from {{?RFC6928}}. From b96762e047d8bf6af9d5079d32ced4818cef19bd Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 15:20:14 -0400 Subject: [PATCH 10/11] 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 cb80e4094d..8b53eb0285 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1001,7 +1001,7 @@ in order to better suit a variety of environments. kMaxDatagramSize (RECOMMENDED 1200 bytes): : 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. + minimum congestion windows. kInitialWindow (RECOMMENDED min(10 * kMaxDatagramSize, max(2* kMaxDatagramSize, 14600))): From 9570a812923a00933fdbdc29563a4d89cf10ff20 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 14 Jul 2018 15:22:49 -0400 Subject: [PATCH 11/11] 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 8b53eb0285..1a0d332a87 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1089,8 +1089,8 @@ acked_packet from sent_packets. congestion_window += acked_packet.bytes else: // Congestion avoidance. - congestion_window += - kMaxDatagramSize * acked_packet.bytes / congestion_window + congestion_window += kMaxDatagramSize * acked_packet.bytes + / congestion_window ~~~ ### On New Congestion Event