FreeBSD Window updates

David Malone dwmalone at
Thu Nov 27 06:03:26 PST 2008

I was looking at some tcpdumps from a FreeBSD box receiving a TCP
stream with someone yesterday and noticed that it seemed to be
generating quite a lot of dupliacte acks. Looking more carefully,
we noticed that the duplicates were actually window updates. The
code for sending window updates can be found in:

around lines 541-565. It seems that we generate a window update if
the available buffer space changes by more than two packets, or if
it changes by more than half the buffer size. This is probably a
little aggressive, and in some cases seems to result in bursts of
window updates that look like they should be batched. I wonder if
it would make sense to not do a window update if a delayed ack is
scheduled? It might even be possible to do them as a delayed ack
without causing problems.

I note that there is at least one PR mentioning we generate many
window updates:

I also wonder if it might cause non-FreeBSD senders to back off,
we are careful not to retransmit if we get window updates (see

about line 1836, but other OSes might not be and that might degrade
our performance when receiving from a non-FreeBSD sender.


More information about the freebsd-net mailing list