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

PTO should always send an ack-eliciting packet #2912

Merged
merged 2 commits into from Jul 21, 2019
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 10 additions & 12 deletions draft-ietf-quic-recovery.md
Expand Up @@ -584,15 +584,13 @@ Because the server could be blocked until more packets are received, the client
MUST ensure that the retransmission timer is set if the client does not yet
have 1-RTT keys. If the probe timer expires before the client has 1-RTT keys,
it is possible that the client may not have any crypto data to retransmit.
However, the client MUST send a new packet, containing only PADDING frames if
necessary, to allow the server to continue sending data. 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.

Because Initial packets containing only PADDING do not elicit an
acknowledgement, they may never be acknowledged, but they are removed from
bytes in flight when the client gets Handshake keys and the Initial keys are
discarded.
However, the client MUST send a new ack-eliciting packet to allow the server
to continue sending data. 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.

Initial packets and Handshake packets may never be acknowledged, but they are
removed from bytes in flight when the Initial and Handshake keys are discarded.

### Sending Probe Packets

Expand Down Expand Up @@ -1229,13 +1227,13 @@ OnLossDetectionTimeout():
// to earn more anti-amplification credit,
// a Handshake packet proves address ownership.
if (has Handshake keys):
SendOneHandshakePacket()
SendOneAckElicitingHandshakePacket()
else:
SendOnePaddedInitialPacket()
SendOneAckElicitingPaddedInitialPacket()
else:
// PTO. Send new data if available, else retransmit old data.
// If neither is available, send a single PING frame.
SendOneOrTwoPackets()
SendOneOrTwoAckElicitingPackets()

pto_count++
SetLossDetectionTimer()
Expand Down