IP fragment offsets count blocks of eight bytes, not raw bytes.

highlighted = computed this step

Offsets count in eight-byte blocks

The first fragment starts at payload byte zero, so its offset is 0.

first offset=0\text{first offset}=0
Offsets count blocks of eightThe two toy IPv4 fragment headers are decoded from exact bytes.Fragment 1 header160 bits / 20 bytes0x450000241c4620004006d1feac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000100100byte 4byte 5byte 6byte 700011100010001100010000000000000byte 8byte 9byte 10byte 1101000000000001101101000111111110byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length36identification0x1c46fragment-offset0ttl64protocol6->TCPheader-checksum0xd1fesource172.16.10.99destination172.16.10.12reserved: clear df: clear mf: setFragment 2 header160 bits / 20 bytes0x4500001c1c4600024006f204ac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000011100byte 4byte 5byte 6byte 700011100010001100000000000000010byte 8byte 9byte 10byte 1101000000000001101111001000000100byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length28identification0x1c46fragment-offset2ttl64protocol6->TCPheader-checksum0xf204source172.16.10.99destination172.16.10.12reserved: clear df: clear mf: clear

Sixteen bytes means offset two

The first piece carried 16 bytes. IP version 4 offsets count groups of 8 bytes, so the next offset is 2.

16÷8=216\div8=2
Offsets count blocks of eightThe two toy IPv4 fragment headers are decoded from exact bytes.Fragment 1 header160 bits / 20 bytes0x450000241c4620004006d1feac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000100100byte 4byte 5byte 6byte 700011100010001100010000000000000byte 8byte 9byte 10byte 1101000000000001101101000111111110byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length36identification0x1c46fragment-offset0ttl64protocol6->TCPheader-checksum0xd1fesource172.16.10.99destination172.16.10.12reserved: clear df: clear mf: setFragment 2 header160 bits / 20 bytes0x4500001c1c4600024006f204ac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000011100byte 4byte 5byte 6byte 700011100010001100000000000000010byte 8byte 9byte 10byte 1101000000000001101111001000000100byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length28identification0x1c46fragment-offset2ttl64protocol6->TCPheader-checksum0xf204source172.16.10.99destination172.16.10.12reserved: clear df: clear mf: clear

The field shows two

The second header's fragment-offset field is 2, not sixteen.

second offset=2\text{second offset}=2
Offsets count blocks of eightThe two toy IPv4 fragment headers are decoded from exact bytes.Fragment 1 header160 bits / 20 bytes0x450000241c4620004006d1feac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000100100byte 4byte 5byte 6byte 700011100010001100010000000000000byte 8byte 9byte 10byte 1101000000000001101101000111111110byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length36identification0x1c46fragment-offset0ttl64protocol6->TCPheader-checksum0xd1fesource172.16.10.99destination172.16.10.12reserved: clear df: clear mf: setFragment 2 header160 bits / 20 bytes0x4500001c1c4600024006f204ac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000011100byte 4byte 5byte 6byte 700011100010001100000000000000010byte 8byte 9byte 10byte 1101000000000001101111001000000100byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length28identification0x1c46fragment-offset2ttl64protocol6->TCPheader-checksum0xf204source172.16.10.99destination172.16.10.12reserved: clear df: clear mf: clear

Summary

Fragment offsets are byte positions divided by eight.

offset units=8\text{offset units}=8
Offsets count blocks of eightThe two toy IPv4 fragment headers are decoded from exact bytes.Fragment 1 header160 bits / 20 bytes0x450000241c4620004006d1feac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000100100byte 4byte 5byte 6byte 700011100010001100010000000000000byte 8byte 9byte 10byte 1101000000000001101101000111111110byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length36identification0x1c46fragment-offset0ttl64protocol6->TCPheader-checksum0xd1fesource172.16.10.99destination172.16.10.12reserved: clear df: clear mf: setFragment 2 header160 bits / 20 bytes0x4500001c1c4600024006f204ac100a63ac100a0cbyte 0byte 1byte 2byte 301000101000000000000000000011100byte 4byte 5byte 6byte 700011100010001100000000000000010byte 8byte 9byte 10byte 1101000000000001101111001000000100byte 12byte 13byte 14byte 1510101100000100000000101001100011byte 16byte 17byte 18byte 1910101100000100000000101000001100version4ihl5dscp-ecn0x00total-length28identification0x1c46fragment-offset2ttl64protocol6->TCPheader-checksum0xf204source172.16.10.99destination172.16.10.12reserved: clear df: clear mf: clear