> On Feb 18, 2025, at 12:11, jaeyong yoo <y.jaey...@gmail.com> wrote:
> 
> Hi freebsd-net,
> 
> I am observing somewhat strange pcap behavior.
> Scenario:
>   A --> B
> A is the only sender of the data and B is the only receiver. Note that
> we use PRR.
> When B is sending partial ACKs to A, there are cases when A sends out
> just an empty segment with the same sequence number to B. Which seems
> to be pure overhead.
> 
> After digging through the code, I think this could be triggered by the
> following sequence:
> 
> 1. 
> https://github.com/freebsd/freebsd-src/blob/main/sys/netinet/tcp_input.c#L2892
> during prr-partial ack processing, it calls tcp_output with ACKNOW flag.
> 
> 2.https://github.com/freebsd/freebsd-src/blob/main/sys/netinet/tcp_output.c#L415
> in tcp_output, it determines "len" how much to send and when ACKed
> bytes in partial ack is small enough, this "len" becomes zero.
> 
> 3. 
> https://github.com/freebsd/freebsd-src/blob/main/sys/netinet/tcp_output.c#L702
> As the flag is set to "ACKNOW", with zero length, it anyway sends out
> a segment with 0 length.
> 
> My question is, is there some check before sending out like checking
> if the length is zero?
> 
> 
> Thanks,
> Jaeyong
> 

Hi Jaeyong,

The places (1&2) you have looked at are TCP congestion control/loss recovery
related principles. It might mean your network was experiencing congestions
or packet drops if you checked at the right code. If yes, that was a problem to 
look
at in the first place.

If not, the zero length TCP packet is a pure ack, which in different code path 
has
its own purpose.

Best Regards,
Cheng Cui



Reply via email to