Before we cover the next two topics,
which include how domain names map to IPv6 addresses and vice versa,
we'd better describe the representation and structure of IPv6
addresses. As you probably know, IPv6 addresses are 128 bits long.
The preferred representation of an IPv6 address is eight groups of as
many as four hexadecimal digits, separated by colons; for example:

0123:4567:89ab:cdef:0123:4567:89ab:cdef

The first group of hex digits (0123, in this example) represents the
most significant (or highest order) four bits of the address.
Groups of digits that begin with one or more zeros don't need
to be padded to four places, so you can also write the previous
address as:

123:4567:89ab:cdef:123:4567:89ab:cdef

Each group must contain at least one digit, though, unless
you're using the :: notation. The :: notation allows you to
compress sequential groups of zeros. This comes in handy when
you're specifying just an IPv6 prefix. For example:

dead:beef::

specifies the first 32 bits of an IPv6 address as
*dead:beef* and the remaining 96 as zeros.
You can also use :: at the beginning of an IPv6 address to specify a
suffix. For example, the IPv6 loopback address is commonly written
as:

::1

or 127 zeros followed by a single one. You can even use :: in the
middle of an address as a shorthand for contiguous groups of zeros:

dead:beef::1

You can use the :: shorthand only once in an address, since more than
one could be ambiguous.
IPv6 prefixes are specified in a format similar to IPv4's CIDR
notation. As many bits of the prefix as are significant are expressed
in the standard IPv6 notation, followed by a slash and a decimal
count of exactly how many significant bits there are. So the
following three prefix specifications are equivalent (though
obviously not equivalently terse):

dead:beef:0000:00f1:0000:0000:0000:0000/64
dead:beef::00f1:0:0:0:0/64
dead:beef:0:f1::/64

IP