If the TCP Payload and IP Payload can be up to 65515 Bytes (-40 for ip and tcp hdr), is the MTU size of 1500(Ethernet) restricting what can be sent on the wire(i.e. is it because of Ethernet limit of 1500)? what protocol can use all of 65515 bytes if not Ethernet ?
-
The more you cram into one packet, the more you lose when the packet is lost. Also, you end up monopolizing network links for longer and not sharing the network with other users. Wi-Fi has a bit bigger MTU, but is is even more necessary to share the network with Wi-Fi.– Ron Maupin ♦Jan 25 at 19:43
-
IP, being layer-3, has to make do with whatever layer-2 carries it. If you find a layer-2 that can accommodate a 64k frame (ATM?), then you can send a 64k IP packet. Any that would, like ATM, do so by breaking the packet into fragments (ATM - cells.) TCP (L4) can hand a 64k packet to IP, but IP will have to fragment it if the layer-2 can't handle it.– RickyJan 25 at 22:52
2 Answers
what protocol can use all of 65515 bytes if not Ethernet?
I think you are asking the wrong question.
There does not actually need to be a link layer protocol which can handle a full-size IP packet. If you need to transport 10000 tons of bananas you don't ask for a special truck able to transport these 10000 tons at once and maybe a special road where such a truck can drive. Instead you take several commonly available trucks where each can take part of the total load and use a common road for transport. This is possible because you can split the huge load into several smaller fragments.
But on the other hand, it could be bad if a full-size IP packet was significantly smaller to what the underlying link layer could handle. If the largest "internet layer" unit you had was a single banana, then this would mean to have each "link layer" truck to deliver only a single banana - i.e. lots of overhead.
Apart from that, there are jumbo frames for ethernet. While they cannot take a full-size IP packet they can take much larger fragments - similar to having larger trucks.
1500 is going to be the standard Internet MTU.
There are 2 places where you see >1500 often used in practice.
One is when the whole flow lives on the same LAN. Almost every switch will allow 9000 byte MTUs end to end in that scenario. The linux routing table will let you set this higher MTU just for flows that use the local LAN route instead of the default Internet 1500. (8192 turns out to be better because of the way the kernel allocates buffers - you trade a tiny bit of extra MTU space for much more efficient memory handling)
However the most common place for full size 64K packets is actually through localhost in one of a variety of ways. Those packets traverse (most of) the normal TCP/IP stack and it simply helps to have fewer of them.. the CPU used to move the packet is proportional to the number of packets (not the number of bytes) - so moving 64KB packets is cheaper than moving 1.5KB packets.
You might see this just in normal localhost - but sneakily! - you also see it with GRO and TSO. Those are technologies that move big packets through the software networking stack and then break them (or consildate from - depending on if your rx'ing or tx'ing) into MTU sized packets when they are down at the ethernet layer. This is really important for high speed networking.