aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2025-01-06 16:27:03 +0400
committerRoman Arutyunyan <arutyunyan.roman@gmail.com>2025-04-15 19:01:36 +0400
commit6bf13e9d57bbc664ac055cdb58c738b09a0f0189 (patch)
treee0f9cc4599f72f1d6e5b1e2410ee3df45bdef62e
parentcd5e4fa1446dff86fafc3b6ffcc11afd527a024f (diff)
downloadnginx-6bf13e9d57bbc664ac055cdb58c738b09a0f0189.tar.gz
nginx-6bf13e9d57bbc664ac055cdb58c738b09a0f0189.zip
QUIC: do not shrink congestion window after losing an MTU probe.
As per RFC 9000, Section 14.4: Loss of a QUIC packet that is carried in a PMTU probe is therefore not a reliable indication of congestion and SHOULD NOT trigger a congestion control reaction.
-rw-r--r--src/event/quic/ngx_event_quic_ack.c8
-rw-r--r--src/event/quic/ngx_event_quic_migration.c1
-rw-r--r--src/event/quic/ngx_event_quic_transport.h1
3 files changed, 10 insertions, 0 deletions
diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c
index bc99947bd..d16545a1d 100644
--- a/src/event/quic/ngx_event_quic_ack.c
+++ b/src/event/quic/ngx_event_quic_ack.c
@@ -755,6 +755,14 @@ ngx_quic_congestion_lost(ngx_connection_t *c, ngx_quic_frame_t *f)
goto done;
}
+ if (f->ignore_loss) {
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
+ "quic congestion lost ignore t:%M win:%uz if:%uz",
+ now, cg->window, cg->in_flight);
+
+ goto done;
+ }
+
cg->recovery_start = now;
cg->window /= 2;
diff --git a/src/event/quic/ngx_event_quic_migration.c b/src/event/quic/ngx_event_quic_migration.c
index 3caae88e5..463eeb503 100644
--- a/src/event/quic/ngx_event_quic_migration.c
+++ b/src/event/quic/ngx_event_quic_migration.c
@@ -923,6 +923,7 @@ ngx_quic_send_path_mtu_probe(ngx_connection_t *c, ngx_quic_path_t *path)
frame->level = ssl_encryption_application;
frame->type = NGX_QUIC_FT_PING;
+ frame->ignore_loss = 1;
qc = ngx_quic_get_connection(c);
ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_application);
diff --git a/src/event/quic/ngx_event_quic_transport.h b/src/event/quic/ngx_event_quic_transport.h
index 3e320391a..dcd763df1 100644
--- a/src/event/quic/ngx_event_quic_transport.h
+++ b/src/event/quic/ngx_event_quic_transport.h
@@ -271,6 +271,7 @@ struct ngx_quic_frame_s {
unsigned need_ack:1;
unsigned pkt_need_ack:1;
unsigned ignore_congestion:1;
+ unsigned ignore_loss:1;
ngx_chain_t *data;
union {