IPv6 moved everything optional out of the fixed header into a chain of extension headers, each pointed to by the previous header's Next Header field. Every one of them shares a generic Next Header + Hdr Ext Len + data shape - except Fragment, the one fixed-size exception. Manipulating this chain (reordering, splitting across fragments, repeating a type) is the main class of IPv6-specific firewall/IDS evasion. Hover a field to light its bytes, click a field marked + for its lookup table.
When more than one extension header is present, RFC 8200 mandates this order - a stateless filter that assumes the upper-layer protocol is always right after the fixed IPv6 header can be walked straight past it.
Shared by every extension header except Fragment. Hdr Ext Len is in 8-octet units, not counting the first 8 octets - so a value of 0 means "this whole header is 8 bytes."
The one extension header every router must inspect - every other extension header is only processed by the final destination. Must come first in the chain if present.
Router Alert (RFC 2711) tells routers "inspect this packet's contents even though you're just forwarding it" - exactly how MLD reports get routers to notice group-membership changes without every router running full multicast routing.
Source routing - lists intermediate hops a packet should visit. Type 0 (shown here) let a packet be routed through an arbitrary sequence of addresses; in 2007 Philippe Biondi and Arnaud Ebalard showed it could bounce a packet repeatedly between colluding routers for a large amplification factor. Deprecated within the year.
Historical structure, shown for what it was: Segments Left counts down as each listed address is visited.
The odd one out - always exactly 8 bytes, no Hdr Ext Len field at all. Drawn bit by bit here since Fragment Offset, Reserved, and M pack into one 16-bit field. Two fragments lying about their offsets is the classic firewall-evasion trick this header enables.
Byte offset 8, M=0 (no more fragments follow), Identification 0x1337 ties it to its sibling fragment.
Same TLV option encoding as Hop-by-Hop, but only the final destination ever looks inside it - intermediate routers skip straight past using Hdr Ext Len. Can appear twice in one chain: once for options meant for intermediate routing-header hops, once for the true final destination.
A writer with nothing to say still has to pad to a multiple of 8 bytes - PadN is how.