Convert a subnet mask between dotted decimal, hexadecimal or CIDR notation

Author: AndreasKuehl andreas dot kuehl at clicktivities dot net BSD flavour FreeBSD

Reviewer: Alex Nikiforov FreeBSD

Reviewer: Yannick Cadin FreeBSD/OpenBSD


Be familiar with IPv4 addressing and how to convert a subnet mask from a given notation to another specified notation.


All of the internet address space is divided into subnets. In the old times, there were class A, class B and class C nets. A subnet means, that you divide an IPv4 address in a front part and a back part. The front part is common in the subnet, all addresses of a subnet have the same front part. All computers/devices in the subnet are distinguished by different values for the back part. A class A net had the first byte of an IPv4 address common and could contain 255*255*255 (16,581,375) addresses, a class B net had the first two bytes common and contained 255*255 (65,025) addresses while as you can guess, a class C net had the first three bytes common and contained 255 addresses. Nowadays, the address space is precious and nobody wants to block a complete class C net for only 6 addresses. Until 1993, the internet routers did not know how to distinguish, whether a certain address was contained in a class A, B or C net. Instead, certain blocks of IP addresses contained only class C nets and other blocks contained only class B or class A nets. Since 1993 the borders of net sizes are free. Additionally, the length of the first part of an IPv4 address is not bound any more to the byte and could be somewhere.

There are three commonly known and used methods to write the so called subnetmask, which shows the border between front or prefix and back part.

(You need to know how to convert between decimal, hexadecimal, and binary numbers. If you can not do so, go elsewhere and learn!)

"" dotted decimal ""ff.ff.ff.00 hexadecimal ""/24 CIDR

Every of this netmasks work on the binary representation of an IP address.

"" is a decimally written address. ""11000000 10101000 00000110 00000100 is the binary representation of the same address.

If you convert the dotted decimal or hexadecimal form to binary, you will get something like this. ""11111111 11111111 11111111 00000000

If you count from left to right, you count 24 times figure 1.

Dotted decimal and hexadecimal are two different representations for the same system. If you convert them, you get the same. The CIDR form says just: count from left to right.

But know, what does it mean And what do we do with it?

Let's say you obtained a class C net for your company and have to divide it for several purposes...

(To be continued :-)


Practice Exercises

More information