Crash Course in IPv6 (Part 3)
In Part 2 of this article series, I explained that there are actually three different types of IPv6 addresses; unicast, multicast, and anycast. In that article, I briefly explained that unicast addresses are used to identify an individual host on a network. Multicast addresses, on the other hand, identify a group of network interfaces that typically reside on multiple computers. When a packet of data is sent to a multicast address, that packet is sent to all network interfaces in the multicast group. Like multicast addresses, anycast addresses identify a specific group of network interfaces that usually reside on multiple computers. The difference is that when packets are sent to a multicast address, they are sent to all of the network interfaces in the group. In contrast, when packets of data are sent to an anycast address, the packets are not sent to the entire group. Instead, they are only sent to the member that is in the closest physical proximity to the sender.
As you can see, there are at least some similarities between multicast and anycast addresses. In this article, I will conclude this series by discussing multicast and anycast addresses in more detail.
Multicast Addresses
As I explained earlier, multicast addresses are used to identify a group of network interfaces, known as a multicast group. These network interfaces are typically located on multiple computers, but this isn’t an absolute requirement. Multicast addresses are used to send information to any network interface that is defined as belonging to the multicast group.
One of the most interesting things about multicast addresses is that they are not mutually exclusive. Just because a network interface has a multicast address does not mean that the machine can not also have a unicast address or belong to other multicast groups. It is actually very common for a network interface to have a unicast address and to also be a member of multiple multicast groups. In fact, some operating systems add a computer’s network adapter to various multicast groups at the time that the network adapter’s unicast address is defined. For example, the Solaris operating system automatically adds network adapters to the Solicited Node and the All Nodes (or All Routers) multicast groups. In case you are unfamiliar with Solaris, the Solicited Node group is used for discovering other IPv6 enabled devices on the network. Windows Vista relies on a similar function.
Now that I have explained what multicast addresses are used for, I want to talk about what a multicast address looks like. Although an IPv6 address is 128 bits in length, it’s the first eight bits of the address that define an address as being a multicast address. Every multicast address uses a format prefix of 1111 1111. When expressed in colon hexadecimal notation a multicast address will always begin with FF.
The next four bits in a multicast address are known as flag bits. At the present time, the first three of these four bits are unused (and are therefore set to 0). The fourth flag bit is known as the transient bit. Its job is to express whether the address is a permanent or a temporary address. If the address is permanently assigned, this bit is set to 0, otherwise it is set to 1 to indicate that the address is transient (temporary).
The next four bits in a multicast address are known as the Scope ID bits. The amount of space reserved for the scope ID bits is 4 bits in length, which means that there are 16 different possible values. Although not all 16 available values are used at the present time, seven of these values are used to determine the address’ scope. For example, if an address has a global scope, then the address is valid across the entire Internet. The currently used scope ID bits are:
Decimal value Binary Value Address Scope
0 0000 Reserved
1 0001 Node-Local Scope
2 0010 Link Local Scope
5 0101 Site Local Scope
8 1000 Organization Local Scope
14 1110 Global Scope
15 1111 Reserved
The remaining 112 bits make up the group ID. The group ID’s size allows multicast addresses to consume 1/256th of the total IPv6 address space.
To put this addressing scheme into prospective, I want to show you a few commonly used multicast addresses:
FF0x0:0:0:0:0:1
This is a multicast to all nodes. You might have noticed the X in the address, which is not a valid hexadecimal character. The X is a placeholder for the scope. This particular address can use the node local scope (FF01:0:0:0:0:0:1) or the link local scope (FF02:0:0:0:0:0:1).
FF0x:0:0:0:0:0:2
This multicast address is assigned to all routers within the defined scope. Again, the X in the address acts as a placeholder for the scope. Valid scopes are node local (FF01:0:0:0:0:0:2), Link Local (FF02:0:0:0:0:0:2), and site local (FF05:0:0:0:0:0:2).
Anycast Addresses
If you have some experience working with the IPv4 protocol, then you probably know that the concepts of unicast and multicast exist with the IPv4 protocol, although they are implemented differently. Anycast however, is unique to IPv6. Anycast works like a combination of unicast and multicast addresses. A unicast address is used to send data to one specific recipient, a multicast address is used to send data to a group of recipients, but an anycast address is used to send data to one specific recipient out of a group of recipients.
In case you are wondering, anycast was created as a way of making load balancing easier. Imagine a situation in which you need to provide a large number of users with access to either a service or to a router. In a situation like this, it often makes sense to use multiple servers to host the service that is being provided, or to use multiple routers, whichever the case may be. The reason is because doing so allows you to distribute the heavy workload among multiple devices so that no one single device is overwhelmed.
This type of load balancing is difficult to achieve using IPv4 (although it has been done). Using anycast addresses with IPv6 is an absolutely perfect solution to the need for load balancing. Think about it for a minute. You need to send a user request to one of many devices. You don’t really care which of the designated devices handles the request, as long as the request is taken care of. By using anycast addresses, each request is automatically sent to the device that is in the closest geographic proximity to the computer that is making the request. In certain situations, anycast can even be used to provide fault tolerance should a router fail. The failure can be detected, and requests can be redirected to the next closest router.
The most bizarre thing about anycast addresses is that there is no special addressing scheme. So far in this article series, you have seen that there are all sorts of rules governing the use and structure of unicast and multicast addresses. This simply isn’t the case with an anycast address. All you have to do to create an anycast address is to assign the same unicast address to multiple hosts. In doing so, the unicast address becomes an anycast address.
Conclusion
In this article series, I have tried to skim the basics of the IPv6 protocol. Most administrators probably won’t need to become IPv6 experts any time soon, but IPv6 is a required component in Windows Vista and Longhorn Server. As such, it makes sense to learn at least a little bit about it.