RELENG_8 ignoring TCP window size? [Was: Re: Help for TCP
understanding wanted, ACK-MSS-Window [Was: Re: best practice to watch TCP
parms of established sockets]]
Stephen Hurd
shurd at sasktel.net
Thu Feb 18 16:09:29 UTC 2010
Harald Schmalzbauer wrote:
> Some experimental results:
> When rsyncing with windows, and FreeBSD is receiver, I see the same
> ACK ever two segemnts, but speed is at 72MB/s.
> When FreeBSD is sender and Windows is receiver, it looks more I
> expected. There are about 20 data segments before a ACK is returned.
> And there are TCP Window Update Segments, reflecting smaller receiver
> buffers on the windows side. But this happens at a throughput of
> 82MB/s!!! So the windows machine is behaving like I understand the TCP
> flow control.
> Any explanation why the FreeBSD machine seems to ignore window size?
Yes, here we are in RFC1122:
4.2.3.2 When to Send an ACK Segment
A host that is receiving a stream of TCP data segments can increase
efficiency in both the Internet and the hosts by sending fewer than one
ACK (acknowledgment) segment per data segment received; this is known as
a "delayed ACK" [TCP:5].
A TCP SHOULD implement a delayed ACK, but an ACK should not be
excessively delayed; in particular, the delay MUST be less than 0.5
seconds, and in a stream of full-sized segments there SHOULD be an ACK
for at least every second segment.
The idea of delayed ACKs is to allow an ACK to be sent with data if
there will be data sent right away, not to combine ACKs... leaving out
ACKs makes calculation of RTT problematical which causes performance
problems all over the place... maybe the dearth of ACKs from the windows
system is causing the problem?
More information about the freebsd-stable
mailing list