IPv6 Tutorial

By Bryan Waters



IPv6 is an ever-emerging star of the Internet. Several years ago, when the protocol started to be drafted, it immediately entered under every spotlight available in IT. Back then, the perspective of not having any more IPv4 addresses to assign seemed horrifying: nobody was ready for it, and there were quite a few people who expected the Internet to be dead and buried in a few months.

The fears seemed to be premature back then. Indeed, five years after news of IPv6 started grabbing the headlines, the perspective of IPv4 depletion is still at least five years away. This does serve IANA's purposes: the migration is slow and gradual.

But most important, the migration is not determined only by the depletion problem. IPv6 offers several advantages of its own, besides the much larger address space, which ensures that IPv6 addresses will certainly not be depleted anywhere in the following decades.

What are these advantages? The IPv6 protocol includes many innovations, along with some features that are present in IPv4, but were developed after the IPv4 protocol itself. The most important of these are link-local addresses, jumbograms, link-layer level error checking, as well as native support for multicasting and network-layer security.

Link-local addresses are also present in IPv4. These are special addresses used in addition to global addresses, which applications can use. Link-local addresses are always present and never change, greatly simplifying the configuration and routing protocols.

Jumbograms are very large packets, potentially much larger than the IPv4-standard 64 kB packets. In a network, the data stream is not continuous, but discrete, carried using so-called packets, standard-sized pieces of information, which include not only the information itself, but also other details used for routing, error checking and so on. When IPv4 was designed, 64 kB packets were practical enough. Today, however, something as simple as a photograph requires hundreds of packets, each containing more than just the information. Thus, some traffic is, essentially, "wasted". Jumbograms come to alleviate this: since several hundreds of KiB (or even more - up to 4 GB) can be packed into a single packet, the transfer of large files requires fewer packets, and hence less traffic used for something else than information. Furthermore, jumbograms can considerably simplify the design of protocols and low-level applications.

Unlike IPv4, IPv6 does not rely on network-level checksum fields to ensure that information is correctly transmitted. When IPv4 was designed, the network infrastructure was less reliable than today, meaning that errors were often occurring during transmission. It is thought that errors are much less common today, and thus, it makes sense to transfer error-checking to transport layers (protocols like TCP or UDP). As a consequence, IPv6 is quite easier to implement - an important advantage in the development of embedded systems, like network-enabled house appliances.

Finally, IPv6 has native support for IPsec, a network-layer encryption and authentication protocol. Unlike IPv4, IPv6 requires that this protocol is implemented.

IPv6 under Windows

Configuring Windows for IPv6 support is not very difficult. In fact, if you have Windows Vista or Windows Server 2008, you need not do anything - IPv6 is already there and enabled. Due to IPv6's support for link-local addresses and DHCP, chances are you do not even need to go through any additional configuration tasks.

If you are using Windows XP, you will have to install the IPv6 protocol first. To do so, open the Command Prompt (Start -> Programs -> Accessories -> Command Prompt) and type:

C:>netsh interface ipv6 install

To make sure that the installation has been successful, run ipconfig. The output should include a list of IPv6 addresses, along with some other IPv6 and IPv4-related output. It may look quite similar to this:

c:>ipconfig

Ethernet adapter Ethernet:

Connection-specific DNS Suffix . : iptest.example.com

IP Address. . . . . . . . . . . . : 192.168.123.254

Subnet Mask . . . . . . . . . . . : 255.255.252.0

IP Address. . . . . . . . . . . . : 2001:db8:8311:f282:2461:6134:a4a7:faa7

IP Address. . . . . . . . . . . . : 2001:db8:8311:f282:a451:f134:64a1:b944

IP Address. . . . . . . . . . . . : 2001:db8:8311:f282:651:f5ff:ab05:ac75

IP Address. . . . . . . . . . . . : fec0::f282:200:ab8a:ab3e:fc61%1

IP Address. . . . . . . . . . . . : fe80::200:ab8a:ab3e:fc61%4

Default Gateway . . . . . . . . . : 192.168.123.254

fe80::210:ffff:fed6:61c0%4

In most IPv6 networks, it is highly unlikely that you will need to change the IPv6 address. However, if you need to, you can do so by running the following command in the Command Prompt:

c:>netsh interface ipv6 add (address)

replacing (address) with the IPv6 you want to use.

IPv6 under Linux

Most Linux distributions come with an IPv6-ready kernel and userpace toolset. If you are using an older distribution, or if you have compiled the kernel manually, you may want to check that IPv6 support is available. If it does, your /proc filesystem will include the file /proc/net/if_inet6. If it is not, it means you need to load the IPv6 module, or, if it is not available, to recompile the kernel.

Loading the IPv6 modprobe is done by running modprobe:

$ modprobe ipv6

The module will be loaded if it exists. If not, you will have to recompile the kernel, or at least update it. Generally, updating the kernel is the easiest solution if your distribution allows you to. You will hardly find a single Linux distribution not supporting IPv6 by default. Otherwise, you will have to recompile your kernel for IP support. The list of options should include packet socket, Unix domain sockets, kernel/user netlink socket, routing messages, tcp/ip networking, the ipv6 protocol (compiled as a module if you want) and /proc filesystem support.

After enabling IPv6 support by loading the IPv6 module (if you have compiled IPv6 directly into the kernel, then you need not load the module - IPv6 support is already there), you can test your configuration by running ifconfig. The output should include lines like the following:

$ ifconfig

eth1 Link encap:Ethernet HWaddr 00:1C:42:D9:33:65

(some output omitted)

inet6 addr: 2001:a50:3450:1:20A:cbff:facf:9d0a/64 Scope:Global

inet6 addr: fe80::108:c75f:fedf:9d0a/64 Scope:Link

(some output omitted)

The lines that start with inet6 are the ones important.

Should you enable IPv6?

If you use IPv6 in a network, the answer is yes, definitely. IPv6 greatly simplifies network configuration - since it is so easy to assign dynamic addresses and since many of the IPv4-related hassles are gone, you hardly ever need to touch your TCP/IP configuration with IPv6.

However, if you do not use it at all, disabling it may slightly improve your network performances. Nevertheless, chances are you do not need to do it. Keeping it is a better bet.

Bryan Waters has been developing software for over two decades and has written numerous technical articles on all aspects of the software industry as well as several books that are currently available on Amazon.com covering topics such as Windows software development, PHP and web services. He currently blogs his opinions and thoughts on technology at http://abwaters.com/.

0 Discussion: