From 7c20ae7a1f907d94fbf5c0957858686140256a1e Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 18 Jul 2018 15:45:29 -0400 Subject: [PATCH 1/4] Remove packets from flight when RTO is verified Fixes #935 --- draft-ietf-quic-recovery.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 5a83fe71e4..511ebcb61b 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1024,7 +1024,6 @@ Variables required to implement the congestion control mechanisms are described in this section. ecn_ce_counter: - : The highest value reported for the ECN-CE counter by the peer in an ACK_ECN frame. This variable is used to detect increases in the reported ECN-CE counter. @@ -1098,7 +1097,7 @@ acked_packet from sent_packets. ### On New Congestion Event -Invoked from ProcessECN and OnPacketLost when a new congestion event is +Invoked from ProcessECN and OnPacketsLost when a new congestion event is detected. Starts a new recovery period and reduces the congestion window. ~~~ @@ -1147,11 +1146,17 @@ are detected lost. ### On Retransmission Timeout Verified QUIC decreases the congestion window to the minimum value once the -retransmission timeout has been verified. +retransmission timeout has been verified and removes any packets +sent before the newly acknowledged RTO packet. ~~~ - OnRetransmissionTimeoutVerified() + OnRetransmissionTimeoutVerified(packet_number) congestion_window = kMinimumWindow + // Declare all packets prior to packet_number lost. + for (sent_packet: sent_packets): + if (sent_packet.packet_number < packet_number): + bytes_in_flight -= lost_packet.bytes + sent_packets.remove(sent_packet.packet_number) ~~~ # Security Considerations From 710c52ed7e7700acbf8e1d80aa2a30b75c234be0 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 18 Jul 2018 15:48:15 -0400 Subject: [PATCH 2/4] 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 511ebcb61b..7e67476a4b 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1147,7 +1147,7 @@ are detected lost. QUIC decreases the congestion window to the minimum value once the retransmission timeout has been verified and removes any packets -sent before the newly acknowledged RTO packet. +sent before the newly acknowledged RTO packet. ~~~ OnRetransmissionTimeoutVerified(packet_number) From 02077dce0f5859fd0ff90da372115102e482d97b Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 18 Jul 2018 22:55:22 -0400 Subject: [PATCH 3/4] 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 7e67476a4b..fd763b74a2 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -729,7 +729,7 @@ Pseudocode for OnPacketAcked follows: // was spurious. Otherwise, inform congestion control. if (rto_count > 0 && acked_packet.packet_number > largest_sent_before_rto) - OnRetransmissionTimeoutVerified() + OnRetransmissionTimeoutVerified(acket_packet.packet_number) handshake_count = 0 tlp_count = 0 rto_count = 0 From bf18809ccbe032ada3ac9dcd4450c4d832d5a02d Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 18 Jul 2018 23:01:09 -0400 Subject: [PATCH 4/4] Update draft-ietf-quic-recovery.md --- 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 fd763b74a2..3b6c866976 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -728,8 +728,9 @@ Pseudocode for OnPacketAcked follows: // If a packet sent prior to RTO was acked, then the RTO // was spurious. Otherwise, inform congestion control. if (rto_count > 0 && - acked_packet.packet_number > largest_sent_before_rto) - OnRetransmissionTimeoutVerified(acket_packet.packet_number) + acked_packet.packet_number > largest_sent_before_rto): + OnRetransmissionTimeoutVerified( + acket_packet.packet_number) handshake_count = 0 tlp_count = 0 rto_count = 0