We’re going to be talking about something that strikes fear into the heart of both seasoned and new IT folks alike: IPv6. While IPv6 is new to a lot of folks, this blog’s purpose is to walk you through step by step some high-level points, and show you how it’s really not that terrifying compared to regular IPv4 addresses.
The focus of this blog is understanding the address layout from a subnetting perspective. The first thing we’re going to realize right off the bat is the sheer size difference between IPv6 and IPv4. The reason why IPv6 has so much space is because it addresses running out of IPv4 public space, which will happen eventually. We’re at that point already!
The size difference is IPv4 is made up of 32 bits vs. IPv6, which is made up of 128 bits. This means that IPv4 has a total of 4.3 billion possible
IP addresses, where IPv6 has 340 undecillion IP addresses! I have no idea how much undecillion is, I don’t even know how many zeroes that is. Basically, you’re looking at the difference between two to the power of 32 versus 2 to the power of 128. You can run that through your calculator if you want to, it probably will start smoking 😂.
Next, IPv6 is in hexadecimal format compared to IPv4 which is in binary.
For those not familiar with hexadecimal format: instead of a binary number having two different possible values, a hexadecimal digit has 16 possible values. It’s alphanumeric and starts at 0, goes through 9, and then switches to A through F for a total of 16 possible values. When we’re looking at IPv4, it has four different octets, each making up eight bits each. IPv6 is made up of eight 16-bit groups.
If we look at this IP address in the diagram above, we’ll see, similarly to IPv4, that it has a network section and a host section. However, unlike IPv4, there’s also a subnetting section. In general, an ISP will give a site a /48 subnet. If you take that /48 subnet and you break it up evenly into / 64 subnets, that will give you a mind-boggling 65,536 /64 subnets that you can utilize. You could subnet those even smaller if you wanted to, but with 65,000 subnets, there’s no real reason to wrack your brain or melt down your calculator trying to break those subnets down into something smaller.
Continuing, we go into a breakdown of the different sections within the IPv6 address. One of the things to mention when we’re looking at the IP address section breakdowns is that these numbers are identifying the possible different bits that make up the different sections. This doesn’t necessarily mean that each of the individual sections is always going to be that full amount of the bits.
So, for instance, the ISP section, or more officially the LIR section isn’t going to be, or doesn’t have to be a full 32 bits to make up whatever that value is. Same thing with the site sections and the subnet sections. Depending upon what you’re going to be doing and how it’s broken up, there’s some leeway to play with. A /48’s is the most common for what’s handed out by ISPs for a site, but there are different recommendations. For small offices or home offices, the recommendation might be a /48 instead of a /56.
One of the secondary benefits of having these larger amounts of subnets to hand out to organizations is the fact that it minimizes and gets rid of the problem of routing table fragmentation. This is caused if your organization gets discontiguous public subnets from your ISP. If you continue to do that over the course of a few different years, you aren’t going to get discontiguous IP space, which means that the routing tables across the internet need to have more entries for all of these disparate subnets. An IPv6 solves this since you’re getting a /48 or a /56. That’s going to be enough space for you and your organization forever!
Further looking at the segments of the IPv6 address in the above diagram, we see the first 32 bits being for the ISP section or the LIR “2001:0DB8” followed by the site section, “85A3”. The subnet section is all zeros and then we get into the hosts section. This is broken down for a /64 subnet, meaning that the rest of these bits, 64 bits, would be for all the hosts. If we go to the next subnet available, within the subnet section, we would add a “1” in place of the far right “0” and if we need another subnet, we change the “1” to a “2”. We could just progressively keep adding more and more within those 16 bits. Also, we would continue this process through all four hexadecimal digits in that section.
Since this represents a /48 from an ISP, the only things that are configurable are the subnet section and then the host IP section. The ISP section is locked in and the site section is locked in. So that’s a really straightforward and easy way to look at that as long as you’re taking a /48 from your service provider.
Since this is going to be a 64-bit subnet mask, two other cool things to note are that there’s a way to minimize the amount of space that these IP addresses take when writing them out. The first way is by omitting the zeros that are in the groups. If the group is starting with a zero, as in this instance “:0370”, we actually could get rid of that zero and it would just be “:370”. However, we can’t get rid of the zero after the seven. It’s only zeros that are at the beginning and proceeding through. So if it was “:0070”, we could get rid of the first two zeros and it would just be written as “:70”.
Another cool thing that you can do is to get rid of a whole 16-bit groups if it’s all made up of zeros. Remove that and what you’re left with is two pairs of colons. If we look at the address in the diagram, we could take this section “85A3:0000:0000:8a2E” and get rid of the 0’s in the group. This section of the IP address would then become “85A3::8a2E”. Being able to minimize the zeros in IPv6 address gives you the advantage to write it shorthand!
The Wrap Up
If this was your first taste of IPv6, I hope it helped things make a little more sense. Doing the basics with subnetting IPV6 address space is really not that overwhelming once you get comfortable with it. Remember, IPv6 calculators are there to help you out!