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)
```

# IP Addresses

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.

# Subnet mask

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).
Subnet mask: 255.255.248.0
```

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
```

So 2047 available IP addresses.

#### 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).
Subnet mask: 255.255.248.0
```

#### Example 2

Mask: 255.255.255.192.

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).
Subnet mask: 255.255.248.192
```

#### 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
The available addresses will be:
from: 1100 0000 . 1010 1000 . 0000 0100 . 0000 0000
to: 1100 0000 . 1010 1000 . 0000 0111 . 1111 1111
and in decimal:
from: 192.168.4.0
to: 192.168.7.255
```