Ethereal-users: Re: [Ethereal-users] RE: TCP ACK packets with data in them...
On Fri, Feb 28, 2003 at 09:28:03AM -0800, Bob Eby wrote:
> Bah, I've signed up for the list, but don't seem to be getting the
> emails (wonder if someone installed a spam-blocker I don't know about on
> my mail server).
It could be - we've certainly seen non-spam blocked here at NetApp (even
though the spam blocker lets a significant number of free mobile phone
offers, greetings from lonely ladies with webcams, urgent business
proposals, and the like get to my mailbox - I wonder how many spam
blockers will block *this* message due to mentioning those items in the
body of the message).
> > So is the problem just that the PUSH bit isn't being set on some data
> segments?
>
> It certainly appears to be the case. It looks like this only happens
> when a segment of data larger than an ethernet frame size is sent out
> via java.nio.channels.SocketChannel.write(). Basically I'm sending a
> 3008 byte ByteBuffer and getting this behaviour.
I suspect it's "a segment of data larger than the Ethernet maximum frame
size minus about 54 bytes", as that's the amount of actual data you can
put into a maximum-sized Ethernet frame containing an IPv4 TCP segment.
("54" is the minimum - it'd be bigger if you're using IPv6, or if there
are any IP or TCP options being used, and possibly if you're on a VLAN,
so the amount of data that fits in one frame would be smaller in those
cases).
> > that might just be a question of what the OS on which you're running
> chooses to do in its TCP stack.
>
> I'm running Windows 2000 with a Sun 1.4.0 series VM (and my face is red
> for not mentioning it earlier). Today I plan to try and reproduce this
> with a small test implementation.
It may just be that if you do a single socket send call with data that
requires more than one TCP segment, the PUSH bit won't be set except on
the last segment.