1. Motivation
The Subnetting standard, RFC-950std5, specifies that the Host part of the formally 2-level Internet address can be divided into two fields, Subnet and Host. This gives the Internet address a third level of hierarchy, and the concomitant firewalls and savings in routing overhead. It also introduces increased inefficiency in the allocation of addresses.
This inefficiency arises from the fact that the network administrator typically over-estimates the size (number of hosts) of any single subnetwork, in order to prevent future re-addressing of subnets. It may also occur if the routing protocol being used does not handle different length subnets, and the administrator must therefore give every subnet an amount of space equivalent to that received by the largest subnet. (This RFC does not help in the latter case, as the technique herein requires different length subnets.)
The administrative hassle associated with changing the subnet structure of a network can be considerable. For instance, consider the following case. A network has three subnets A, B, and C. Assume that the lowest significant byte is the host part, and the next byte is the subnet part (that is, the mask is 255.255.255.0). Assume further that A has subnet 1.0, B has subnet 2.0, and C has subnet 3.0.
Now, assume that B grows beyond its allocation of 254 hosts. Ideally, we would like to simply change B's mask without changing any of the host addresses in B. However, the subnets numerically above and below B are already taken by A and C. (If say 3.0 was not taken by C, B's mask could be changed from 255.0 (ff00) to 254.0 (fe00). In this case, all of B's existing addresses would still match the new subnet. Indeed, if non-contiguous masks were in use, it might be possible for B to find some other mask bit to change to 0. However, non-contiguous masks are generally not in favor, as they impose limitations on certain forwarding table lookup algorithms. Indeed, RFC-950std5 discourages their use.)
So, the choices available to the network administrator are to 1) form two subnets out of the existing one, or 2) renumber the subnet so that the subnet ends up with a smaller (fewer 1's) mask. Choice 1 can either be accomplished physically or logically. Physically forming two subnets requires partitioning the subnet and inserting a gateway between the two partitions. For obvious reasons, this is not a desirable course of action. Logically forming two subnets can be done by simply assigning another subnet number (say 4.0) to the same subnet, and assigning host addresses under the new subnet. The result of this logical partition is that the hosts with different subnet numbers will not recognize that the others are on the same subnet, and will send packets to the default gateway rather than directly to the host. In fact, this is not such a bad solution, because assuming that the gateway is capable of recognizing multiple subnet numbers on the same subnet, the gateway will simply send the host an ICMP Redirect [4], and subsequent packets will go directly to the host [1] (this may not work correctly on all hosts).
If, however, neither choice is acceptable or possible, then the network administrator must assign a new subnet number to B, thus renumbering the existing hosts, modifying the Domain Name System entries, and changing any other configuration files that have hardwired addresses for hosts in subnet B.
