Skip to content

Commit

Permalink
Merge pull request #2327 from quicwg/ianswett-ignore-loss
Browse files Browse the repository at this point in the history
Ignore packet loss when the keys are not available
  • Loading branch information
janaiyengar committed Jan 23, 2019
2 parents 9040bae + 8500665 commit c2ade6b
Showing 1 changed file with 48 additions and 24 deletions.
72 changes: 48 additions & 24 deletions draft-ietf-quic-recovery.md
Expand Up @@ -44,6 +44,23 @@ normative:
org: Mozilla
role: editor

QUIC-TLS:
title: "Using TLS to Secure QUIC"
date: {DATE}
seriesinfo:
Internet-Draft: draft-ietf-quic-tls-latest
author:
-
ins: M. Thomson
name: Martin Thomson
org: Mozilla
role: editor
-
ins: S. Turner
name: Sean Turner
org: sn3rd
role: editor

informative:

FACK:
Expand Down Expand Up @@ -434,14 +451,30 @@ packet is received. The client MAY use this value to seed the RTT estimator for
a subsequent connection attempt to the server.


#### Discarding Initial State {#discard-initial}
#### Discarding Keys and Packet State {#discarding-packets}

When packet protection keys are discarded (see Section 4.9 of {{QUIC-TLS}}), all
packets that were sent with those keys can no longer be acknowledged because
their acknowledgements cannot be processed anymore. The sender considers them no
longer in flight. That is, the sender SHOULD discard all recovery state
associated with those packets and MUST remove them from the count of bytes in
flight.

Endpoints stop sending and receiving Initial packets once they start exchanging
Handshake packets (see Section 17.2.2.1 of {{QUIC-TRANSPORT}}). At this point,
recovery state for all in-flight Initial packets is discarded.

As described in Section 17.5.1 of {{QUIC-TRANSPORT}}, endpoints stop sending and
receiving Initial packets once they start exchanging Handshake packets. At this
point, all loss recovery state for the Initial packet number space is also
discarded. Packets that are in flight for the packet number space are not
declared as either acknowledged or lost. After discarding state, new Initial
packets will not be sent.
When 0-RTT is rejected, recovery state for all in-flight 0-RTT packets is
discarded.

If a server accepts 0-RTT, but does not buffer 0-RTT packets that arrive
before Initial packets, early 0-RTT packets will be declared lost, but that
is expected to be infrequent.

It is expected that keys are discarded after packets encrypted with them would
be acknowledged or declared lost. Initial secrets however might be destroyed
sooner, as soon as handshake keys are available (see Section 4.10 of
{{QUIC-TLS}}).


### Probe Timeout {#pto}
Expand Down Expand Up @@ -952,6 +985,14 @@ The recovery period limits congestion window reduction to once per round trip.
During recovery, the congestion window remains unchanged irrespective of new
losses or increases in the ECN-CE counter.

## Ignoring Loss of Undecryptable Packets

During the handshake, some packet protection keys might not be
available when a packet arrives. In particular, Handshake and 0-RTT packets
cannot be processed until the Initial packets arrive, and 1-RTT packets
cannot be processed until the handshake completes. Endpoints MAY
ignore the loss of Handshake, 0-RTT, and 1-RTT packets that might arrive before
the peer has packet protection keys to process those packets.

## Probe Timeout

Expand Down Expand Up @@ -1006,23 +1047,6 @@ paces the sending of any packets in excess of the initial congestion window.
A sender MAY implement alternate mechanisms to update its congestion window
after idle periods, such as those proposed for TCP in {{?RFC7661}}.

## Discarding Packet Number Space State

When keys for a packet number space are discarded, any in-flight packets
sent with those keys are removed from the count of bytes in flight. Loss
recovery state is also discarded, so no loss events will occur for any
in-flight packets from that space (see {{discard-initial}}). Note that it is
expected that keys are discarded after those packets would be declared lost,
but Initial secrets are destroyed earlier.

When 0-RTT is rejected, all in-flight 0-RTT packets are removed from
the count of bytes in flight. Loss recovery state is also discarded, so no
loss events will occur for any in-flight 0-RTT packets.

If a server accepts 0-RTT, but does not buffer 0-RTT packets that arrive
before Initial packets, early 0-RTT packets will be declared lost, but that
is expected to be infrequent.

## Pseudocode

### Constants of interest {#cc-consts-of-interest}
Expand Down

0 comments on commit c2ade6b

Please sign in to comment.