如何将两个子网彼此相邻?


10

我一直在使用这个计算器http://www.subnet-calculator.com/cidr.php,并且我试图弄清楚如何将两个不同的子网彼此相邻。

例如,我想要一个/ 27子网从1.0.0.1开始,紧跟/ 25,所以我虽然认为/ 25子网将从1.0.0.32开始,因为那是/ 27子网之外的一个。但是,当我尝试执行此操作时,计算器说/ 25的范围将是1.0.0.1-1.0.0.127,而不是从0.32开始。

这是计算器的限制,还是您如何将子网彼此相邻?

编辑:我想我的问题是哪些子网可以彼此相邻?是什么决定了这一点?


如果您要的是/0.0,则不能以1.0.0.32开头。请记住,子网不是任意范围,它们只是区分主机号和网络号的一种方式。
BatchyX

我想我的问题是哪些子网可以彼此相邻?是否有文件或参考资料可以放在哪里?
instipod

2
我建议您阅读有关位掩码的内容,然后您将了解什么是子网掩码。
BatchyX 2013年

Answers:


7

您需要区分子网起始地址和子网大小。斜线后面的数字是大小(以32位为单位)。这样就可以有两个/ 27子网

10.0.0.1/27  == 10.0.0.1  -> 10.0.0.30
10.0.0.33/27 == 10.0.0.33 -> 10.0.0.62

但是/ 27和/ 25子网以相同的方式表示在以后的地址启动/ 25

10.0.0.1/27   == 10.0.0.1   -> 10.0.0.30
10.0.0.129/25 == 10.0.0.129 -> 10.0.0.254

因为/ 25子网“需要”更多空间。您不能在任意地址处仅在正确的边界处启动/ 25子网:

10.0.0.1/25   == 10.0.0.1   -> 10.0.0.126
10.0.0.129/25 == 10.0.0.129 -> 10.0.0.254

但请注意

10.0.0.33/25   == 10.0.0.1   -> 10.0.0.126

因为10.0.0.33/25是说的只是另一种方式10.0.0.1/2510.0.0.0/25

您还可以决定用更多的/ 27子网“填充”您的/ 27和/ 25子网之间的空间:

10.0.0.1/27   == 10.0.0.1   -> 10.0.0.30
10.0.0.33/27  == 10.0.0.33  -> 10.0.0.62
10.0.0.65/27  == 10.0.0.65  -> 10.0.0.94
10.0.0.97/27  == 10.0.0.97  -> 10.0.0.126
10.0.0.129/25 == 10.0.0.129 -> 10.0.0.254

或另一个/ 27和/ 26:

10.0.0.1/27   == 10.0.0.1   -> 10.0.0.30
10.0.0.33/27  == 10.0.0.33  -> 10.0.0.62
10.0.0.65/26  == 10.0.0.65  -> 10.0.0.126
10.0.0.129/25 == 10.0.0.129 -> 10.0.0.254

1
子网包括网络地址和广播地址...您在连续的子网之间没有未使用的IP。试图解释为什么有些子网可以在没有二进制数学的情况下组合成较短的掩码是完全误导的。
cpt_fink

4

前缀/子网使用二进制逻辑。子网由固定的位和可用于地址的位确定。固定位数是前缀长度或子网掩码。一些IPv4示例:

Prefix:           10.0.0.0/8
Prefix length:    8
Subnet mask:      255.0.0.0
Prefix bits:      00001010 00000000 00000000 00000000 = 10.0.0.0
Subnet mask bits: 11111111 00000000 00000000 00000000 = 255.0.0.0

1子网掩码位中的A 表示相应的位是固定的,而a 0表示您可以使用该位。前缀长度是设置为的位数1,子网掩码是作为IPv4地址写下的二进制数。

因此,在此示例中,您可以使用:

First address in the prefix: 00001010 00000000 00000000 00000000 = 10.0.0.0
Last address in the prefix:  00001010 11111111 11111111 11111111 = 10.255.255.255

另一个前缀长度不同的示例:

Prefix:           10.0.0.0/10
Prefix length:    10
Subnet mask:      255.192.0.0
Prefix bits:      00001010 00000000 00000000 00000000 = 10.0.0.0
Subnet mask bits: 11111111 11000000 00000000 00000000 = 255.192.0.0

在此示例中,您可以使用更少的地址:

First address in the prefix: 00001010 00000000 00000000 00000000 = 10.0.0.0
Last address in the prefix:  00001010 00111111 11111111 11111111 = 10.63.255.255

如您所见,子网由固定位的值和数量确定。使用示例时,1.0.0.32/25您会得到:

Prefix:           1.0.0.32/25
Prefix length:    25
Subnet mask:      255.255.255.128
Prefix bits:      00000001 00000000 00000000 00100000 = 10.0.0.32
Subnet mask bits: 11111111 11111111 11111111 10000000 = 255.255.255.128

First address in the prefix: 00000001 00000000 00000000 00000000 = 1.0.0.0
Last address in the prefix:  00000001 00000000 00000000 01111111 = 1.0.0.127

值32在灵活位的中间。查看/25前缀时,您会得到:

Prefix length:      25
Subnet mask bits:   11111111 11111111 11111111 10000000

1st /25 in 1.0.0.0: 00000001 00000000 00000000 00000000 = 1.0.0.0/25
2nd /25 in 1.0.0.0: 00000001 00000000 00000000 10000000 = 1.0.0.128/25
3rd /25 in 1.0.0.0: 00000001 00000000 00000001 00000000 = 1.0.1.0/25
4th /25 in 1.0.0.0: 00000001 00000000 00000001 10000000 = 1.0.1.128/25
5th /25 in 1.0.0.0: 00000001 00000000 00000010 00000000 = 1.0.2.0/25
Etc.

查看/27前缀时,您会得到:

Prefix length:      27
Subnet mask bits:   11111111 11111111 11111111 11100000

1st /25 in 1.0.0.0: 00000001 00000000 00000000 00000000 = 1.0.0.0/27
2nd /25 in 1.0.0.0: 00000001 00000000 00000000 00100000 = 1.0.0.32/27
3rd /25 in 1.0.0.0: 00000001 00000000 00000000 01000000 = 1.0.0.64/27
4th /25 in 1.0.0.0: 00000001 00000000 00000000 01100000 = 1.0.0.96/27
5th /25 in 1.0.0.0: 00000001 00000000 00000000 10000000 = 1.0.0.128/27
Etc.

在IPv4子网中,0保留了第一个地址(所有弹性位all )并称为网络地址。最后一个地址(灵活位all 1)是子网广播地址。您不能将它们用于设备上的网络接口。

如果要将多个子网彼此相邻放置,则必须确保它们不会重叠。当您没有像IPv4这样的大量地址空间时,使所有子网都适合可能是一个非常困难的过程,并且在更改寻址计划时使其更易于管理。这就是IPv6如此好用的原因:充足的地址空间,而子网通常是一个/64(可以使用不同的前缀长度,但这确实会破坏自动配置等功能)。

如果您对IPv6寻址计划感兴趣,请查看我几年前为SURFnet(荷兰国家研究和教育网络)撰写的“准备IPv6寻址计划”文档。在IPv6中,子网划分的工作方式与IPv4完全相同,不同之处在于,数字更大且用十六进制表示(与IPv4所用的十进制表示法相比,它的位数要好得多!)。带有固定位和灵活位的前缀长度的工作方式完全相同。一个简短的例子:

Prefix:           2001:0db8:0000:0000:0000:0000:0000:0000/64
Prefix length:    64
Subnet mask:      not really used anymore in IPv6, but it would have been:
                  ffff:ffff:ffff:ffff:0000:0000:0000:0000
Prefix bits:      0010 0000 0000 0001 0000 1101 1011 1000 = 2001:0db8
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
Subnet mask bits: 1111 1111 1111 1111 1111 1111 1111 1111 = ffff:ffff
                  1111 1111 1111 1111 1111 1111 1111 1111 = ffff:ffff
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000

First address in the prefix:
                  0010 0000 0000 0001 0000 1101 1011 1000 = 2001:0db8
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
Last address in the prefix:
                  0010 0000 0000 0001 0000 1101 1011 1000 = 2001:0db8
                  0000 0000 0000 0000 0000 0000 0000 0000 = 0000:0000
                  1111 1111 1111 1111 1111 1111 1111 1111 = ffff:ffff
                  1111 1111 1111 1111 1111 1111 1111 1111 = ffff:ffff

So from 2001:0db8:0000:0000:0000:0000:0000:0000
     to 2001:0db8:0000:0000:ffff:ffff:ffff:ffff

PS:我在这里没有故意使用推荐/规范表示法。通常,您压缩地址中的零并写2001:0db8:0000:0000:0000:0000:0000:00002001:db8::2001:0db8:0000:0000:0000:0000:0000:0001写为2001:db8::1,等等。


1
  • 对于/ 24,网络的最后一个八位位组(通常为保留位)为.0,只有.0。 1 subnet

  • 对于/ 25,则可能是.0或.128。 2 subnets

  • 对于/ 26,它可以是.0,.64,.128或.192。 4 subnets

  • 对于/ 27,它可以是.0,.32,.64,.96,.128,.160,.192或.224。 8 subnets

  • 对于/ 28,.0,.16,.32,.48,.64,.80,.96,.112,.128,.144,.160,.176,.192,.208,.224或.240。 16 subnets

  • /29、.0、.8、.16、.24、.32、.40、.48、.56、.64、.72、.80、.88、.96、.104、.112, .120,.128,.136,.144,.152,.160,.168,.176,.184,.192,.200,.208,.216,.224,.232,.240或.120 248 32 subnets

  • / 30前缀通常在点对点接口上找到。 64 subnets

  • / 31前缀在野外并不常见,因为它没有可共同寻址的主机,因为它只跨越2个网络号,即“网络”和“广播”,没有用于主机IP的空间。128 subnets(所有介于0和254之间的偶数)

  • / 32前缀用于指定单个主机的路由。它是路由中最特定的路由,如果存在,则应优先于所有其他路由表条目(也不是/ 32s)。/ 32没有“网络”或“广播”地址。 256 subnets (0和255在某些实现上可能不起作用)


0

一种简单的理解方法:

在IPv4中:

想象一行256 * 256 * 256 * 256(或2 ^ 32)个IP地址。

[] [] [] [] .................. [] [] []
       256*256*256*256 total IP adresses

它具有子网掩码0.0.0.0(或二进制的0000 0000 0000 0000 0000 0000 0000 0000 0000),
所有未被掩码的位都可用于在该网络中提供IP地址。

该单一网络中可能的地址为:

0000 0000 0000 0000 0000 0000 0000 0000(<-NETMASK,此处未屏蔽任何内容...)

0000 0000 0000 0000 0000 0000 0000 0000 0000(IP 0.0.0.0)至
1111 1111 1111 1111 1111 1111 1111 1111(IP 255.255.255.255)

整个网络始于IP 0.0.0.0,直到IP 255.255.255.255

子网掩码中的每一位将把该行分为两等份。

子网掩码的第一位会将其分为2个相等的部分,每个部分具有128 * 256 * 256 * 256(或2 ^ 31)个IP地址:

[] [] [] .......... [] [] []  |  [] [] ........... [] []
128*256*256*256 IP Adresses       128*256*256*256 IP Adr

它具有子网掩码128.0.0.0(或二进制的1000 0000 0000 0000 0000 0000 0000 0000 0000),
所有未被掩码的位均可用于在该网络中提供IP地址。

因此,您可以有2个子网,并且对于每个子网,您都有31位可用的IP地址。

对于第一个子网(在子网掩码后面为“ 0”的子网)

1000 0000 0000 0000 0000 0000 0000 0000 0000(<-网络掩码)

0000 0000 0000 0000 0000 0000 0000 0000 0000(IP 0.0.0.0)至
0111 1111 1111 1111 1111 1111 1111 1111(IP 127.255.255.255)

对于第二个子网(在子网掩码后面为“ 1”的子网)

1000 0000 0000 0000 0000 0000 0000 0000 0000(<-网络掩码)

1000 0000 0000 0000 0000 0000 0000 0000 0000(IP 128.0.0.0)至
1111 1111 1111 1111 1111 1111 1111 1111(IP 255.255.255.255)

子网掩码中的下一个附加位将双方分成2个相等的部分,每个2 ^ 30个IP地址

等等...

因此,如果您尝试分配一个/ 3子网,则意味着您花费了3次迭代划分,最后得到2 ^ 3 = 8个子网。每个子网只能是整个机器系列的8个细分之一。它们不能重叠。每一个都从前一个开始。

[] ... [] | [] ... [] | [] ... [] | [] ... [] | [] ... [] | [] ... [] | [] ... [] | [] ... []
32*256*256*256 or 2^30 IP Adresses each.

这具有子网掩码0.0.0.0

因此,对于第一个子网(在子网掩码后面为“ 000”的子网)

1110 0000 0000 0000 0000 0000 0000 0000 0000(<-网络掩码)

0000 0000 0000 0000 0000 0000 0000 0000 0000(IP 0.0.0.0)至
0001 1111 1111 1111 1111 1111 1111 1111(IP 31.255.255.255)

对于第二个子网(在子网掩码后面为“ 001”的子网)

1110 0000 0000 0000 0000 0000 0000 0000 0000(NETMASK)

0010 0000 0000 0000 0000 0000 0000 0000 0000(IP 32.0.0.0)至
0011 1111 1111 1111 1111 1111 1111 1111(IP 63.255.255.255)

...

对于第7个子网(在子网掩码后面为“ 110”的子网)

1110 0000 0000 0000 0000 0000 0000 0000 0000(NETMASK)

1100 0000 0000 0000 0000 0000 0000 0000 0000(IP 192.0.0.0)至
1101 1111 1111 1111 1111 1111 1111 1111(IP 223.255.255.255)

对于第8个子网(在子网掩码后面为“ 111”的子网)

1110 0000 0000 0000 0000 0000 0000 0000 0000(NETMASK)

1110 0000 0000 0000 0000 0000 0000 0000 0000(IP 224.0.0.0)至
1111 1111 1111 1111 1111 1111 1111 1111(IP 255.255.255.255)

如果继续向网络掩码中添加位,则会继续进行划分:/ 32的子网会选出一台计算机。

但是请记住,您不能真正只有机器:

为了使工作正常,保留了子网的某些范围:

对于每个子网,通常保留“值1的0位”和“值1的所有位”以进行广播,因此,子网中通常只有nb_of_possible_adresses_in_the_subnet-2个IP地址可用于实际的机器接口。最好是网关的接口,该网关在其他网络中具有另一个接口,允许您将其用作访问其他网络的网关(以及所有内容,通过这些其他网络的网关)


很难清晰地表示...而且我希望“ 2 ^ 32 IP地址行”与其他地方使用的32位表示之间的混淆不会比帮助更令人困惑...
Olivier Dulac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.