IPv6 Packet Header: A Beginner's Guide 🚀
Published: 2023-05-30 21:35:00



IPv6 is the latest version of the Internet Protocol (IP), which is the set of rules that define how computers communicate over the Internet. IPv6 has many advantages over IPv4, such as a larger address space, improved security, and simplified routing. 🙌

In this article, we will learn about the IPv6 packet header, which is the part of the packet that contains information such as the source and destination addresses, the length of the packet, and the type of data. We will also see some images of the various fields in the IPv6 packet header and understand their purpose. 🧐

## What is a Packet Header? 🤔

A packet header is like an envelope that contains information about the packet, such as where it came from, where it is going, and how to handle it. A packet header is added by the sender and removed by the receiver. A packet header can have different formats depending on the protocol used. For example, IPv4 and IPv6 have different packet headers. 📧

## What are the Fields in the IPv6 Packet Header? 📝

The IPv6 packet header has a fixed size of 40 bytes and consists of eight fields:

- **Version** (4 bits): This field indicates the version of IP used. For IPv6, this field has a value of 6. 🚩
- **Traffic Class** (8 bits): This field is used to indicate the priority and type of service of the packet. It can be divided into two subfields: Differentiated Services Code Point (DSCP) and Explicit Congestion Notification (ECN). DSCP can be used to classify packets into different service classes based on their quality of service requirements. ECN can be used to signal network congestion to avoid packet loss. 🚦
- **Flow Label** (20 bits): This field is used to identify a flow of packets that belong to the same communication session. A flow is a sequence of packets that share the same source and destination addresses, traffic class, and next header field. A flow label can be used to enable efficient routing and processing of packets by routers and hosts. 🔖
- **Payload Length** (16 bits): This field indicates the length of the payload in bytes, which is the part of the packet that contains the actual data. The payload length can range from 0 to 65,535 bytes. If the payload length is 0, it means that the packet contains only a header and no data. If the payload length is larger than 65,535 bytes, it means that the packet uses an extension header called Jumbo Payload to indicate the actual payload length. 📏
- **Next Header** (8 bits): This field indicates the type of header that follows the IPv6 header. The next header can be either an extension header or an upper-layer protocol header. An extension header is an optional header that provides additional functionality or information for the packet, such as hop-by-hop options, routing options, fragmentation options, authentication options, or encryption options. An upper-layer protocol header is a header that belongs to a protocol above IP in the network stack, such as TCP, UDP, ICMPv6, or HTTP. The next header field can be used to chain multiple headers together in a specific order. 🔗
- **Hop Limit** (8 bits): This field indicates the maximum number of hops (routers) that the packet can pass through before it is discarded. The hop limit is decremented by one by each router that forwards the packet. If the hop limit reaches zero, the packet is dropped and an error message is sent back to the sender. The hop limit can be used to prevent packets from looping endlessly in the network. 🔥
- **Source Address** (128 bits): This field indicates the address of the sender of the packet. An IPv6 address is a 128-bit number that uniquely identifies a host or interface on the Internet. An IPv6 address can be written in hexadecimal notation with eight groups of four digits separated by colons, such as 2001:db8:abcd:1234:5678:90ab:cdef:1234. Alternatively, an IPv6 address can be compressed by omitting leading zeros in each group or replacing consecutive groups of zeros with a double colon (::), such as 2001:db8::1234:5678:90ab:cdef:1234 or ::1 for localhost. 📫
- **Destination Address** (128 bits): This field indicates the address of the receiver of the packet. It has the same format as the source address field. 📭


## What is the Purpose of Next Header Field? 🤷‍♂️

The next header field is used to indicate what kind of header follows after the IPv6 header in a packet.

As we mentioned earlier, there are two types of headers that can follow an IPv6 header:

- An extension header: This is an optional header that provides additional functionality or information for the packet.
- An upper-layer protocol header: This is a header that belongs to a protocol above IP in the network stack.

The next header field can have different values depending on what kind of header follows after it.

Here are some examples:

| Next Header Value | Meaning |
| ----------------- | ------- |
| 0 | Hop-by-Hop Options Extension Header |
| 1 | ICMPv6 |
| 2 | IGMP |
| 4 | IP-in-IP Encapsulation |
| 6 | TCP |
| 17 | UDP |
| 41 | IPv6-in-IP Encapsulation |
| 43 | Routing Extension Header |
| 44 | Fragment Extension Header |
| 50 | Encapsulating Security Payload Extension Header |
| 51 | Authentication Extension Header |
| 58 | ICMPv6 |
| 59 | No Next Header |

The next header field can be used to chain multiple headers together in a specific order.

For example, if a packet has an IPv6 header followed by a Hop-by-Hop Options Extension Header followed by a Routing Extension Header followed by a TCP Header followed by some data, then:

- The next header field in the IPv6 header will have a value of 0 (Hop-by-Hop Options Extension Header).
- The next header field in the Hop-by-Hop Options Extension Header will have a value of 43 (Routing Extension Header).
- The next header field in the Routing Extension Header will have a value of 6 (TCP).
- The next header field in the TCP Header will have a value of 59 (No Next Header).

Here is an image showing this example:



The next header field allows routers and hosts to process packets more efficiently by skipping headers that they do not need to examine or modify.

For example, if a router does not need to look at or change any extension headers or upper-layer protocol headers in a packet, it can simply look at the next header field in
the IPv6 header and forward or drop the packet accordingly.

## Conclusion 🎉

In this article, we learned about:

- What is a packet header and why it is important.
- What are the fields in an IPv6 packet header and what they mean.
- What are some images showing these fields in an IPv6 packet header.
- What is the purpose of next header field and how it works.

We hope you enjoyed this article and learned something new about IPv6! 😊

If you have any questions or feedback, please leave them in comments below! 👇