> On 25 Apr 2025, at 14:51, Vladimir Homutov via nginx-devel 
> <nginx-devel@nginx.org> wrote:
> 
> On Tue, Apr 15, 2025 at 03:02:02PM +0000, nore...@nginx.com wrote:
>> details:   
>> https://github.com/nginx/nginx/commit/cd5e4fa1446dff86fafc3b6ffcc11afd527a024f
>> branches:  master
>> commit:    cd5e4fa1446dff86fafc3b6ffcc11afd527a024f
>> user:      Roman Arutyunyan <a...@nginx.com>
>> date:      Sat, 4 Jan 2025 18:03:46 +0400
>> description:
>> QUIC: do not increase underutilized congestion window.
>> 
>> As per RFC 9002, Section 7.8, congestion window should not be increased
>> when it's underutilized.
>> 
> 
> Hello,
> 
> it looks like this patch triggers some issues with ack processing
> (possible previously, but now more probable): see details in suggested
> patch.
> 
> I'm also attaching bad.log and good.log. The first one demonstrates that
> nginx is not sending any ACKs since it is switched into idle mode and
> the window is not increasing. Since the client code is symmetric, deadlock
> occurs.

cd5e4fa14 is not the only one to blame uncovering this apparently old bug.

Few more things to consider:
- 53e7e9eb5 initial congestion window reduction made this easier to trigger
- a40cc7002 to ignore congestion in MTU probes made this easier to trigger

The fix is to teach ngx_quic_output() to send ACKs on congested links.
This meets RFC 9002, 7 and B.2

: An endpoint MUST NOT send a packet if it would cause bytes_in_flight
: (see Appendix B.2) to be larger than the congestion window

: bytes_in_flight:
: Packets only containing ACK frames do not count toward
: bytes_in_flight to ensure congestion control does not impede
: congestion feedback.


A simple reproducer attached.

Attachment: h3_congestion_ack.t
Description: Binary data


-- 
Sergey Kandaurov

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to