IPv6 looks different than IPv4 but there are some similarities. For example we have unicast addresses and we still have a “public” and “private” range. We use different names for these but the idea is the same. One of the differences is that IPv6 has some additional unicast address types.
We still have multicast, same idea but we use different addresses. There are also some reserved addresses that are similar to their IPv4 counterparts.
Something new is anycast, an address that can be assigned on multiple devices so that packets are always routed to the closest destination. Also, broadcast traffic doesn’t exist in IPv6 anymore.
In this lesson we’ll take a look at all the different address types and I’ll explain what they look like and how we use them.
Unicast
Unicast IPv6 addresses are similar to unicast IPv4 addresses. These are meant to configure on one interface so that you can send and receive IPv6 packets. There are a number of different unicast address types that we’ll discuss here.
Global Unicast
The global unicast IPv6 addresses are similar to IPv4 public addresses. These addresses can be used on the Internet. The big difference with IPv4 however, is that IPv6 has so much address space that we can use global unicast addresses on any device in the network.
Unique Local
Unique local addresses work like the IPv4 private addresses. You can use these addresses on your own network if you don’t intend to connect to the Internet or if you plan to use IPv6 NAT. The advantage of unique local addresses is that you don’t need to register at an authority to get some address space. The FC00::/7 prefix is reserved for unique local addresses, however when you implement this you have to set the L-bit to 1 which means that the first two digits will be FD. Here’s an example:

Let’s discuss all the fields of the unique local address. The first 7 bits indicate that we have a unique local address. 1111 110 in binary is FC in hexadecimal. However, the L bit (8th bit) has to be set to 1 so we end up with 1111 1101 which is FD in hexadecimal.
The global ID (40 bits) is something you can make up. Normally an ISP would choose a prefix but now it’s up to you to think of something. What’s left is 16 bits that we can use for different subnets. This gives us a 64-bit prefix, what’s left is 64 bits for the interface ID.
Let’s work on an example…let’s say that we have a LAN and we want to use unique local IPv6 addresses and we require 10 subnets:
- The prefix starts with FD.
- We have 40 bits for the global ID, each hexadecimal character represents 4 bits so we can pick 10 hexadecimal characters. Let’s use AB:1234:5678 as the global ID.
- Our first subnet will start with 0000.
Here’s what we’ll end up with:

FDAB:1234:5678:0000::/64 will be our first subnet. The other subnets could look like this:
- FDAB:1234:5678:0000::/64
- FDAB:1234:5678:0001::/64
- FDAB:1234:5678:0002::/64
- FDAB:1234:5678:0003::/64
- FDAB:1234:5678:0004::/64
- FDAB:1234:5678:0005::/64
- And so on…
If you are just messing around with IPv6 then you could use a simple global ID like 00:0000:0000 which is nice because you can shorten it to ::. For production networks, it’s better to pick something that is truly unique. When you want to connect multiple sites that use unique local addresses then you want to make sure you don’t have overlapping global IDs.
Link-Local
Link-local addresses are something new in IPv6. As the wording implies, these addresses only work on the local link, we never route these addresses. These addresses are used to send and receive IPv6 packets on a single subnet.
When you enable IPv6 on an interface then the device will automatically create a link-local address. We use the link-local address for things like neighbor discovery (the replacement for ARP) and as the next hop address for routes in your routing table. You will learn more about this when you work through the static route and OSPFv3 lessons.
We use the FE80::/10 range for link-local addresses, this means that the first 10 bits are 1111 1110 10. Here’s what it looks like:

The first 10 bits are always 1111 1110 10 which means that we start with FE80. Technically the following are all valid link-local addresses:
- FE8 – 1111 1110 1000
- FE9 – 1111 1110 1001
- FEA – 1111 1110 1010
- FEB – 1111 1110 1011
These link-local addresses however are automatically generated by the host which sets the 54 bits to zeroes. This means that normally you will only see link-local addresses that start with FE80.
Site-Local
The site local range was originally meant to be the “private range” for IPv6. It has been deprecated though and nowadays we use the unique local addresses instead. For these addresses we used the FEC0::/10 range (1111 1110 11 in binary)
If you are interested why they gave up on the site local addresses then you can read RFC 3879 for the full story.
Unspecified
The 0:0:0:0:0:0:0:0 address is called the unspecified address, :: is the shortened version of this address. It should never be configured on a host and is used to indicate that the host doesn’t have any address.
Loopback
the 0:0:0:0:0:0:0:1 address is called the loopback address, the short version is ::1. IPv6 devices can use this to send an IPv6 packet to themselves which is typically used for testing. It should never be assigned to any physical interfaces. This address is the equivalent of IPv4’s 127.0.0.1 address.
Multicast
In IPv6 we use multicast for IPv6 (routing) protocols and for user traffic. We use the FF::/8 prefix for multicast traffic (1111 1111 in binary). Let’s take a look what the addresses look like:

The first 8 bits indicates that we have a multicast address. The next 4 bits are used to set flags, these are used for some special things like embedded RP. The scope bits are used to tell the “scope” of this multicast traffic. You can use this to indicate that the multicast traffic should be restricted to link-local, organization local or global (Internet).
Below you will find an overview with some of the most common IPv6 multicast addresses:
- FF02::1 – all nodes on local network segment.
- FF02::2 – all routers on local network segment.
- FF02::5 – all OSPFv3 routers.
- FF02::6 – all OSPFv3 DR routers.
- FF02::9 – RIPng routers
- FF02::A – EIGRP routers
If you look closely you can see some of these addresses are similar to their IPv4 multicast counterparts. For example, in IPv4 we use 224.0.0.05 and 224.0.0.6 for OSPF while we use FF02::5 and FF02::6 for ipv6. We use 224.0.0.9 for RIPv2 and FF02::9 for RIPng.
Anycast
The anycast address is new in IPv6. The same address can be assigned to multiple devices and advertised in a routing protocol. When you send a packet to an anycast address then it will be delivered to the closest interface. Something similar is possible in IPv4 but it was never “officially” possible. There is no specifix prefix for anycast addresses. Any unicast address that you use on more than one device is suddenly an anycast address. The only difference is that you have to configure the device and tell that the address will be used for anycast.
No comments:
Post a Comment