In **Part 9** of the LFCA series, we covered the basics of IP addressing. To better understand IP addressing, we need to pay more attention to these two types of IP address representation – **binary** and **decimal-dotted** quad notation. As mentioned earlier, an IP address is a 32-bit binary number that is usually represented in decimal format for ease of readability.

The **binary** format uses only the digits **1** and **0**. This is the format that your computer comprehends and through which data is sent across the network.

However, to make the address human-readable. It is conveyed in a dotted-decimal format which the computer later converts into binary format. As we stated earlier, an IP address is made up of 4 octets. Let’s dissect the IP address **192.168.1.5**.

In the **dotted-decimal** format, **192** is the first octet, **168** is the second octet, **1** is the third, and lastly, **5** is the fourth octet.

In binary format the IP address is represented as shown:

11000000 => 1st Octet 10101000 => 2nd Octet 00000001 => 3rd Octet 00000101 => 4th Octet

In **binary**, a bit can be on or off. The ‘**on**‘ bit is represented by **1** while the off bit is represented by **0**. In decimal format,

To arrive at the decimal number, a summation of all the binary digits to the power of **2** is carried out. The table below gives you the positional value of every bit in an octet. For example, the decimal value of **1** equates to the binary **00000001**.

In better format, this can also be represented as shown.

2º = 1 = 00000001 2¹ = 2 = 00000010 2² = 4 = 00000100 2³ = 8 = 00001000 2⁴ = 16 = 00010000 2⁵ = 32 = 00100000 2⁶ = 64 = 01000000 2⁷ = 128 = 10000000

Let’s try to convert an IP address in dotted-decimal format to binary.

### Converting Decimal Format to Binary

Let’s take our example of **192.168.1.5**. To convert from decimal to binary, we will start from left to right. For every value in the table, we ask the question, can you subtract the value in the table from the decimal value in the IP address. If the answer is ‘**YES**‘ we write down ‘**1**‘. If the answer is ‘**NO**‘, we put a zero.

Let’s start with the first octet which is **192**. Can you subtract **128** from **192**? The answer is a big ‘**YES**‘. Therefore, we will write down 1 which corresponds to **128**.

192-128 = 64

Can you subtract **64** from **64**? The answer is ‘**YES**’. Again, we jot down 1 which corresponds to 64.

**64-64 = 0** Since we have depleted the decimal value, we assign 0 to the remaining values.

So, the decimal value of **192** translates to the binary **11000000**. If you add the values corresponding to 1s in the bottom table, you end up with **192**. That is **128 + 64 = 192**. Makes sense right?

Let’s proceed to the second octet – **168**. Can we subtract **128** from **168**? **YES**.

168-128 = 40

Next, can we subtract 64 from 40? NO. So, we assign a 0.

We move onto the next value. Can we deduct 32 from 40?. YES. We assign the value 1.

40 - 32 = 8

Next, can we subtract 18 from 8? NO. We assign 0.

Next, can we deduct 8 from 8? YES. We assign the value 1.

8-8 = 0

Since we have exhausted our decimal value, the will assign 0s to the remaining values in the table as shown.

Ultimately, the decimal **168** translates to the binary format **10101000**. Again, if you sum up the decimal values corresponding to 1s in the bottom row you end up with 168. That is **128 + 32+8 = 168**.

For the third octet, we have 1. The only number in our table that we can fully subtract from 1 is 1. So, we will assign the value 1 to 1 on the table and add preceding zeros as shown.

So the decimal value of 1 equates to the binary **00000001**.

Lastly, we have 5. From the table, the only number that we can wholly subtract from 5 starts at 4. All the values to the left will be assigned 0.

Can we subtract 4 from 5? YES. We assign 1 to 4.

5-4 = 1

Next, can we subtract 1 from 2? NO. We assign the value 0.

Lastly, can we subtract 1 from 1? YES. We assign 1.

The decimal digit of 5 corresponds to the binary **00000101**.

In the end, we have the following conversion.

192 => 11000000 168 => 10101000 1 => 00000001 5 => 00000101

So, **192.168.1.5** translates to **11000000.10101000.00000001.00000101** in binary form.

### Understanding Subnet Mask / Network Mask

We have stated earlier that every host in a **TCP/IP** network should have a unique IP address, which in most cases is dynamically assigned by the router using the **DHCP** protocol. The **DHCP** protocol, (**Dynamic Host Configuration Protocol**) is a service that dynamically assigns an IP address to hosts in an IP network.

But how do you determine which part of the IP is reserved for the network section and which section is available for use by the host system? This is where a **subnet mask** or **network mask** comes in.

A **subnet** is an additional component to an IP address that distinguishes the network & host portion of your network. Just like an IP address, the subnet is a 32-bit address and can be written in either decimal or binary notation.

The purpose of a subnet is to draw a boundary between the network portion of an IP address and the host portion. For each bit of the IP address, the **subnet** or **netmask** assigns a value.

For the network portion, it turns on the bit and assigns the value of 1, For the host portion, it turns off the bit and assigns the value of 0. Therefore all bits set to 1 correspond to the bits in an IP address that represent the network portion whilst all bits set to 0 correspond to the bits of the IP that represent the host address.

A commonly used subnet mask is the **Class C** subnet which is **255.255.255.0**.

The table below shows the network masks in decimal and binary.

This wraps up part 2 of our networking essentials series. We have covered the decimal to binary IP conversion, subnet masks, and the default subnet masks for each class of IP address.