4

I'm currently studying Internet protocols and had a question regarding the IP datagram.

Within the IP header I am aware there is a field called "total length" which specifies the total length of the particular fragmented datagram in bits. However, while reading the textbook ("TCP/IP Illustrated Vol. 1") I read that "a host is not required to be able to receive an IPv4 datagram larger than 576 bytes."

If it says that it's "not required," then doesn't it mean that it technically would be able to transport it? Why is there such a limit in terms of the IP MTU?

Edit

One thing that I came across while studying TCP reminded me of this question I asked previously.

TCP is a transport layer (layer 4 in the conventional OSI model) protocol that runs encapsulated inside the lower network layer (layer 3) protocol. This is also where the Internet "power horse" known as IP is used.

All protocols have a specific kind of header, and in the case of IP and TCP, both of their headers have a minimum of length 20 bytes (in TCP's case, the maximum length is 60 bytes including options added at the end).

TCP protocol use things called "segments" which are equivalent to packets for other protocols. The maximum segment size (MSS) is "the largest segment that a TCP is willing to receive from its peer and, consequently, the largest size its peer should ever use when sending." (TCP/IP Illustrated, Vol. 1, 2e p. 606).

The MSS is usually specified as an option in the TCP header, but if it's not specified then the default size is 536 bytes. Recall that the IP header and TCP basic header are both a minimum of 20 bytes. This means: 20 (IP header) + 20 (TCP header) + 536 (default MSS) = 576 bytes.

Thus, the minimum required packet size that IPv4 hosts should be able to process are 576 bytes.

3
  • It's not really done to edit an answer back into the question. Besides, I think your argument is back to front.
    – richardb
    Commented Jun 2, 2018 at 7:51
  • I wasn't trying to edit the answer back into the question, or cause confusion. Sorry if I did. I just wanted to add some more detail to a question I previously asked in case it would help other people with the same problem.
    – Sean
    Commented Jun 3, 2018 at 7:57
  • They had to pick a number and this annoyed the fewest the committee members. At the time, some networks had difficulty supporting larger numbers. This was before Ethernet had taken over the world and many links were serial lines. Small packets allow high priority packets to "take cuts" sooner. Commented Dec 17, 2020 at 22:11

2 Answers 2

10

Well to take an analogy, it's like your city council mandating that "every parking spot in the city must be big enough to accommodate a Prius". That is, it is illegal to build a parking spot that is too small to accommodate a Prius.

This rule of course has nothing to do with the size of vehicles allowed on the highway.

0
7

IP datagrams can be up to 64K in length but it would be completely unreasonable back in 1981 to require every host to allocate 64K buffers. That could be your entire addressable memory on a 16 bit computer! The numbers are essentially arbitrary but that memory was too expensive to just throw at the problem is a factor.

From RFC 791:

All hosts must be prepared to accept datagrams of up to 576 octets (whether they arrive whole or in fragments). It is recommended that hosts only send datagrams larger than 576 octets if they have assurance that the destination is prepared to accept the larger datagrams.

The number 576 is selected to allow a reasonable sized data block to be transmitted in addition to the required header information. For example, this size allows a data block of 512 octets plus 64 header octets to fit in a datagram.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.