Ethereal-users: Re: [Ethereal-users] RE: TCP ACK packets with data in them...

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <guy@xxxxxxxxxx>
Date: Fri, 28 Feb 2003 10:51:51 -0800
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.