
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.