IP version 4 (known as IPv4) has been widely used for decades of years and it is proven to be robust, easily implemented and interoperable. However, as the increasingly growth of the internet, IPv4 faces many problems: the impending exhaustion address space, large routing tables etc. IP version 6 (known as IPv6) is developed by Internet Engineering Task Force (IETF) to solve these problems.
IPv6 addresses are 128-bit identifiers for interfaces and sets of interfaces. These 128 bit is divided to eight 16-bit blocks with each block is represented by a 4-digital hexadecimal number and separated by colons. For example: 2001:0DB8:0000:2F3B:02AA:00FF:FE28:9C5A. Uppercase or lower case is not sensitive for IPv6 addresses.
For the IPv6 addresses with long sequences of `0', double-colon "::" is used to compress the `0's in the contiguous sequence of 16-bit block to further simplify the representation. "::" indicates one or more groups of 16 bits of `0's and can also be used at the leading or trailing part of an address. For example: FE80:0:0:0:2AA:FF:FE9A:4CA2 can be further simplified by `0' compressing and turns to: FE80::2AA:FF:FE9A:4CA2.
The following formula can be used if you want to determine how many `0's are represented by the "::" :
the number of bits expressed by "::" = (8-number of blocks in the address)*16.
For example: in the address FE80::2AA:FF:FE9A:4CA2, there are 5 blocks. The number of bits expressed by the "::" is 48 (i.e. (8-5)*16=48).
Note that this compression can only appear once in a given IPv6 address, or you could not determine how many `0's are represented by each instance of "::".
When dealing with a mixed environment of IPv4 and IPv6 nodes, x:x:x:x:x:x:d.d.d.d can be used as a more convenient form, where the 'x's are the hexadecimal values of the six high-order 16-bit pieces of the address, and the 'd's are the decimal values of the four low-order 8-bit pieces of the address (standard IPv4 representation). For example: "0:0:0:0:0:FFFF:129.144.52.38" and the compressed form "::FFFF:129.144.52.38" are all valid addresses.
An IPv6 address is comprised of two portion: IPv6 Prefix and IPv6 interface ID.
Where IPv6 address represents the hexadecimal 128-bit address, and prefix length is a decimal value that indicates the number of contiguous, higher-order bits of the address that make up the network portion of the address. For example, "21DA:D3::/48" and "21DA:D3:0:2F3B::/64" are IPv6 address prefixes.
In general, there are three types of IPv6 address: Unicast IPv6 Addresses, Multicast IPv6 Addresses and Anycast IPv6 Addresses.
For the Unicast IPv6 Addresses, there are many types: Global unicast addresses, Link local addresses etc. Global unicast addresses are globally routable and reachable on the IPv6 portion of the Internet.
A prefix for link local addresses is always FE80::/64 with the interface ID be 64-bit length.