14226
Views
10
Helpful
0
Comments
Options
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
10-25-2013 12:46 AM - edited 03-01-2019 04:58 PM
- Who is this for?
People who will be building networks. If you're a manager you can go to sleep now; if you know this stuff already, take a pizza break; if you want to actually build networks some day and are not already comfortable working out appropriate sizes of subnets, please come to the front of the lecture hall - I have a few copies of this lesson but not enough for everyone in the room.
- Purpose of this lesson
Some day you may be responsible for designing a network that connects several locations together with routers. You'll have been given a certain number of IP addresses you can use, and you have to allocate them in chunks to each site without running out!
The reason we are going to learn subnetting is simple: there are not enough IP addresses free for you to give a whole Class C network to every site you manage. Some upstream providers charge you for each Class C you allocate. Others force you to justify your use of space in detail, showing that each network you allocated was fully populated.
Before we go into details, there are two things you might be able to use which will avoid the need to learn any of this stuff:
- NAT - network address translation
If it is available to you, NAT often lets you create any size of network you want, without worrying about how much IP space you have been officially allocated. I'm not going to explain what NAT is in detail, because it will be covered in someone else's lesson. In short, it's a way to map large numbers of IPs on to a single IP (or to take a large sparse range such as a Class B and map each address that is actually used on to a small number of Class C's). NAT is worth taking the time to learn, because it can save you a whole lot of effort! - Online tools to calculate subnets
There are many web pages available that will calculate netmasks for given sizes of subnets. These are useful as long as you understand the basics of what you're trying to do. If you don't have 'the big picture', these tools won't help. You can listen to this lecture to get 'the big picture' without getting distracted by the details, then use one of the online tools when you need actual numbers.
- NAT - network address translation
- IP address space in general - inference of Class A/B/C
Before we start - a quick and very basic recap on IP addressing in general.
Every machine on the net has an address. Addresses are 32 bits. These 32 bits are split into two parts - a network number followed by a host address. The 'host address' part is for a number of machines on one physical network - say a bunch of machines connected with a hub or on a single thin ether wire. The network number represents this group of hosts as a single unit, and routers need to know these network numbers to send data from one net to another.
Just where the network/host split is made is arbitrary. There's no real reason why 10.1.2.3 should be part of a class A network and 220.1.2.3 is part of a class C network - it just is. The address space was split up as shown below, and any addresses in these ranges are deemed to be in the appropriate Class. Why does this matter? Well, some software will ask for an IP address but NOT a netmask - and it will infer a netmask from the address. This is OK as long as you are staying within the class system, but if you are subnetting or supernetting, it can cause you a lot of trouble.
There's actually very little difference between a Class C network, and a Class B network with a 255.255.255.0 netmask applied. (The only time they're different is if the network address is of the form X.X.0.X or X.X.255.X)
Before you start designing your subnets, you should know what it is that you've been given. Here are three ways of finding out what class your allocation is in. Use whichever you find easiest.- Class A addresses begin with 0xxx, or 1 to 126 decimal. (127 is loopback)
- Class B addresses begin with 10xx, or 128 to 191 decimal.
- Class C addresses begin with 110x, or 192 to 223 decimal.
- Class D addresses begin with 1110, or 224 to 239 decimal. (a.k.a multicast - you'll probably never see these)
- Class E addresses begin with 1111, or 240 to 254 decimal. (or these)
- If the first bit is 0 it is a Class A address
- If the first two bits are 10 it is a Class B address
- If the first three bits are 110 it is a Class C address
- If the first four bits are 1110 it is a Class D multicast address
- If the first four bits are 1111 it is a Class E experimental address
First Byte Class Network Mask (explained later) 1-126 "A" 255.0.0.0 128-191 "B" 255.255.0.0 192-223 "C" 255.255.255.0
192.168.1.0 is actually a special type of Class C address - it's one that is reserved never to be allocated on the real Internet. So we'll use it in our examples because if you do configure a network using these numbers, you won't mess anybody else up. It's amazing the number of people who create internal networks using real IP addresses chosen at random. If you ever connect one of these networks to the internet, you will not be to route because the space belongs to someone else. If you disguise your addresses using NAT, you'll still not be able to access those parts of the net that legitimately use those addresses.
Doing subnet calculations for Class A and Class B networks works just the same way as the Class C examples we are going to cover. If you can do a Class C from first principles, you'll be able to do Class B's in your sleep. Very few people here will get much opportunity to design Class A or Class B subnets, but you are quite likely to be asked to work on existing Class A or B networks, so it's still worth knowing.
- What is Broadcast?
I assume you know what a broadcast address is - the necessity to handle broadcasts is actually what makes subnetting anything less than trivial: if you have a Class C network such as 192.168.1.* (with station addresses 192.168.1.1, 192.168.1.2 etc), then a packet addressed to 192.168.1.255 will be sent to *every* station on that network. Later we'll discover that sending to 192.168.1.0 is sort of something similar. Or was once, anyway.
In a Class C, the host part set to 255 means broadcast. In a subnet, the subnet host part set to all ones means broadcast. Eg in a /28, any addresses of the form N.N.N.XXXX1111 are broadcast addresses for their subnets only.
- Don't I need to know how to do binary arithmetic?
Forgetaboutit. If you can't do binary math in your head, just use the data in these tables below. (On the other hand, if you can't do binary in your head by now, you probably shouldn't be looking at a career in networking.)
- Subnetting Class C - most typical example: /28 "all zeroes, all ones" excluded. Mask is 11110000
This table may be all you ever need to know, for many installations. This is a typical example and possibly the most common one. Because it is such a useful table, this is the only large one we will list in full.
Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 0000xxxx 192.168.1.1 to 192.168.1.14 192.168.1.15 - UNUSABLE - NETMASK ALL 0000's 192.168.1.16 0001xxxx 192.168.1.17 to 192.168.1.30 192.168.1.31 192.168.1.32 0010xxxx 192.168.1.33 to 192.168.1.46 192.168.1.47 192.168.1.48 0011xxxx 192.168.1.49 to 192.168.1.62 192.168.1.63 192.168.1.64 0100xxxx 192.168.1.65 to 192.168.1.78 192.168.1.79 192.168.1.80 0101xxxx 192.168.1.81 to 192.168.1.94 192.168.1.95 192.168.1.96 0110xxxx 192.168.1.97 to 192.168.1.110 192.168.1.111 192.168.1.112 0111xxxx 192.168.1.113 to 192.168.1.126 192.168.1.127 192.168.1.128 1000xxxx 192.168.1.129 to 192.168.1.142 192.168.1.143 192.168.1.144 1001xxxx 192.168.1.145 to 192.168.1.158 192.168.1.159 192.168.1.160 1010xxxx 192.168.1.161 to 192.168.1.174 192.168.1.175 192.168.1.176 1011xxxx 192.168.1.177 to 192.168.1.190 192.168.1.191 192.168.1.192 1100xxxx 192.168.1.193 to 192.168.1.206 192.168.1.207 192.168.1.208 1101xxxx 192.168.1.209 to 192.168.1.222 192.168.1.223 192.168.1.224 1110xxxx 192.168.1.225 to 192.168.1.238 192.168.1.239 192.168.1.240 1111xxxx 192.168.1.241 to 192.168.1.254 192.168.1.255 - UNUSABLE - NETMASK ALL 1111's - 0's/1's restriction on host part: let's take one subnet from the table above:
Network part Subnet.host Host addresses Broadcast Address 192.168.1.32 0010xxxx 192.168.1.33 to 192.168.1.46 192.168.1.47
Now, let's look at the individual hosts within that subnet:
Network part Subnet . Host part Host Address 192.168.1.32 0010.0000 UNUSABLE - HOST PART IS ALL 0's 192.168.1.33 0010.0001 192.168.1.34 0010.0010 192.168.1.35 0010.0011 192.168.1.36 0010.0100 192.168.1.37 0010.0101 192.168.1.38 0010.0110 192.168.1.39 0010.0111 192.168.1.40 0010.1000 192.168.1.41 0010.1001 192.168.1.42 0010.1010 192.168.1.43 0010.1011 192.168.1.44 0010.1100 192.168.1.45 0010.1101 192.168.1.46 0010.1110 192.168.1.47 0010.1111 UNUSABLE - HOST PART IS ALL 1's
Although you may be familiar with the all ones broadcast addresses (typically x.x.x.255 for a Class C network) you may not realise that at some time in the past x.x.x.0 was also used as a broadcast address. Although this seldom is done nowadays, for historical reasons we still obey this convention. (The last machine I owned that actually used the .0 address for broadcast was a Sun from the late 1980's)
Note what happens as the room for hosts gets smaller:
This is the host table for a /30:
A /30 is particularly wasteful - 50% of the hosts are unusable. Similarly, a /26 is pretty bad, because 50% of the nets are unusable. a /28 is best because it lets you have (16 - 2) * (16 - 2) = 192 hosts.Network part Subnet . Host part Host Address 192.168.1.32 001000.00 UNUSABLE - HOST PART IS ALL 0's 192.168.1.33 001001.01 192.168.1.34 001010.10 192.168.1.35 001011.11 UNUSABLE - HOST PART IS ALL 1's
This would be the host table if a /31, if it existed:
Network part Subnet . Host part Host Address 192.168.1.32 0010000.0 UNUSABLE - HOST PART IS ALL 0's 192.168.1.33 0010000.1 UNUSABLE - HOST PART IS ALL 1's
What's wrong with this picture??? Well, you can't have a /31. Here's why...
- We can have subnets of /26,/27,/28,/29,/30 - BUT NOT /25 or /31!
This is a /30 (with sections removed for brevity):
Mask is 11111100
Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 000000xx 192.168.1.1 to 192.168.1.2 192.168.1.3 - UNUSABLE - NETMASK ALL 000000's 192.168.1.4 000001xx 192.168.1.5 to 192.168.1.6 192.168.1.7 192.168.1.8 000010xx 192.168.1.9 to 192.168.1.10 192.168.1.11 192.168.1.12 000011xx 192.168.1.13 to 192.168.1.14 192.168.1.15 192.168.1.16 000100xx 192.168.1.17 to 192.168.1.18 192.168.1.19 192.168.1.20 000101xx 192.168.1.21 to 192.168.1.22 192.168.1.23 192.168.1.24 - 244 ... .............................. ............. 192.168.1.248 111110xx 192.168.1.249 to 192.168.1.250 192.168.1.251 192.168.1.252 111111xx 192.168.1.253 to 192.168.1.254 192.168.1.255 - UNUSABLE - NETMASK ALL 111111's - So why not a /25????
When the netmask is only one bit, it can't help but being all zeroes or all ones.Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 0xxxxxxx 192.168.1.1 to 192.168.1.126 192.168.1.127 - UNUSABLE - NETMASK ALL 0's 192.168.1.128 1xxxxxxx 192.168.1.129 to 192.168.1.254 192.168.1.255 - UNUSABLE - NETMASK ALL 1's
- And why not a /31?
Network part Subnet.host Host addresses Broadcast Addresses (0's and 1's) 192.168.1.0 0000000x 192.168.1.0? to 192.168.1.1? 192.168.1.0 - UNUSABLE - NETMASK 000000's
192.168.1.1 - UNUSABLE - NETMASK 000000's192.168.1.2 0000001x 192.168.1.2? to 192.168.1.3? 192.168.1.2 - UNUSABLE - Broadcast 0's
192.168.1.3 - UNUSABLE - Broadcast 1's192.168.1.4 - 250 ... .............................. .............
.............192.168.1.252 1111110x 192.168.1.252 to 192.168.1.253 192.168.1.252 - UNUSABLE - Broadcast 0's
192.168.1.253 - UNUSABLE - Broadcast 1's192.168.1.254 1111111x 192.168.1.254 to 192.168.1.255 192.168.1.254 UNUSABLE - NETMASK 111111's
192.168.1.255 UNUSABLE - NETMASK 111111's - Variable subnetting example 1 (insert /30 into /28 from above)
Well, in the /28 example above, we've shown that the first and last subnets are unusable, because the subnet mask is either all 0's or all 1's. This is unfortunate because each of those subnets is losing 16 (-2) IP addresses each.
Is there any way we can get back some of those addresses? Well, yes - there is. If you look at the example of a /30 subnet, you'll see these entries:
Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 000000xx 192.168.1.1 to 192.168.1.2 192.168.1.3 - UNUSABLE - NETMASK ALL 000000's 192.168.1.4 000001xx 192.168.1.5 to 192.168.1.6 192.168.1.7 192.168.1.8 000010xx 192.168.1.9 to 192.168.1.10 192.168.1.11 192.168.1.12 000011xx 192.168.1.13 to 192.168.1.14 192.168.1.15 192.168.1.16 - 252 ... .............................. .............
Apart from the first one, these are all perfectly valid subnets, and if we were to configure machines using them, they will look just like normal addresses in a /30 subnet. We can do exactly the same thing for the 192.168.1.240-255 addresses.
These small subnets - they only have 2 IP addresses that are usable - are actually just what you need when you are setting up a point to point link between different subnets (in different locations). So by using the 'slop' at the end of the range, you can get your point to point links for free.
- Variable subnetting example 2 (insert /28 from above into /26)
Here we have a different and possibly more useful example of variable subnetting. Let's say we have a central office with 50 workstations, one remote office with 10, and another remote office with 9 workstations.
The following table tells you how many workstations and how many offices you can have for each size of subnet mask:Bit Split
Subnet Mask
Block Size
Max Useable Subnets
(number of offices)# C IPs/Subnet
(number of workstations)2/6
192 (/26)
64
2
62
3/5
224 (/27)
32
6
30
4/4
240 (/28)
16
14
14
5/3
248 (/29)
8
30
6
6/2
252 (/30)
4
62
2
You see, with one office of size 50, we're forced with a simple subnet scheme to use a /26 (2 bits subnet, 6 bits host). However, we have three offices, so this won't work.
With offices of size 9 or 10 (which we round up to 16 - 2), we could use a /28 (16 - 2 subnets of 16 - 2 stations) - but then we couldn't fit in our 50 station office.
Well, the solution is simple: Treat it as a /26, allocate the large office, then extract from a table of /28's enough smaller subnets to fit in the one remaining /26 slot. Like this:
(note: with a simple /26, you lose HALF of your potential IP addresses to the broadcast network addresses)Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 00xxxxxx 192.168.1.1 to 192.168.1.62 192.168.1.63 UNUSABLE - NETMASK ALL 00's 192.168.1.64 01xxxxxx 192.168.1.65 to 192.168.1.126 192.168.1.127 ALLOCATE THIS TO BE FURTHER SUBNETTED 192.168.1.128 10xxxxxx 192.168.1.129 to 192.168.1.190 192.168.1.191 ALLOCATE THIS ONE TO THE 50-STATION OFFICE 192.168.1.192 11xxxxxx 192.168.1.193 to 192.168.1.254 192.168.1.255 UNUSABLE - NETMASK ALL 11's
And guess what ... if we look at the earlier table for a /28, you'll find exactly the section we need to extract and fit in here:
192.168.1.63Network part Subnet.host Host addresses Broadcast Address 192.168.1.64 0100xxxx 192.168.1.65 to 192.168.1.78 192.168.1.79 192.168.1.80 0101xxxx 192.168.1.81 to 192.168.1.94 192.168.1.95 192.168.1.96 0110xxxx 192.168.1.97 to 192.168.1.110 192.168.1.111 192.168.1.112 0111xxxx 192.168.1.113 to 192.168.1.126 192.168.1.127
Now we simply put the two tables together, and we have a variable subnet solution for our three offices. Plus some spares!
Network part Subnet.host Host addresses Broadcast Address 192.168.1.0 00xxxxxx 192.168.1.1 to 192.168.1.62 192.168.1.63 UNUSABLE - NETMASK ALL 00's 192.168.1.64 0100xxxx 192.168.1.65 to 192.168.1.78 192.168.1.79 ALLOCATE THIS TO THE 10-PC OFFICE 192.168.1.80 0101xxxx 192.168.1.81 to 192.168.1.94 192.168.1.95 ALLOCATE THIS TO THE 9-PC OFFICE 192.168.1.96 0110xxxx 192.168.1.97 to 192.168.1.110 192.168.1.111 SPARE 192.168.1.112 0111xxxx 192.168.1.113 to 192.168.1.126 192.168.1.127 SPARE 192.168.1.128 10xxxxxx 192.168.1.129 to 192.168.1.190 192.168.1.191 ALLOCATE THIS ONE TO THE 50-STATION OFFICE 192.168.1.192 11xxxxxx 192.168.1.193 to 192.168.1.254 192.168.1.255 UNUSABLE - NETMASK ALL 11's
and don't forget the trick of grabbing the end IP's for the point to point networks to link these offices together.
- Preference to finer resolution routes - don't need to fully enumerate
Let's say you have variably subnetted a network, and of the 30 subnets available, 29 of them are in one office, but the 30th is in the other. To route this properly you would issue 29 routing commands to one address and 1 to the other. This is wasteful of router table space. The thing to do is to issue ONE router command that covers all 30 subnets and send them to the one office, but issue a second router command which is MORE SPECIFIC to extract that one subnet from the block, and route it elsewhere. More specific routes take precedence in most routers. Occasionally you will find some brand of router which does require non-overlapping routes, and if this happens to you, just issue all 30 explicit commands.
- "Supernetting", aka CIDR (Classless InterDomain Routing)
The world has a big problem with too many route table entries in the big backbone routers. To solve that problem, people realised they could aggregate network routing commands, eg a network 192.168.2.0/24 and a neighboring network 192.168.3.0/24 could be represented by merging them like this: 192.168.2.0/23
This would be fine, except we know the problems of subnetting and all-zeroes and all-ones masks. The same problems would start showing up here. The solution is simple: someone just issued an edict saying "forget everything you learned, we won't bother with those rules any more". There's even a command to tell the routers themselves that they should ignore the rules - "ip classless"
When you break the rules like this, and allow netmasks that end in all 0's or all 1's, it's called "CIDR" - Classless InterDomain Routing.
That's really all you need to know about CIDR. It's trivial, it's easy, and the details work just the same as subnetting but you merge up instead of splitting down.
- Calculators
Once you understand subnetting as described above, you'll probably be able to do it in your head. However sometimes you want to check your work, or are in a hurry, and if so, there are many web pages on the net which offer "subnet calculator"s.
Just be warned - often they do not check for the special conditions such as all-one's subnets, and will let you do something stupid like ask for a /25 subnet. The one referred to below does appear to make an effort at checking for this sort of thing, so it may be a good one to bookmark.
Labels: