Wireshark-users: Re: [Wireshark-users] Capturing up 64K byte frame on a VM guest

From: Martin Visser <martinvisser99@xxxxxxxxx>
Date: Mon, 15 Mar 2010 12:37:36 +1100
Just following up on myself, it seems that this might have been initially implemented quite a while ago (2002 in Linux 2.5.33)

http://kerneltrap.org/node/397

There is quite a bit of chatter on talk in the VMware KBs and communities about so-called TSO (TCP Segmentation Offload). It seems to be there be default (with the e1000 NICs that we have). Obviously it's intent is to provide better transfer between guest OS and the NIC (a 64K frame will be transferred in a single DMA request). As yet I need to determine whether this is causing us grief.

All that said I think it is a "bug" in the TCP stack to show the small MSS yet accept the larger send frames.

Of cause none of this talk on my behalf is actually related to Wireshark. I guess it is a case of when you think you are seeing what is an error using Wireshark it might just be showing up some black magic (smoke and mirrors) that actually works.

Regards, Martin

MartinVisser99@xxxxxxxxx


On Mon, Mar 15, 2010 at 12:13 PM, Martin Visser <martinvisser99@xxxxxxxxx> wrote:
One other thing in regard to this is that the received TCP MSS (max. segment size) from the client, by the server is 1420 bytes. So when viewing the .cap file it looks like it is breaking the TCP protocol (by send larger than MSS segments).

I'm surprised this anomaly doesn't seem to been noted by anyone before (using my Google brain).

Regards, Martin

MartinVisser99@xxxxxxxxx


On Sat, Mar 13, 2010 at 9:54 PM, Martin Visser <martinvisser99@xxxxxxxxx> wrote:
Hi,

Doing some troubleshooting work at a customer and came across a strange anomaly I hadn't seen before. We setup a test server using a run-of-the-mill Centos 5.x machine running as a VMware ESX guest (not sure of the version). I believe the NICs are Intel e1000.

We captured some  HTTP data transfers using the Centos built-in tcpdump on the test server.

Taking this offline to analyse in Wireshark I was surprised to Ethernet frame sizes up to 64000 bytes in length. I am dead-certain these aren't acually going on the wire (based on previous captures off a switch port-mirror) and even the fact that the Centos guest has default 1500 byte MTU set for it's interfaces. By the time these frames get to the client they have been fragmented to the correct size of less than 1500 bytes. (This is despite the "Don't Fragment" bit set in all outgoing frames).

Has anyone else seen this before? The only thing I can put it down is that there is probably a TCP offloading driver being used, or maybe some magic that running inside VMware ESX, and that the tcpdump capture is being down at a point where larger-than-ethernet buffers are pushing data to the hardware/virtual NIC for TCP processing.

(We are tracking a problem where it seems clear that TCP segments are going missing in certain circumstances, and this has come up as a bit of a red herring.)

Regards, Martin

MartinVisser99@xxxxxxxxx