Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Mar 2012 19:53:46 +1100
From:      Darren Reed <darernr@freebsd.org>
To:        Jason Hellenthal <jhellenthal@dataix.net>
Cc:        freebsd-net@freebsd.org
Subject:   Re: FreeBSD TCP ignores zero window size
Message-ID:  <4F76C61A.1000704@freebsd.org>
In-Reply-To: <20120330160055.GB78586@DataIX.net>
References:  <4F75C1A3.4030401@freebsd.org> <20120330160055.GB78586@DataIX.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Jason Hellenthal wrote:
> On Sat, Mar 31, 2012 at 01:22:27AM +1100, Darren Reed wrote:
>   
>> I've been tracking down some problems with FreeBSD's sending
>> of TCP packets and seem to have come to the conclusion that
>> in FreeBSD 8.2-RELEASE, when the system is working with a
>> TCP connection that has a moderate delay in it, FreeBSD's
>> TCP ignores the other end telling it that the window size
>> is now 0 and continues to send data. I suspect that this is
>> meant to make sense because it is expecting that the ACK
>> that will open up the window is already in transit. But that
>> only accounts for the condition where the TCP on FreeBSD can
>> compute and decide that the remote TCP will have its buffer
>> full. What I find harder to accept is that when FreeBSD's
>> TCP receives a TCP packet from the remote end advertising
>> a window of 0, FreeBSD's response is to send more data and
>> not a window probe or is that now the expected behaviour?
>> And whilst you might say "ok" for a packet of data, I'm
>> somewhat hard pressed to explain why FreeBSD's TCP sends
>> multiple packets with data in them after receiving a TCP
>> packet from the other end advertising a zero window size.
>>
>> However this causes a problem with firewalls (;_) that are
>> close to the FreeBSD end because for them, it appears that
>> FreeBSD is sending data outside of its window.
>>
>> Is this a known problem?
>> If so, has it been fixed in a later version of FreeBSD?
>> (No, I haven't tested anything other than 8.2)
>>
>> In the packet flow below, 192.168.1.1 is FreeBSD and 10.1.1.1
>> is the other end.
>>
>> Darren
>>     
>
> Hi Darren,
>
> I do believe this is the following bug at first glance that was patched
> after 8.2-RELEASE. and has to do more with x64 systems more than x32.
>
> See: "A Tale of a TCP Bug" for details...
>
> http://blogmal.42.org/tidbits/tcp-bug.story
>
> http://lists.freebsd.org/pipermail/freebsd-net/2011-April/028466.html
>   

That patch alone is not enough to fix the problem - I still see FreeBSD 8.2
sending out data after it has received a TCP packet with a window size of 0.

Next I'll try adding Andre's.

Darren




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4F76C61A.1000704>