Just as understanding how IP addresses are structured and used is critical with IPv4 addressing, it’s also vital when it comes to IPv6. You’ve already read about the fact that at 128 bits, an IPv6 address is much larger than an IPv4 address. Because of this, as well as the new ways the addresses can be used, you’ve probably guessed that IPv6 will be more complicated to manage. But no worries! As I said, I’ll break down the basics and show you what the address looks like, how you can write it, and what many of its common uses are. It’s going to be a little weird at first, but before you know it, you’ll have it nailed!
So let’s take a look at Figure 1.1, which has a sample IPv6 address broken down into sections.
Remember where you can find this subnet ID because we’ll use it in “Configuring IPv6 on Our internetwork”
So as you can now see, the address is truly much larger—but what else is different? Well, first, notice that it has eight groups of numbers instead of four and also that those groups are separated by colons instead of periods. And hey wait a second… there are letters in that address! Yep, the address is expressed in hexadecimal just like a MAC address is, so you could say this address has eight 16-bit hexadecimal colon-delimited blocks. That’s already quite a mouthful, and you probably haven’t even tried to say the address out loud yet!
One other thing I want to point out is for when you set up your test network to play with IPv6, because I know you’re going to want to do that. When you use a web browser to make an HTTP connection to an IPv6 device, you have to type the address into the browser with brackets around the literal address. Why? Well, a colon is already being used by the browser for specifying a port number. So basically, if you don’t enclose the address in brackets, the browser will have no way to identify the information.
Here’s an example of how this looks:
http://[2001:0db8:3c4d:0012:0000:0000:1234:56ab]/default.html
Now obviously if you can, you would rather use names to specify a destination (like www.lammle.com), but even though it’s definitely going to be a pain in the rear, we just have to accept the fact that sometimes we have to bite the bullet and type in the address number. So it should be pretty clear that DNS is going to become extremely important when implementing IPv6.
Shortened Expression
The good news is there are a few tricks to help rescue us when writing these monster addresses. For
one thing, you can actually leave out parts of the address to abbreviate it, but to get away with doing that you have to follow a couple of rules. First, you can drop any leading zeros in each of the individual blocks. After you do that, the sample address from earlier would then look like this:
2001:db8:3c4d:12:0:0:1234:56ab
Okay, that’s a definite improvement—at least we don’t have to write all of those extra zeros!
But what about whole blocks that don’t have anything in them except zeros? Well, we can kind
of lose those too—at least some of them. Again referring to our sample address, we can remove
the two blocks of zeros by replacing them with double colons, like this:
2001:db8:3c4d:12::1234:56ab
Cool—we replaced the blocks of all zeros with double colons. The rule you have to follow
to get away with this is that you can only replace one contiguous block of zeros in an address.
So if my address has four blocks of zeros and each of them were separated, I just don't get to
replace them all; remember the rule is that you can only replace one contiguous block with a
double colon. Check out this example:
2001:0000:0000:0012:0000:0000:1234:56ab
And just know that you
can’t
do this:
2001::12::1234:56ab
Instead, this is the best that you can do:
2001::12:0:0:1234:56ab
The reason why the above example is our best shot is that if we remove two sets of zeros,
the device looking at the address will have no way of knowing where the zeros go back in.
Basically, the router would look at the incorrect address and say, “Well, do I place two blocks
into the first set of double colons and two into the second set, or do I place three blocks into
the first set and one block into the second set?” And on and on it would go because the information
the router needs just isn’t there.
Address Types
We’re all familiar with IPv4’s unicast, broadcast, and multicast addresses that basically define
who or at least how many other devices we’re talking to. But as I mentioned, IPv6 adds to that
trio and introduces the anycast. Broadcasts, as we know them, have been eliminated in IPv6
because of their cumbersome inefficiency.
So let’s find out what each of these types of IPv6 addressing and communication methods do for us.
Unicast
Packets addressed to a unicast address are delivered to a single interface. For load balancing, multiple interfaces can use the same address. There are a few different types of unicast addresses, but we don’t need to get into that here.
Global unicast addresses
These are your typical publicly routable addresses, and they’re the same as they are in IPv4. Link-local addresses These are like the private addresses in IPv4 in that they’re not meant to be routed. Think of them as a handy tool that gives you the ability to throw a temporary LAN together for meetings or for creating a small LAN that’s not going to be routed but still needs to share and access files and services locally.
Unique local addresses
These addresses are also intended for non-routing purposes, but they are nearly globally unique, so it’s unlikely you’ll ever have one of them overlap. Unique local addresses were designed to replace site-local addresses, so they basically do almost exactly what IPv4 private addresses do—allow communication throughout a site while being routable to multiple local networks. Site-local addresses were denounced as of September 2004.
Multicast
Again, same as in IPv4, packets addressed to a multicast address are delivered to all interfaces identified by the multicast address. Sometimes people call them one-to-many addresses. It’s really easy to spot a multicast address in IPv6 because they always start with FF.
I’ll get into greater detail about multicast operation in the section “How IPv6 Works in an Internetwork.” Anycast Like multicast addresses, an anycast address identifies multiple interfaces, but there’s a big difference: the anycast packet is only delivered to one address—actually, to the first one it finds defined in terms of routing distance. And again, this address is special because you can apply a single address to more than one interface. You could call them one-to-one-ofmany addresses, but just saying “anycast” is a lot easier.
You’re probably wondering if there are any special, reserved addresses in IPv6 because you know they’re there in IPv4. Well there are—plenty of them! Let’s go over them now.
Special Addresses
I’m going to list some of the addresses and address ranges that you should definitely make a point to remember because you’ll eventually use them. They’re all special or reserved for specific use, but unlike IPv4, IPv6 gives us a galaxy of addresses, so reserving a few here and there doesn’t hurt a thing!
0:0:0:0:0:0:0:0
Equals ::. This is the equivalent of IPv4’s 0.0.0.0, and is typically the source
address of a host when you’re using stateful configuration.
0:0:0:0:0:0:0:1
Equals ::1. The equivalent of 127.0.0.1 in IPv4.
0:0:0:0:0:0:192.168.100.1
This is how an IPv4 address would be written in a mixed
IPv6/IPv4 network environment.
2000::/3
The global unicast address range.
FC00::/7
The unique local unicast range.
FE80::/10
The link-local unicast range.
FF00::/8
The multicast range.
3FFF:FFFF::/32
Reserved for examples and documentation.
2001:0DB8::/32
Also reserved for examples and documentation.
2002::/16
Used with 6to4, which is the transition system—the structure that allows IPv6 packets to be transmitted over an IPv4 network without the need to configure explicit tunnels. We’ll get more into this later in “Migrating to IPv6,” but for now let me show you how IPv6 actually works in an internetwork. We all know how IPv4 works, so let’s see what’s new.
So let’s take a look at Figure 1.1, which has a sample IPv6 address broken down into sections.
Remember where you can find this subnet ID because we’ll use it in “Configuring IPv6 on Our internetwork”
So as you can now see, the address is truly much larger—but what else is different? Well, first, notice that it has eight groups of numbers instead of four and also that those groups are separated by colons instead of periods. And hey wait a second… there are letters in that address! Yep, the address is expressed in hexadecimal just like a MAC address is, so you could say this address has eight 16-bit hexadecimal colon-delimited blocks. That’s already quite a mouthful, and you probably haven’t even tried to say the address out loud yet!
One other thing I want to point out is for when you set up your test network to play with IPv6, because I know you’re going to want to do that. When you use a web browser to make an HTTP connection to an IPv6 device, you have to type the address into the browser with brackets around the literal address. Why? Well, a colon is already being used by the browser for specifying a port number. So basically, if you don’t enclose the address in brackets, the browser will have no way to identify the information.
Here’s an example of how this looks:
http://[2001:0db8:3c4d:0012:0000:0000:1234:56ab]/default.html
Now obviously if you can, you would rather use names to specify a destination (like www.lammle.com), but even though it’s definitely going to be a pain in the rear, we just have to accept the fact that sometimes we have to bite the bullet and type in the address number. So it should be pretty clear that DNS is going to become extremely important when implementing IPv6.
Shortened Expression
The good news is there are a few tricks to help rescue us when writing these monster addresses. For
one thing, you can actually leave out parts of the address to abbreviate it, but to get away with doing that you have to follow a couple of rules. First, you can drop any leading zeros in each of the individual blocks. After you do that, the sample address from earlier would then look like this:
2001:db8:3c4d:12:0:0:1234:56ab
Okay, that’s a definite improvement—at least we don’t have to write all of those extra zeros!
But what about whole blocks that don’t have anything in them except zeros? Well, we can kind
of lose those too—at least some of them. Again referring to our sample address, we can remove
the two blocks of zeros by replacing them with double colons, like this:
2001:db8:3c4d:12::1234:56ab
Cool—we replaced the blocks of all zeros with double colons. The rule you have to follow
to get away with this is that you can only replace one contiguous block of zeros in an address.
So if my address has four blocks of zeros and each of them were separated, I just don't get to
replace them all; remember the rule is that you can only replace one contiguous block with a
double colon. Check out this example:
2001:0000:0000:0012:0000:0000:1234:56ab
And just know that you
can’t
do this:
2001::12::1234:56ab
Instead, this is the best that you can do:
2001::12:0:0:1234:56ab
The reason why the above example is our best shot is that if we remove two sets of zeros,
the device looking at the address will have no way of knowing where the zeros go back in.
Basically, the router would look at the incorrect address and say, “Well, do I place two blocks
into the first set of double colons and two into the second set, or do I place three blocks into
the first set and one block into the second set?” And on and on it would go because the information
the router needs just isn’t there.
Address Types
We’re all familiar with IPv4’s unicast, broadcast, and multicast addresses that basically define
who or at least how many other devices we’re talking to. But as I mentioned, IPv6 adds to that
trio and introduces the anycast. Broadcasts, as we know them, have been eliminated in IPv6
because of their cumbersome inefficiency.
So let’s find out what each of these types of IPv6 addressing and communication methods do for us.
Unicast
Packets addressed to a unicast address are delivered to a single interface. For load balancing, multiple interfaces can use the same address. There are a few different types of unicast addresses, but we don’t need to get into that here.
Global unicast addresses
These are your typical publicly routable addresses, and they’re the same as they are in IPv4. Link-local addresses These are like the private addresses in IPv4 in that they’re not meant to be routed. Think of them as a handy tool that gives you the ability to throw a temporary LAN together for meetings or for creating a small LAN that’s not going to be routed but still needs to share and access files and services locally.
Unique local addresses
These addresses are also intended for non-routing purposes, but they are nearly globally unique, so it’s unlikely you’ll ever have one of them overlap. Unique local addresses were designed to replace site-local addresses, so they basically do almost exactly what IPv4 private addresses do—allow communication throughout a site while being routable to multiple local networks. Site-local addresses were denounced as of September 2004.
Multicast
Again, same as in IPv4, packets addressed to a multicast address are delivered to all interfaces identified by the multicast address. Sometimes people call them one-to-many addresses. It’s really easy to spot a multicast address in IPv6 because they always start with FF.
I’ll get into greater detail about multicast operation in the section “How IPv6 Works in an Internetwork.” Anycast Like multicast addresses, an anycast address identifies multiple interfaces, but there’s a big difference: the anycast packet is only delivered to one address—actually, to the first one it finds defined in terms of routing distance. And again, this address is special because you can apply a single address to more than one interface. You could call them one-to-one-ofmany addresses, but just saying “anycast” is a lot easier.
You’re probably wondering if there are any special, reserved addresses in IPv6 because you know they’re there in IPv4. Well there are—plenty of them! Let’s go over them now.
Special Addresses
I’m going to list some of the addresses and address ranges that you should definitely make a point to remember because you’ll eventually use them. They’re all special or reserved for specific use, but unlike IPv4, IPv6 gives us a galaxy of addresses, so reserving a few here and there doesn’t hurt a thing!
0:0:0:0:0:0:0:0
Equals ::. This is the equivalent of IPv4’s 0.0.0.0, and is typically the source
address of a host when you’re using stateful configuration.
0:0:0:0:0:0:0:1
Equals ::1. The equivalent of 127.0.0.1 in IPv4.
0:0:0:0:0:0:192.168.100.1
This is how an IPv4 address would be written in a mixed
IPv6/IPv4 network environment.
2000::/3
The global unicast address range.
FC00::/7
The unique local unicast range.
FE80::/10
The link-local unicast range.
FF00::/8
The multicast range.
3FFF:FFFF::/32
Reserved for examples and documentation.
2001:0DB8::/32
Also reserved for examples and documentation.
2002::/16
Used with 6to4, which is the transition system—the structure that allows IPv6 packets to be transmitted over an IPv4 network without the need to configure explicit tunnels. We’ll get more into this later in “Migrating to IPv6,” but for now let me show you how IPv6 actually works in an internetwork. We all know how IPv4 works, so let’s see what’s new.