In the previous post, we looked at a short history on IPv6 and how discussions and protocols evolved to finally land us here in the v6 world.
Remember that the 32-bit IPv4 address space contains 4.2 billion addresses (2^32). In contrast, the 128-bit IPv6 address space has 340 Undecillion addresses(2^128). Yes, undecillion….take 3 billion, and add 29 zeroes to it!
General changes
IPv6 has several improvements apart from an expanded address space. These include:
- A simplified header with some fields removed or implemented as optional information
- Better support for optional header information via the use of extension headers
- Flow labelling to improve classification of packets
- Fragmenting packets by source nodes. Routers along a packet’s delivery path DO NOT 🙂 fragment packets. More on this in upcoming posts
Changes to the IPv6 header
The base IPv6 header is fixed at 40 bytes. The size of the IPv4 header is not fixed i.e. can be between 20 to 60 bytes depending on whether there is optional information.
Here’s a side-by-side comparison of the IPv4 and IPv6 headers. You’ll notice that the v6 header has fewer fields.
Since the IPv6 header is fixed, we don’t need the IHL field. The header checksum field is also eliminated and IPv6 relies on layer 4 (TCP and UDP) and layer 2 for checksum computation. This means that the use of the UDP checksum is no longer optional in IPv6.
IPv4 fragmentation fields (Identification, Flags and Fragment offset) are implemented using extension headers in IPv6.
In with the new, Flow Label
The Flow Label field is the only new kid on the block 🙂 Traditional flow classifiers use 5 tuples i.e. Source Address, Destination Address, Source Port, Destination Port, and the transport protocol type.
The transport protocol, source and destination ports are in different layers and may be unavailable due to encryption or fragmentation.
Classification in IPv6 is efficient with the use of 3 tuples i.e. Flow Label + Source Address + Destination address. However, the flow label field is still not yet widely implemented.
In the next post, we’ll take a deep dive into IPv6 extension headers.
Keep learning!