Home > Sample chapters

Windows Server 2012 R2 Inside Out: Networking with TCP/IP

Understanding IPv6

As with IPv4, the most important thing IPv6 gives you is the IPv6 address. Although IPv4 allows for more than 4 billion networked devices, the world is running out of available IPv4 addresses. To resolve this problem, IPv6 uses 128-bit addresses, and this allows for 340,282,237,000,000,000,000,000,000,000,000,000,000 addresses—give or take a few hundred million quadrillion addresses. Put another way, IPv6 makes available enough IP addresses so that every person on 100 billion worlds of 100 billion people could have 34 quadrillion IP addresses (and there would still be 2.8236 x 10^33 IP addresses left over).

Keeping track of so many IPv6 addresses using the numbering scheme used with IPv4 is impractical. This is why IPv6 uses hexadecimal numbers rather than decimal numbers to define the address space. This means that instead of allowing only the numbers 0 through 9 for each position in the IP address, IPv6 allows the values 0 through 9 and A through F, with A representing 10, B representing 11, and so on, up to F representing 15. Therefore, the values 0 through 15 can be represented using the values 0 through F.

IPv6’s 128-bit addresses are divided into eight 16-bit blocks delimited by colons. Each 16-bit block is expressed in hexadecimal form. With standard unicast IPv6 addresses, the first 64 bits represent the network ID and the last 64 bits represent the network interface. An example of an IPv6 address follows:

FE80:0:0:02BC:00FF:BECB:FE4F:961D

Because many IPv6 address blocks are set to 0, a contiguous set of 0 blocks can be expressed as “::”, a notation referred to as the double-colon notation. Using double-colon notation, the two 0 blocks in the previous address are compressed as follows:

FE80::02BC:00FF:BECB:FE4F:961D

Three or more 0 blocks would be compressed in the same way. For example, FFE8:0:0:0:0:0:0:1 becomes FFE8::1. However, more than one double-colon abbreviation in an address is invalid because it makes the notation ambiguous. Also, leading zeros in a group can be omitted. Thus, FE80::02BC:00FF:BECB:FE4F:961D can be shortened to FE80::2BC:FF:BECB:FE4F:961D. Following this, the following addresses are all valid and equivalent:

  • FE80:0000:0000:02BC:00FF:BECB:FE4F:961D
  • FE80:0:0:02BC:00FF:BECB:FE4F:961D
  • FE80::02BC:00FF:BECB:FE4F:961D
  • FE80::2BC:FF:BECB:FE4F:961D

Finally, you can write a sequence of 4 bytes at the end of an IPv6 address in decimal, using dots as separators. You can use this notation with IPv4 compatibility addresses, such as FE80::192.168.10.52.

As with IPv4 addresses, there are different types of IPv6 addresses. As Table 2-11 shows, the type of an IPv6 address is identified by the high-order bits of the address. Link-local unicast IPv6 addresses are the equivalent of IPv4 private addresses because they are not globally reachable on the Internet. Global unicast IPv6 addresses are the equivalent of IPv4 public addresses because they are globally reachable on the Internet and must be assigned by an IP address authority.

Table 2-11 IPv6 address types

Address Type

Binary Prefix

IPv6 Notation

Description

Unspecified

000000

::/128

The IPv6 address 0:0:0:0:0:0:0:0 is an unspecified address and should be used only in software.

Loopback

0000000001

::1/128

The IPv6 address 0:0:0:0:0:0:0:1 is used for local loopback. If an application sends packets to this address, the IPv6 stack will loop these packets back to the same host (corresponding to 127.0.0.1 in IPv4).

Multicast

1111111100

FF00::/8

IPv6 addresses beginning with FF00 are used for multicast transmissions (both link local and across routers). There are no address ranges reserved for broadcast in IPv6-the same effect can be achieved by multicasting to the all-hosts group with a hop count of one.

Link-local unicast

1111111010

FE80::/10

IPv6 addresses beginning with FE80 are used for link-local unicast transmissions and are valid only in the local physical link (similar to the autoconfiguration IP address 169.254.x.x in IPv4).

Global unicast

All other addresses

All other IP addresses are used for global unicast transmissions and are valid on the public Internet.

IPv6 doesn’t use subnet masks to identify which bits belong to the network ID and which bits belong to the host ID. Instead, each IPv6 address is assigned a subnet prefix length that specifies how the bits in the network ID are used. The subnet prefix length is represented in decimal form. Therefore, if 48 bits in the network ID are used, the subnet prefix length is written as shown in the following example:

047tab01.jpg

Like IPv4, IPv6 packets are composed of two parts: a header and a payload. Unlike IPv4, IPv6 allows for sending jumbograms. A jumbogram is an IP datagram containing a payload larger than 64 KBs. IPv4 does not support this type of transmission, and it has a 64-KB payload limit.

Jumbograms greatly increase the throughput of high-performance networks. The first 40 octets of an IPv6 packet contain the header (composed of the source and destination addresses, including an IPv4 version where necessary), a traffic class section, a flow label (for packet priority information), the payload length, the next header addressing section, and the hop limit. The payload section consists of the actual data sent during transmission. The payload section can contain either 64 KBs of information, as with IPv4 packets, or a jumbogram for true IPv6 networking architectures.

Another major difference between IPv4 and IPv6 is that IP security (IPsec) is implemented within the IPv6 protocol. IPsec lies within the IP network layer and encrypts and authenticates as an integrated part of the protocol by default. This eliminates additional overhead in encoding and decoding packets using separate IPsec functionality.