Internet Protocol version 6, known as IPv6, is an upgrade to the world’s most common network addressing scheme, Internet Protocol version 4 (IPv4). The purpose of this post is to provide you with some background information on IPv6 and some simple things that you can do to get acquainted with it.
In the past decade, the United States has added telephone number area codes to increase the number of available phone numbers, due to the growth of devices requiring phone numbers.
Similar forces are in place with networking, with over a billion Internet users in the world today, and growing. And increasing numbers of products such as cars, appliances and mobile devices are network-enabled, further driving demand for network addresses. IPv6 is aimed at satisfying that demand.
The development for this upgrade has been in the works for years and is coming to a head in 2008 with government agencies like the Department of Defense mandating that their networks are IPv6 compliant this year.
Outside the United States, many countries are significantly ahead in updating their networks to support IPv6. China, for example, has deployed a nationwide pure IPv6 network.
To transmit and receive packets over the Internet, all devices need to use a "public" (routable) IP address, even if we use "private" (non- routable) IP addresses on our LANs. Most of us have just a single public IP address assigned to our networks from our ISP. Our routers use NAT (Network Address Translation) to share that single public IP address from our ISP for all our network devices on our LANs.
This solution has helped reduce the demand for public IP addresses, but introduces technical challenges with applications like VoIP as well as for other network services on a private LAN that require direct communication over the public Internet.
You may have already seen IPv6 addresses and they can be a bit intimidating at first glance. IPv6 addresses are 128 bits long and use a hexadecimal numbering scheme instead of the 32 bit decimal numbered IPv4 addresses we use today.
For example, a valid IPv6 address looks like this:
We already use hexadecimal numbers for our 48 bit MAC addresses, so the use of hexadecimal for network addressing isn’t completely new. Further, there are several notation simplifications in writing an IPv6 address. As with MAC addresses, non-numeric characters are not case sensitive. Leading zeros in each set of 4 characters can be dropped, and once within an IPv6 address, one or more consecutive 4 character sets of zeros can be replaced with a double colon, or "::".
As with IPv4 addresses, there are different types of IPv6 addresses. IPv4 addresses are broken into classes (Class A, B, C, D,…) and types (Public and Private). IPv6 addresses don’t use classes, but have different types including Global, Unique Local, and Link Local.
IPv6 Global addresses are similar to IPv4 Public addresses, as they are assigned by an ISP or Registry, and usable over the Internet. A Global IPv6 address typically starts with the digits 2 or 3.
IPv6 Unique Local addresses are similar to IPv4 Private addresses, and an organization can use them internally as desired. Unique Local addresses start with FC or FD.
IPv6 Link Local addresses don’t have an equivalent IPv4 address type. These addresses are only usable over a specific link, or interface, and are not routable globally or locally. Link Local addresses start with hexadecimal FE80.
A neat feature to Link Local addresses is they are automatically assigned to an interface by the local Operating System. Thus, a device can have an IPv6 Link Local address without a DHCP server or manual assignment. Examples of the three types of IPv6 addresses are below.
Global IPv6 Address: 2001:0db8::1428:57ab
Unique Local IPv6 Address: fd00::1
Link Local IPv6 Address: fe80::20c:29ff:fe5c:6af1
Your computers likely support IPv6 today. Out of the box, Microsoft Vista supports IPv6. Enabling IPv6 on Microsoft XP is a simple point and click operation that only takes a minute. Most Linux distributions also support IPv6. Ubuntu, for example, automatically creates a Link Local IPv6 address for each of its interfaces. Further, you can run IPv6 and IPv4 safely, at the same time.
To enable IPv6 on XP, go to the Control Panel – Network Connections, double click on an Interface, and click on Properties. Navigate to Install > Add > Protocol, then select Microsoft TCP/IP version 6. Figure 1 shows the applicable XP screens. Note that enabling IPv6 on one interface will enable it on all interfaces in XP.
Figure 1: Adding IPv6 Protocol in XP
With IPv6 enabled in your Operating System, you can begin to experiment with it on your LAN. A simple ipconfig /all from the command line in XP (Figure 2) shows my network interface has an IPv4 address of 192.168.3.156 and a Link Local IPv6 address of fe80::20e:a6ff:fe4f:601. The %5 after the IP address is an interface ID used on my Windows machine. I’ll touch on how that comes into play shortly.
Figure 2: ipconfig / all showing IPv4 and v6 addresses
In Linux, I type ifconfig from the command line. Figure 3 shows my network interface has an IPv4 address of 192.168.3.162 and a Link Local IPv6 address of fe80::20c:29ff:fe5c:6af1.
Figure 3: ifconfig output
IPv6 concepts are similar to IPv4’s. Devices can use IPv6 as source and destination addresses to pass packets over a network, and tools like ping work for network testing as they do in IPv4, with some slight variations.
To ping another device over a LAN using IPv6 Link Local addresses, it is necessary to specify the interface to send out the ping. On a Windows machine, each interface is given an ID in the format of %X. The interface ID associated with a Link Local address is seen at the end of the IPv6 address via the ipconfig /all command, as shown previously.
For example, to ping my Linux machine from my XP Pro machine, I used the command line statement ping fe80::20c:29ff:fe5c:6af1%5. Notice that I used the IPv6 address of the Linux machine, and appended the interface ID (%5) associated with my XP machine’s Link Local IPv6 address.
I can also ping my XP Pro machine from my Linux machine. In this case, I specify my eth0 interface using the Linux command line statement of ping6 -I eth0 fe80::20e:a6ff:f34f:601. Figure 4 shows my successful IPv6 pings first from my XP to Linux machine and Figure 5 from my Linux to XP machine.
Figure 4: Windows IPv6 ping
Figure 5: Linux IPv6 ping
With IPv6 enabled, I have successfully "dual stacked" my computers, meaning I’m running both IPv4 and IPv6 on my network interfaces. Dual stacking is a common transition strategy from IPv4 to IPv6 where both protocols can be run simultaneously.
To route IPv6 packets, router interfaces have to be IPv6 enabled and configured. Although most computers support IPv6 today, not many consumer grade network devices are IPv6 capable. However there are a couple of consumer routers that support IPv6, such as the Linksys RVS4000, Apple Airport Extreme and Buffalo Nfiniti Dual-Band ( the Buffalo is currently unavailable). And many Broadcom and Atheros-based routers including the Linksys WRT54G and WRT54GL can be upgraded with the open source DD-WRT firmware to support IPv6.
Using IPv6 over the Internet not only requires a router that supports IPv6, it may also requires either a conversion technique, such as IPv6 to IPv4 encapsulation, known as 6-4 tunneling, or possibly working with your service provider to pass IPv6 packets.
Verizon is my ISP, but searching IPv6 on their customer support site produced no information. Comcast’s customer support page was equally deficient on IPv6, indicating both are a bit behind China in their deployment of IPv6. Based on a simple inspection of these two large ISPs, it would appear it is going to be a while before small networks have to deploy IPv6 outside their LANs.
Nevertheless, IPv6 is coming; it is just a matter of time. You can get started by experimenting with it on your network as I’ve shown above. It’s always good to have an understanding of a technology before it becomes a necessity!