可变长度子网划分

可变长度子网划分

我目前正在尝试了解 VLS....但我不太明白如何划分地址空间以适应不同长度的子网,例如,

Suppose you were given the IPv4 network block
137.73.64.0/20. Using variable length subnet masking (VLSM)
divide the network block in order to provide the following
subnetworks:
1. A, with at least 1800 hosts
2. B and C, with at least 500 hosts each
3. D, E and F, with at least 240 hosts each

我理解的方法是

1. Take each subnet in turn, starting with the one
with largest number of hosts
2. Calculate bits required to represent this number
of hosts
3. Use remainder of host ID bits for subnet's ID
4. Allocate one subnet ID to the subnet that does
not have the same prefix as any of the already
allocated subnets
5. Move on to next largest subnet

但我终其一生都不太明白如何得出这个答案:

A possible solution, with subnet IDs highlighted, is:
A: 137.73.01000000.0 = 137.73.64.0/21
Host addresses: 2^11 − 2 = 2048 − 2 = 2046
B: 137.73.01001000.0 = 137.73.72.0/23
Host addresses: 2^9 − 2 = 512 − 2 = 510
C: 137.73.01001010.0 = 137.73.74.0/23
host addresses: 2^9 − 2 = 512 − 2 = 510
D: 137.73.01001100.0/24 = 137.73.76.0/24
host addresses: 2^8 − 2 = 256 − 2 = 254
E: 137.73.01001101.0/24 = 137.73.77.0/24
host addresses: 2^8 − 2 = 256 − 2 = 254
F: 137.73.01001110.0/24 = 137.73.78.0/24
host addresses: 2^8 − 2 = 256 − 2 = 254
Unallocated:
137.73.01001111.0/24 = 137.73.79.0/24
host addresses: 2^8 − 2 = 256 − 2 = 254 (unallocated)
Range of addresses unused: 137.73.79.1/24 to 137.73.79.254/24

有人可以跟我讲讲吗?

答案1

对我来说,最容易记住的方法是先取您需要的最大范围(1800 个主机)。这意味着您需要总共取 2048 个(2^11),并且要找到您的斜线符号,您只需取 32 - 11 = 21,因此您对 1 的回答是:

A 137.73.64.0/21

/21 的子网掩码为 255.255.248.0,要计算出块大小,您需要取 256 - 248 = 8

这意味着您的 A 地址空间结束于:

137.73.71.255

这意味着您的下一个最高地址空间(具有 500 个主机的 B)将从以下位置开始:

137.73.72.0

B 地址空间将使用 512(2^9),因此您的斜线是 32 - 9 = 23,这意味着您的 B 地址空间是:

137.73.72.0/23

/23 的子网掩码为 255.255.254.0,因此块大小为 256 - 254 = 2 因此您的 B 结束于:

137.73.73.255

下一个最高级别(C,有 500 个主机)的起始地址为:

137.73.74.0

由于您的 C 具有与 B 相同的主机,因此它使用相同的子网掩码(/ 23):

137.73.74.0/23

它的块大小也是 2,这意味着 C 结束于:

137.73.75.255

您的下一个最高地址空间(具有 240 个主机的 D)将从以下位置开始:

137.73.76.0

D 地址空间将使用 256(2^8),因此其斜线表示法为 32 - 8 = 24:

137.73.76.0/24

/24 的子网掩码为 (255.255.255.0),所以它的块大小为 256 - 255 = 1 因此,您的 D 地址空间将结束于:

137.73.76.255

您的 E 地址空间与 D 相同,因此其块大小为 1 和 /24:

137.73.77.0/24

由于其块大小为 1,因此结束于:

137.73.77.255

您的 F 地址空间也与 D 和 E 相同,因此它的块大小为 1 和 /24:

137.73.78.0/24

由于其块大小为 1,因此结束于:

137.73.78.255

因此,您的最终子网是:

A 137.73.64.0/21
B 137.73.72.0/23
C 137.73.74.0/23
D 137.73.76.0/24
E 137.73.77.0/24
F 137.73.78.0/24

要查找未分配的地址,请使用相同的概念。您有一个 /20,其子网掩码为 255.255.240.0,因此其块大小为 256 - 240 = 16

您的全部地址范围为:

137.73.64.0 - 137.73.79.255

因此,您的未分配地址范围包括:

137.73.79.0 - 137.73.79.255

这只是另一个 /24

希望有帮助

答案2

我通常首先查看二进制的 IP 地址空间,然后使用您描述的过程从左边开始。下面是该过程的演示。我将使用 来?表示未分配的位,X例如主机 ID位并明确包括子网 ID位。我们从以下模式开始。

1000 1001  0100 1001  0100 ????  ???? ????      137.73.64/20

现在我们需要 11 位用于第一个子网,因为 log 2(1800)小于 11 且大于 10。

1000 1001  0100 1001  0100 ?XXX  XXXX XXXX      137.73.64/21

标有 a 的位?是唯一剩下的通配符位。为其分配零值,您就定义了第一个子网。其余子网将使用 1 值,因此:

1000 1001  0100 1001  0100 ????  ???? ????      137.73.64/20
1000 1001  0100 1001  0100 0XXX  XXXX XXXX      137.73.64/21    2,048 addresses
1000 1001  0100 1001  0100 1???  ???? ????      137.73.72/21

接下来我们需要一个容量为 500 的子网,因此我们需要 9 位。主机 ID 中还剩下 11 位,因此我们可以安全地连接接下来的两位。

1000 1001  0100 1001  0100 ????  ???? ????      137.73.64/20
1000 1001  0100 1001  0100 0XXX  XXXX XXXX      137.73.64/21    2,048 addresses
1000 1001  0100 1001  0100 100X  XXXX XXXX      137.73.72/23      512 addresses
1000 1001  0100 1001  0100 101?  ???? ????
1000 1001  0100 1001  0100 11??  ???? ????

下一个子网也是九位,因此我们可以使用另一个剩余的位。

1000 1001  0100 1001  0100 ????  ???? ????      137.73.64/20
1000 1001  0100 1001  0100 0XXX  XXXX XXXX      137.73.64/21    2,048 addresses
1000 1001  0100 1001  0100 100X  XXXX XXXX      137.73.72/23      512 addresses
1000 1001  0100 1001  0100 101X  XXXX XXXX      137.73.74/23      512 addresses
1000 1001  0100 1001  0100 11??  ???? ????

接下来的三个子网很简单 - 它们都是 8 位。我们可以简单地从左到右划分剩余的通配符位。

1000 1001  0100 1001  0100 ????  ???? ????      137.73.64/20
1000 1001  0100 1001  0100 0XXX  XXXX XXXX      137.73.64/21    2,048 addresses
1000 1001  0100 1001  0100 100X  XXXX XXXX      137.73.72/23      512 addresses
1000 1001  0100 1001  0100 101X  XXXX XXXX      137.73.74/23      512 addresses
1000 1001  0100 1001  0100 1100  XXXX XXXX      137.73.76/24      256 addresses
1000 1001  0100 1001  0100 1101  XXXX XXXX      137.73.77/24      256 addresses
1000 1001  0100 1001  0100 1110  XXXX XXXX      137.73.78/24      256 addresses
1000 1001  0100 1001  0100 1111  ???? ????      137.73.79/24      256 addresses

剩余的通配符范围是未分配的空间。

答案3

子网总共包含 2^(32-routing_prefix)(斜杠后面的数字)个地址。您可以从该范围中减去 2,一个用于所谓的“网络标识符”,一个用于广播地址。

这意味着,如果您要为 1800 个主机分配地址(总共 1802 个地址),则必须使用 2^11(2048)。这样,您的路由前缀就是 32-11=21。

所谓的“网络标识符”只是所有“主机”位都设置为 0 的基地址(这意味着,对于 137.73.64.0/21,将最右边的 11 位设置为零)。

希望有点帮助。

答案4

所以我终于完成了我的计算器。

137.73.64.0  /21 -> 1,800  (2,048)
137.73.72.0  /23 -> 500  (512)
137.73.74.0  /23 -> 500  (512)
137.73.76.0  /24 -> 254  (256) ++
137.73.77.0  /24 -> 240  (256)
137.73.78.0  /24 -> 240  (256)
137.73.79.0  /24 -> 240  (256)

++ 是计算器添加的。它是范围内最大的未使用块。

相关内容