IP Subnetting
What is Subnetting
Subnetting is a way of partitioning a network at the IP level by dividing a block of addresses into a number of smaller sets.
100 - 109
110 - 119
120 - 129
The first two digits represent the subnet number (10,11,12), while the final digit gives the address within the subnet.
Since computers use binary representation (base 2) rather than decimal (base 10) an equivalent pattern only emerges if the addresses are put into their binary form and the sets are broken into powers of 2 rather than powers of 10. (See below for an explanation of binary numbers.)
Looking at the first few addresses in the set, if the numbers are broken after the fifth digit then the two subnets, 01100 and 01101, are clearly visible. (Note that the network does not split into the same subnets as above.)
Decimal |
Binary |
Subnet/address |
100 |
01100100 |
01100 100 |
101 |
01100101 |
01100 101 |
102 |
01100110 |
01100 110 |
103 |
01100111 |
01100 111 |
104 |
01101000 |
01101 000 |
105 |
01101001 |
01101 001 |
106 |
01101010 |
01101 010 |
107 |
01101011 |
01101 011 |
etc.
Since an address could be split into network address and host number at any point, the boundary for a particular network must be known. This is achieved using a subnet mask that is the same length as the address, and has ones in the subnet address position and zeroes afterwards. For the above example the subnet mask would be 11111000 - five ones for the five digits of the subnet and zeroes for the remainder of the address - or equivalent to 248 in decimal.
Full Length Examples
If the principle is extended to full length IP addresses, it produces longer addresses and masks. An IP address is four bytes long and these four bytes hold both the network address and the host number within the network. The associated mask defines the extent of each part of the IP address.
Considering the IP addresses 193.62.83.10 and 193.62.83.108 and an associated mask of 255.255.255.224:
The first becomes: |
11000001 00111100 01010011 00001010 |
193.62.83.10 |
With a mask of |
11111111 11111111 11111111 11100000 |
255.255.255.224 |
ANDing gives |
||
Subnet address of |
11000001 00111100 01010011 00000000 |
193.62.83.0 |
So IP address 193.62.83.10 lies within the subnet that starts at 193.62.83.0. |
||
The second becomes: |
11000001 00111100 01010011 01101100 |
193.62.83.108 |
With a mask of |
11111111 11111111 11111111 11100000 |
255.255.255.224 |
ANDing gives |
||
Subnet address of |
11000001 00111100 01010011 01100000 |
193.62.83.96 |
So IP address 193.62.83.108 lies within the subnet that starts at 193.62.83.96
Note that the mask used above contains 27 ones. An alternative way of specifying the mask that is associated with an address is to append that number, which is known as the 'prefix length', to the IP address: e.g. 193.62.83.10/27
Defining Subnets
Name |
The relative position* in this address space at which this subnet starts |
The subnet mask of this subnet |
Maximum size of subnet (power of 2) |
Host IP Address range |
Faculties |
0.0.0.0 |
255.255.255.128 |
128 |
193.62.83.1 - 193.62.83.126 |
Administration |
0.0.0.128 |
255.255.255.224 |
32 |
193.62.83.129 - 193.62.83.158 |
Computing |
0.0.0.160 |
255.255.255.224 |
32 |
193.62.83.161 - 193.62.83.191 |
* The relative position of the first subnet is always given as 0.0.0.0, i.e., the start of the address space allocated to the college (but see note below). For each subsequent subnet the start position is selected to allow for the maximum possible number of hosts in the subnets that precede it.
NOTE: Historically the use of 'all ones' or 'all zeros' in either the subnet or the host part of the address was not allowed. The restriction on using 'all ones' in the host part remains as this represents the subnet broadcast address (i.e. 193.62.83.127 is a broadcast on 193.62.83.0/25). The restriction on the use of the 'all zeros' address may still be in place for older equipment.
The subnet mask defines the number of hosts available on a subnet. The mask 255.255.255.224 leaves five bits for the host address, which could theoretically hold 32 addresses. However, in practice there are only 30 generally available addresses on the two small subnets and 126 on the large one.
Decoding IP Addresses
The following table gives examples of IP addresses in Anycollege's small networks.
Network |
Host |
||
Mask |
255.255.255.224 |
11111111.11111111.11111111.111 |
0000 |
Address (1) |
193.62.83.135 |
11000001.00111100.01010011.100 |
00111 |
Address (2) |
193.62.83.164 |
11000001.00111100.01010011.101 |
00100 |
Address (3) |
193.62.83.144 |
11000001.00111100.01010011.100 |
10000 |
ANDing the mask and addresses shows clearly which subnet the IP-address belongs to: addresses 1 and 3 belong to the subnet starting at (1000 0000) or .128; address 2 belongs to the subnet starting at (1010 0000) or .160.
The following table shows an IP address in the larger subnet. Note that the mask used is shorter, thereby allowing for more hosts.
Network |
Host |
||
Mask |
255.255.255.128 |
11111111.11111111.11111111.1 |
00000 |
Address (4) |
193.62.83.96 |
11000001.00111100.01010011.0 |
110 0000 |
ANDing the mask and address shows clearly that IP address 4 belongs to the subnet starting at (0000 0000) or .0, i.e. the 'start' of the network (but see note above for restrictions on older equipment).
RFC 1219 On the assignment of subnet numbers describes a way of flexibly allocating subnets that defers having to decide where to draw the subnet boundary.
Binary Numbers
Binary numbers use base 2 rather than base 10, which is used for decimal numbers. So rather than needing 10 characters to represent a number (various combinations of 0-9), the binary system needs only two (0 and 1) and similarly the position of a character indicates multiplication by powers of 2 rather than powers of 10.
So 101 in decimal means 1*100 + 0*10 + 1*1, making a hundred and one.
And 101 in binary means 1*4 + 0*2 + 1*1, making five.
The rightmost character of a binary number represents the number of ones (20), the next digit to the left the number of twos (21), the next digit the number of fours (22), and so on.
To convert binary to decimal
Identify what each position represents (work from right to left starting at 1 and multiplying by two on each left shift):
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
128 |
64, |
32, |
16, |
8,, |
4,, |
2,, |
1,, |
Multiply and sum:
1*128 + 1*64 + 1*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 = 128+64+32+4+1 = 229 base 10 (decimal)
For speed, ignore the multiplication and just add the value of columns with a one in them, but the full method works for any base and is worth knowing.
To convert decimal to binary
For those familiar with it, this conversion is most quickly done using the hexadecimal system (see below). Otherwise it can be simply achieved by repeated division by two, recording the remainder each time.
Starting with 229 base 10 (decimal) so that we can check the result with the previous example:
229 / 2 = 114 remainder 1
114 / 2 = 57 remainder 0
57 / 2 = 28 remainder 1
28 / 2 = 14 remainder 0
14 / 2 = 7 remainder 0
7 / 2 = 3 remainder 1
3 / 2 = 1 remainder 1
1 / 2 = 0 remainder 1
The binary equivalent reads from the bottom up, so 229 base 10 (decimal) = 11100101 base 2 (binary).
Hexadecimal numbers use base 16 rather than base 10, which is used for decimal numbers. So rather than needing 10 characters to represent a number (various combinations of 0-9), the hexadecimal system needs 16 and similarly the position of a character indicates multiplication by powers of 16 rather than powers of 10.
So |
101 in decimal means |
1*100 + 0*10 + 1*1 making a hundred and one |
And |
101 in hexadecimal means |
1*256 + 0*16 + 1*1 making two hundred and fifty seven. |
The rightmost character of a hexadecimal number represents the number of ones (16^0), the next digit to the left the number of 16s (16^1), the next digit the number of 256s (22), and so on.
Since hexadecimal requires 16 characters to represent its digits rather than the 10 used for decimal notation, the first six letters of the alphabet are also used.
In addition, because 16 is a power of 2 (2^4) there is a direct relationship between hexadecimal and binary numbers: each hexadecimal digit representing a group of four binary digits as shown in the following table.
Decimal |
Binary |
Hexadecimal |
0 |
0000 |
0 |
1 |
0001 |
1 |
2 |
0010 |
2 |
3 |
0011 |
3 |
4 |
0100 |
4 |
5 |
0101 |
5 |
6 |
0110 |
6 |
7 |
0111 |
7 |
8 |
1000 |
8 |
9 |
1001 |
9 |
10 |
1010 |
A |
11 |
1011 |
B |
12 |
1100 |
C |
13 |
1101 |
D |
14 |
1110 |
E |
15 |
1111 |
F |
Any binary number can therefore be represented as a (much shorter and more memorable) string of hexadecimal digits, e.g. using the previous example, the binary number 11100101 appears in hexadecimal as E5 (using the conversion table above, 1110 = E, 0101 = 5).
To Convert Hexadecimal to Decimal
E (or 14)*16 + 5*1 = 224 + 5 = 229 base 10 (decimal)
To Convert Hexadecimal to Binary
|
Equally, the reverse conversion from the address C1.3E.53.96 to binary is a simple matter of substituting the binary equivalents from the same table - much more straightforward than converting from the decimal, 193.62.83.96.
C |
1 |
3 |
E |
5 |
3 |
9 |
6 |
1100 |
0001 |
0011 |
1110 |
0101 |
0011 |
1001 |
0110 |