From cb3e9a4961fffdba7493a77b0db2d73f63f072ca Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 28 Apr 2020 14:01:44 -0400 Subject: [PATCH 1/3] Clarify anti-deadlock Handshake PTO This is what the pseudocode says, but I couldn't find anywhere in the text that clarified that if there were no ack-eliciting packets to arm PTO from, use Now(). --- draft-ietf-quic-recovery.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 1f5f5f38f2..b4aff7c8bc 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -568,6 +568,11 @@ until it is certain that the server has finished its address validation probe timer if the client has not received an acknowledgement for one of its Handshake or 1-RTT packets, and has not received a HANDSHAKE_DONE frame. +A client could have received and acknowledged a Handshake packet, but not +sent any ack-eliciting Handshake packets. In this case, the PTO is set +from the current time, rather than the time an ack-eliciting Handshake packet +was sent. + ### Speeding Up Handshake Completion When a server receives an Initial packet containing duplicate CRYPTO data, From 05c12786fd19607933556d87eb28bfe1111b6c27 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 28 Apr 2020 14:08:40 -0400 Subject: [PATCH 2/3] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index b4aff7c8bc..90ed11ee3f 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -539,10 +539,7 @@ for a new path, but the delay SHOULD NOT be considered an RTT sample. Prior to handshake completion, when few to none RTT samples have been generated, it is possible that the probe timer expiration is due to an incorrect RTT estimate at the client. To allow the client to improve its RTT -estimate, the new packet that it sends MUST be ack-eliciting. If Handshake -keys are available to the client, it MUST send a Handshake packet, and -otherwise it MUST send an Initial packet in a UDP datagram of at least 1200 -bytes. +estimate, the new packet that it sends MUST be ack-eliciting. Initial packets and Handshake packets could be never acknowledged, but they are removed from bytes in flight when the Initial and Handshake keys are discarded, @@ -567,11 +564,13 @@ until it is certain that the server has finished its address validation (see Section 8 of {{QUIC-TRANSPORT}}). That is, the client MUST set the probe timer if the client has not received an acknowledgement for one of its Handshake or 1-RTT packets, and has not received a HANDSHAKE_DONE frame. +If Handshake keys are available to the client, it MUST send a Handshake +packet, and otherwise it MUST send an Initial packet in a UDP datagram of +at least 1200 bytes. -A client could have received and acknowledged a Handshake packet, but not -sent any ack-eliciting Handshake packets. In this case, the PTO is set -from the current time, rather than the time an ack-eliciting Handshake packet -was sent. +A client could have received and acknowledged a Handshake packet, causing it to +discard state for the Initial packet number space, but not sent any ack-eliciting +Handshake packets. In this case, the PTO is set from the current time. ### Speeding Up Handshake Completion From eac517cfa6e3e58dd1caf817ee2218513204b905 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 28 Apr 2020 14:10:14 -0400 Subject: [PATCH 3/3] 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 90ed11ee3f..5330b24f3e 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -569,8 +569,9 @@ packet, and otherwise it MUST send an Initial packet in a UDP datagram of at least 1200 bytes. A client could have received and acknowledged a Handshake packet, causing it to -discard state for the Initial packet number space, but not sent any ack-eliciting -Handshake packets. In this case, the PTO is set from the current time. +discard state for the Initial packet number space, but not sent any +ack-eliciting Handshake packets. In this case, the PTO is set from the current +time. ### Speeding Up Handshake Completion