如何计算前缀,网络,子网和主机号?


97

例:

IP:128.42.5.4

二进制:10000000 00101010 00000101 00000100

子网:255.255.248.0

您如何确定前缀,网络,子网和主机号?

Answers:


164

计算网络掩码长度(也称为前缀):

将网络掩码的点分十进制表示形式转换为二进制。然后,从第一个八位位组的最高有效位(即二进制数的左侧)开始,计算连续的1位的数目。

255.255.248.0   in binary: 11111111 11111111 11111000 00000000
                           -----------------------------------
                           I counted twenty-one 1s             -------> /21

带255.255.248.0网络掩码的128.42.5.4前缀为/ 21。

计算网络地址:

网络地址是IP地址和网络掩码的二进制表示形式中各个位的逻辑与。对齐两个地址中的位,并对每对相应位执行逻辑与。然后将结果的各个八位字节转换回十进制。

逻辑与真值表:

逻辑与

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
255.255.248.0   in binary: 11111111 11111111 11111000 00000000
                           ----------------------------------- [Logical AND]
                           10000000 00101010 00000000 00000000 ------> 128.42.0.0

如您所见,网络地址128.42.5.4/21为128.42.0.0

计算广播地址:

广播地址将所有主机位转换为1s ...

请记住,我们的IP地址(十进制)为:

128.42.5.4      in binary: 10000000 00101010 00000101 00000100

网络掩码为:

255.255.248.0   in binary: 11111111 11111111 11111000 00000000

这意味着我们的主机位是IP地址的最后11位,因为我们通过反转网络掩码来找到主机掩码:

Host bit mask            : 00000000 00000000 00000hhh hhhhhhhh

要计算广播地址,我们将所有主机位强制为1:

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
Host bit mask            : 00000000 00000000 00000hhh hhhhhhhh
                           ----------------------------------- [Force host bits]
                           10000000 00101010 00000111 11111111 ----> 128.42.7.255

计算子网:

您没有提供足够的信息来计算该网络的子网。通常,您可以通过将一些主机位重新分配为每个子网的网络位来构建子网。很多时候,没有一种正确的方法来对一个地址块进行子网划分……根据您的限制,可能存在几种对地址块进行子网划分的有效方法。

假设我们将128.42.0.0/21分为4个子网,每个子网必须至少容纳100个主机...

子网划分

在此示例中,我们知道您至少需要/ 25前缀才能包含100个主机。我选择/ 24,因为它落在八位字节的边界上。请注意,每个子网的网络地址都从父网络块借用主机位。

查找所需的子网掩码长度或网络掩码:

我怎么知道我至少需要100个主机的/ 25 masklength?通过返回包含100个主机所需的主机位数来计算前缀。一个需要7个主机位才能包含100个主机。正式地,这是用以下公式计算的:

主机位 =日志2(主机数)=日志2(100)= 6.643

由于IPv4地址的宽度为32位,并且我们使用的是主机位(即最低有效位),因此只需从32中减去7即可计算每个子网的最小子网前缀... 32-7 = 25。

将128.42.0.0/21分为四个相等子网的惰性方法:

由于我们只需要整个128.42.0.0/21块中的四个子网,因此可以使用/ 23子网。我选择/ 23是因为我们需要4个子网...即在网络掩码中添加了额外的两位。

使用128.42.0.0/21的/ 23子网,这是对约束的同样有效的答案...

子网划分,第二个选项

计算主机号:

这就是我们上面已经完成的工作...仅重复使用我们计算128.42.5.4/21广播地址时所做的工作中的主机掩码...这次我将使用1s代替h,因为我们需要在网络地址上再次执行逻辑与。

128.42.5.4      in binary: 10000000 00101010 00000101 00000100
Host bit mask            : 00000000 00000000 00000111 11111111
                           ----------------------------------- [Logical AND]
                           00000000 00000000 00000101 00000100 -----> 0.0.5.4

计算子网中可能的最大主机数:

要找到最大数量的主机,请查看上面的主机号中的二进制位数。最简单的方法是从32(IPv4地址中的位数)中减去网络掩码的长度。这样可以给您地址中的主机位数。在那时候...

最大主机数 = 2 **(32-netmask_length)-2

我们减去上面2的原因是因为全1和全0主机号是保留的。全零主机号是网络号;所有人的主机号是广播地址。

使用上面的示例子网128.42.0.0/21,主机数量为...

最大主机数 = 2 **(32-21)-2 = 2048-2 = 2046

查找包含两个IP地址的最大网络掩码(最小主机掩码):

假设有人给我们两个IP地址,并希望我们找到包含两个IP地址的最长网络掩码;例如,如果我们有:

  • 128.42.5.17
  • 128.42.5.67

最简单的方法是将两者都转换为二进制文件,并从地址的左侧寻找最长的网络位字符串。

128.42.5.17     in binary: 10000000 00101010 00000101 00010001
128.42.5.67     in binary: 10000000 00101010 00000101 01000011
                           ^                           ^     ^
                           |                           |     |
                           +--------- Network ---------+Host-+
                             (All bits are the same)    Bits

在这种情况下,最大网络掩码(最小主机掩码)为/ 25

注意:如果您尝试从右侧开始,请不要仅仅因为找到了一个匹配的位列就被欺骗了;除了那些匹配的位以外,可能还有其他不匹配的位。老实说,最安全的做法是从左侧开始。


15

上面的答案完美地打在了头上。但是,当我刚开始时,它从几个来源带给我一些不同的例子,使它真正流行起来。因此,如果您对其他示例感兴趣,我就此主题写了一些博客文章-http: //www.oznetnerd.com/category/subnetting/

管理员,如果此帖子被视为垃圾邮件,请随时将其删除。

编辑:根据YLearn的建议,我将尝试从本系列的第1部分中获取相关部分,而不将整个条目粘贴到此处。

让我们以195.70.16.159/30为例。

因为它是/ 30,所以我们知道主机部分将在第四个八位位组中。让我们将其转换为二进制:

128 64 32 16  8  4 2 1
SN  SN SN SN SN SN H H
 1   0  0  1  1  1 1 1

现在要找出网络地址,我们要做的就是将它们下面的SN位加在一起。(128 + 16 + 8 + 4 = 156)。

当您将此156添加到地址的前三个八位字节时,我们剩下的是网络地址 195.70.16.156。

现在,我们知道第一个可用地址始终是网络地址加一个,我们要做的就是执行以下计算:(156 + 1 = 157)。

这为我们提供了195.70.16.157 的第一个可用地址

现在,让我们跳过最后一个可用地址一会儿,找到广播地址。为了弄清楚它是什么,我们要做的就是将所有的H位加在一起(无论它们是1还是0),然后将此数字添加到网络地址中。(2 +1 + 156 = 159)。

这为我们提供了195.70.16.159 的广播地址

最后,让我们算出最后一个可用的地址。此过程类似于查找“第一个可用地址”,但是实际上我们没有从广播地址中减去一个,而是在网络地址中添加一个。(159 – 1 = 158)。

这为我们提供了195.70.16.158 的最后可用地址

我们终于得到它了!我们的temaplte是完整的。为了便于参考,这里再次是:

  • 网络地址: 195.70.16.156
  • 第一个可用地址: 195.70.16.157
  • 最后可用地址: 195.70.16.158
  • 广播地址: 195.70.16.159

作为快捷方式,您也可以使用此公式。它适用于任何大小的子网:

  • 第一个可用地址 =网络地址+ 1
  • 广播地址 =下一个网络地址– 1
  • 最后可用地址 =广播地址– 1

4
微小的警告(几乎无关紧要):底部的“最后可用地址”公式适用于除/ 31 ...以外的所有子网...请参阅RFC 3021。如果有人尝试在代码中使用您的算法,这是一个很小但相关的例外。
Mike Pennington

11

我一直都坚持不懈地推广Mike Pennington的出色回答,但我不想从中脱颖而出。有关解决随时间而出现的问题的更多信息。不幸的是,它太大了,我不得不将其分为两个答案。


2之1


IPv4数学

给定一个IPv4地址和一个IPv4网络掩码(也可以从网络掩码长度或主机掩码中得出网络掩码),您可以确定有关IPv4网络的许多信息:网络地址,网络广播地址,总主机地址,总可用量主机地址,第一个可用主机地址和最后一个可用主机地址。

我不能过分强调您必须以二进制形式进行IPv4数学运算。我认为每个网络工程师(或将来的网络工程师)都试图找到一种以十进制完成所有操作的方法,我相信您会*。问题在于10(十进制)不是2(二进制)的幂,因此十进制和二进制不会自然地在十六进制(以16为基数)自然地转换为二进制和从二进制转换的方式之间相互转换,因为16是2的幂。

似乎对IPv4使用点分十进制表示法是一个早期错误,现在无法纠正,但是IPv6从一开始就采用了十六进制,并且很容易在十六进制和二进制之间进行转换。

如果您没有IP计算器(网络教育课程考试或认证考试中可能不允许使用),则制作一个八位位组中的比特值图表很有用。因为它是二进制的,所以每个位的值是下一个低位数字中相同数字值的2倍。每个数字是基数乘以下一个较低有效数字中的相同数字值。对于任何其他数字基数(包括十进制)(基数10)也是如此,其中每个数字值是下一个较低有效数字位置中同一数字值的10倍。对于二进制数字(位):

---------------------------------------------------------
| Bit # |   7 |   6 |   5 |   4 |   3 |   2 |   1 |   0 |
---------------------------------------------------------
| Value | 128 |  64 |  32 |  16 |   8 |   4 |   2 |   1 |
---------------------------------------------------------

其中十进制都是10的幂,二进制是2的幂。请注意,对于上表中的每个位数,对应的值是位数的2。

For our example IPv4 dotted-decimal address of 198.51.100.223:
1st octet: 198 = 128 + 64 +  0 +  0 + 0 + 4 + 2 + 0 = 11000110
2nd octet:  51 =   0 +  0 + 32 + 16 + 0 + 0 + 2 + 1 = 00110011
3rd octet: 100 =   0 + 64 + 32 +  0 + 0 + 4 + 0 + 0 = 01100100
4th octet: 223 = 128 + 64 +  0 + 16 + 8 + 4 + 2 + 1 = 11011111

For our example IPv4 binary address of 11000110001100110110010011011111:
1st octet: 11000110 = 128 + 64 +  0 +  0 + 0 + 4 + 2 + 0 = 198
2nd octet: 00110011 =   0 +  0 + 32 + 16 + 0 + 0 + 2 + 1 =  51
3rd octet: 01100100 =   0 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 100
4th octet: 11011111 = 128 + 64 +  0 + 16 + 8 + 4 + 2 + 1 = 223

您还需要记住学校的真相表(在二进制数学中,0为False,1为True):

-----------------------------------------
| False AND False = False | 0 AND 0 = 0 |
-----------------------------------------
| False AND True  = False | 0 AND 1 = 0 |
-----------------------------------------
| True  AND False = False | 1 AND 0 = 0 |
-----------------------------------------
| True  AND True  = True  | 1 AND 1 = 1 |
-----------------------------------------

-----------------------------------------
| False OR False = False  | 0 OR 0 = 0  |
-----------------------------------------
| False OR True  = True   | 0 OR 1 = 1  |
-----------------------------------------
| True  OR False = True   | 1 OR 0 = 1  |
-----------------------------------------
| True  OR True  = True   | 1 OR 1 = 1  |
-----------------------------------------

* 如果您执行IPv4数学多年,您可能会想到可以执行二进制/十进制转换,然后您似乎可以使用十进制进行IPv4数学。即使我能做到这一点,在将更改提交到生产网络之前,我始终会使用IP计算器进行仔细检查,或者转换为二进制,执行数学运算并转换回十进制。


IPv4地址

例如198.51.100.223,IPv4点分十进制表示法只是为了使人们更容易读取IPv4地址。四个独立的部分(称为八位位组)对IPv4毫无意义。不要误以为八位字节有特殊含义。IPv4地址实际上是一个32位二进制数,这就是网络设备查看和使用IPv4地址的方式。

我们的示例IPv4地址198.51.100.223实际上11000110001100110110010011011111是网络上的设备,因此您可以看到点分十进制表示确实确实使人类更容易使用。每个八位位组是32位地址的八位(因此通常使用术语“八位位组”),因此有四个八位位组(32 address bits / 8 bits per octet = 4 octets)。我们的示例32位二进制地址被分成四个八位字节,然后每个二进制八位字节都转换为十进制数*:

Binary address: 11000110001100110110010011011111
                ---------------------------------------------
Binary octets:  | 11000110 | 00110011 | 01100100 | 11011111 |
Decimal octets: |      198 |       51 |      100 |      223 |
                ---------------------------------------------
Dotted-decimal: 198.51.100.223

由于每个八位位组的长度为八位,因此每个八位位组的值将介于0和之间255(任何大255于此值的值都是无效的)。原因是2^8 = 256:(2二进制数为基数)乘以8(每个八位位组八位)的幂等于256,可以由八位八位位组表示的不同值的数量。请记住,第一个值是0,因此256第一个值将比可以表示的值总数(256 – 1 = 255)小一个。

要正确执行IPv4数学,您必须以二进制形式执行它,否则您将犯下会导致问题和沮丧的错误。这意味着您必须先将点分十进制表示法转换为二进制,然后才能对其进行操作:

Dotted-decimal: 198.51.100.223
                ---------------------------------------------
Decimal octets: |      198 |       51 |      100 |      223 |
Binary octets:  | 11000110 | 00110011 | 01100100 | 11011111 |
                ---------------------------------------------
Binary address: 11000110001100110110010011011111

* 点分十进制IPv4地址中的前导零可能被某些应用程序和编程语言解释为八进制(基数8)而不是十进制(基数10),从而导致错误,对于点分十进制IPv4表示,应避免前导零,但是对于二进制IPv4地址八位字节,前导零是必需的,因为它们表示完整地址中的位位置,而省略位位置将缩短地址并更改二进制值。


IPv4网络掩码

IPv4网络掩码用于将IPv4地址分为两部分:网络部分和主机部分。除法可以是任意位数,因此它可能属于一个八位位组,而不是八位位组边界,因为许多人错误地认为它总是如此。IPv4网络掩码的大小与IPv4地址的大小(32位)相同,并且以点分十进制表示法表示,其方式与点分十进制表示法IPv4地址的表示方式相同(四个八位八位字节,用逗号分隔)期)。例如,255.255.248.0

IPv4网络掩码由多个连续的1位(代表地址的网络部分)和随后的许多0位(代表地址的主机部分)组成。总数1的比特和总数0比特加起来32,比特的IPv4地址或网络掩码数。对于我们的示例网络掩码:

Dotted-decimal: 255.255.248.0
                ------------------------------------------------
Decimal octets: |      255 |      255 |         248 |        0 |
Binary octets:  | 11111111 | 11111111 | 11111 | 000 | 00000000 |
                ------------------------------------------------
                | 21 Network bits             | 11 Host bits   |
                ------------------------------------------------

如您所见,使用此特定掩码在IPv4地址的网络部分和主机部分之间进行的划分属于一个八位位组,而不是八位位组边界。

IPv4网络掩码通常由掩码中的连续1位数表示。这被不同地称为网络掩码长度或前缀长度,并且用网络掩码中/的连续1位数表示。对于我们的示例,计算连续1位数get 21,可以表示为/21

给定掩码长度,您可以计算掩码的点分十进制表示形式。只需减少1掩码长度的0位数,然后在末尾将足够的位数添加到总32位数中即可。将结果二进制数转换为点分十进制表示形式:

Mask length:    /21
                ------------------------------------------------
                | 21 Network bits             | 11 Host bits   |
                ------------------------------------------------
Binary octets:  | 11111111 | 11111111 | 11111 | 000 | 00000000 |
Decimal octets: |      255 |      255 |         248 |        0 |
                ------------------------------------------------
Dotted-decimal: 255.255.248.0

该示例传统上可以表示为198.51.100.223,网络掩码为255.255.248.0,或者可以表示为更现代的CIDR(无类域间路由)198.51.100.223/21


IPv4网络地址

IPv4网络地址是所有主机位都设置为的IPv4地址0。可以通过按ANDIPv4地址和IPv4网络掩码的二进制表示形式的各个位按位计算IPv4网络地址。将两个地址中的位对齐,并AND在每对各自的位上按位执行,然后将结果的各个八位字节转换回十进制。

对于我们的示例IPv4地址198.51.100.223和网络掩码255.255.248.0

Decimal address:        198.51.100.223/21
Binary address octets:  11000110 00110011 01100100 11011111
Binary mask octets:     11111111 11111111 11111000 00000000 AND
                        -----------------------------------
Binary network octets:  11000110 00110011 01100000 00000000
Decimal network octets:      198       51       96        0
Dotted-decimal network: 198.51.96.0

如您所见,的网络地址198.51.100.223/21198.51.96.0。请注意,您不能依靠八位位组来告诉您地址的哪一部分是网络,以及地址的哪一部分是针对主机的。

您可以使用此方法来确定两个地址是否在相同或不同的网络上*。例如,如果要查看您的198.51.100.223/21地址是否在分配了198.51.102.57地址的主机所在的IPv4网络中,请确定您的IPv4网络地址(如上所述)。接下来,使用您的IPv4网络掩码(有关同一网络上的主机使用相同的网络掩码,并且可能没有目标主机的地址,只有该地址)来确定有问题的主机的IPv4网络地址:

Decimal address:        198.51.102.57/21
Binary address octets:  11000110 00110011 01100110 00111001
Binary mask octets:     11111111 11111111 11111000 00000000 AND
                        -----------------------------------
Binary network octets:  11000110 00110011 01100000 00000000
Decimal network octets:      198       51       96        0
Dotted-decimal network: 198.51.96.0

将所得的IPv4网络地址与原始IPv4网络地址进行比较,并注意网络地址相等,因此主机地址位于同一网络上。

现在,让我们看看您是否与74.125.69.100Google地址位于同一网络上:

Decimal address:        74.125.69.100/21
Binary address octets:  01001010 01111101 01000101 01100100
Binary mask octets:     11111111 11111111 11111000 00000000 AND
                        -----------------------------------
Binary network octets:  01001010 01111101 01000000 00000000
Decimal network octets:       74      125       64        0
Dotted-decimal network: 74.125.64.0

将所得的IPv4网络地址与原始IPv4网络地址进行比较,请注意,网络地址不同,因此主机地址位于不同的网络上。


* 这是源主机用来确定它是否是与源主机位于同一网络上的目标主机的方法。


IPv4主机掩码

在IPv4寻址中有用的一个有用的值(通常被忽略)是IPv4主机掩码。IPv4主机掩码只是IPv4网络掩码的反函数。您可以从二进制网络掩码中创建二进制主机掩码,或者从二进制主机掩码中创建二进制网络掩码,只需将起始掩码的1s和0s 反转即可:

Dotted-decimal network mask: 255.255.248.0
Decimal network mask octets:      255      255      248        0
Binary network mask octets:  11111111 11111111 11111000 00000000 invert
                             -----------------------------------
Binary host mask octets:     00000000 00000000 00000111 11111111
Decimal host mask octets:           0        0        7      255
Dotted-decimal host mask:    0.0.7.255

通过从最长掩码(/32或全为掩码)中减去起始掩码,可以从网络掩码或主机掩码从数学上创建主机掩码。

可以用二进制方式完成:

Binary all-ones mask octets: 11111111 11111111 11111111 11111111
Binary network mask octets:  11111111 11111111 11111000 00000000 -
                             -----------------------------------
Binary host mask octets:     00000000 00000000 00000111 11111111
Decimal host mask octets:           0        0        7      255
Dotted-decimal host mask:    0.0.7.255

这也可以用十进制完成(一个全八进制是255),但是在实际尝试使用它进行地址操作之前,请确保将其转换为二进制:

Decimal all-ones mask octets: 255 255 255 255
Decimal network mask octets:  255 255 248   0 -
                              ---------------
Decimal host mask octets:       0   0   7 255
Dotted-decimal host mask:     0.0.7.255

IPv4网络广播地址

IPv4网络广播地址是所有主机位都设置为的IPv4网络地址1。有几种方法可以计算IPv4网络广播地址。

对于我们的示例IPv4地址198.51.100.223和网络掩码255.255.248.0

您可以OR对带有主机掩码的IPv4地址或网络地址按位执行:

Decimal address octets:        198       51      100      223
Binary address octets:    11000110 00110011 01100100 11011111
Binary host mask octets:  00000000 00000000 00000111 11111111 OR
                          -----------------------------------
Binary broadcast octets:  11000110 00110011 01100111 11111111
Decimal broadcast octets:      198       51      103      255
Dotted-decimal broadcast: 198.51.103.255

您可以简单地将IPv4主机掩码的值添加到IPv4网络地址的值:

Binary network octets:    11000110 00110011 01100000 00000000
Binary host mask octets:  00000000 00000000 00000111 11111111 +
                          -----------------------------------
Binary broadcast octets:  11000110 00110011 01100111 11111111
Decimal broadcast octets:      198       51      103      255
Dotted-decimal broadcast: 198.51.103.255

您也可以使用十进制进行以下操作:

Decimal network octets:   198  51  96   0
Decimal host mask octets:   0   0   7 255 +
                          ---------------
Decimal broadcast octets: 198  51 103 255
Dotted-decimal broadcast: 198.51.103.255

IPv4网络主机地址总数

网络的IPv4主机地址总数等于主机位数的乘2幂,该位数32减去网络位数。在我们的/21(网络掩码255.255.248.0)网络示例中,有11主机位(32 address bits – 21 network bits = 11 host bits)。这意味着IPv4网络()中2048共有主机地址。/212^11 = 2048


可用的IPv4网络主机总地址

除了/31(网络掩码255.255.255.254)和/32(网络掩码255.255.255.255)网络,IPv4网络上可用的主机地址数量是网络主机地址总数减去2(因为IPv4网络和广播地址不可用于网络上的主机地址,因此,必须从可用主机地址的数量中减去它们)。对于我们的/21255.255.248.0)网络示例,有2046可用的主机地址(2^11 - 2 = 2046)。


第一个可用的IPv4网络主机地址

/31(网络掩码255.255.255.254)和/32(网络掩码255.255.255.255)网络外,第一个可用的IPv4网络主机地址是IPv4网络地址加1(IPv4网络地址不可用于网络主机地址)。对于我们的示例网络198.51.96.0/21,第一个可用的网络主机地址是198.51.96.1198.51.96.0 + 1 = 198.51.96.1)。只需将二进制IPv4网络地址的低位设置为1

Decimal network octets:      198       51       96        0
Binary network octets:  11000110 00110011 01100000 00000000
                        -----------------------------------
Binary address octets:  11000110 00110011 01100000 00000001
Decimal address octets:      198       51       96        1
Dotted-decimal address: 198.51.96.1

最后可用的IPv4网络主机地址

/31(网络掩码255.255.255.254)和/32(网络掩码255.255.255.255)网络外,最后可用的IPv4网络主机地址是IPv4网络广播地址减1(IPv4网络广播地址不可用于网络主机地址)。对于我们的示例网络198.61.96.0/21,最后一个可用的网络主机地址是198.51.103.254198.51.103.255 - 1 = 198.51.103.254)。只需将二进制IPv4网络广播地址的低位设置为0

Decimal broadcast octets:      198       51      103      255
Binary broadcast octets:  11000110 00110011 01100111 11111111
                          -----------------------------------
Binary address octets:    11000110 00110011 01100111 11111110
Decimal address octets:        198       51      103      254
Dotted-decimal address:   198.51.103.254

将IPv4网络寻址放在一起

对于我们的示例IPv4网络地址198.51.100.223和掩码255.255.248.0(或198.51.100.223/21),我们可以计算出很多网络信息:

Host address:                       198.51.100.223
Network mask:                       255.255.248.0
Network mask length:                21
Host mask:                          0.0.7.255
Host mask length:                   11
*Network address:                   198.51.96.0
*First usable network host address: 198.51.100.1
*Last usable network host address:  198.51.103.254
*Network Broadcast address:         198.51.103.255
Total network host addresses:       2048
Usable network host addresses:      2046

* 网络教育课程考试和认证考试将要求您能够在给定主机地址和掩码(或掩码长度)的情况下针对IPv4网络快速计算这些值。您可以使用以下提示快速查看答案:

  • 网络地址(提示:偶数)
  • 第一个可用的主机地址(提示:网络地址加1,一个奇数)
  • 最后可用的主机地址(提示:广播地址减1,偶数)
  • 广播地址(提示:网络地址加主机掩码,一个奇数)

以上提示不适用于/31(网络掩码255.255.255.254)或/32(网络掩码255.255.255.255)网络。

给定足够的考试时间,以及一个有多种方法得出答案的问题,则应使用多种方法仔细检查答案。


在下一个答案中继续...


9

接上一个答案 ...


2之2


选择IPv4网络网关(路由器)地址

网关是网络上的主机,它知道如何将数据包转发到其他网络,并且可以为其分配任何可用的网络主机地址。有些人只是将网关地址随机分配给任何可用的网络主机地址,有些人总是将第一个可用的网络主机地址分配给网关,而有些人总是将最后一个可用的网络主机地址分配给网关。分配给网关的哪个可用主机网络地址实际上并不重要,但是您应该尽量保持一致。


IPv4 /31(网络掩码255.255.255.254)网络

最初,/31(网络掩码255.255.255.254)网络不可用,因为只有一个主机位,从而为您提供了两个网络主机地址,但是可用的网络主机地址数是网络主机地址总数减去22 total host addresses - 2 = 0 usable host addresses)。

点对点链接仅需要两个主机地址(链接的每一端一个)。传统的分配IPv4网络的方法要求将/30(网络掩码255.255.255.252)网络用于点对点链接,但是这浪费了一半的网络主机地址,因为一个/30网络总共有四个网络主机地址,但是只有两个是可用的网络主机地址。 (2^2 – 2 = 2)。

由于严重的IPv4地址短缺,创建了一个标准,以允许将/31网络用于点对点链接。这是有道理的,因为不需要在此类网络上进行广播:网络上主机发送的任何数据包都将发往网络上唯一的其他主机,从而有效地进行广播。在/31网络上,网络地址是第一个可用的主机地址,广播地址是最后一个可用的主机地址。

不幸的是,并非所有供应商(尤其是Microsoft)都支持在/31点对点链接上使用网络的标准,并且您最经常会看到使用/30网络的点对点链接。


IPv4 /32(网络掩码255.255.255.255)网络

/32(网络掩码255.255.255.255)网络既是没有主机地址网络,和一个主机地址,本身。网络中只有一个地址,即网络地址。由于网络上没有其他主机,因此必须将流量路由到网络地址和从网络地址路由。

这些地址通常用于设备内部定义的虚拟网络接口上,该设备可以在其虚拟接口和物理接口之间路由数据包。这样的一个示例是在网络设备中创建虚拟接口,以用作设备本身的源或目标。由于物理问题(例如拔下电缆),虚拟接口无法断开,并且如果设备具有多条路径,当设备的物理接口由于某种原因无法操作时,其他设备仍可以使用虚拟接口地址与该设备通信。


子网划分IPv4网络

子网划分网络是根据网络地址和掩码创建多个更长的网络。基本思想是从原始网络的主机部分借用高阶位。假设您想从我们的原始198.51.96.0/21网络中创建14个大小相等的子网。由于您是从原始网络的主机部分借用高阶位,因此您将获得一个数字,该数字是的幂2,但14不是的幂2,因此您必须获得的下一个更高的幂2,恰好是1616 = 2^4)。的功率2,在这种情况下4,是高阶主机的比特数需要借用要创建的子网的数量。您还可以使用数学公式来确定所需的位数:Log2(X subnets) = Y borrowed bits,四舍五入到下一个整数值:

Log2(14 subnets) = 3.807354922, rounded up = 4 borrowed bits

对于我们需要原始198.51.96.0/21网络的14个相等大小的子网的示例,从0第一个子网的所有s * 开始,将其添加1到子网部分以获取下一个子网:

           ----------------------------------------------
Original:  | 21 network bits       | 11 host bits       |
           ----------------------------------------------
Network:   | 110001100011001101100 | 0000 |  0000000    | = 198.51.96.0/21
Subnet 1:  | 110001100011001101100 | 0000 |  0000000    | = 198.51.96.0/25
Subnet 2:  | 110001100011001101100 | 0001 |  0000000    | = 198.51.96.128/25
Subnet 3:  | 110001100011001101100 | 0010 |  0000000    | = 198.51.97.0/25
Subnet 4:  | 110001100011001101100 | 0011 |  0000000    | = 198.51.97.128/25
Subnet 5:  | 110001100011001101100 | 0100 |  0000000    | = 198.51.97.128/25
Subnet 6:  | 110001100011001101100 | 0101 |  0000000    | = 198.51.98.128/25
Subnet 7:  | 110001100011001101100 | 0110 |  0000000    | = 198.51.99.0/25
Subnet 8:  | 110001100011001101100 | 0111 |  0000000    | = 198.51.99.128/25
Subnet 9:  | 110001100011001101100 | 1000 |  0000000    | = 198.51.100.0/25
Subnet 10: | 110001100011001101100 | 1001 |  0000000    | = 198.51.100.128/25
Subnet 11: | 110001100011001101100 | 1010 |  0000000    | = 198.51.101.0/25
Subnet 12: | 110001100011001101100 | 1011 |  0000000    | = 198.51.101.128/25
Subnet 13: | 110001100011001101100 | 1100 |  0000000    | = 198.51.102.0/25
Subnet 14: | 110001100011001101100 | 1101 |  0000000    | = 198.51.102.128/25
           ----------------------------------------------
Subnetted: | 25 network bits              | 7 host bits |
           ----------------------------------------------

           ----------------------------------------------
Unused:    | 110001100011001101100 | 111  | 00000000    | = 198.51.103.0/24
           ----------------------------------------------

*一直存在一个神话,即对于子网和主机地址,不能使用全零和全一子网,但是很多年前标准已明确消除了这一神话。不幸的是,这个神话扩展到某些网络教育班级,而那些(不正确的)班级的正确答案是使用第二到第十五子网。


可以将网络划分为各种大小的子网(每个IPv4网络都是该0.0.0.0/0网络地址的子网),如上面的示例所示,未使用的子网是一个/24子网,但是这需要仔细计划,以便最终的子网开始正确的位。

例如,假设我们需要网络中的一个/26和一个/27子网198.51.96.0/21。有两种方法可以执行此操作:从/26子网开始,或从/27子网开始。

/26子网开始:

Original: | 110001100011001101100 | 00000000000    | /21
Subnet 1: | 110001100011001101100 | 00000 | 000000 | /26

添加1到子网部分以获取下一个子网的起始位置:

Subnet 2: | 110001100011001101100 | 00001 | 000000 | /26

然后将第二个子网扩展到/27

Subnet 2: | 110001100011001101100 | 000010 | 00000 | /27

请注意,我们实际上是将第二个/26子网划分为一个/27子网,并且效果很好,因为27它大于26

/27子网开始:

Original: | 110001100011001101100 | 00000000000    | /21
Subnet 1: | 110001100011001101100 | 000000 | 00000 | /27

添加1到子网部分以获取下一个子网的起始位置:

Subnet 2: | 110001100011001101100 | 000001 | 00000 | /27

请注意,主机部分中剩余的位(五个主机位)不足以支持/26需要六个主机位(32 address bits – 26 network bits = 6 host bits)的网络。如果将其用作/26子网的起始位置,则实际上将与之前和之后的/26网络重叠。我们需要为/27网络的起始位置留出一定的网络大小/26

Original: | 110001100011001101100 | 00000000000     | /21
Subnet 1: | 110001100011001101100 | 000000 |  00000 | /27
Unused:   | 110001100011001101100 | 000001 |  00000 | /27
Subnet 2: | 110001100011001101100 | 00001  | 000000 | /26

一个/26子网必须总是在启动/26边界:每2 /27子网边界,每4个/28边界,每8个/29边界,等等。这个规则为任何规模的子网:子网必须启动一个较长的子网的边界等于上2至电源较长的子网大小减去子网大小。例如,/23子网必须在每第四个/25网络(2^(25 - 23) = 2^2 = 4)上启动。

尝试使用从错误的位边界开始的网络地址配置设备,可能会导致奇怪的问题,难以解决问题,或者该设备会给您有关网络重叠的错误。某些人尝试使用点分十进制来执行此操作,这可能会导致错误。例如,198.51.96.0/27网络主机地址是198.51.96.0通过198.51.96.31。如果知道这一点并尝试使用198.51.96.32/26网络,则会遇到问题,因为该网络从错误的位边界开始并且与/27网络重叠(请通过按位查看AND地址和网络掩码来进行检查)。它在二进制中很明显,但在点分十进制中却不太明显。您可以了解到/26网络必须以十进制的倍数开头64 边界,但是以二进制形式查看它可以肯定地告诉您您是否犯了错误。


基于主机数的子网大小

常见的考试问题将为您提供一个网络,并要求您根据每个子网的主机数量提出几个大小不同的子网。如果可以,您需要澄清主机数是基于网络上的主机地址总数,还是基于网络上可用的主机数。(例如,如果问题要求一个包含256255主机的子网,则/24网络将为您提供256总的主机地址,但仅提供254可用的主机地址。这样的问题可能是一个棘手的问题,正确的答案取决于是否问题表示主机总地址或可用主机地址。)

示例问题:

Given the 198.51.96.0/21 network, subnet it for the following departments:
    Department 1:  500 hosts
    Department 2:  100 hosts
    Department 3:  200 hosts
    Department 4: 1000 hosts

正如我们在“子网划分IPv4网络”部分中所看到的,最简单的方法是首先按主机数量的最大到最小对部门进行排序,因为我们不需要处理网络缺口:

Department 4: 1000 hosts
Department 1:  500 hosts
Department 3:  200 hosts
Department 2:  100 hosts

您可以将每个值四舍五入到下一个高幂2,以获取每个子网所需的总主机地址数,然后从以下幂的指数中得出所需的主机位数2

Department 4: 1024 total host addresses = 2^10 = 10 host bits
Department 1:  512 total host addresses = 2^9  =  9 host bits
Department 3:  256 total host addresses = 2^8  =  8 host bits
Department 2:  128 total host addresses = 2^7  =  7 host bits

您还可以修改前面的公式,以找到特定数量的相等大小的子网所需的位数,以确定每个子网所需的主机位数:Log2(X hosts) = Y host bits,四舍五入到下一个整数值:

Department 4: Log2(1000 hosts) = 9.96578428466209, rounded up = 10 host bits
Department 1: Log2( 500 hosts) = 8.96578428466209, rounded up =  9 host bits
Department 3: Log2( 200 hosts) = 7.64385618977472, rounded up =  8 host bits
Department 2: Log2( 100 hosts) = 6.64385618977473, rounded up =  7 host bits

获得每个子网所需的主机位数后,请执行二进制数学运算以获取每个部门的特定子网。记住要添加1到子网中以获得下一个子网的起始地址:

Original:     | 110001100011001101100 |    00000000000 | = 198.51.96.0/21
Department 4: | 110001100011001101100 | 0 | 0000000000 | = 198.51.96.0/22
Department 1: | 110001100011001101100 | 10 | 000000000 | = 198.51.100.0/23
Department 3: | 110001100011001101100 | 110 | 00000000 | = 198.51.102.0/24
Department 2: | 110001100011001101100 | 1110 | 0000000 | = 198.51.103.0/25
Unused:       | 110001100011001101100 | 1111 | 0000000 | = 198.51.103.128/25

查找特定子网

可能会要求您提供给定网络的特定子网的网络信息。例如,可能会要求您提供网络第23个/26子网的198.51.96.0/21网络信息。由于需要第23个子网,因此可以转换22(记住0是第一个子网,所以第23个子网将是22*)转换为binary:Decimal 22= Binary 10110。在地址的子网部分中使用转换后的二进制数:

Original:  | 110001100011001101100 |    00000000000 | = 198.51.96.0/21
Subnet 23: | 110001100011001101100 | 10110 | 000000 | = 198.51.101.128/26

一旦确定了第23个网络地址,198.51.101.128/26就可以计算其他网络信息(如前几节所述):

Network address:                   198.51.101.128
Network mask length:               26
Network mask:                      255.255.255.192
Host mask length:                  6
Host mask:                         0.0.0.63
First usable network host address: 198.51.101.1
Last usable network host address:  198.51.101.62
Broadcast address:                 198.51.101.63
Total network host addresses:      64
Usable network host addresses:     62

*一直存在一个神话,即对于子网和主机地址,不能使用全零和全一子网,但是很多年前标准已明确消除了这一神话。不幸的是,这个神话扩展到某些网络教育班级,对于那些(错误的)班级来说,正确的答案是在我们等大小子网的示例中使用第24个(23十进制,10111二进制)子网,而不是实际的第23个(22十进制,10110二进制)子网。


查找特定的网络主机

可能会要求您找到给定网络的特定主机的主机地址。例如,可能会要求您提供198.51.96.0/21网络的第923位主机的主机地址。由于您需要923rd主机,因此可以转换923为二进制:Decimal 923= Binary 1110011011。将转换后的二进制数添加到网络地址:

Binary network: | 110001100011001101100 | 00000000000 |
Binary 923:     | 000000000000000000000 | 01110011011 | +
                  -----------------------------------
Host address:   | 110001100011001101100 | 01110011011 | = 198.51.99.155

两台主机的最大公共网络*

可能会给您两个(或更多个)不同的主机地址,并要求提供包含两个主机地址的最大网络(最少数量的主机)。例如,发现的最大的公共网络198.51.100.223198.51.101.76

首先,将点分十进制地址转换为二进制:

198.51.100.223 = 11000110001100110110010011011111
198.51.101.76  = 11000110001100110110010101001100

接下来,从最高位(最左侧)开始,比较每个位位置的二进制地址,直到同一位置的位不匹配为止:

198.51.100.223 = | 11000110001100110110010 | 011011111 |
198.51.101.76  = | 11000110001100110110010 | 101001100 |

23在这种情况下,请计算匹配位数,以获取掩码长度。然后,您可以选择其中一个地址,并AND使用网络掩码按位执行操作以获取公共网络。在两个地址上都执行此操作将导致一个相同的网络,如果不相同,则可能会计数错误,或者错过了不匹配的位位置。

198.51.100.223  = 11000110001100110110010011011111
/23 mask length = 11111111111111111111111000000000 AND
                  --------------------------------
Binary network:   11000110001100110110010000000000 = 198.51.100.0/23

198.51.101.76   = 11000110001100110110010111011111
/23 mask length = 11111111111111111111111000000000 AND
                  --------------------------------
Binary network:   11000110001100110110010000000000 = 198.51.100.0/23

请注意,两个网络地址匹配。这意味着两个主机地址的最大公共网络是198.51.100.0/23(CIDR表示法)或(传统)198.51.100.0掩码为255.255.254.0


* 您可能会看到这称为最小的公共网络(或某些变体,例如最小网络或掩码)。最小的网络实际上是0.0.0.0/00网络位),它是所有IPv4地址的公用网络,因此它是任何IPv4地址之间的最小公用网络。之所以会出现这种混乱,是因为许多人都在查看地址的主机部分,并将其大小视为网络大小,而不是地址的网络部分大小。


公开与私有寻址

IPv4本身不具有公共寻址和专用寻址的概念,也没有区别。IPv4专用寻址是任意选择的,根据协议,ISP不会使用专用地址空间中的地址在公共Internet上转发数据包,但是网络设备和主机不知道地址是公用还是专用。

定义了IPv4专用寻址的三个地址范围:

  1. 10.0.0.0/8
  2. 172.16.0.0/12
  3. 192.168.0.0/16

分类网络寻址

最初,IPv4地址被分为网络类别。几十年来,不推荐使用类寻址,现代网络基于CIDR(无类域间路由),但是不幸的是,许多网络教育课程和认证考试都坚持测试您的类寻址知识。在学习类寻址之前,请学习并熟悉本文档中所有以前的IPv4数学。

IPv4地址类别均基于地址的前几位:

Class   Address Starts With      Address Range                 Default Size*
  A     First one bit    = 0       0.0.0.0 to 127.255.255.255        /8
  B     First two bits   = 10    128.0.0.0 to 191.255.255.255       /16
  C     First three bits = 110   192.0.0.0 to 223.255.255.255       /24
  D     First four bits  = 1110  224.0.0.0 to 239.255.255.255       N/A
  E     First four bits  = 1111  240.0.0.0 to 255.255.255.255       N/A
  • A类网络的默认网络掩码为255.0.0.0/8),默认的主机掩码为0.255.255.255,为您提供16,777,216每个网络的总主机地址。
  • B类网络的默认网络掩码为255.255.0.0/16),默认的主机掩码为0.0.255.255,为您提供65,536每个网络的总主机地址。
  • C类网络的默认网络掩码为255.255.255.0/24),默认的主机掩码为0.0.0.255,为您提供256每个网络的总主机地址。
  • D类地址用于多播,其中每个地址分别用于表示订阅多播地址的一组主机。这意味着D类地址通常不具有网络掩码的概念。
  • E类地址是保留的,不能用于任何用途。对此有一个例外,那就是的受限广播地址255.255.255.255,它是网络上每个主机都将视为自己的地址。这意味着发送到的任何内容都255.255.255.255将被网络上的每个主机接收和处理。

由于每个类别都有默认的网络大小,因此某些问题会假定给定地址的默认掩码,因此需要根据默认的网络掩码进行任何计算。对于我们的示例地址,198.51.100.223

Binary: 11000110 00110011 01100100 11011111

请注意,前三个地址位是110,这意味着这是C类地址,并且没有任何掩码或掩码长度,因此网络掩码被假定为255.255.255.0/24),即网络地址198.51.100.0


* 不要误以为网络掩码决定了网络类别,这是相反的做法。例如,许多人认为任何/24网络都属于C类网络,但事实并非如此。例如,在给定10.11.12.0/24网络的情况下,即使地址的第一位是0,它也会由于网络掩码错误地将其称为C类网络,即使它的网络掩码比默认值更长,也使其成为A类网络。 A类网络掩码,表示它是A类网络的子网,而不是C类网络的子网。


6

(为了将所有网络掩码答案都保留在一个位置,在其他出色答案之后,我添加了关于视觉方法的一个。)

基于主机数的子网大小

这是一个常见的问题:“我如何切一个给定的网络规模成ñ件允许X 1台网络1主机,X 2个,网络2中,等主人......?” 通过使用其他出色答案中描述的方法可以绝对解决。

但是,有些人可能希望使用更直观的方法和一些常规技巧。

可视“玻璃切割机”方法

我经常通过以下方法教对此进行视觉理解:

首先想象一下这样的纸断头台:

滑纸断头台

图片来自维基百科,内森·CC BY-SA 3.0)

这种切纸器的特性是,它仅切割直线,始终在纸张上一直切割,并且垂直于侧面切割。我们特殊的断头台非常挑剔:它只会将纸张切成两半,并且我们不能将切纸距离边缘的距离切近1厘米。

  • 您的起始块总共有多少个地址可用?
  • 假设将/ 22划分为1024个地址
  • 得到一张具有那么多平方厘米(和正方形或2x1比率)的纸
  • 因此,我得到一块32厘米乘32厘米(1024平方厘米)的零件
  • 反复
    1. 选择一块(如果有多个)
    2. 将其切成两半(在限制范围内:仅将矩形切成两半,在1厘米以下不要切任何东西)
  • 通常您可以做出不同的削减,因此必须做出选择
  • 要获得n个网络,您需要进行n-1个切割
  • 有时,您最终会得到多余的碎片(取决于您如何分配“废物”)

这是该过程的说明。您会看到在第一个剪切和第二个剪切中只有一种可能的剪切,但是在第3个剪切中,我们可以选择:剪切小片(红色)或大片(蓝色),提供两种不同的可能性。

我自己的画

这就是通常所说的断头台问题,我将其称为“切玻璃器”问题,因为平板玻璃确实必须被完全切开,并且这个特有的切入点可能被称为“二进制切玻璃器”,因为它总是被切成两半。

当我在现实生活中真正做到这一点时,我在看待网格时会心智减半。我记得/ 26必须以0,.64、128或.192开头;我可能知道第七个租用线在上季度需要第七个/ 30,但我不记得是.216。

网格显然也可以用来表示第三个八位位组,每个正方形表示一个/ 24。现在,它说/ 18从.0,.64,.128或.192开始。

在此处输入图片说明

通用技巧

通用程序为:

  • 每个所需的大小取整为足够大的最小块
  • 确保您遵循所有全局规则(通常“最大化可用地址”,有时“允许增长两倍”或“简化路由”)
  • 将子网分配给地址,从最大的地址开始,到最小的地址(这是他们通常忘记告诉您的部分
  • 遵循任何特定的规则(测试问题通常具有额外的规则,有时诸如“没有网络地址可以包含7”之类的缩写)
  • 检查是否有隐含地址的空间(广播,路由器)
  • 如果网络较小(/ 30,/ 31或/ 32),请特别注意,因为主机,4、2和1的网络在某些边缘情况下,具体情况取决于您要解决的确切问题

5

例:

IP:128.42.5.4

二进制:10000000 00101010 00000101 00000100

子网:255.255.248.0

您如何确定前缀,网络,子网和主机号?

      32768     16384  8192  4096  2048  1024   512   256  ----> Binary
        128       192   224   240   248   252   254   255  ----> Sunet Mask
        /17       /18   /19   /20   /21   /22   /23   /24  ----> CIDR  
      32766     16382  8190  3094  2046  1022   510   254  ----> Host


      128     64    32     16     8     4    2     1   ----> Binary
      128    192   224    240   248   252   254   255  ----> Sunet Mask
      /25    /26   /27    /28   /29   /30   /31   /32  ----> CIDR  
      126     62    30     14     6     2    *     -   ----> Host 

     128        64        32       16        8         4         2        1
  10000000   01000000  00100000 00010000  00001000  00000100  00000010   00000001

   Example 
   Network=192.168.1.0 /24;  
   Network Address with Subnet mask =  192.168.1.0 subnet 255.255.255.0 
   Ip address range 192.168.1.0----192.168.1.255
   Fist available ip address  192.168.1.1; 
   Last available ip address  192.168.1.254; 
   Broadcast address = 192.168.1.255;
   254 Host

   Network=192.168.1.0 /25;
   Network Address with Subnet mask =  192.168.1.0 subnet 255.255.255.128
   Ip address range 192.168.1.0----192.168.1.128
   Fist available ip address  192.168.1.1; 
   Last available ip address  192.168.1.126;
   Broadcast address = 192.168.1.127;  
   126 Hosts

   When the CIDR increased ex. /24. /25.  the network will divided by the 
   binary number.
   /25  increase network   0-128| 128- 256 |                   you will have 2 Networks 
   /26  increase network   0-64 | 64 - 128 | 128-192 | 192-256 you will have 4 Networks 
    .
    .
    .
   /32......
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.