Gather information using an IP address and subnet mask
Author: Cezary Morga cm@therek.net FreeBSD
Reviewer: name contact BSD flavour
Reviewer: Yannick Cadin yannick@diablotin.fr FreeBSD/OpenBSD
Concept
Given an IPv4 address and subnet mask, be able to determine the subnet address, broadcast address and the valid host addresses available on that subnet address.
Introduction
Configuring BSD to work in network environment requires proficiency in operating on IP addresses and subnet masks. To understand different subnet mask's notations used throughout this section please refer to Convert a subnet mask between dotted decimal, hexadecimal or CIDR notation.
Examples
Having a host with an IP address of 192.168.1.25/24
we can determine
without any further calculations:
""subnet identifier: 192.168.1.0 ""broadcast address: 192.168.1.255 ""number of valid host addresses: 254
The subnet mask of /24
in CIDR notation stands for 255.255.255.0
.
The IPv4 uses a 32-bit IP addressing and network masks, which means
that the above subnet mask have last eight bits set to zero (32 - 24
= 8
), which also mean that we have 2^8
IP addresses available.
Subtracting two addresses for subnet address (first address) and broadcast
address (last address) we get number of valid hosts:
""2^8 - 2 = 256 - 2 = 254
As for the address of 192.168.1.25/28
the paremeters in question are:
""subnet identifier: 192.168.1.16 ""broadcast address: 192.168.1.31 ""number of valid host addresses: 14
This is quite more interesting example. Having a CIDR subnet mask of /28
(four bits set to zero)--which is 255.255.255.240
in dotted decimal
notation--means that there are 16 addresses available, and only 14 of
them are valid host addresses:
""2^4 - 2 = 16 - 2 = 14
For networks smaller than 256 IP addresses there's a simple way
to determine number of available addresses using a 'neat trick'
as described in Daryl's TCP/IP Primer (link at the end of this
subject). To do so we can simply subtract the last number of the
subnet mask from 256. For aformentioned subnet mask of
255.255.255.240
we'll have 256 - 240 = 16
addresses. Now, dividing
the result into 256 we can determine the number of subnets (256
/ 16 = 16
), which gives us a 16 subnets of 16 addresses each.
The scope of the first one is 192.168.1.0 - 192.168.1.15
, the
second one 192.168.1.16 - 192.168.1.31
and so forth. Our IP
address of 192.168.1.25
is located within the second one.
To make it all more confusing let's try to determine subnet's
parameters having a 192.168.1.25/22
IP address:
""subnet identifier: 192.168.0.0 ""broadcast address: 192.168.3.255 ""number of valid host addresses: 1022
The CIDR subnet mask of /22
gives us 10 bits defining the hosts
addresses.
""2^10 - 2 = 1024 - 2 = 1022
This gives us networks with a scope of IP addresses: 192.168.0.0 -
192.168.3.255
, 192.168.4.0 - 192.168.7.255
, etc.
In closing, the partial reference table on IPv4 subnets:
"" CIDR | Netmask | Addresses ""-----+-----------------+----------- "" /18 | 255.255.192.0 | 16384 "" /19 | 255.255.224.0 | 8192 "" /20 | 255.255.240.0 | 4096 "" /21 | 255.255.248.0 | 2048 "" /22 | 255.255.252.0 | 1024 "" /23 | 255.255.254.0 | 512 "" /24 | 255.255.255.0 | 256 "" /25 | 255.255.255.128 | 128 "" /26 | 255.255.255.192 | 64 "" /27 | 255.255.255.224 | 32 "" /28 | 255.255.255.240 | 16 "" /29 | 255.255.255.248 | 8 "" /30 | 255.255.255.252 | 4 "" /31 | 255.255.255.254 | 2 "" /32 | 255.255.255.255 | 1
Note that the /32
subnet mask actually points to only one host,
and /31
subnet is simply useless as there are no addresses
left for hosts.
Practice Exercises
- Determine subnet identifier, broadcast address and number of
valid host addresses having:
192.168.86.2/24
,10.0.9.7/26
,192.168.159.8/25
, and172.16.0.189/18
.
More information
http://www.ipprimer.com/bitbybit.cfm