This toy split shows exact offset and checksum arithmetic, not real-world fragmentation behavior.
What this toy example shows
This book shows one tiny IP version 4 payload split into exactly two fragments.
fragments = 2 \text{fragments}=2 fragments = 2
Fragment honesty boundary The two toy IPv4 fragment headers show MF and offset fields. Fragment 1 header 160 bits / 20 bytes 0x450000241c4620004006d1feac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 36 identification 0x1c46 fragment-offset 0 ttl 64 protocol 6->TCP header-checksum 0xd1fe source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: set Fragment 2 header 160 bits / 20 bytes 0x4500001c1c4600024006f204ac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 28 identification 0x1c46 fragment-offset 2 ttl 64 protocol 6->TCP header-checksum 0xf204 source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: clear
Checked values
The first payload length is 16, so the second offset is 2.
Fragment honesty boundary The two toy IPv4 fragment headers show MF and offset fields. Fragment 1 header 160 bits / 20 bytes 0x450000241c4620004006d1feac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 36 identification 0x1c46 fragment-offset 0 ttl 64 protocol 6->TCP header-checksum 0xd1fe source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: set Fragment 2 header 160 bits / 20 bytes 0x4500001c1c4600024006f204ac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 28 identification 0x1c46 fragment-offset 2 ttl 64 protocol 6->TCP header-checksum 0xf204 source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: clear
What this does not model
NOTE: toy two-fragment IP version 4 example only; not path MTU discovery, reassembly timeout, overlapping fragments, firewall evasion, transport checksums, or real capture behavior.
toy fragments = 2 \text{toy fragments}=2 toy fragments = 2
Fragment honesty boundary The two toy IPv4 fragment headers show MF and offset fields. Fragment 1 header 160 bits / 20 bytes 0x450000241c4620004006d1feac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 36 identification 0x1c46 fragment-offset 0 ttl 64 protocol 6->TCP header-checksum 0xd1fe source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: set Fragment 2 header 160 bits / 20 bytes 0x4500001c1c4600024006f204ac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 28 identification 0x1c46 fragment-offset 2 ttl 64 protocol 6->TCP header-checksum 0xf204 source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: clear
Summary
Fragment offsets count in eights, MF marks whether more fragments follow, and each header checksum is recomputed.
second offset = 2 \text{second offset}=2 second offset = 2
Fragment honesty boundary The two toy IPv4 fragment headers show MF and offset fields. Fragment 1 header 160 bits / 20 bytes 0x450000241c4620004006d1feac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 36 identification 0x1c46 fragment-offset 0 ttl 64 protocol 6->TCP header-checksum 0xd1fe source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: set Fragment 2 header 160 bits / 20 bytes 0x4500001c1c4600024006f204ac100a63ac100a0c byte 0 byte 1 byte 2 byte 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 byte 4 byte 5 byte 6 byte 7 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 byte 8 byte 9 byte 10 byte 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 byte 12 byte 13 byte 14 byte 15 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 byte 16 byte 17 byte 18 byte 19 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 version 4 ihl 5 dscp-ecn 0x00 total-length 28 identification 0x1c46 fragment-offset 2 ttl 64 protocol 6->TCP header-checksum 0xf204 source 172.16.10.99 destination 172.16.10.12 reserved: clear df: clear mf: clear