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

Rewrite of RTT estimation section #2592

Merged
merged 16 commits into from Apr 12, 2019
40 changes: 23 additions & 17 deletions draft-ietf-quic-recovery.md
Expand Up @@ -226,25 +226,11 @@ QUIC supports many ACK ranges, opposed to TCP's 3 SACK ranges. In high loss
environments, this speeds recovery, reduces spurious retransmits, and ensures
forward progress without relying on timeouts.

### Encoding Host Delay {#host-delay}
### Explicit Correction For Delayed Acknowledgements

An endpoint measures the delay incurred between when a packet is received and
when the corresponding acknowledgment is sent. The endpoint encodes this host
delay for the largest acknowledged packet in the Ack Delay field of an ACK frame
(see Section 19.3 of {{QUIC-TRANSPORT}}). This allows the receiver of the ACK
to adjust for any host delays - importantly, for delayed acknowledgements - when
estimating the path RTT. In certain deployments, a packet might be held in the
OS kernel or elsewhere on the host before being processed by the QUIC
stack. Where possible, an endpoint SHOULD include these delays when populating
the Ack Delay field in an ACK frame.

An endpoint MUST NOT excessively delay acknowledgements of ack-eliciting
packets. The maximum ack delay is communicated in the max_ack_delay transport
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.
when the corresponding acknowledgment is sent, allowing a peer to maintain a
more accurate round-trip time estimate (see {{host-delay}}).


# Generating Acknowledgements {#generating-acks}
ianswett marked this conversation as resolved.
Show resolved Hide resolved
Expand Down Expand Up @@ -305,6 +291,26 @@ all subsequent ACK frames containing them could be lost. In this case, the
loss recovery algorithm may cause spurious retransmits, but the sender will
continue making forward progress.

## Measuring and Reporting Host Delay {#host-delay}
ianswett marked this conversation as resolved.
Show resolved Hide resolved

An endpoint measures the delay incurred between when a packet is received and
ianswett marked this conversation as resolved.
Show resolved Hide resolved
when the corresponding acknowledgment is sent. The endpoint encodes this host
delay for the largest acknowledged packet in the Ack Delay field of an ACK frame
(see Section 19.3 of {{QUIC-TRANSPORT}}). This allows the receiver of the ACK
to adjust for any host delays - importantly, for delayed acknowledgements - when
janaiyengar marked this conversation as resolved.
Show resolved Hide resolved
estimating the path RTT. In certain deployments, a packet might be held in the
OS kernel or elsewhere on the host before being processed by the QUIC
stack. Where possible, an endpoint SHOULD include these delays when populating
Copy link
Contributor

Choose a reason for hiding this comment

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

Based on my experience, I might be inclined towards a MAY. Using receive timestamps creates as many(or more) complexities as it solves.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, this is going to need some more work anyway (#2596), but I've changed it to a MAY. What complexities does it create?

the Ack Delay field in an ACK frame.

An endpoint MUST NOT excessively delay acknowledgements of ack-eliciting
packets. The maximum ack delay is communicated in the max_ack_delay transport
parameter, see Section 18.1 of {{QUIC-TRANSPORT}}. max_ack_delay implies an
ianswett marked this conversation as resolved.
Show resolved Hide resolved
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.


# Estimating the Round-Trip Time {#compute-rtt}

Expand Down