Based on the incredible growth
of the Internet, it soon became evident that the IP address space would
quickly become exhausted if the growth continued. To account for this, the
IETF looked for ways in which the address space currently available could be
extended. A future solution exists in the form of IP version 6 (or IPv6 for
short), which uses a much larger 128-bit addressing scheme. In order to deal
with the issue in the shorter term, it was decided that certain address
ranges would be deemed “private”.
Private IP Address Range:
The idea behind private ranges
of IP addresses is surprisingly simple – certain IP address ranges would be
dedicated and limited to use for hosts on private networks. These addresses
would no longer be considered valid (or be routable) on the public Internet.
Instead, companies could allocate addresses in these ranges as they saw fit,
with the address ranges open and available to everyone. Private IP addresses
are a practical solution, since companies can use technologies such as
Network Address Translation or Proxy servers to connect their private
networks to the public Internet. When these technologies are used, a single
public IP address can be used to connect an entire organization to the
Internet.
As of 2008, IPv6 is generally
seen as the only practical long-term solution for IPv4 address exhaustion
that is readily available. However, although the predicted IPv4 address
exhaustion approaches, most ISPs, software vendors and service providers are
only just starting to consider widespread deployment of IPv6.
IPv6 Address Types
Increasing the IP
address pool was one of the major forces behind developing IPv6. It uses a
128-bit address, meaning that we have a maximum of 2¹²⁸ addresses available,
or 340,282,366,920,938,463,463,374,607,431,768,211,456, or enough to give
multiple IP addresses to every grain of sand on the planet. So our friendly
old 32-bit IPv4 dotted-quads don't do the job anymore; these newfangled IPs
require eight 16-bit hexadecimal colon-delimited blocks. So not only are
they longer, they use numbers and letters. At first glance, those mondo IPv6
addresses look like impenetrable secret code:
2001:0db8:3c4d:0015:0000:0000:abcd:ef12
Let's look at the
different types of IPv6 addressing.
Under IPv4 we have
the old familiar unicast, broadcast and multicast
addresses. In IPv6 we have unicast, multicast and
anycast. With IPv6 the broadcast addresses are not used
anymore, because they are replaced with multicast addressing.
IPv6 Unicast
This is similar to
the unicast address in IPv4 – a single address identifying a single
interface. There are four types of unicast addresses:
- Global unicast addresses, which are
conventional, publicly routable address, just like conventional IPv4
publicly routable addresses.
- Link-local addresses are akin to the private,
non-routable addresses in IPv4 (10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16). They are not meant to be routed, but confined to a single
network segment. Link-local addresses mean you can easily throw together a
temporary LAN, such as for conferences or meetings, or set up a permanent
small LAN the easy way.
- Unique local addresses are also meant for private
addressing, with the addition of being unique, so that joining two subnets
does not cause address collisions.
- Special addresses are loopback addresses,
IPv4-address mapped spaces, and 6-to-4 addresses for crossing from an IPv4
network to an IPv6 network.
Multicast in
IPv6 is similar to the old IPv4 broadcast address a packet sent to a
multicast address is delivered to every interface in a group. The IPv6
difference is it's targeted instead of annoying every single host on the
segment with broadcast blather, only hosts who are members of the multicast
group receive the multicast packets.
Anycast
address is a single address assigned to multiple nodes. A packet sent to an
anycast address is then delivered to the first available node. This is a
slick way to provide both load-balancing and automatic failover.
Address Dissection
Let's take another
look at our example IPv6 address:
2001:0db8:3c4d:0015:0000:0000:abcd:ef12
______________|____|___________________
global prefix subnet Interface ID
The prefix identifies
it as a global unicast address. It has three parts: the network identifier,
the subnet, and the interface identifier.
IPv6 addresses must
total 128 bits. IPv4 addresses are represented like this:
0000:0000:0000:0000:0000:0000:192.168.1.25
Eight blocks of 16
bits each are required in an IPv6 address. The IPv4 address occupies 32
bits, so that is why there are only seven colon-delimited blocks.
The localhost address
is 0000:0000:0000:0000:0000:0000:0000:0001.
Naturally we want
shortcuts, because these are long and all those zeroes are just
dumb-looking. Leading zeroes can be omitted, and contiguous blocks of zeroes
can be omitted entirely, so we end up with these:
2001:0db8:3c4d:0015:0:0:abcd:ef12
2001:0db8:3c4d:0015::abcd:ef12
::192.168.1.25
::1
ipv6calc is invaluable for checking your work. Suppose you're not sure
if your compressed notation is correct. ipv6calc displays the
uncompressed notation:
$ ipv6calc --in ipv6addr --out ipv6addr --printuncompressed ::1
0:0:0:0:0:0:0:1
$ ipv6calc --in ipv6addr --out ipv6addr --printfulluncompressed 2001:0db8:3c4d:0015::abcd:ef12
2001:0db8:3c4d:0015:0000:0000:abcd:ef12
Resource Link:Current Status of IPv6 Support for Networking Applications