Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explain asymmetric confirmation condition #2881

Closed
wants to merge 9 commits into from
19 changes: 13 additions & 6 deletions draft-ietf-quic-recovery.md
Expand Up @@ -532,11 +532,18 @@ a PATH_RESPONSE to seed initial_rtt for a new path, but the delay SHOULD NOT
be considered an RTT sample.

When a crypto packet is sent, the sender MUST set a timer for twice the smoothed
RTT. This timer MUST be updated when a new crypto packet is sent and when
an acknowledgement is received which computes a new RTT sample. Upon timeout,
the sender MUST retransmit all unacknowledged CRYPTO data if possible. The
sender MUST NOT declare in-flight crypto packets as lost when the crypto timer
expires.
RTT. This timer MUST be updated when a new crypto packet is sent and when an
acknowledgement is received that produces a new RTT sample. Upon timeout, the
sender MUST retransmit unacknowledged cryptographic handshake data. The sender
MUST NOT declare in-flight crypto packets as lost when the crypto timer expires.

If the handshake is complete, but not confirmed (see Section 4.1.1 and Section
4.1.2 of {{QUIC-TLS}}), in addition to sending unacknowledged crytographic
handshake data, endpoints SHOULD send an ack-eliciting 1-RTT packet. This can
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handshake data, endpoints SHOULD send an ack-eliciting 1-RTT packet. This can
Handshake data, endpoints SHOULD send an ack-eliciting 1-RTT packet. This can

be coalesced with Handshake packets, even if there is sufficient unacknowledged
cryptographic handshake data outstanding to consume the entire PMTU. Sending an
ack-eliciting 1-RTT packet provides a peer with the opportunity to confirm the
handshake and allow all state associated with Handshake packets to be discarded.

On each consecutive expiration of the crypto timer without receiving an
acknowledgement for a new packet, the sender MUST double the crypto
Expand Down Expand Up @@ -1273,7 +1280,7 @@ OnLossDetectionTimeout():
// and there is crypto data to retransmit.
else if (has unacknowledged crypto data):
// Crypto retransmission timeout.
RetransmitUnackedCryptoData()
RetransmitUnackedCryptoDataAnd1Rtt()
crypto_count++
else if (endpoint is client without 1-RTT keys):
// Client sends an anti-deadlock packet: Initial is padded
Expand Down
9 changes: 9 additions & 0 deletions draft-ietf-quic-tls.md
Expand Up @@ -391,6 +391,15 @@ sent with 1-RTT keys, and the highest value of the Largest Acknowledged field
in any received 1-RTT ACK frame: once the latter is higher than or equal to the
former, the handshake is confirmed.

Note:

: Unless ack-eliciting packets protected by 1-RTT keys are sent by an endpoint,
the handshake might never be confirmed by an endpoint. If the peer does
confirm the handshake, this could result in perpetual retransmission of
Handshake packets, which cannot be acknowledged. To avoid this problem, in
ianswett marked this conversation as resolved.
Show resolved Hide resolved
addition to retransmitting Handshake packets, endpoints can send ack-eliciting
packets after the handshake is complete until the handshake is confirmed.


### Sending and Receiving Handshake Messages

Expand Down