From 7a7846a54af0033227da125e134c3224d2123f09 Mon Sep 17 00:00:00 2001 From: nandsky Date: Sat, 19 Jul 2025 17:54:51 +0800 Subject: [PATCH 1/2] QUIC: avoid send rate reduction during migration due to probe packet loss. --- src/event/quic/ngx_event_quic_migration.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/event/quic/ngx_event_quic_migration.c b/src/event/quic/ngx_event_quic_migration.c index 42354ca66..fff1ff42a 100644 --- a/src/event/quic/ngx_event_quic_migration.c +++ b/src/event/quic/ngx_event_quic_migration.c @@ -582,6 +582,16 @@ ngx_quic_send_path_challenge(ngx_connection_t *c, ngx_quic_path_t *path) frame->level = NGX_QUIC_ENCRYPTION_APPLICATION; frame->type = NGX_QUIC_FT_PATH_CHALLENGE; + /* + * RFC 9000, 9.4. Loss Detection and Congestion Control + * + * A sender can make exceptions for probe packets so that their loss + * detection is independent and does not unduly cause the congestion + * controller to reduce its sending rate. + */ + + frame->ignore_loss = 1; + ngx_memcpy(frame->u.path_challenge.data, path->challenge[n], 8); /* From b20783287a59b700fa793fb010319190c20c563b Mon Sep 17 00:00:00 2001 From: nandsky Date: Sat, 19 Jul 2025 22:48:43 +0800 Subject: [PATCH 2/2] =?UTF-8?q?QUIC:=20prevent=20non=E2=80=91probing=20dat?= =?UTF-8?q?a=20stall=20from=20PATH=5FCHALLENGE=20blocked=20by=20full=20cwn?= =?UTF-8?q?d.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously PATH_CHALLENGE was not sent if the congestion window was full. Even with a minimum size of 0 and three retries, a full cwnd kept deferring path validation and slowed migration. Now PATH_CHALLENGE is sent even when cwnd is full, preventing probe starvation and reducing migration delay. --- src/event/quic/ngx_event_quic_migration.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/event/quic/ngx_event_quic_migration.c b/src/event/quic/ngx_event_quic_migration.c index fff1ff42a..f1e0f3610 100644 --- a/src/event/quic/ngx_event_quic_migration.c +++ b/src/event/quic/ngx_event_quic_migration.c @@ -581,6 +581,7 @@ ngx_quic_send_path_challenge(ngx_connection_t *c, ngx_quic_path_t *path) frame->level = NGX_QUIC_ENCRYPTION_APPLICATION; frame->type = NGX_QUIC_FT_PATH_CHALLENGE; + frame->ignore_congestion = 1; /* * RFC 9000, 9.4. Loss Detection and Congestion Control