IPv6: Introduction & Zero Compression Technique

Why IPv6?

  • IPv4 exhaustion
  • IPv6 addressed are 128-bits in size, offering a hugh amount of addresses. (IPv4 being 32-bits)
  • IPv6 doesn’t use broadcasts
  • NAT will be a thing of the past. NAT is also a hinderance to progression.
  • IPv6 was designed with route aggregation/summarisation in mind.
  • IPv6 offers greater security capabilities
  • DHCP is still available, but IPv6 nodes can assign themselves an address without the help of a DHCP server via autoconfiguration.
  • QoS capabilities with IPv6 are far greater, due to many more values within the IPv6 header.

IPv6 + IPv4 Headers


There are eight header fields in IPv6:

  1. version – This is set to “6” in IPv6.
  2. traffic class – In IPv4, this was the Type Of Service (TOS) field. The “traffic class” name comes from this field’s ability to allow us to assign levels of importance to a packet via QoS.
  3. flow label – No equivalent in IPv4, this field allows a packet to be labeled as part of a particular flow. This also helps with QoS, allowing us to prioritize traffic flows rather than individual packets.
  4. payload length – IPv4’s equivalent is the Total Length field
  5. hop limit – Roughly equivalent to IPv4’s Time To Live (TTL) field. Every hop decrements this counter by one, and when that counter hits zero — the “time to live” becomes the time to be discarded.
  6. next header – Equivalent to IPv4’s Protocol field
  7. source address, destination address – they’re now 128 bits.

There are some IPv4 fields that are not represented in IPv6:

  • Header Length
  • Identification
  • Flags
  • Fragment Offset
  • Header Checksum

Bye bye! 😦

The IPv6 Address Format

  • Typical IPv4 address:
  • Typical IPv6 address: 1029:9183:81AE:0000:0000:0AC1:2143:019B

With IPv6, our non-compressed address has eight sections of four hex values, separated by a total of seven colons.

Zero Compression And Leading Zero Compression

If you have consecutive fields of zeroes, they can be expressed with two colons.

The key rule: you can only do this zero compression once in an IPv6 address.


Original format: 1234:1234:0000:0000:0000:0000:3456:3434

Using zero compression: 1234:1234::3456:3434

Leading zeroes in any 16-bit field can be dropped, but each block you do this with must have at least one number remaining. If the block is all zeroes, you have to leave one zero. This is leading zero compression.


Original format:


With leading zero compression:



Zero compression: Allowed only once per address.

Leading zero compression: Perform as often as you like in an address.

Identifying An Interface In IPv6

Every interface on a given IPv6 link has to have a unique identifier, and once again the name is the recipe with these interface identifiers.

This value will always be 64 bits in length, and in the case of an Ethernet interface, the identifier is dynamically created from the MAC address of the interface.

The 48-bit MAC address.

To make this up to 64-bits, we need to add something..

The hex value “FFFE” is inserted directly in the middle of the MAC address, right between the OUI and the vendor code.

(In the MAC address 00-01-02aa-bb-cc, the OUI is 00-01-02 and the vendor code is aa-bb-cc.)

Example with unique identifier: 00-01-02-FF-FE-aa-bb-cc.

The Universal/Local Bit.

The seventh bit in the 1st octet defines wether this address is universally unique or locally unique. (to this link). The assumption is that a MAC address is universally unique in the world, therefore the bit is turned on resulting in 00000010. Binary to decimal this ends up being a 2, therefore the MAC address becomes:


  • Universal Unique = seventh bit set to 1
  • Local Unique = seventh bit set to 0

The G Bit/The Group Bit

This is the eighth bit in the 1st octet which defines wether this is a unicast or multicast based address.

  • Unicast being an individual with the eighth bit set to 0
  • Multicast being a group with the eighth bit set to 1