Skip to content

Commit

Permalink
Merge pull request #2646 from marten-seemann/max-ack-delay-initialisa…
Browse files Browse the repository at this point in the history
…tion

use max_ack_delay = 0 before receving the TPs
  • Loading branch information
janaiyengar committed May 7, 2019
2 parents 9a37401 + b466b28 commit 06e5b95
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 12 deletions.
14 changes: 9 additions & 5 deletions draft-ietf-quic-recovery.md
Expand Up @@ -309,7 +309,7 @@ parameter, see Section 18.1 of {{QUIC-TRANSPORT}}. max_ack_delay implies an
explicit contract: an endpoint promises to never delay acknowledgments of an
ack-eliciting packet by more than the indicated value. If it does, any excess
accrues to the RTT estimate and could result in spurious retransmissions from
the peer.
the peer. For Initial and Handshake packets, a max_ack_delay of 0 is used.


# Estimating the Round-Trip Time {#compute-rtt}
Expand Down Expand Up @@ -1026,9 +1026,9 @@ min_rtt:

max_ack_delay:
: The maximum amount of time by which the receiver intends to delay
acknowledgments, in milliseconds. The actual ack_delay in a
received ACK frame may be larger due to late timers, reordering,
or lost ACKs.
acknowledgments for packets in the ApplicationData packet number space. The
actual ack_delay in a received ACK frame may be larger due to late timers,
reordering, or lost ACKs.

loss_time\[kPacketNumberSpace]:
: The time at which the next packet in that packet number space will be
Expand All @@ -1052,6 +1052,7 @@ follows:
smoothed_rtt = 0
rttvar = 0
min_rtt = 0
max_ack_delay = 0
time_of_last_sent_ack_eliciting_packet = 0
time_of_last_sent_crypto_packet = 0
for pn_space in [ Initial, Handshake, ApplicationData ]:
Expand Down Expand Up @@ -1112,7 +1113,10 @@ OnAckReceived(ack, pn_space):
IncludesAckEliciting(newly_acked_packets))
latest_rtt =
now - sent_packets[pn_space][ack.largest_acked].time_sent
UpdateRtt(ack.ack_delay)
ack_delay = 0
if pn_space == ApplicationData:
ack_delay = ack.ack_delay
UpdateRtt(ack_delay)

// Process ECN information if present.
if (ACK frame contains ECN information):
Expand Down
13 changes: 6 additions & 7 deletions draft-ietf-quic-transport.md
Expand Up @@ -4171,9 +4171,8 @@ ack_delay_exponent (0x000a):

: The ACK delay exponent is an integer value indicating an
exponent used to decode the ACK Delay field in the ACK frame ({{frame-ack}}).
If this value is absent, a default value of 3 is assumed
(indicating a multiplier of 8). The default value is also used for ACK frames
that are sent in Initial and Handshake packets. Values above 20 are invalid.
If this value is absent, a default value of 3 is assumed (indicating a
multiplier of 8). Values above 20 are invalid.

max_ack_delay (0x000b):

Expand Down Expand Up @@ -4334,10 +4333,10 @@ ACK Delay:
in the Largest Acknowledged field, was received by this peer. The value of
the ACK Delay field is scaled by multiplying the encoded value by 2 to the
power of the value of the `ack_delay_exponent` transport parameter set by the
sender of the ACK frame. The `ack_delay_exponent` defaults to 3, or a
multiplier of 8 (see {{transport-parameter-definitions}}). Scaling in this
fashion allows for a larger range of values with a shorter encoding at the
cost of lower resolution.
sender of the ACK frame (see {{transport-parameter-definitions}}). Scaling in
this fashion allows for a larger range of values with a shorter encoding at
the cost of lower resolution. Because the receiver doesn't use the ACK Delay
for Initial and Handshake packets, a sender SHOULD send a value of 0.

ACK Range Count:

Expand Down

0 comments on commit 06e5b95

Please sign in to comment.