Ethereal-users: [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: "Bob Eby" <beby@xxxxxxxxxxxx>
Date: Fri, 28 Feb 2003 09:28:03 -0800
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).  I'll make sure I keep up to date reading the archives.

> 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.  

> 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.   If I have success, expect some
sniffer traces and source code to follow.  I've certainly never seen a
Windows program do anything similar just using the (more or less)
standard Windows Sockets API.  (Of course, this may just be because I
don't get out enough...)

-Bob
beby@xxxxxxxxxxxx


-----Original Message-----
From: Guy Harris [mailto:guy@xxxxxxxxxx] 
Sent: Thursday, February 27, 2003 9:06 PM
To: Bob Eby
Cc: 'ethereal-users@xxxxxxxxxxxx'
Subject: Re: [Ethereal-users] TCP ACK packets with data in them...


On Thu, Feb 27, 2003 at 05:34:31PM -0800, Bob Eby wrote:
> I've been using ethereal for a while now to diagnose network problems 
> and test software.  Recently I've been working on a Java application 
> that sends and receives TCP data using the java.nio package.  In a 
> recent sniffer trace I see examples of TCP ACK packets that contain 
> large amounts of data that resembles what I'm trying to send.  At the 
> same time I *don't* see PUSH/ACK packets containing this same data.

So is the problem just that the PUSH bit isn't being set on some data
segments?

If so, that might just be a question of what the OS on which you're
running chooses to do in its TCP stack.

If it has no API to allow a sending application to force a push, it's
not a problem in java.nio, as there's nothing java.nio can do about it
(except *maybe* write in a fashion that triggers pushing, *if* the OS's
stack does a push if it infers from the writes being done that a push
should be done - I've no idea whether any OSes do that).

If it does have such an API, then it's a problem with java.nio only to
the extent that it doesn't offer, say, a "push" method - but perhaps
they didn't think exposing the notion of pushes was a good idea.