Search code examples
javanetwork-programmingtcpmtu

Why java send a tcp package with size larger than max MTU size and it works?


I find the mtu value to a my server from my linux host by issuing:

ping -s 1312 my.sever.com  --> 100% successful
ping -s 1313 my.sever.com  --> 100% failed

So I assume my max MTU is 1340 (1312 + 28).

However, when I capture a http post from my java client to that server, I can see a tcp package with size 1354 in wireshark and the whole request/response is successful.

4 0.054168000 my.ip -> server.ip TCP 1354 80 59060  [TCP segment of a reassembled PDU]

I was wondering how it can be successful with a package size > max MTU size?

Thanks,


Solution

  • The Internet Protocol implements datagram fragmentation, breaking it into smaller pieces, so that packets may be formed that can pass through a node with a smaller maximum transmission unit than the original datagram size. In a case where a router receives a protocol data unit larger than the next hop's MTU, it has two options: drop the PDU and send an ICMP message which indicates the condition packet too big, or fragment the IP packet.

    See