IPv6 is a generational updating of the IPv4 protocol. It is based heavily on IPv4, using many of the same concepts and similar data structures, but it is not backward compatible with IPv4. It can be deployed in parallel to IPv4, on a given node, and on the same network connections, with no interference between the two protocols (this is called “dual stack”).

IPv6 was originally specified in RFC 1883, “Internet Protocol, Version 6 (IPv6) Specification”, December 1995. This was replaced by RFC 2460,”Internet Protocol, Version 6 (IPv6) Specification”, December 1998. During the 15 years since RFC 2460, IPv6 has matured and is being deployed worldwide.

The most obvious difference from IPv4 is the increase in the IP address size (in bits) and number of available public addresses. A related major difference is the absence of Network Address Translation (NAT), which is made possible by the larger address space.

IPv4 addresses are 32 bits, with a theoretical maximum of 4.3 billion addresses.

IPv6 addresses are 128 bits, with a theoretical maximum of 340 trillion, trillion, trillion addresses. Quadrupling the number of bits in the address doesn’t increase the size of the address space by a factor of 4 – in this case it increases that number by a factor of 296, or 7.9E+28. If you represent the size of the IPv4 address space with a billiard ball, the IPv6 address space would be 63 times the size of the sun.

The next most obvious change is the external data representation notation.

IPv4 uses “dotted decimal” notation for addresses. It has 4 groups of 8 bits, each represented by a decimal (base 10) value from 0 to 255. The decimal values are separated with “.” characters (called “dot” in this case). Leading zeros can be removed in each field, but all four fields must be present. An example representation is

IPv6 uses “coloned hex” notation for addresses. It has 8 groups of 16 bits, each represented by a hexadecimal (base 16) value from 0 to 0xffff. The hexadecimal values are separated with colons (“:”). Leading zeros can be removed in each group. At most one sequence of all-zero groups can be removed (leaving a pair of adjacent colons). An example without compression is 2001:0db8:0001:0002:0000:0000:0000:0013 and with compression 2001:db8:1:2::13. In effect everything to the left of the double colon is left justified in the 128 bits, while everything to the right of it is right justified.

Since CIDR was adopted, the IPv4 prefix (the “network address”) for node addresses can be anywhere from 8 bits to 30 bits in length, while the suffix (“interface identifier”) is 32-n bits in length. As an example, for a “class C” address (subnet mask, the prefix length is 24 and the suffix length is 8. The prefix length (or the corresponding subnet mask) must be known for each subnet. In IPv4, subnetting is complex and a frequent source of error.

In IPv6 the prefix for node addresses is always 64 bits in length while the suffix (Interface Identifier) is always 64 bits in length (the sole exception is in certain PPP links which use a 127 bit prefix). In IPv6, subnetting is trivial: “all subnets are /64”. Subnets must be at least /64 in size, to accommodate Stateless Address Autoconfiguration (SLAAC). But that is already 4.3 billion times as large as the entire IPv4 address space, which is more than sufficient for any conceivable subnet. Therefore, there is no reason to use any other subnet size.