可变长度子网划分

我目前正在尝试了解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 

任何人都可以通过它说话吗?

要记住的最简单的方法是先取得你需要的最大范围(1800个主机)。 这意味着你需要总共2048(2 ^ 11),并find你刚刚采取的斜杠符号32 – 11 = 21所以你的答案是1:

 A 137.73.64.0/21 

一个/ 21的子网掩码是255.255.248.0来找出你的块大小,你需要256 – 248 = 8

这意味着你的A地址空间在:

 137.73.71.255 

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

 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 

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

 137.73.76.0 

D地址空间将使用256(2 ^ 8),所以它的斜线符号是32 – 8 = 24:

 137.73.76.0/24 

A / 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 

要find你的未分配,你使用相同的概念。 你有一个/ 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

希望有所帮助

我通常先从二进制文件中查看IP地址空间,然后使用您描述的过程从左边开始工作。 这是一个漫步的过程。 我会用? 表示未分配的比特, X表示主机-id比特,并明确包含子网id比特。 我们从以下模式开始。

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

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

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

一位标有? 是唯一剩下的通配符。 分配一个零值,你已经定义了第一个子网。 其余的子网将使用一个值:

 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位。 我们还剩下11个主机ID,所以我们可以安全地连接下两个位。

 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?? ???? ???? 

接下来的三个子网很容易 – 它们都是八位。 我们可以简单地将剩余的通配符从左到右分开。

 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 

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

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

这意味着,如果你想分配1800个主机的地址(共1802个地址),你必须去2 ^ 11(2048)。 这给你一个32-11 = 21的路由前缀。

所谓的“networking标识符”就是所有“主机”位设置为0的基地址(也就是说,对于137.73.64.0/21,您将11个最右边的位设置为零)。

希望有点帮助。

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

 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) 

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