Introduction to IPv6 Addressing.

The following is an introduction to IPv6 addressing structure.

Let’s begin with the biggest difference between IPv6 and IPv4.

IPv4 uses 32 bits in its address, divided into 4 blocks of 8 bits known as an Octet and is written in dotted decimal notation

e.g. 192.168.0.1

IPv6 uses 128 bits, divided into 8 blocks of 16 bits. referred to as a Hexatet, and is written in colon hexadecimal notation

e.g. FF02:0000:0000:0000:0000:0000:0000:0002

Due to the large numbers of 0 included in the address, we can compress contiguous series of all zero hexatet by using :: (double colon)

Therefor the above address can be expressed as FF02::0002

You can only compress one set of contiguous hexatets in a full address.

The reason for this is because we need to identify how many bits are expressed by the ::

The following formula can be used to work out the number of bits in the zero compression

8 - hexatets shown * 16

So based on our example above FF02::0002 we take 2 away from 8 = 6. Then multiple 6 * 16 = 96 bits

(To determine number of hexatets divide the number of bits by 16)

If a hexatet contains leading zeros

e.g. FF02::0002

We can also remove the leading zeros so the above address can be expressed as FF02::2 and this does not affect the zero compression.

Each hexatet must contain at least one bit, if not using compressed zero’s

Subnetting

There are no subnet masks within IPv6 but the CIDR notation is still used to identify the Network part of the address.

So the address FF80::2AA:FF:FE9A:4CA2/64 indicates that the first 64 bits are used for the Network ID, and can be expressed as FF80::2AA::/64

Because the above represents a Network ID and includes the number of bits representing the Network ID we can compress multiple contiguous zero hexatets, as we are told how many bits are in the Network ID

Now it gets interesting;

IPv6 addresses are expressed along nibble (4 bit) boundaries. To correctly express a subnet where the prefix is not a multiple of 4, we must convert the hexadecimal to binary to determine the correct identifier.

e.g.

21DA:C3:0:2F3B:2AA:FF:FE28:9C5A/59

The first 3 hexatets contain 48 bits so the 4th hexatet takes us over the boundary for the Network ID.

The 4th hexatet can be broken down as follows;

2 = 4 bits

F = 4 bits

3 = 4 bits

B = 4 bits

So 48 + 4 = 52 (within Network ID)

52 + 4 = 56 (within Network ID)

56 + 4 = 60 (this is where the split is)

Convert the 3rd nibble (in this example 3) to binary

0011 (4 bits)

Now the network prefix is /59 so the 59th bit is the last bit of the Network ID.

We must then split the binary value to include the bits required to make up the Network ID in this case the first 3 bits.

Then convert the binary value of the bits required for the Network ID back to hexadecimal.

e.g. split

8 4 2 | 1 Binary Values

0 0 1 | 1

The above address can now be expressed as follows;

21DA:C3:0:2F20::/59

(notice the 4 nibble of the 4th hexatet is expressed as zero)

The above address notation now tells use that the first 59 bits are used to identify the network and the last 69 bits are used as host identifiers

Hopefully I will get time to continue this tutorial into IPv6, in the mean time hope this is usefull

"variable_node"