TCP/IP Fundamentals for Microsoft Windows

Published: December 14, 2004 | Updated: April 18, 2006

Abstract

This chapter describes the details of subnetting for both IPv4 and IPv6 address prefixes. Network administrators need to thoroughly understand subnetting techniques for both types of address prefixes to efficiently allocate and administer the unicast address spaces assigned and used on private intranets. This chapter includes detailed discussions of different subnetting techniques for IPv4 and IPv6 address prefixes. By using these techniques, you can determine subnetted address prefixes and, for IPv4, the range of usable IPv4 addresses for each new subnetted address prefix.

On This Page

Chapter ObjectivesChapter Objectives
Subnetting for IPv4Subnetting for IPv4
Subnetting for IPv6Subnetting for IPv6
Chapter SummaryChapter Summary
Chapter GlossaryChapter Glossary

Chapter Objectives

After completing this chapter, you will be able to:

  • Determine the subnet prefix of an IPv4 address when expressed in prefix length or subnet mask notation.

  • Determine how many IPv4 host ID bits you need to create a particular number of subnets.

  • Subnet an IPv4 address prefix within an octet and across octet boundaries, enumerating the list of subnetted address prefixes and the ranges of valid IPv4 addresses for each subnetted address prefix.

  • Define variable length subnetting and how you can use it to create subnetted address prefixes that match the number of hosts on a particular subnet.

  • Subnet a global IPv6 address prefix, enumerating the list of subnetted address prefixes.

Subnetting for IPv4

Subnetting is a set of techniques that you can use to efficiently divide the address space of a unicast address prefix for allocation among the subnets of an organization network. The fixed portion of a unicast address prefix includes the bits up to and including the prefix length that have a defined value. The variable portion of a unicast address prefix includes the bits beyond the prefix length that are set to 0. Subnetting is the use of the variable portion of a unicast address prefix to create address prefixes that are more efficient (that waste fewer possible addresses) for assignment to the subnets of an organization network.

Subnetting for IPv4 was originally defined to make better use of the host bits for Class A and Class B IPv4 public address prefixes. Consider the example network in Figure 4-1.

Figure 4-1  Network 157.60.0.0/16 before subnetting

Figure 4-1  Network 157.60.0.0/16 before subnetting
See full-sized image

The subnet using the class B address prefix of 157.60.0.0/16 can support up to 65,534 nodes, which is far too many nodes to have on the same subnet. You want to better use the address space of 157.60.0.0/16 through subnetting. However, subnetting 157.60.0.0/16 should not require the reconfiguration of the routers of the Internet.

In a simple example of subnetting, you can subnet 157.60.0.0/16 by using the first 8 host bits (the third octet) for the new subnetted address prefix. If you subnetted 157.60.0.0/16 as shown in Figure 4-2, you would create separate subnets with their own subnetted address prefixes (157.60.1.0/24, 157.60.2.0/24, 157.60.3.0/24), with up to 254 host IDs on each subnet. The router would become aware of the separate subnetted address prefixes and route IPv4 packets to the appropriate subnet.

Figure 4-2  Network 157.60.0.0/16 after subnetting

Figure 4-2  Network 157.60.0.0/16 after subnetting
See full-sized image

The routers of the Internet would still regard all the nodes on the three subnets as being located on the address prefix 157.60.0.0/16. The Internet routers would be unaware of the subnetting being done to 157.60.0.0/16 and therefore require no reconfiguration. The subnetting of an address prefix is not visible to the routers outside the network being subnetted.

When you assign IPv4 address prefixes in the form of subnet prefixes to the subnets of your organization, you should begin with one or more public address prefixes assigned by the Internet Corporation for Assigned Names and Numbers (ICANN) or an Internet service provider (ISP), the private address space (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), or both. The set of starting address prefixes represent a fixed address space.

You can divide the variable portion of an IPv4 address prefix to represent additional subnets and the host IDs on each subnet. For example, the IPv4 address prefix 131.107.192.0/18 has 18 fixed bits (as the prefix length shows) and 14 variable bits (the bits in the host ID portion of the address prefix). You might determine that your organization needs up to 50 subnets. Therefore, you divide the 14 variable bits into 6 bits, which you will use to identify subnets (you can express up to 64 subnets with 6 bits) and 8 bits, which you will use to identify up to 254 host IDs on each subnet. The resulting address prefix for each subnetted address prefix has a 24-bit prefix length (the original 18 bits plus 6 bits used for subnetting).

Subnetting for IPv4 produces a set of subnetted address prefixes and their corresponding ranges of valid IPv4 addresses. By assigning subnetted address prefixes that contain an appropriate number of host IDs to the physical and logical subnets of an organization’s IPv4 network, network administrators can use the available address space in the most efficient manner possible.

Before you begin IPv4 subnetting, you must determine your organization’s current requirements and plan for future requirements. Follow these guidelines:

  • Determine how many subnets your network requires. Subnets include physical or logical subnets to which hosts connect and possibly private wide area network (WAN) links between sites.

  • Determine how many host IDs each subnet requires. Each host and router interface running IPv4 requires at least one IPv4 address.

Based on those requirements, you will define a set of subnetted address prefixes with a range of valid IPv4 addresses for each subnetted address prefix. Your subnets do not all need to have the same number of hosts; most IPv4 networks include subnets of various sizes.

Although the concept of subnetting by using host ID bits is straightforward, the actual mechanics of subnetting are a bit more complicated. Subnetting requires a three-step procedure:

  1. Determine how many host bits to use for the subnetting.

  2. Enumerate the new subnetted address prefixes.

  3. Enumerate the range of IPv4 addresses for each new subnetted address prefix.

Determining the Subnet Prefix of an IPv4 Address Configuration

Before you begin the mechanics of IPv4 subnetting, you should be able to determine the subnet prefix from an arbitrary IPv4 address configuration, which typically consists of an IPv4 address and a prefix length or an IPv4 address and a subnet mask. The following sections show you how to determine the subnet prefix for IPv4 address configurations when the prefix length is expressed in prefix length and dotted decimal (subnet mask) notation.

Prefix Length Notation

To determine the subnet prefix from an arbitrary IPv4 address using prefix length notation (w.x.y.z/n), take the values of the high-order n bits of the address and combine them with 32-n zero bits. Then convert the resulting 32-bit number to dotted decimal notation.

For example, for the IPv4 address configuration of 192.168.207.47/22, the high-order 22 bits are 11000000 10101000 110011. To obtain the subnet prefix, combine this result with the low-order 10 bits of 00 00000000. The result is 11000000 10101000 11001100 00000000, or 192.168.204.0/22.

To determine the subnet prefix of an IPv4 address configuration in prefix length notation without having to work entirely with binary numbers, use the following method:

  1. Express the number n (the prefix length) as the sum of 4 numbers by successively subtracting 8 from n. For example, 20 is 8+8+4+0.

  2. Create a table with four columns and three rows. In the first row, place the decimal octets of the IPv4 address. In the second row, place the four digits of the sum you determined in step 1.

  3. For the columns that have 8 in the second row, copy the octet from the first row to the third row. For the columns that have 0 in the second row, place a 0 in the third row.

  4. For the columns that have a number between 8 and 0 in the second row, convert the decimal number in the first row to binary, take the high-order bits for the number of bits indicated in the second row, fill the rest of the bits with zero, and then convert to a decimal number.

For example, for the IPv4 address configuration of 192.168.207.47/22, 22 is 8+8+6+0. From this, construct the following table:

192

168

207

47

8

8

6

0

For the first and second octets, copy the octets from the first row. For the last octet, place a 0 in the third row. The table becomes:

192

168

207

47

8

8

6

0

192

168

 

0

For the third octet, convert the number 207 to binary for the first 6 binary digits using the decimal to binary conversion method described in Chapter 3, "IP Addressing." The decimal number 207 is 128+64+8+4+2+1, which is 11001111. Taking the first 6 digits 110011 and filling in the octet with 00 produces 11001100, or 204 in decimal. The table becomes:

192

168

207

47

8

8

6

0

192

168

204

0

Therefore, the subnet prefix for the IPv4 address configuration 192.168.207.47/22 is 192.168.204.0/22.

Subnet Mask Notation

To extract the subnet prefix from an arbitrary IPv4 address configuration using an arbitrary subnet mask, IPv4 uses a mathematical operation called a logical AND comparison. In an AND comparison, the result of two items being compared is true only when both items being compared are true; otherwise, the result is false. Table 4-1 shows the result of the AND operation for the four possible bit combinations.

Bit Combination

Result

1 AND 1

1

1 AND 0

0

0 AND 0

0

0 AND 1

0

Table 4-1  Result of AND Operation

Therefore, the result of the AND operation is 1 only when both bits being ANDed are 1. Otherwise, the result is 0.

IPv4 performs a logical AND comparison with the 32-bit IPv4 address and the 32-bit subnet mask. This operation is known as a bit-wise logical AND. The result of the bit-wise logical AND of the IPv4 address and the subnet mask is the subnet prefix.

For example, to determine the subnet prefix of the IPv4 address configuration 131.107.189.41 with a subnet mask of 255.255.240.0, turn both numbers into their binary equivalents, and line them up. Then perform the AND operation on each bit, and write down the result.

IPv4 Address:    10000011 01101011 10111101 00101001

Subnet Mask:    11111111 11111111 11110000 00000000

Subnet Prefix:    10000011 01101011 10110000 00000000

The result of the bit-wise logical AND of the 32 bits of the IPv4 address and the subnet mask is the subnet prefix 131.107.176.0, 255.255.240.0. The behavior of the bit-wise logical AND operation between the IPv4 address and the subnet mask is the following:

  • For the bits in the fixed portion of the address (in which the bits in the subnet mask are set to 1), the subnet prefix bits are copied from the IPv4 address, essentially extracting the subnet prefix of the IPv4 address.

  • For the bits in the variable portion of the address (in which the bits in the subnet mask are set to 0), the subnet prefix bits are set to 0, essentially discarding the host ID portion of the IPv4 address.

To summarize, the bit-wise logical AND extracts the subnet prefix portion and discards the host ID portion of an IPv4 address. The result is the subnet prefix.

To determine the subnet prefix of an IPv4 address configuration in subnet mask notation without having to work entirely with binary numbers, use the following method:

  1. Create a table with four columns and three rows. In the first row, place the decimal octets of the IPv4 address. In the second row, place the decimal octets of the subnet mask.

  2. For the columns that have 255 in the second row, copy the octet from the first row to the third row. For the columns that have 0 in the second row, place a 0 in the third row.

  3. For the columns that have a number between 255 and 0 in the second row, AND the decimal numbers in the first two rows. You can do this by converting both numbers to binary, performing the AND comparison for all 8 bits in the octet, and then converting the result back to decimal. Alternately, you can use a calculator, such as the Windows Calculator, in scientific mode.

For example, for the IPv4 address configuration of 131.107.189.41, 255.255.240.0, construct the following table:

131

107

189

41

255

255

240

0

For the first and second octets, copy the octets from the first row. For the last octet, place a 0 in the third row. The table becomes:

131

107

189

41

255

255

240

0

131

107

 

0

For the third octet, compute 189 AND 240. In binary, this operation becomes:

      10111101

AND   11110000

      10110000

Converting 10110000 to decimal is 176. Alternately, use the Windows Calculator to compute 189 AND 240, which yields 176.

The table becomes:

131

107

189

41

255

255

240

0

131

107

176

0

Therefore, the subnet prefix for the IPv4 address configuration 131.107.189.41, 255.255.240.0 is 131.107.176.0, 255.255.240.0.

Defining a Prefix Length

The number of variable bits in the subnet prefix determines the maximum number of subnets and hosts on each subnet that you can have.

Before you define a new prefix length based on your subnetting scheme, you should have a good idea of the number of subnets and hosts you will have in the future. If you use more variable bits for the new prefix length than required, you will save the time and administrative difficulty of renumbering your IPv4 network later.

The more variable bits that you use, the more subnets you can have—but with fewer hosts on each subnet. If you make the prefix too long, it will allow for growth in the number of subnets, but it will limit the growth in the number of hosts on each subnet. If you make the prefix too short, it will allow for growth in the number of hosts on each subnet, but it will limit the growth in the number of subnets. Figure 4-3 shows an example of subnetting the third octet.

Figure 4-3  Tradeoff between number of subnets and number of hosts per subnet

Figure 4-3  Tradeoff between number of subnets and number of hosts per subnet
See full-sized image

Follow these guidelines to determine the number of bits to use for a new prefix length when subnetting:

  1. Determine how many subnets you need now and will need in the future.

  2. Use additional bits for subnetting if:

    • You will never require as many hosts per subnet as allowed by the remaining bits.

    • The number of subnets will increase, requiring additional bits from the host ID.

Defining a new prefix length depends on how many subnets you need. Table 4-2 shows how many subnets you can create by using a particular number of variable bits (up to 16) to specify each subnet.

Number of Subnets

Number of Host Bits

1-2

1

3-4

2

5-8

3

9-16

4

17-32

5

33-64

6

65-128

7

129-256

8

257-512

9

513-1,024

10

1,025-2,048

11

2,049-4,096

12

4,097-8,192

13

8,193-16,384

14

16,385-32,768

15

32,769-65,536

16

Table 4-2  Number of Required Subnets and Host Bits

The maximum prefix length for unicast IPv4 addresses is 30. With 30 bits for the subnet prefix, the two remaining bits can express up to 4 possible combinations. However, the all-zeros and all-ones host IDs are reserved. Therefore, with two host ID bits, you can express only two usable host IDs (the 01 and 10 combinations).

To determine the maximum number of hosts per subnet for any subnetting scheme:

  1. Determine m, the number of bits that remain for the host ID, by subtracting the subnetted prefix length from 32.

  2. Calculate the maximum number of hosts per subnet from 2m - 2.

Based on the address prefix you are subnetting and the number of bits that you need for subnetting, you can determine whether you are subnetting within an octet or subnetting across an octet boundary. For example, if you start with an 18-bit address prefix and then use 4 bits for subnetting, then you are subnetting within the third octet. (The subnetted prefix length is 22, which is still within the third octet.) However, if you start with a 20-bit address prefix and then use 6 bits for subnetting, then you are subnetting across the third and fourth octets. (The original prefix length is 20, which is within the third octet, and the subnetted prefix length is 26, which is within the fourth octet.)

As the following sections describe, the specific procedures for subnetting within an octet and subnetting across an octet boundary are very different.

Subnetting Within an Octet

When you subnet within an octet, the subnetting procedure has two main steps:

  • Defining the subnetted address prefixes

  • Defining the range of usable IPv4 addresses for each subnetted address prefix

The following sections describe these steps.

Defining the Subnetted Address Prefixes

You can use two methods to define the set of subnetted address prefixes:

  • Binary

  • Decimal

To create an enumerated list of subnetted address prefixes by using binary, perform the following steps:

  1. Based on n, the number of bits chosen for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains binary representations of the subnetted address prefixes, and the third column contains dotted decimal representations of the subnetted address prefixes.

    For each binary representation, the bits corresponding to the address prefix being subnetted are fixed at their original values, and all host bits are always set to 0. Only the subnet bits vary as you set them to each possible binary value.

  2. In the first row, set the subnet bits to all 0s, and convert the entire subnetted address prefix to dotted decimal notation. The result is the original address prefix with its new prefix length.

  3. In the next row, increment the value within the subnet bits.

  4. Convert the binary result to dotted decimal notation.

  5. Repeat steps 3 and 4 until you complete the table.

For example, you can perform a 3-bit subnetting of the private address prefix 192.168.0.0/16. The subnet mask for the new subnetted address prefixes is 255.255.224.0 or /19. Based on n = 3, construct a table with 8 (= 23) rows, as Table 4-3 shows. In the row for subnet 1, set all subnet bits (those in bold in the table) to 0, and increment them in each subsequent row.

Subnet

Binary Representation

Subnetted Address Prefix

1

11000000.10101000.00000000.00000000

192.168.0.0/19

2

11000000.10101000.00100000.00000000

192.168.32.0/19

3

11000000.10101000.01000000.00000000

192.168.64.0/19

4

11000000.10101000.01100000.00000000

192.168.96.0/19

5

11000000.10101000.10000000.00000000

192.168.128.0/19

6

11000000.10101000.10100000.00000000

192.168.160.0/19

7

11000000.10101000.11000000.00000000

192.168.192.0/19

8

11000000.10101000.11100000.00000000

192.168.224.0/19

Table 4-3  Binary Subnetting Technique for the 3-bit Subnetting of 192.168.0.0/16

Note  RFCs 950 and 1122 prohibit setting the bits being used for subnetting to all 1s or all 0s (the all-ones and all-zeros subnets). However, RFC 1812 permits this practice.

To create an enumerated list of subnetted address prefixes by working with decimal numbers, perform the following steps:

  1. Based on f, the number of bits in the octet that are already fixed, and n, the number of bits you are using for subnetting, compute the subnet increment value, i, based on the following formula: i =  2(8-f-n). The result is the incrementing value for each subnet for the octet that you are subnetting.

  2. Based on n, the number of bits you are using for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains the decimal representations of the octet being subnetted, and the third column contains the dotted decimal representations of the subnetted address prefixes.

  3. In the first row, set the second column to the starting octet value in the address prefix being subnetted, and set the third column to the original address prefix with its new prefix length.

  4. In the next row, set the second column to the result of incrementing the number from the previous row with i, and set the third column to the subnetted address prefix with the subnetted octet from the second row.

  5. Repeat step 4 until you complete the table.

For example, to perform a 3-bit subnet of the private address prefix 192.168.0.0/16, compute the subnet increment from i = 2(8-f-n). In this case, f=0 and n=3. Therefore, the subnet increment is 2(8-0-3) = 2(5) = 32. The prefix length for the subnetted address prefixes is /19. Based on n = 3, construct a table with 8 (= 23) rows as Table 4-4 shows. In the row for subnet 1, place the original address prefix with the new prefix length, and complete the remaining rows by incrementing the subnetted octet by 32.

Subnet

Decimal Value of the Subnetted Octet

Subnetted Address Prefix

1

0

192.168.0.0/19

2

32

192.168.32.0/19

3

64

192.168.64.0/19

4

96

192.168.96.0/19

5

128

192.168.128.0/19

6

160

192.168.160.0/19

7

192

192.168.192.0/19

8

224

192.168.224.0/19

Table 4-4  Decimal Subnetting Technique for the 3-bit Subnetting of 192.168.0.0/16

Defining the Range of IPv4 Addresses for Each Subnet

You can use two methods to define the range of IPv4 addresses for each subnet:

  • Binary

  • Decimal

To define the possible host IDs within each subnet, you keep the bits in the subnetted address prefix fixed while setting the remaining bits (in the host portion of the IPv4 address) to all possible values except all 1s and all 0s. Recall from Chapter 3, “IP Addressing,” that you should use the following standard practice when defining the range of valid IPv4 unicast addresses for a given address prefix:

  • For the first IPv4 unicast address in the range, set all the host bits in the address to 0, except for the lowest-order bit, which you set to 1.

  • For the last IPv4 unicast address in the range, set all the host bits in the address to 1, except for the lowest-order bit, which you set to 0.

The result for each subnetted address prefix is a range of values that describe the possible unicast IPv4 addresses for that subnet.

To define the range of valid IPv4 addresses for a set of subnetted address prefixes using the binary method, perform the following steps:

  1. Based on n, the number of host bits chosen for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains the binary representations of the first and last IPv4 addresses for the subnetted address prefixes, and the third column contains the dotted decimal representation of the first and last IPv4 addresses of the subnetted address prefixes. Alternately, add two columns to the previous table used for enumerating the subnetted address prefixes using the binary technique.

  2. In the second column of the first row, the first IPv4 address is the address in which all the host bits are set to 0 except for the last host bit. The last IPv4 address is the address in which all the host bits are set to 1 except for the last host bit.

  3. In the third column of the first row, convert the binary representation to dotted decimal notation.

  4. Repeat steps 2 and 3 for each row until you complete the table.

For example, Table 4-5 shows the range of IPv4 addresses for the 3-bit subnetting of 192.168.0.0/16 with the host bits in bold.

Subnet

Binary Representation

Range of IPv4 Addresses

1

11000000.10101000.00000000.00000001 –11000000.10101000.00011111.11111110

192.168.0.1 –192.168.31.254

2

11000000.10101000.00100000.00000001 –11000000.10101000.00111111.11111110

192.168.32.1 –192.168.63.254

3

11000000.10101000.01000000.00000001 –11000000.10101000.01011111.11111110

192.168.64.1 –192.168.95.254

4

11000000.10101000.01100000.00000001 –11000000.10101000.01111111.11111110

192.168.96.1 –192.168.127.254

5

11000000.10101000.10000000.00000001 –11000000.10101000.10011111.11111110

192.168.128.1 –192.168.159.254

6

11000000.10101000.10100000.00000001 –11000000.10101000.10111111.11111110

192.168.160.1 –192.168.191.254

7

11000000.10101000.11000000.00000001 –11000000.10101000.11011111.11111110

192.168.192.1 –192.168.223.254

8

11000000.10101000.11100000.00000001 –11000000.10101000.11111111.11111110

192.168.224.1 –192.168.255.254

Table 4-5  Binary Technique for Defining the Ranges of IPv4 Addresses for the 3-bit Subnetting of 192.168.0.0/16

To define the range of valid IPv4 addresses for a set of subnetted address prefixes using the decimal method, perform the following steps:

  1. Based on n, the number of host bits chosen for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains the dotted decimal representations of the subnetted address prefixes, and the third column contains the dotted decimal representations of the first and last IPv4 addresses of the subnetted address prefix. Alternately, add a column to the previous table used for enumerating the subnetted address prefixes in decimal.

  2. For each row, calculate the first IPv4 address in the range by adding 1 to the last octet of the subnetted address prefix.

  3. For each row except the last, calculate the last IPv4 address in the range using the following formulas:

    • When you subnet within the first octet, the last value for a given subnet is [NextSubnetID - 1].255.255.254 (in which NextSubnetID is the value of the octet that is being subnetted for the next subnetted address prefix).

    • When you subnet within the second octet, the last value for a given subnet is w.[NextSubnetID - 1].255.254.

    • When you subnet within the third octet, the last value for a given subnet is w.x.[NextSubnetID - 1].254.

    • When you subnet within the fourth octet, the last value for a given subnet is w.x.y.[NextSubnetID - 2].

  4. For the last row, calculate the last IPv4 address in the range using the following formulas:

    • When you subnet within the first octet, the last value is [SubnetID + i - 1].255.255.254 (in which SubnetID is the value of the octet that is being subnetted for the current subnetted address prefix and i is the increment value derived when determining the subnetted address prefixes).

    • When you subnet within the second octet, the last value is w.[SubnetID + i - 1].255.254.

    • When you subnet within the third octet, the last value is w.x.[SubnetID + i - 1].254.

    • When you subnet within the fourth octet, the last value is w.x.y.[SubnetID + i - 2].

For example, Table 4-6 shows the range of IPv4 addresses for the 3-bit subnetting of 192.168.0.0/16.

Subnet

Subnetted Address Prefix

Range of IPv4 Addresses

1

192.168.0.0/19

192.168.0.1 –192.168.31.254

2

192.168.32.0/19

192.168.32.1 –192.168.63.254

3

192.168.64.0/19

192.168.64.1 –192.168.95.254

4

192.168.96.0/19

192.168.96.1 –192.168.127.254

5

192.168.128.0/19

192.168.128.1 –192.168.159.254

6

192.168.160.0/19

192.168.160.1 –192.168.191.254

7

192.168.192.0/19

192.168.192.1 –192.168.223.254

8

192.168.224.0/19

192.168.224.1 –192.168.255.254

Table 4-6  Decimal Technique for Defining the Ranges of IPv4 Addresses for the 3-bit Subnetting of 192.168.0.0/16

Subnetting Across an Octet Boundary

Like the procedure for subnetting within an octet, the procedure for subnetting across an octet boundary has two steps:

  • Defining the subnetted address prefixes

  • Defining the range of usable IPv4 addresses for each subnetted address prefix

The following sections describe these steps.

Defining the Subnetted Address Prefixes

To subnet across an octet boundary, do the following:

  1. Based on n, the number of host bits you are using for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains representations of the 32-bit subnetted address prefixes as single decimal numbers, and the third column contains the dotted decimal representations of the subnetted address prefixes.

  2. Convert the address prefix (w.x.y.z) being subnetted from dotted decimal notation to N, a decimal representation of the 32-bit address prefix, using the following formula:

    N = w x 16777216 + x x 65536 + y x 256 + z

  3. Compute the increment value I using I = 2h where h is the number of host bits remaining.

  4. In the first row, place N, the decimal representation of the subnetted address prefix, in the second column, and place the subnetted address prefix w.x.y.z with its new prefix length in the third column.

  5. In the next row, add I to the previous row’s decimal representation, and place the result in the second column.

  6. Convert the decimal representation of the subnetted address prefix to dotted decimal notation (W.X.Y.Z) using the following formula (where s is the decimal representation of the subnetted address prefix):

    W = int(s/16777216)

    X = int((s mod(16777216))/65536)

    Y = int((s mod(65536))/256)

    Z = s mod(256)

    int( ) denotes integer division, and mod( ) denotes the modulus (the remainder upon division).

  7. Repeat steps 5 and 6 until you complete the table.

For example, to perform a 4-bit subnetting of the address prefix 192.168.180.0/22, construct a table with 16 (24) rows, as Table 4-7 shows. N, the decimal representation of 192.168.180.0, is 3232281600, which is the result of 192 x 16777216 + 168 x 65536 + 180 x 256. Because 6 host bits remain, the increment I is 26 = 64. Additional rows in the table are successive increments of 64.

Subnet

Decimal Representation

Subnetted Address Prefix

1

3232281600    

192.168.180.0/26

2

3232281664    

192.168.180.64/26

3

3232281728    

192.168.180.128/26

4

3232281792    

192.168.180.192/26

5

3232281856    

192.168.181.0/26

6

3232281920    

192.168.181.64/26

7

3232281984    

192.168.181.128/26

8

3232282048    

192.168.181.192/26

9

3232282112    

192.168.182.0/26

10

3232282176    

192.168.182.64/26

11

3232282240    

192.168.182.128/26

12

3232282304    

192.168.182.192/26

13

3232282368    

192.168.183.0/26

14

3232282432    

192.168.183.64/26

15

3232282496    

192.168.183.128/26

16

3232282560    

192.168.183.192/26

Table 4-7  Decimal Subnetting Technique for the 4-bit Subnetting of 192.168.180.0/22

This method is a completely general technique for subnetting, and you can also use it within an octet and across multiple octets.

Defining the Range of IPv4 Addresses for Each Subnet

To determine the range of usable host IDs for each subnetted address prefix, perform the following steps:

  1. Based on n, the number of host bits you are using for subnetting, create a three-column table with 2n rows. The first column contains the subnet numbers (starting with 1), the second column contains the decimal representation of the first and last IPv4 addresses for the subnetted address prefixes, and the third column contains the dotted decimal representation of the first and last IPv4 addresses of the subnetted address prefixes. Alternately, add two columns to the previous table used for enumerating the subnetted address prefixes using the decimal subnetting technique.

  2. Compute the increment value J based on h, the number of host bits remaining:

    J = 2h – 2

  3. The first IPv4 address is N + 1, in which N is the decimal representation of the subnetted address prefix. The last IPv4 address is N + J.

  4. Convert the decimal representation of the first and last IPv4 addresses to dotted decimal notation (W.X.Y.Z) using the following formula (where s is the decimal representation of the first or last IPv4 address):

    W = int(s/16777216)

    X = int((s mod(16777216))/65536)

    Y = int((s mod(65536))/256)

    Z = s mod(256)

    int( ) denotes integer division, and mod( ) denotes the modulus (the remainder upon division).

  5. Repeat steps 3 and 4 for each row of the table.

For example, Table 4-8 shows the range of IPv4 addresses for the 4-bit subnetting of 192.168.180.0/22. The increment J is 26 – 2 = 62.

Subnet

Decimal Representation

Range of IPv4 Addresses

1

3232281601-3232281662

192.168.180.1-192.168.180.62

2

3232281665-3232281726

192.168.180.65-192.168.180.126

3

3232281729-3232281790

192.168.180.129-192.168.180.190

4

3232281793-3232281854

192.168.180.193-192.168.180.254

5

3232281857-3232281918

192.168.181.1-192.168.181.62

6

3232281921-3232281982

192.168.181.65-192.168.181.126

7

3232281985-3232282046

192.168.181.129-192.168.181.190

8

3232282049-3232282110

192.168.181.193-192.168.181.254

9

3232282113-3232282174

192.168.182.1-192.168.182.62

10

3232282177-3232282238

192.168.182.65-192.168.182.126

11

3232282241-3232282302

192.168.182.129-192.168.182.190

12

3232282305-3232282366

192.168.182.193-192.168.182.254

13

3232282369-3232282430

192.168.183.1-192.168.183.62

14

3232282433-3232282494

192.168.183.65-192.168.183.126

15

3232282497-3232282558

192.168.183.129-192.168.183.190

16

3232282561-3232282622

192.168.183.193-192.168.183.254

Table 4-8  Decimal Enumeration of the Ranges of IPv4 Addresses for the 4-bit Subnetting of 192.168.180.0/22

Variable Length Subnetting

One of the original uses for subnetting was to subdivide a class-based address prefix into a series of equal-sized subnets. For example, a 4-bit subnetting of a class B address prefix produces 16 equal-sized subnets. However, subnetting is a general method of using host bits to express subnets and does not require equal-sized subnets.

Subnets of different sizes can exist within a class-based or classless address prefix. This practice is well suited to real-world environments, where networks of an organization contain different numbers of hosts, and you need different-sized subnets to avoid wasting IPv4 addresses. The practice of creating and deploying various-sized subnets from an IPv4 address prefix is known as variable length subnetting, and this technique uses variable prefix lengths, also known as variable length subnet masks (VLSMs).

Variable length subnetting is a technique of allocating subnetted address prefixes that use prefix lengths of different sizes. However, all subnetted address prefixes are unique, and you can distinguish them from each other by their corresponding prefix length.

Variable length subnetting essentially performs subnetting on a previously subnetted address prefix. When you subnet, you keep the fixed address prefix and choose a certain number of host bits to express subnets. With variable length subnetting, the address prefix being subnetted has already been subnetted.

Variable Length Subnetting Example

For example, given the address prefix of 157.54.0.0/16, the required configuration is to reserve half the addresses for future use, have 15 address prefixes for sites of the organization with up to 2,000 hosts, and create eight subnets with up to 250 hosts.

To achieve the requirement of reserving half the address space for future use, subnet 1 bit of the class-based address prefix of 157.54.0.0. This subnetting produces 2 subnets, 157.54.0.0/17 and 157.54.128.0/17, dividing the address space in half. You can fulfill the requirement by choosing 157.54.0.0/17 as the address prefix for the reserved portion of the address space.

Table 4-9 shows the reservation of half the address space.

Subnet Number

Address Prefix (Dotted Decimal)

Address Prefix (Prefix Length)

1

157.54.0.0, 255.255.128.0

157.54.0.0/17

Table 4-9  Reserving Half the Address Space

To fulfill the requirement of 15 address prefixes with approximately 2,000 hosts per prefix, subnet 4 bits of the subnetted address prefix of 157.54.128.0/17. This subnetting produces 16 address prefixes (157.54.128.0/21, 157.54.136.0/21...157.54.240.0/21, 157.54.248.0/21), allowing up to 2,046 hosts per address prefix. You can fulfill the requirement by choosing the first 15 subnetted address prefixes (157.54.128.0/21 to 157.54.240.0/21) as the address prefixes for other sites.

Table 4-10 illustrates 15 address prefixes with up to 2,046 hosts per subnet.

Subnet Number

Address Prefix (Dotted Decimal)

Address Prefix (Prefix Length)

1

157.54.128.0, 255.255.248.0

157.54.128.0/21

2

157.54.136.0, 255.255.248.0

157.54.136.0/21

3

157.54.144.0, 255.255.248.0

157.54.144.0/21

4

157.54.152.0, 255.255.248.0

157.54.152.0/21

5

157.54.160.0, 255.255.248.0

157.54.160.0/21

6

157.54.168.0, 255.255.248.0

157.54.168.0/21

7

157.54.176.0, 255.255.248.0

157.54.176.0/21

8

157.54.184.0, 255.255.248.0

157.54.184.0/21

9

157.54.192.0, 255.255.248.0

157.54.192.0/21

10

157.54.200.0, 255.255.248.0

157.54.200.0/21

11

157.54.208.0, 255.255.248.0

157.54.208.0/21

12

157.54.216.0, 255.255.248.0

157.54.216.0/21

13

157.54.224.0, 255.255.248.0

157.54.224.0/21

14

157.54.232.0, 255.255.248.0

157.54.232.0/21

15

157.54.240.0, 255.255.248.0

157.54.240.0/21

Table 4-10  Fifteen Address Prefixes with up to 2,046 Hosts

To achieve the requirement of eight subnets with up to 250 hosts, subnet 3 bits of the subnetted address prefix of 157.54.248.0/21. This subnetting produces eight subnets (157.54.248.0/24, 157.54.249.0/24...157.54.254.0/24, 157.54.255.0/24) and allows up to 254 hosts per subnet. You can fulfill the requirement by choosing all eight subnetted address prefixes (157.54.248.0/24 through 157.54.255.0/24) as the address prefixes to assign to individual subnets.

Table 4-11 illustrates eight subnets with 254 hosts per subnet.

Subnet Number

Address Prefix (Dotted Decimal)

Address Prefix (Prefix Length)

1

157.54.248.0, 255.255.255.0

157.54.248.0/24

2

157.54.249.0, 255.255.255.0

157.54.249.0/24

3

157.54.250.0, 255.255.255.0

157.54.250.0/24

4

157.54.251.0, 255.255.255.0

157.54.251.0/24

5

157.54.252.0, 255.255.255.0

157.54.252.0/24

6

157.54.253.0, 255.255.255.0

157.54.253.0/24

7

157.54.254.0, 255.255.255.0

157.54.254.0/24

8

157.54.255.0, 255.255.255.0

157.54.255.0/24

Table 4-11  Eight Subnets with up to 254 Hosts

Figure 4-4 shows the variable length subnetting of 157.54.0.0/16.

Figure 4-4  Variable length subnetting of 157.54.0.0/16

Figure 4-4  Variable length subnetting of 157.54.0.0/16
See full-sized image

Variable Length Subnetting and Routing

In dynamic routing environments, you can deploy variable length subnetting only where the prefix length is advertised along with the address prefix. Routing Information Protocol (RIP) for IP version 1 does not support variable length subnetting, but RIP for IP version 2, Open Shortest Path First (OSPF), and Border Gateway Protocol version 4 (BGPv4) do. For more information about these routing protocols, see Chapter 5, "IP Routing."

Subnetting for IPv6

To subnet the IPv6 address space, you use subnetting techniques to divide the 16-bit Subnet ID field for a 48-bit global or unique local address prefix in a manner that allows for route summarization and delegation of the remaining address space to different portions of an IPv6 intranet.

You need not subnet in any specific fashion. The subnetting technique described here assumes that you subnet by dividing the variable portions of the address space of the Subnet ID field using its high-order bits. Although this method promotes hierarchical addressing and routing, it is not required. For example, in a small organization with a small number of subnets, you can also easily create a flat addressing space for global addresses by numbering the subnets starting from 0.

Subnetting a Global Address Prefix

For global addresses, Internet Assigned Numbers Authority (IANA) or an ISP assigns an IPv6 address prefix in which the first 48 bits are fixed. Subnetting the Subnet ID field for a 48-bit global address prefix requires a two-step procedure:

  1. Determine the number of bits to be used for the subnetting.

  2. Enumerate the new subnetted address prefixes.

Determining the Number of Subnetting Bits

The number of bits that you use for subnetting determines the possible number of new subnetted address prefixes that you can allocate to portions of your network based on geographical or departmental divisions. In a hierarchical routing infrastructure, you must determine how many address prefixes, and therefore how many bits, you need at each level in the hierarchy. The more bits you choose for the various levels of the hierarchy, the fewer bits you have to enumerate individual subnets in the last level of the hierarchy.

For example, you could decide to implement a two-level hierarchy reflecting a geographical/departmental structure and use 4 bits for the geographical level and 6 bits for the departmental level. This scheme allows for 16 geographical regions, and each department in each region has only 6 bits of subnetting space left (16 - 6 - 4), or only 64 (=26) subnets per department.

On any given level in the hierarchy, a number of bits are already fixed by the previous level in the hierarchy (f), a number of bits are used for subnetting at the current level in the hierarchy (s), and a number of bits remain for the next level down in the hierarchy (r). At all times, f+s+r = 16. Figure 4-5 shows this relationship.

Figure 4-5  Subnetting the Subnet ID field of a global IPv6 address

Figure 4-5  Subnetting the Subnet ID field of a global IPv6 address
See full-sized image

Enumerating Subnetted Address Prefixes

Based on the number of bits used for subnetting, you must list the new subnetted address prefixes, and you can use either of two main approaches:

  • Enumerate the new subnetted address prefixes by using hexadecimal representations of the subnet ID and increment.

  • Enumerate the new subnetted address prefixes by using decimal representations of the subnet ID and increment.

Both methods produce the same result: an enumerated list of subnetted address prefixes.

To create the enumerated list of subnetted address prefixes using the hexadecimal method, perform the following steps:

  1. Based on s, the number of bits chosen for subnetting, and m, the prefix length of the address prefix being subnetted, calculate the following:

    f = m - 48

    f is the number of bits within the subnet ID that are already fixed.

    n = 2s

    n is the number of address prefixes that you will obtain.

    i = 216-(f+s) 

    i is the incremental value between each successive subnet ID expressed in hexadecimal.

    P = m+s

    P is the prefix length of the new subnetted address prefixes.

  2. Create a two-column table with n rows. The first column contains the address prefix numbers (starting with 1), and the second column contains the new subnetted address prefixes.

  3. In the first row, place the original address prefix with the new prefix length in the second column. For example, based on F, the hexadecimal value of the subnet ID being subnetted, the subnetted address prefix is [48-bit prefix]:F::/P.

  4. In the next row, increment the value within the subnet ID portion of the site-local or global address by i, and place the result in the second column. For example, in the second row, the subnetted prefix is [48-bit prefix]:F+i::/P.

  5. Repeat step 4 until you complete the table.

For example, to perform a 3-bit subnetting of the global address prefix 2001:DB8:0:C000::/51, first calculate the values of the number of prefixes, the increment, and the new prefix length. Your starting values are F=0xC000, s=3, m=51, and therefore f=51-48=3. The number of prefixes is 8 (n=23). The increment is 0x400 (i=216-(3+3)=1024=0x400). The new prefix length is 54 (P=51+3).

Next, you construct a table with eight rows, as shown in Table 4-12. In the row for the address prefix 1, place 2001:DB8:0:C000::/54 in the second column, and complete the remaining rows by incrementing the Subnet ID portion of the address prefix by 0x400.

Address Prefix

Subnetted Address Prefix

1

2001:DB8:0:C000::/54

2

2001:DB8:0:C400::/54

3

2001:DB8:0:C800::/54

4

2001:DB8:0:CC00::/54

5

2001:DB8:0:D000::/54

6

2001:DB8:0:D400::/54

7

2001:DB8:0:D800::/54

8

2001:DB8:0:DC00::/54

Table 4-12   Hexadecimal Technique for the 3-bit Subnetting of 2001:DB8:0:C000::/51

To create the enumerated list of subnetted address prefixes using the decimal method, do the following:

  1. Based on s, the number of bits you are using for subnetting, m, the prefix length of the address prefix being subnetted, and F, the hexadecimal value of the subnet ID being subnetted, calculate the following:

    f = m - 48

    f is the number of bits within the Subnet ID that are already fixed.

    n = 2s

    n is the number of address prefixes that you will obtain.

    i = 216-(f+s) 

    i is the incremental value between each successive subnet ID.

    P = m+s

    P is the prefix length of the new subnetted address prefixes.

    D = decimal representation of F

  2. Create a three-column table with n rows. The first column contains the address prefix numbers (starting with 1), the second column contains the decimal representations of the Subnet ID portions of the new subnetted address prefixes, and the third column contains the new subnetted address prefixes.

  3. In the first row, place the decimal representation of the subnet ID (D) in the first column, and place the subnetted prefix, [48-bit prefix]:F::/P, in the second column.

  4. In the next row, increase the value of the decimal representation of the subnet ID by i, and place the result in the second column. For example, in the second row, the decimal representation of the subnet ID is D+i.

  5. In the third column, convert the decimal representation of the subnet ID to hexadecimal, and construct the prefix from [48-bit prefix]:[SubnetID]::/P. For example, in the second row, the subnetted address prefix is [48-bit prefix]:[D+i (converted to hexadecimal)]::/P.

  6. Repeat steps 4 and 5 until you complete the table.

For example, to perform a 3-bit subnetting of the site-local address prefix 2001:DB8:0:C000::/51, first calculate the values of the number of prefixes, the increment, the new prefix length, and the decimal representation of the starting subnet ID. Our starting values are F=0xC000, s=3, m=51, and therefore f=51-48=3. The number of prefixes is 8 (n=23). The increment is 1024 (i=216-(3+3)). The new prefix length is 54 (P=51+3). The decimal representation of the starting subnet ID is 49152 (D=0xC000=49152).

Next, construct a table with 8 rows as Table 4-13 shows. In the row for the address prefix 1, place 49192 in the first column and 2001:DB8:0:C000::/54 in the second column. In the remaining rows, increment the subnet ID portion of the address prefix (the fourth hexadecimal block) by 1024 and convert to hexadecimal.

Address Prefix

Decimal Representation of Subnet ID

Subnetted Address Prefix

1

49192

2001:DB8:0:C000::/54

2

50176

2001:DB8:0:C400::/54

3

51200

2001:DB8:0:C800::/54

4

52224

2001:DB8:0:CC00::/54

5

53248

2001:DB8:0:D000::/54

6

54272

2001:DB8:0:D400::/54

7

55296

2001:DB8:0:D800::/54

8

56320

2001:DB8:0:DC00::/54

Table 4-13  Decimal Technique for the 3-bit Subnetting of 2001:DB8:0:C000::/51

Variable Length Subnetting

Just as in IPv4, you can subnet IPv6 address prefixes recursively, up to the 64 bits that define the address prefix for an individual subnet, to provide route summarization at various levels of an organization intranet. Unlike IPv4, you cannot use variable-length subnetting to create different sized subnets because all IPv6 subnets use a 64-bit subnet prefix and a 64-bit interface ID.

Chapter Summary

The key information in this chapter is the following:

  • Subnetting is a set of techniques that you can use to efficiently allocate the address space of one or more unicast address prefixes among the subnets of an organization network.

  • To determine the subnet prefix of an IPv4 address configuration in prefix length notation (w.x.y.z/n), retain the n high-order bits, set all the remaining bits to 0, and then convert the result to dotted decimal notation. To determine the subnet prefix of an IPv4 address configuration in subnet mask notation, perform a bit-wise logical AND between the IPv4 address and its subnet mask.

  • When determining the number of host ID bits in an IPv4 address prefix to use for subnetting, choose more subnets over more hosts per subnet if you have more possible host IDs than are practical to use on a given subnet.

  • To subnet an IPv4 address prefix, use either binary or decimal methods as described in this chapter to enumerate the subnetted address prefixes and the ranges of usable IPv4 addresses for each subnet.

  • Variable length subnetting is a technique of creating subnetted IPv4 address prefixes that use prefix lengths of different sizes.

  • To subnet an IPv6 global address prefix, use either hexadecimal or decimal methods as described in this chapter to enumerate the subnetted address prefixes.

Chapter Glossary

subnetting – The act of subdividing the address space of an IPv4 or IPv6 address prefix.

subnetted address prefix – Either a new IPv4 address prefix that is the result of subnetting an IPv4 address prefix or a new IPv6 address prefix that is the result of subnetting an IPv6 address prefix.

variable length subnet masks (VLSMs) – The use of different subnet masks to produce subnets of different sizes.

variable length subnetting – The practice of using variable length subnet masks.