One of the biggest architectural changes in Windows Server 2008 is the inclusion of IPv6. IPv6 has been a part of Windows since Windows 2000, but Windows Server 2008 is the first version of Windows to enable IPv6 by default. Furthermore, The transport stack has been completely redesigned so that IPv6 and IPv4 are able to run parallel to each other, as shown in Figure A below.
The fact that some Windows features will not even work without IPv6 proves that Microsoft sees IPv6 as the protocol of the future. Even so, IPv6 is a lot more complex than IPv4, and can be a bit intimidating to say the least. In this article series, I will introduce you to the basics of using IPv6.
Figure A IPv4 and IPv6 run parallel to each other in the Network Layer of Windows 2008’s TCP/IP stack.
Although IPv6 addresses look nothing like IPv4 addresses, they do have their similarities. The biggest differences are that IPv4 addresses are 32 bits long, and IPv6 addresses are 128 bits long. Because of the excessive length of an IPv6 address, they are represented in an abbreviated form that will probably look completely foreign to anyone who has never used them before.
Any time a seasoned network administrator sees an address like 192.168.1.1, they instantly recognize it as an IPv4 address. This address contains four, eight bit numbers separated by periods. In order to understand how IPv6 addressing works, it is important to realize that when you see an IPv4 address, the address is being expressed in decimal form. This decimal form is a shortcut to expressing a 32 bit binary number. For example, the IP address 192.168.1.1 expressed in binary form looks like this:
In the interest of saving space, I don’t want to get into how I did the conversion, but if you need help converting from a decimal number to a binary number, you can use the Windows Calculator.
Hopefully, my example above helps you to understand that even a simple IPv4 address is really long when you convert it to binary form. This problem is compounded when we start talking about IPv6 addresses though. Like an IPv4 address, an IPv6 address is an abbreviated form of a binary number. For example, here is what a 128 bit binary number looks like:
1111111010000000 0000000000000000 0000000000000000 0000000000000000 0000001000001100 0010100111111111 1111111001000100 0111111000111111
When an IPv4 address is expressed in binary form, it is expressed in eight digit chunks called octets. Each of these octets corresponds to one of the numbers in the address (when it is displayed in digital form). IPv6 addresses are expressed in 16 digit chunks when they are displayed in binary form. Unlike IPv4 addresses though, IPv6 addresses are not written in decimal form, but rather in hexadecimal form. Therefore, to see what an IPv6 address looks like, convert each of the 16 digit blocks of numbers above to hexadecimal format, and then separate each hexadecimal number with a colon. The result looks like this:
As you can see, this address is still pretty long. We can (and should) simplify it though. In IPv6 addressing, leading zeros are irrelevant, so let’s rewrite the address with the leading zeros omitted. After doing so, the address above becomes:
Just omitting the leading zeros shortens the address quite a bit, but there is one more thing that can be done. You will notice that three of the values in the address are 0. Any time that you have a series of zeros, you can get rid of all of the zeros, and just use double colons instead. Keep in mind though, that you can only use double colon notation once per address. In this case, the address becomes:
As you can see, IPv6 addresses are more complex than their IPv4 counterparts, but there is at least a logical reason behind the way that they are expressed. In Part 2 I will conclude this series by discussing the special meanings behind some of the digits in an IPv6 address.