LinuxSelfhelp.com

2.3. How do IPv6 addresses look like?

As said, IPv6 addresses are 128 bits long. This number of bits can cause very high decimal numbers with up to 39 digits:

2^{128}-1: 340282366920938463463374607431768211455
  

"Such numbers are not really addresses that can be memorized. Also the IPv6 address schema is bitwise orientated (just like IPv4, but that's not often recognized). Therefore a better notation of such big numbers is hexadecimal. In hexadecimal, 4 bits (also known as "nibble") are represented by a digit or char from 0-9 and a-f (10-15) and reduces the length to 32 chars.

2^{128}-1: 0xffffffffffffffffffffffffffffffff
  

This representation is also not very convenient (possible mix-up or loss of single hexadecimal digits), so the designers of IPv6 chose a hexadecimal format with a colon as separator after each block of 16 bits. In addition, the leading "0x" (a signifier for hexadecimal values used in programming languages) is removed:

2^{128}-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
  

A usable address (see address types later) is e.g.:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566
  

For simplifications, leading zeros of each 16 bit block can be omitted:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566  -> 
¬ 3ffe:ffff:100:f101:210:a4ff:fee3:9566
  

One sequence of 16 bit blocks containing only zeroes can be replaced with "::". But not more than one time, because otherwise its no longer a unique representation.

3ffe:ffff:100:f101:0:0:0:1  ->  3ffe:ffff:100:f101::1
  

The biggest reduction is seen by the IPv6 localhost address:

0000:0000:0000:0000:0000:0000:0000:0001  ->  ::1
  

There is also a so-called compact (base85 coded) representation defined RFC 1924 / A Compact Representation of IPv6 Addresses (written 1996), never seen in the wild, but here is an example:

# ipv6calc --addr_to_base85 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 
Itu&-ZQ82s>J%s99FJXT
  

Info: ipv6calc is an IPv6 address format calculator and converter program and can be found here: ipv6calc