Skip to content

Commit

Permalink
Use two bits for key update, lots of new text
Browse files Browse the repository at this point in the history
  • Loading branch information
martinthomson committed Jan 9, 2019
2 parents 4836c87 + c5eb0ed commit 8c72c8d
Show file tree
Hide file tree
Showing 5 changed files with 1,172 additions and 548 deletions.
12 changes: 6 additions & 6 deletions draft-ietf-quic-http.md
Expand Up @@ -159,9 +159,9 @@ the Alt-Svc HTTP response header field or the HTTP/2 ALTSVC frame
({{!ALTSVC=RFC7838}}), using the ALPN token defined in
{{connection-establishment}}.

For example, an origin could indicate in an HTTP/1.1 or HTTP/2 response that
HTTP/3 was available on UDP port 50781 at the same hostname by including the
following header field in any response:
For example, an origin could indicate in an HTTP response that HTTP/3 was
available on UDP port 50781 at the same hostname by including the following
header field:

~~~ example
Alt-Svc: h3=":50781"
Expand Down Expand Up @@ -225,7 +225,7 @@ some other mechanism.

QUIC connections are established as described in {{QUIC-TRANSPORT}}. During
connection establishment, HTTP/3 support is indicated by selecting the ALPN
token "hq" in the TLS handshake. Support for other application-layer protocols
token "h3" in the TLS handshake. Support for other application-layer protocols
MAY be offered in the same handshake.

While connection-level options pertaining to the core QUIC protocol are set in
Expand Down Expand Up @@ -573,8 +573,8 @@ HTTP_UNEXPECTED_FRAME.
### CANCEL_PUSH {#frame-cancel-push}

The CANCEL_PUSH frame (type=0x3) is used to request cancellation of a server
push prior to the push stream being created. The CANCEL_PUSH frame identifies a
server push by Push ID (see {{frame-push-promise}}), encoded as a
push prior to the push stream being received. The CANCEL_PUSH frame identifies
a server push by Push ID (see {{frame-push-promise}}), encoded as a
variable-length integer.

When a server receives this frame, it aborts sending the response for the
Expand Down
52 changes: 35 additions & 17 deletions draft-ietf-quic-recovery.md
Expand Up @@ -496,6 +496,13 @@ MAY use alternate strategies for determining the content of probe packets,
including sending new or retransmitted data based on the application's
priorities.

When a PTO timer expires, new or previously-sent data may not be available to
send and packets may still be in flight. A sender can be blocked from sending
new data in the future if packets are left in flight. Under these conditions, a
sender SHOULD mark any packets still in flight as lost. If a sender wishes to
establish delivery of packets still in flight, it MAY send an ack-eliciting
packet and re-arm the PTO timer instead.


#### Loss Detection {#pto-loss}

Expand Down Expand Up @@ -948,10 +955,15 @@ packets might cause the sender's bytes in flight to exceed the congestion window
until an acknowledgement is received that establishes loss or delivery of
packets.

If a threshold number of consecutive PTOs have occurred (pto_count is more than
When an ACK frame is received that establishes loss of all in-flight packets
sent prior to a threshold number of consecutive PTOs (pto_count is more than
kPersistentCongestionThreshold, see {{cc-consts-of-interest}}), the network is
considered to be experiencing persistent congestion, and the sender's congestion
window MUST be reduced to the minimum congestion window.
window MUST be reduced to the minimum congestion window (kMinimumWindow). This
response of collapsing the congestion window on persistent congestion is
functionally similar to a sender's response on a Retransmission Timeout (RTO) in
TCP {{RFC5681}}.


## Pacing

Expand Down Expand Up @@ -989,12 +1001,20 @@ after idle periods, such as those proposed for TCP in {{?RFC7661}}.

## Discarding Packet Number Space State

When keys for an packet number space are discarded, any packets sent with those
keys are removed from the count of bytes in flight. No loss events will occur
any in-flight packets from that space, as a result of discarding loss recovery
state (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 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

Expand Down Expand Up @@ -1023,15 +1043,13 @@ kLossReductionFactor:
The RECOMMENDED value is 0.5.

kPersistentCongestionThreshold:
: Number of consecutive PTOs after which network is considered to be
experiencing persistent congestion. The rationale for this threshold is to
enable a sender to use initial PTOs for aggressive probing, similar to Tail
Loss Probe (TLP) in TCP {{TLP}} {{RACK}}. Once the number of consecutive PTOs
reaches this threshold - that is, persistent congestion is established - the
sender responds by collapsing its congestion window to kMinimumWindow, similar
to a Retransmission Timeout (RTO) in TCP {{RFC5681}}. The RECOMMENDED value
for kPersistentCongestionThreshold is 2, which is equivalent to having two
TLPs before an RTO in TCP.
: Number of consecutive PTOs required for persistent congestion to be
established. The rationale for this threshold is to enable a sender to use
initial PTOs for aggressive probing, as TCP does with Tail Loss Probe (TLP)
{{TLP}} {{RACK}}, before establishing persistent congestion, as TCP does with
a Retransmission Timeout (RTO) {{?RFC5681}}. The RECOMMENDED value for
kPersistentCongestionThreshold is 2, which is equivalent to having two TLPs
before an RTO in TCP.

### Variables of interest {#vars-of-interest}

Expand Down

0 comments on commit 8c72c8d

Please sign in to comment.