例如:

IP:128.42.5.4

二进制:10000000 00101010 00000101 00000100

子网:255.255.248.0

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

#1 楼

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

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


计算子网:

您尚未给出足够的信息来计算该网络的子网;通常,您可以通过将一些主机位重新分配为每个子网的网络位来构建子网。很多时候,没有一种正确的方法来对一个地址块进行子网划分……根据您的限制,可能有几种有效的方法来对一个地址块进行子网划分。 / 21到4个子网中,每个子网必须至少包含100个主机...



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

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

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

主机位= Log2(主机数)= Log2(100)= 6.643

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

打破128.42的惰性方法。将0.0 / 21划分为四个相等的子网:

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

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



计算主机号:

这是我们上面已经完成的操作...只需重用主机计算广播地址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,主机数为...

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

查找包含两个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

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

#2 楼

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

管理员(如果考虑了此帖子)垃圾邮件,请随时删除它。 >
以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


评论


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

–迈克·彭宁顿
2015年6月4日7:34

#3 楼

我一直都坚持不懈地推广Mike Pennington的出色答案,但我不想从中脱颖而出,但是我一直看到他的答案未直接解决的问题,我创建了一些最初基于Mike的答案的东西,但是有关解决随时间而出现的问题的更多信息。不幸的是,它太大了,我不得不将其分为两个答案。


第1部分(共2部分)


IPv4 Math

鉴于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 + 0 + 0 + 4 + 0 + 0= 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地址

IPv4点分十进制表示法,例如198.51.100.223只是为了使人类更容易读取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


因为每个八位位组的长度为八位,每个八位位组的值将介于0255之间(任何大于255的值均无效)。原因是2^8 = 2562(二进制数的基数)对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位的总数相加,即IPv4地址或网络掩码中的位数32。对于我们的示例网络掩码:

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

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的网络地址为255.255.248.0。请注意,您不能依靠八位字节来告诉您地址的哪一部分是网络,以及地址的哪一部分是针对主机的。

您可以使用此方法确定两个地址是否为在相同或不同的网络上*。例如,如果要查看198.51.100.223/21地址是否在主机分配了198.51.96.0地址的同一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网络地址进行比较,并注意网络地址相等,因此主机地址在同一网络上。 >
现在,让我们看看您是否与198.51.100.223/21 Google地址位于同一网络上:

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网络掩码的反函数。您可以通过反转起始掩码的198.51.102.5774.125.69.100来从二进制网络掩码创建二进制主机掩码,或者从二进制主机掩码创建二进制网络掩码:

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


可以通过数学方法从网络掩码中创建主机掩码,也可以通过从最长掩码(1或全掩码)中减去起始掩码来从主机掩码中创建网络掩码。

可以以二进制形式完成:

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


也可以以十进制完成(全八进制为0),但请务必进行转换在实际尝试使用它进行地址操作之前将其转换为二进制:

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网络广播address是所有主机位均设置为/32的IPv4网络地址。有几种方法可以计算IPv4网络广播地址。

对于我们的示例IPv4地址255和网络掩码1

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

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


这也是您可以用十进制执行的操作: >
网络的IPv4主机地址总数是255.255.248.0乘以主机位数的乘方,即OR减去网络位数。对于我们的2(网络掩码32)网络的示例,有/21个主机位(255.255.248.0)。这意味着11 IPv4网络(32 address bits – 21 network bits = 11 host bits)中总共存在2048个主机地址。


可用的IPv4网络主机地址总数

/21(网络掩码2^11 = 2048) )和/31(网络掩码255.255.255.254)网络,IPv4网络上可用的主机地址数是网络主机地址总数减去/32(由于IPv4网络和广播地址不可用于网络上的主机地址,因此必须减去他们从可用的主机地址数)。对于我们的255.255.255.2552)网络示例,有/21个可用主机地址(255.255.248.0)。


第一个可用IPv4网络主机地址(网络掩码2046)和2^11 - 2 = 2046(网络掩码/31)网络,第一个可用的IPv4网络主机地址是IPv4网络地址加上255.255.255.254(IPv4网络地址不可用于网络主机地址)。对于/32的示例网络,第一个可用的网络主机地址是255.255.255.2551)。只需将二进制IPv4网络地址的低位设置为198.51.96.0/21

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网络主机地址

198.51.96.1(网络掩码198.51.96.0 + 1 = 198.51.96.1)和1(网络掩码/31)网络外,最后可用的IPv4网络主机地址是IPv4网络广播地址减去255.255.255.254(IPv4网络广播地址不可用于网络主机地址)。对于/32的示例网络,最后可用的网络主机地址是255.255.255.2551)。只需将二进制IPv4网络广播地址的低位设置为198.61.96.0/21

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网络寻址放在一起

对于我们的示例IPv4网络地址198.51.103.254和掩码198.51.103.255 - 1 = 198.51.103.254(或0),我们可以计算出很多网络信息:认证测试将要求您能够在给定主机地址和掩码(或掩码长度)的情况下针对IPv4网络快速计算这些值。您可以使用以下提示快速查看答案:


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

以上提示不适用于198.51.100.223(网络掩码255.255.248.0)或198.51.100.223/21(网络掩码/31)网络。

给您足够的考试时间,并且发现有多种方法可以解决问题。答案,您应该使用多种方法仔细检查答案。


下一个答案继续...

#4 楼

从上一个答案继续...


第2部分(共2个)


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


IPv4 /31(网络掩码255.255.255.254)网络
<最初,/31(网络掩码255.255.255.254)网络不可用,因为只有一个主机位,给您两个网络主机地址,但是可用的网络主机地址数是网络主机地址总数减去2( )。

点对点链接仅需要两个主机地址(链接的每一端一个)。传统的分配IPv4网络的方法要求将2 total host addresses - 2 = 0 usable host addresses(网络掩码/30)网络用于点对点链接,但是这浪费了一半的网络主机地址,因为255.255.255.252网络总共有四个网络主机地址,但是只有两个可用网络主机地址(/30)。由于严重的IPv4地址短缺,创建了一个标准,以允许将2^2 – 2 = 2网络用于点对点链接。这是有道理的,因为无需在此类网络上进行广播:网络上主机发送的任何数据包都将发往网络上唯一的其他主机,从而有效地进行广播。在/31网络上,网络地址是第一个可用的主机地址,广播地址是最后一个可用的主机地址。

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

< IPv4 /30(网络掩码/32)网络

255.255.255.255(网络掩码/32)网络既是没有主机地址的网络,又是主机地址本身。网络中只有一个地址,即网络地址。由于网络上没有其他主机,因此必须在网络地址之间来回路由。

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


子网划分IPv4网络

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

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


对于我们需要14个等于-大小为原始Log2(X subnets) = Y borrowed bits网络的子网,从第一个子网的所有198.51.96.0/21 s *开始,将0添加到子网部分以获得下一个子网:

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



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


可以对网络进行子网划分分成大小不同的子网(每个IPv4网络都是1网络地址的子网),如上面的示例所示,未使用的子网是0.0.0.0/0子网,但这需要仔细计划,以便最终的子网从正确的位开始。 br />
例如,假设我们需要来自/24网络的/26/27子网。有两种方法:从198.51.96.0/21子网开始,或者从/26子网开始。

/27子网开始:

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


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

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


然后将第二个子网扩展到1

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


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

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


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

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


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

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


/27子网必须始终在/26边界上开始:每个第2个/26子网边界,每第4个/26边界,第8个/27边界等。此规则适用于任何子网大小:子网必须在更长的子网边界上开始,该边界等于/28等于较长子网大小的幂减去子网大小。例如,一个/29子网必须在每个第4个2网络(/23)上启动。

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


基于子网大小调整有关主机数量的信息

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

示例问题:

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的高幂,以获取每个子网所需的总主机地址数,然后从256的幂的指数得出所需的主机位数:
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


还可以修改前面的公式,以找到特定数量的相等大小的子网所需的位数,以确定每个子网所需的主机位数:254,四舍五入到下一个整数值:

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


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

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




查找特定子网

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

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


一旦确定了第23个网络地址22,就可以计算其他网络信息(如在前面的部分中进行了介绍):

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个(10110十进制,198.51.101.128/26二进制)子网,而不是实际的第23个( 23十进制,10111二进制)子网。


查找特定的网络主机

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

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



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

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

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

198.51.100.223 = 11000110001100110110010011011111
198.51.101.76  = 11000110001100110110010101001100


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

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


计算数量匹配位(在这种情况下为198.51.100.223)的整数,以获取掩码长度。然后,您可以选择其中一个地址,并使用网络掩码执行按位198.51.101.76以获得公用网络。在两个地址上执行此操作应该会导致相同的网络,如果不相同,则可能是计数错误,或者错过了不匹配的位位置。请注意,两个网络地址匹配。这意味着两个主机地址的最大公共网络是23(CIDR表示法)或带掩码AND的(传统)198.51.100.0/23


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


公共与专用寻址

IPv4本身没有公用寻址和专用寻址的概念,也没有区别。随意选择了IPv4专用寻址,并且ISP同意不会使用专用地址空间中的地址在公共Internet上转发数据包,但是网络设备和主机不知道地址是公用还是专用。 >
定义了IPv4专用地址的三个地址范围:


0.0.0.0/0
0
10.0.0.0/8


有类的网络寻址

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

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

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



A类网络的默认网络掩码为172.16.0.0/12192.168.0.0/16),默认主机掩码为255.0.0.0,每个网络的总主机地址为/8
B类网络的默认网络掩码为0.255.255.25516,777,216),并且默认主机掩码255.255.0.0,每个网络的总主机地址为/16
C类网络的默认网络掩码为0.0.255.25565,536),默认主机掩码为255.255.255.0,每个网络总主机地址为/24。 D类地址用于多播,其中每个地址分别用于表示订阅多播地址的一组主机。这意味着D类地址通常不具有网络掩码的概念。
E类地址是保留的,不能用于任何用途。对此有一个例外,那就是0.0.0.255的受限广播地址,它是网络上每个主机都将视为自己的地址。这意味着发送到256的任何内容都将被网络上的每个主机接收和处理。

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

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


请注意,前三个地址位是255.255.255.255,这意味着这是C类地址,并且没有任何掩码或掩码长度,假设网络掩码为198.51.100.223110),则网络地址为255.255.255.0


*不要误以为网络掩码决定了网络类别,这是相反的做法。例如,许多人认为任何/24网络都属于C类网络,但事实并非如此。例如,给定一个198.51.100.0网络,即使地址的第一位是/24,许多人仍会由于网络掩码而错误地称其为C类网络,尽管该网络掩码的长度比默认的A类网络掩码,表示它是A类网络的子网,而不是C类网络。

#5 楼

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

基于主机数的子网大小

这是一个常见的问题:“如何将给定的网络大小切成n个,以允许网络1中的x1主机,网络2中的x2主机,等等……?”完全可以通过其他出色答案中描述的方法来解决。

但是,某些人可能希望使用更直观的方法和一些一般性提示。

视觉“玻璃破碎机” “方法

我经常通过以下方法来对这种方法进行视觉理解:

首先想象一个纸断头台,像这样:



(来自Nathan CC BY-SA 3.0的维基百科图片)

这种刀具的特性是它只能切割直线,并且始终沿直线切割。跨过纸张,并且垂直于侧面切开。我们特殊的断头台非常挑剔:它只会将纸张切成两半,我们不能在距边缘不到1厘米处进行切纸。


共有多少个地址可用于您的起始块?
假设将/ 22分割为1024个地址
获取一张具有这么多平方厘米(和正方形或2x1的比率)的纸
因此我得到一张32厘米乘以32厘米(1024平方厘米)
反复


选择一块(如果有一个以上)
将其切成两半(在限制内:仅矩形切,一半,不到1厘米以下)


通常您可以做出不同的切割,必须做出选择
要获得n个网络,您需要-1切块
有时您最终会得到多余的碎片(取决于您如何分配“废物”)

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


这就是通常所说的断头台问题,我将其称为“玻璃切割器”问题,因为薄板玻璃确实必须被切开,这一点非常重要。可能会被称为“二进制割刀”,因为它总是会切成两半。

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

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



通用技术提示

一般步骤是:



将每个所需的大小四舍五入到足够大的最小块
确保您遵循任何全局规则(通常“最大化寻址”可用”,有时是“允许增长两倍”或“使路由变得容易”)

分配子网以解决从大到小的问题(这是他们通常忘记的部分)告诉你)
遵循任何特定的规则(测试问题通常具有额外的规则,有时还会缩写为“其中没有网络地址可能有7”)
检查是否有空间容纳任何隐含地址(广播,路由器)
如果任何网络较小(/ 30,/ 31或/ 32),请特别注意,因为主机,4、2和1的网络在某些边缘情况下使用,具体取决于您所要解决的确切问题解决


#6 楼

例如:

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