QUIC: disabled non-immediate ACKs for Initial and Handshake.

As per quic-transport-33:

   An endpoint MUST acknowledge all ack-eliciting Initial and Handshake
   packets immediately

If a packet carrying Initial or Handshake ACK was lost, a non-immediate ACK
should not be sent later.  Instead, client is expected to send a new packet
to acknowledge.

Sending non-immediate ACKs for Initial packets can cause the client to
generate an inflated RTT sample.
This commit is contained in:
Roman Arutyunyan 2021-02-04 20:39:47 +03:00
parent 56a11126e8
commit dbd812efd2

View File

@ -5527,8 +5527,11 @@ ngx_quic_resend_frames(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx)
switch (f->type) { switch (f->type) {
case NGX_QUIC_FT_ACK: case NGX_QUIC_FT_ACK:
case NGX_QUIC_FT_ACK_ECN: case NGX_QUIC_FT_ACK_ECN:
if (ctx->level == ssl_encryption_application) {
/* force generation of most recent acknowledgment */ /* force generation of most recent acknowledgment */
ctx->send_ack = NGX_QUIC_MAX_ACK_GAP; ctx->send_ack = NGX_QUIC_MAX_ACK_GAP;
}
ngx_quic_free_frame(c, f); ngx_quic_free_frame(c, f);
break; break;