Search code examples
network-programmingtcplinux-kernel

Why Linux server is responding with TCP packets larger than MSS requested by client


I am seeing a strange thing which is not what I expect as per the TCP theory:

The client while doing a handshake sets a MSS (Maximum Segment Size) of 1360 and a window size of 64K but the Linux server is sending TCP packets containing either 4KB, 7KB, some packets of 8KB which is more than 1360 and I expected it to be less than 1360 bytes.

I observed this by doing a tcpdump and then inspecting it in Wireshark.

I did not expect the server to send more than 1360 bytes per TCP packet. Am I wrong somewhere in my theoretical understanding of the workings of TCP?


Solution

  • First of all as @fernacolo stated don't confuse MSS and MTU.

    Maybe generic-segmentation-offload of your interface is on - read here for more info.