@@ -175,8 +175,8 @@ min_ack_delay (0xff04de1b):
175
175
: A variable-length integer representing the minimum amount of time in
176
176
microseconds by which the endpoint that is sending this value is able to
177
177
delay an acknowledgment. This limit could be based on the receiver's clock
178
- or timer granularity. ' min_ack_delay' is used by the peer to avoid requesting
179
- too small a value in the Request Max Ack Delay field of the ACK_FREQUENCY
178
+ or timer granularity. min_ack_delay is used by the peer to avoid requesting
179
+ too small a value in the Requested Max Ack Delay field of the ACK_FREQUENCY
180
180
frame.
181
181
182
182
An endpoint's min_ack_delay MUST NOT be greater than its max_ack_delay.
@@ -213,7 +213,7 @@ ACK_FREQUENCY Frame {
213
213
Type (i) = 0xaf,
214
214
Sequence Number (i),
215
215
Ack-Eliciting Threshold (i),
216
- Request Max Ack Delay (i),
216
+ Requested Max Ack Delay (i),
217
217
Reordering Threshold (i),
218
218
}
219
219
~~~
@@ -240,16 +240,16 @@ Ack-Eliciting Threshold:
240
240
endpoint sends an ACK frame for every other ack-eliciting packet, as specified in
241
241
{{Section 13.2.2 of QUIC-TRANSPORT}}, which corresponds to a value of 1.
242
242
243
- Request Max Ack Delay :
243
+ Requested Max Ack Delay :
244
244
245
245
: A variable-length integer representing the value to which the endpoint
246
- requests the peer update its ` max_ack_delay`
246
+ requests the peer update its max_ack_delay
247
247
({{Section 18.2 of QUIC-TRANSPORT}}). The value of this field is in
248
- microseconds, unlike the ' max_ack_delay' transport parameter, which is in
249
- milliseconds. Sending a value smaller than the ` min_ack_delay` advertised
248
+ microseconds, unlike the max_ack_delay transport parameter, which is in
249
+ milliseconds. Sending a value smaller than the min_ack_delay advertised
250
250
by the peer is invalid. Receipt of an invalid value MUST be treated as a
251
251
connection error of type TRANSPORT_PARAMETER_ERROR. On receiving a valid value in
252
- this field, the endpoint MUST update its ` max_ack_delay` to the value provided
252
+ this field, the endpoint MUST update its max_ack_delay to the value provided
253
253
by the peer.
254
254
255
255
Reordering Threshold :
@@ -305,14 +305,14 @@ IMMEDIATE_ACK Frame {
305
305
Prior to receiving an ACK_FREQUENCY frame, endpoints send acknowledgments as
306
306
specified in {{Section 13.2.1 of QUIC-TRANSPORT}}.
307
307
308
- On receiving an ACK_FREQUENCY frame and updating its ` max_ack_delay`
309
- and ` Ack-Eliciting Threshold` values ({{ack-frequency-frame}}), the endpoint sends an
308
+ On receiving an ACK_FREQUENCY frame and updating its max_ack_delay
309
+ and Ack-Eliciting Threshold values ({{ack-frequency-frame}}), the endpoint sends an
310
310
acknowledgment when one of the following conditions are met :
311
311
312
312
- Since the last acknowledgment was sent, the number of received ack-eliciting
313
- packets is greater than the ` Ack-Eliciting Threshold` .
313
+ packets is greater than the Ack-Eliciting Threshold.
314
314
315
- - Since the last acknowledgment was sent, ` max_ack_delay` amount of time has
315
+ - Since the last acknowledgment was sent, max_ack_delay amount of time has
316
316
passed.
317
317
318
318
{{out-of-order}}, {{congestion}}, and {{batch}} describe exceptions to this
@@ -334,14 +334,14 @@ send an acknowledgment immediately on receiving a reordered ack-eliciting
334
334
packet. This extension modifies that behavior when an ACK_FREQUENCY frame with
335
335
a Reordering Threshold value other than 1 has been received.
336
336
337
- If the most recent ACK_FREQUENCY frame received from the peer has a ` Reordering
338
- Threshold` value of 0, the endpoint SHOULD NOT send an immediate
337
+ If the most recent ACK_FREQUENCY frame received from the peer has a Reordering
338
+ Threshold value of 0, the endpoint SHOULD NOT send an immediate
339
339
acknowledgment in response to packets received out of order, and instead
340
- rely on the peer's ` Ack-Eliciting Threshold` and `max_ack_delay` thresholds
340
+ rely on the peer's Ack-Eliciting Threshold and Requested Max Ack Delay
341
341
for sending acknowledgments.
342
342
343
- If the most recent ACK_FREQUENCY frame received from the peer has a ` Reordering
344
- Threshold` value larger than 1, the endpoint tests the amount of reordering
343
+ If the most recent ACK_FREQUENCY frame received from the peer has a Reordering
344
+ Threshold value larger than 1, the endpoint tests the amount of reordering
345
345
before deciding to send an acknowledgment. The specification uses the following
346
346
definitions :
347
347
@@ -363,7 +363,7 @@ An endpoint that receives an ACK_FREQUENCY frame with a non-zero Reordering
363
363
Threshold value SHOULD send an immediate ACK when the gap
364
364
between the smallest Unreported Missing packet and the Largest Unacked is greater
365
365
than or equal to the Reordering Threshold value. Sending this additional ACK will
366
- reset the ` max_ack_delay` timer and ` Ack-Eliciting Threshold` counter (as any ACK
366
+ reset the max_ack_delay timer and Ack-Eliciting Threshold counter (as any ACK
367
367
would do).
368
368
369
369
See {{examples}} for examples explaining this behavior. See {{set-threshold}}
@@ -373,9 +373,9 @@ ACK_FREQUENCY frames.
373
373
# ## Examples {#examples}
374
374
375
375
When the reordering threshold is 1, any time a packet is received
376
- and there is a missing packet, an immediate ACK is sent.
376
+ and there is a missing packet, an immediate acknowledgement is sent.
377
377
378
- If the reordering theshold is 3 and ACKs are only sent due to reordering :
378
+ If the reordering theshold is 3 and acknowledgements are only sent due to reordering :
379
379
380
380
~~~
381
381
Receive 1
@@ -387,7 +387,7 @@ If the reordering theshold is 3 and ACKs are only sent due to reordering:
387
387
Receive 10 -> Send ACK because of 7
388
388
~~~
389
389
390
- If the reordering threshold is 5 and ACKs are only sent due to reordering :
390
+ If the reordering threshold is 5 and acknowledgements are only sent due to reordering :
391
391
392
392
~~~
393
393
Receive 1
@@ -403,7 +403,7 @@ If the reordering threshold is 5 and ACKs are only sent due to reordering:
403
403
404
404
To ensure timely loss detection, it is optimal to send a Reordering
405
405
Threshold value of 1 less than the packet threshold used by the data sender for
406
- loss detection. If the threshold is smaller, an ACK frame is sent before the
406
+ loss detection. If the threshold is smaller, an acknowledgement is (unnecessarily) sent before the
407
407
packet can be declared lost based on the packet threshold. If the value is
408
408
larger, it causes unnecessary delays. ({{Section 18.2 of QUIC-RECOVERY}})
409
409
recommends a default packet threshold for loss detection of 3, equivalent to
@@ -429,34 +429,34 @@ in response, as stated in {{Section 13.2.2 of QUIC-TRANSPORT}}.
429
429
430
430
# Computation of Probe Timeout Period
431
431
432
- On sending an update to the peer's ` max_ack_delay` , an endpoint can use this new
432
+ On sending an update to the peer's max_ack_delay, an endpoint can use this new
433
433
value in later computations of its Probe Timeout (PTO) period; see {{Section 5.2.1
434
434
of QUIC-RECOVERY}}.
435
435
436
436
Until the packet carrying the ACK_FREQUENCY frame is acknowledged, the endpoint
437
- MUST use the greater of the current ` max_ack_delay` and the value that is in flight
437
+ MUST use the greater of the current max_ack_delay and the value that is in flight
438
438
when computing the PTO period. Doing so avoids spurious PTOs that can be caused by
439
- an update that decreases the peer's ` max_ack_delay` .
439
+ an update that decreases the peer's max_ack_delay.
440
440
441
441
While it is expected that endpoints will have only one ACK_FREQUENCY frame in
442
442
flight at any given time, this extension does not prohibit having more than one
443
- in flight. When using ` max_ack_delay` for PTO computations, endpoints MUST use
443
+ in flight. When using max_ack_delay for PTO computations, endpoints MUST use
444
444
the maximum of the current value and all those in flight.
445
445
446
446
When the number of in-flight ack-eliciting packets is larger than the
447
447
ACK-Eliciting Threshold, an endpoint can expect that the peer will not need to
448
- wait for its ` max_ack_delay` period before sending an acknowledgment. In such
449
- cases, the endpoint MAY therefore exclude the peer's ' max_ack_delay' from its PTO
448
+ wait for its max_ack_delay period before sending an acknowledgment. In such
449
+ cases, the endpoint MAY therefore exclude the peer's max_ack_delay from its PTO
450
450
calculation. When Reordering Threshold is set to 0 and loss causes the peer to
451
451
not receive enough packets to trigger an immediate acknowledgment, the receiver
452
- will wait ' max_ack_delay' , increasing the chances of a premature PTO.
452
+ will wait max_ack_delay, increasing the chances of a premature PTO.
453
453
Therefore, if Reordering Threshold is set to 0, the PTO MUST be larger than the
454
- peer's ' max_ack_delay' .
454
+ peer's max_ack_delay.
455
455
456
456
When sending PTO packets, one can include an IMMEDIATE_ACK frame to elicit an
457
457
immediate acknowledgment. This avoids waiting the ack delay for
458
458
acknowledgments of PTO packets, reducing tail latency and allowing the sender
459
- to exclude the peer's ' max_ack_delay' from subsequent PTO calculations.
459
+ to exclude the peer's max_ack_delay from subsequent PTO calculations.
460
460
461
461
# Determining Acknowledgment Frequency {#implementation}
462
462
@@ -476,19 +476,20 @@ To limit the consequences of reduced acknowledgment frequency, a sender
476
476
can cause a receiver to send an acknowledgment at least once per round trip
477
477
when there are ack-eliciting packets in flight.
478
478
479
- A sender can accomplish this by setting the Request Max Ack
479
+ A sender can accomplish this by setting the Requested Max Ack
480
480
Delay value to no more than the estimated round trip time.
481
481
The sender can also improve feedback and robustness to
482
482
variation in the path RTT by setting the Ack-Eliciting Threshold
483
483
to a value no larger than the current congestion window. Alternatively,
484
484
a sender can accomplish this by sending an IMMEDIATE_ACK frame once each
485
485
round trip time, although if the packet containing an IMMEDIATE_ACK is lost,
486
- detection of that loss will be delayed by the reordering threshold or requested
487
- max ack delay .
486
+ detection of that loss will be delayed by the Reordering Threshold or Requested
487
+ Max Ack Delay .
488
488
489
- When setting the Request Max Ack Delay as a function of RTT, it is usually
490
- better to use the Smoothed RTT ({{Section 5.3 of QUIC-RECOVERY}}) or another
491
- estimate of the typical round trip time, but not Min RTT. This avoids eliciting an
489
+ When setting the Requested Max Ack Delay as a function of the RTT, it is usually
490
+ better to use the Smoothed RTT (smoothed_rtt) ({{Section 5.3 of QUIC-RECOVERY}}) or another
491
+ estimate of the typical RTT, but not the minimum RTT (min_rtt)
492
+ ({{Section 5.2 of QUIC-RECOVERY}}). This avoids eliciting an
492
493
unnecessarily high number of acknowledgments when min_rtt is much smaller than
493
494
smoothed_rtt.
494
495
@@ -497,7 +498,7 @@ connection and therefore might require sending frequent ACK_FREQUENCY frames to
497
498
ensure optimal performance.
498
499
499
500
It is possible that the RTT is smaller than the receiver's timer granularity,
500
- as communicated via the ' min_ack_delay' transport parameter, preventing the
501
+ as communicated via the min_ack_delay transport parameter, preventing the
501
502
receiver from sending an acknowledgment every RTT in time unless packets are
502
503
acknowledged immediately. In these cases, Reordering Threshold values other than 1
503
504
can delay loss detection more than an RTT.
@@ -518,7 +519,7 @@ buffered to be sent, a sender can send an IMMEDIATE_ACK frame with the last data
518
519
packet before an idle period to avoid waiting for the ack delay.
519
520
520
521
If there are no inflight packets, no acknowledgments will be received for at least
521
- a round trip when sending resumes. The Max Ack Delay and Ack-Eliciting Threshold
522
+ a round trip when sending resumes. The max_ack_delay and Ack-Eliciting Threshold
522
523
values used by the receiver can further delay acknowledgments. In this case, the
523
524
sender can include an IMMEDIATE_ACK or ACK_FREQUENCY frame in the first
524
525
Ack-Eliciting packet to avoid waiting for substantially more than a round trip
@@ -545,8 +546,8 @@ acknowledgment therefore delays this method of detecting losses.
545
546
Reducing acknowledgment frequency reduces the number of RTT samples that a
546
547
sender receives ({{Section 5 of QUIC-RECOVERY}}), making a sender's RTT estimate
547
548
less responsive to changes in the path's RTT. As a result, any mechanisms that
548
- rely on an accurate RTT estimate, such as time-threshold loss detection ({{Section
549
- 6.1.2 of QUIC-RECOVERY}}) or Probe Timeout ({{Section 6.2 of QUIC-RECOVERY}}),
549
+ rely on an accurate RTT estimate, such as time-threshold-based loss detection ({{Section
550
+ 6.1.2 of QUIC-RECOVERY}}) or the Probe Timeout (PTO) ({{Section 6.2 of QUIC-RECOVERY}}),
550
551
will be less responsive to changes in the path's RTT, resulting in either
551
552
delayed or unnecessary packet transmissions.
552
553
0 commit comments