1 | initial version |
Reading RFC 791, Section 3.1 - Internet Header Format should help resolve your questions.
From the RFC:
Fragment Offset: 13 bits
This field indicates where in the datagram this fragm)ent belongs. The fragment offset is measured in units of 8 octets (64 bits). The first fragment has offset zero.
Also Section 3.2 - Discussion has the following text (my emphasis):
Fragmentation and Reassembly.
The internet identification field (ID) is used together with the source and destination address, and the protocol fields, to identify datagram fragments for reassembly.
The More Fragments flag bit (MF) is set if the datagram is not the last fragment. The Fragment Offset field identifies the fragment location, relative to the beginning of the original unfragmented datagram. Fragments are counted in units of 8 octets. The fragmentation strategy is designed so than an unfragmented datagram has all zero fragmentation information (MF = 0, fragment offset = 0). If an internet datagram is fragmented, its data portion must be broken on 8 octet boundaries.
This format allows 2**13 = 8192 fragments of 8 octets each for a total of 65,536 octets. Note that this is consistent with the the datagram total length field (of course, the header is counted in the total length and not in the fragments).
When fragmentation occurs, some options are copied, but others remain with the first fragment only.
Every internet module must be able to forward a datagram of 68 octets without further fragmentation. This is because an internet header may be up to 60 octets, and the minimum fragment is 8 octets.