## IP address and subnets (IPv4)

This blog post will show how IP addresses work, what subnetting is.

### Binary to decimal for two byte numbers

First, it can be beneficial to memorize the following table, which is just a list of binary digits.

``````128  64  32  16  8  4  2  1
``````

It makes it easy to convert between binary and decimal.

``````table:  128  64  32  16  8  4  2  1
binary:   1   0   0   1  1  0  0  1
gives (by using logical AND and adding the numbers):
128 + 16 + 8 + 1 = 153 as a decimal, thus:
(binary) 1001 1001 = 153 (decimal)
``````

As an example, lets look at the IP address: 192.168.1.5. Each number between the '.' is one octet (2 bytes). First, we break it down into binary numbers:

decimal| binary
192 1100 0000
168 1010 1000
1 0000 0001
5 0000 0101

So, an IP address can be broken up into 4 octets, which is equal to (4 * 8) 32 bits.

A subnet mask is used by the TCP/IP protocol to determine whether a host is on the local subnet or on a remote network. It is not possible from the IP address alone to determine whether or not the IP refers to a local or remote network. In order to figure this out, the network mask is needed. The network mask is another 32 bit number. For example, a subnet mask could be 255.25.255.0 (in binary 11111111.11111111.11111111.00000000). By taking the logical AND between the IP address and Subnet Mask you can find the Network address and the Host address.

## Network ID and subnet mask

Given a network ID: 192.168.1.0, how do we find the IP behind it?

If we can write the CIDR notation like this: 192.168.1.0/24 (CIDR=Classless Interdomain routing). The '/24' tells us how many binary digits are turned on in the subnet mask. 24 binary digits can be shown like this:

``````1111 1111 . 1111 1111 . 1111 1111 . 0000 0000
In digital it becomes:
255.255.255.0
``````

This is actually the Subnet Mask.

Given a specific Subnet Mask, 255.255.248.0, how do we find the CIDR notation? From the Subnet Mask, we can see that the first 2 octets (255.255) are both = 255, so we need to figure out how many bits 248 is. We can do that by using our table from above:

``````table:  128  64  32  16  8  4  2  1
We add together from left to right until we hit 248:
128 + 64 = 192 (still less than 248)
128 + 64 + 32 = 224 (still less than 248)
128 + 64 + 32 + 16 = 240 (still less than 248)
128 + 64 + 32 + 16 + 8 = 248
``````

So we know that there are 5 subnetting bits. The first two octets of our Mask (the 255.255) holds 8 bits each (255 = 1111 1111) that are turned on, we now need to add our 5 subnetting bits, so we get:

``````8 + 8 + 5 = 21
``````

which represents our CIDR (255.255.248.0/21).

Lets say we have an IP address: 192.168.40.55, how do we find the Network ID? Lets write our IP as binary and do a bit of 'calculations':

``````IP: 192.168.40.55
Binary:     1100 0000 . 1010 1000 . 0010 1000 . 0011 0111
Subnet:     1111 1111 . 1111 1111 . 1111 1000 . 0000 0000
Do a logical AND
Network ID: 1100 0000 . 1010 1000 . 0010 1000 . 0000 0000
in digital:    192    .    168    .    40     .     0

So our Network ID is 192.168.40.0/21 (CIDR notation).
``````

This leaves the whole 4th octet and 3 bits of the third octet as hosts bits, which allows for quite a lot of hosts. Calculating the number of available IPs in the hosts bits is done like this:

``````We have 3 bits of the 3rd octet and the full 4th octet:
Binary:  0111 1111 1111
Decimal: 2047
``````

#### Example 1

Mask: 255.255.248.0/21 and IP: 192.168.45.55. How do we find the Network ID?

``````IP: 192.168.45.55
Binary:     1100 0000 . 1010 1000 . 0010 1101 . 0011 0111
Subnet:     1111 1111 . 1111 1111 . 1111 1000 . 0000 0000
Do a logical AND
Network ID: 1100 0000 . 1010 1000 . 0010 1101 . 0000 0000
in digital:    192    .    168    .    45     .     0

So our Network ID is 192.168.45.0/21 (CIDR notation).
``````

#### Example 2

a) What is the CIDR notation?

We know that the first 3 octets each have 8 bits turned on, so the issue becomes to find the number of bits turned on in the 4th octet (192).

``````table:  128  64  32  16  8  4  2  1
We add together from left to right until we hit 192:
128 + 64 = 192
digital: 192
binary:  1100 0000
``````

So our 4th octet has 2 bits turned on (the 128 bit and the 63 bit). Adding all the turned on bits together: 8 + 8 + 8 + 2 = 26, so our CIDR notation becomes 255.255.255.192/26.

b) Given IP address 192.168.45.55, what is the Network ID?

``````IP: 192.168.45.55
Binary:     1100 0000 . 1010 1000 . 0010 1101 . 0011 0111
Subnet:     1111 1111 . 1111 1111 . 1111 1111 . 1100 0000
Do a logical AND
Network ID: 1100 0000 . 1010 1000 . 0010 1101 . 0000 0000
in digital:    192    .    168    .    45     .     0

So our Network ID is 192.168.45.0/26 (CIDR notation).
``````

#### Example 3

a) Determine the address range covered by the network: 192.168.4.0/22?

Lets first find the subnet mask from the '/22'. The first 2 octets in the subnet masks will be 255 (adding up to the first 16 bits), this leaves (22-16) 6 bits left which (binary: 1111 1100 = 252) equals 252, so the subnet mask becomes 255.255.252.0.

In binary, the network ID is the first 22 bits of the IP in binary:

``````(192.168.4.0/22) '1100 0000.1010 1000.0000 01|00.0000 0000' = 1100 0000.1010 1000.0000 01