The NetPractice project provides a small simulation of different simple networks, where some portion of IP addresses, subnet masks, and/or routes are provided, and the student must fill in the rest of the detail to configure valid networks that allow designated devices to communicate with each other and/or the internet.
IPv4 networks utilise 32-bit addresses, generally presented in dot-decimal notation, where the address is broken into 4 octets (or bytes) which are represented as integers in [0,255] separated by dots: 192.168.0.1
The address is generally broken into two parts:
Various methods of dividing up the address space have been used over time, but the current method is to use Classless Inter-Domain Routing (CIDR), which allows variable network identifiers through subnetting (creating sub networks).
Subnets are created by giving a subnet mask - a bitmask that encodes a prefix length that determines the number of bits used in the network identifier. The mask takes the form of a number of 1-bits equal to the prefix length, the rest being 0-bits. The Binary AND operation performed on a network address and the network subnet mask will provide the same result for any addresses in the same network.
Prefix Size | Mask | Addresses | Usable |
---|---|---|---|
/30 | 255.255.255.252 | 4 | 2 |
/29 | 255.255.255.248 | 8 | 6 |
/28 | 255.255.255.240 | 16 | 14 |
/27 | 255.255.255.224 | 32 | 30 |
/26 | 255.255.255.192 | 64 | 62 |
/25 | 255.255.255.128 | 128 | 126 |
/24 | 225.255.255.0 | 256 | 254 |
/23 | 255.255.254.0 | 512 | 510 |
/22 | 255.255.252.0 | 1024 | 1022 |
/21 | 255.255.248.0 | 2048 | 2046 |
/20 | 255.255.240.0 | 4096 | 4094 |
/19 | 255.255.224.0 | 8192 | 8190 |
/18 | 255.255.192.0 | 2^13 | 2^13 - 2 |
/17 | 255.255.128.0 | 2^14 | 2^14 - 2 |
/16 | 255.255.0.0 | 2^15 | 2^15 - 2 |
… | … | … | … |
/1 | 128.0.0.0 | 2^31 | 2^31 - 2 |
/0 | 0.0.0.0 | 2^32 | 2^32 - 2 |
Take for example the standard network address for local networks 192.168.0.1/24
. Its subnet mask is 255.255.255.0
as indicated by the /24
- 24 bits fills up 3 of the 4 octets.
(A): 192.168.0.1 = 11000000 10101000 00000000 00000001
(B): 255.255.255.0 = 11111111 11111111 11111111 00000000
(A) AND (B) = 11000000 10101000 00000000 00000000
= 192.168.0.0
Any value of the last octet is part of the network, so a binary AND with 192.168.0.117
with the subnet mask should provide the same result as above.
(C): 192.168.0.117 = 11000000 10101000 00000000 01110101
(B): 255.255.255.0 = 11111111 11111111 11111111 00000000
(C) AND (B) = 11000000 10101000 00000000 00000000
= 192.168.0.0
However, if we change any part of the network identifier, we will get a different result.
(D): 192.168.1.1 = 11000000 10101000 00000001 00000001
(B): 255.255.255.0 = 11111111 11111111 11111111 00000000
(D) AND (B) = 11000000 10101000 00000001 00000000
= 192.168.1.0
For trying to solve the NetPractice problems, I found it useful to note that the sequecne 0, 128, 192, 224, 240, 248, 252, 254, 255
is the sum of the sequence 128, 64, 32, 16, 8, 4, 2, 1
, which them sevles are the powers of 2: 2^7, 2^6, 2^5, 2^4,2^3, 2^2, 2^1, 2^0
.
Prefix | Mask | Addresses | |||
---|---|---|---|---|---|
32 | 32 - 0 | 255 | 254 + 1 | 1 | 2^0 |
31 | 32 - 1 | 254 | 252 + 2 | 2 | 2^1 |
30 | 32 - 2 | 252 | 248 + 4 | 4 | 2^2 |
30 | 32 - 3 | 248 | 240 + 8 | 8 | 2^3 |
29 | 32 - 4 | 240 | 224 + 16 | 16 | 2^4 |
28 | 32 - 5 | 224 | 192 + 32 | 32 | 2^5 |
27 | 32 - 6 | 192 | 128 + 64 | 64 | 2^6 |
26 | 32 - 7 | 128 | 0 + 128 | 128 | 2^7 |
25 | 32 - 8 | 0 | … | 256 | 2^8 |