The TCP/IP Guide - Version 3.0 (Contents) ` 435 _ © 2001-2005 Charles M. Kozierok. All Rights Reserved.
☯ Sequencing and Placement: The fragments will typically be sent in sequential order
from the beginning of the message to the end, but they won't necessarily show up in
the order in which they were sent. The receiving device must be able to determine the
sequence of the fragments to reassemble them in the correct order. In fact, some
implementations send the last fragment first, so the receiving device will immediately
know the full size of the original complete datagram. This makes keeping track of the
order of segments even more essential.
☯ Separation of Fragmented Messages: A source device may need to send more than
one fragmented message at a time; or, it may send multiple datagrams that are
fragmented en route. This means the destination may be receiving multiple sets of
fragments that must be put back together. Imagine a box into which the pieces from
two, three or more jigsaw puzzles have been mixed and you understand this issue.
☯ Completion: The destination device has to be able to tell when it has received all of
the fragments so it knows when to start reassembly (or when to give up if it didn't get
all the pieces).
To address these concerns and allow the proper reassembly of the fragmented message,
IP includes several fields in the IP format header that convey information from the source to
the destination about the fragments. Some of these contain a common value for all the
fragments of the message, while others are different for each fragment.
The IP Fragmentation Process: An Example
The device performing the fragmentation follows a specific algorithm to divide the message
into fragments for transmission. The exact implementation of the fragmentation process
depends on the device. Let's take the same example from the previous topic, an IP
message 12,000 bytes wide (including the 20-byte IP header) that needs to be sent over a
link with an MTU of 3,300. Here's a typical method by which this fragmentation might be
performed (you may find the illustration in Figure 90 helpful):
1. Create First Fragment: The first fragment is created by taking the first 3,300 bytes of
the 12,000-byte IP datagram. This includes the original header, which becomes the IP
header of the first fragment (with certain fields changed as described below). So,
3,280 bytes of data are in the first fragment. This leaves 8,700 bytes to encapsulate
(11,980 minus 3,280).
2. Create Second Fragment: The next 3,280 bytes of data are taken from the 8,700
bytes that remain after the first fragment was built, and paired with a new header to
create fragment #2. This leaves 5,420 bytes.
3. Create Third Fragment: The third fragment is created from the next 3,280 bytes of
data, with a 20-byte header. This leaves 2,140 bytes of data.
4. Create Fourth Fragment: The remaining 2,140 bytes are placed into the fourth
fragment, with a 20-byte header of course.
I want to emphasize two important points here. First, IP fragmentation does not work by
fully encapsulating the original IP message into the Data fields of the fragments. If this were
done, the first 20 bytes of the Data field of the first fragment would contain the original IP
header. This technique is used by some other protocols, such as the PPP Multilink Protocol,
but not by IP. The original IP header is “transformed” into the IP header of the first fragment.