Answers:
将网络掩码的点分十进制表示形式转换为二进制。然后,从第一个八位位组的最高有效位(即二进制数的左侧)开始,计算连续的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块中的四个子网,因此可以使用/ 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地址的最长网络掩码;例如,如果我们有:
最简单的方法是将两者都转换为二进制文件,并从地址的左侧寻找最长的网络位字符串。
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
注意:如果您尝试从右侧开始,请不要仅仅因为找到了一个匹配的位列就被欺骗了;除了那些匹配的位以外,可能还有其他不匹配的位。老实说,最安全的做法是从左侧开始。
上面的答案完美地打在了头上。但是,当我刚开始时,它从几个来源带给我一些不同的例子,使它真正流行起来。因此,如果您对其他示例感兴趣,我就此主题写了一些博客文章-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是完整的。为了便于参考,这里再次是:
作为快捷方式,您也可以使用此公式。它适用于任何大小的子网:
我一直都坚持不懈地推广Mike Pennington的出色回答,但我不想从中脱颖而出。有关解决随时间而出现的问题的更多信息。不幸的是,它太大了,我不得不将其分为两个答案。
给定一个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计算器进行仔细检查,或者转换为二进制,执行数学运算并转换回十进制。
例如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地址的大小(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地址0
。可以通过按AND
IPv4地址和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/21
为198.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.100
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网络掩码的反函数。您可以从二进制网络掩码中创建二进制主机掩码,或者从二进制主机掩码中创建二进制网络掩码,只需将起始掩码的1
s和0
s 反转即可:
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网络地址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主机地址总数等于主机位数的乘2
幂,该位数32
减去网络位数。在我们的/21
(网络掩码255.255.248.0
)网络示例中,有11
主机位(32 address bits – 21 network bits = 11 host bits
)。这意味着IPv4网络()中2048
共有主机地址。/21
2^11 = 2048
除了/31
(网络掩码255.255.255.254
)和/32
(网络掩码255.255.255.255
)网络,IPv4网络上可用的主机地址数量是网络主机地址总数减去2
(因为IPv4网络和广播地址不可用于网络上的主机地址,因此,必须从可用主机地址的数量中减去它们)。对于我们的/21
(255.255.248.0
)网络示例,有2046
可用的主机地址(2^11 - 2 = 2046
)。
除/31
(网络掩码255.255.255.254
)和/32
(网络掩码255.255.255.255
)网络外,第一个可用的IPv4网络主机地址是IPv4网络地址加1
(IPv4网络地址不可用于网络主机地址)。对于我们的示例网络198.51.96.0/21
,第一个可用的网络主机地址是198.51.96.1
(198.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
除/31
(网络掩码255.255.255.254
)和/32
(网络掩码255.255.255.255
)网络外,最后可用的IPv4网络主机地址是IPv4网络广播地址减1
(IPv4网络广播地址不可用于网络主机地址)。对于我们的示例网络198.61.96.0/21
,最后一个可用的网络主机地址是198.51.103.254
(198.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网络地址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网络快速计算这些值。您可以使用以下提示快速查看答案:
以上提示不适用于/31
(网络掩码255.255.255.254
)或/32
(网络掩码255.255.255.255
)网络。
给定足够的考试时间,以及一个有多种方法得出答案的问题,则应使用多种方法仔细检查答案。
在下一个答案中继续...
接上一个答案 ...
网关是网络上的主机,它知道如何将数据包转发到其他网络,并且可以为其分配任何可用的网络主机地址。有些人只是将网关地址随机分配给任何可用的网络主机地址,有些人总是将第一个可用的网络主机地址分配给网关,而有些人总是将最后一个可用的网络主机地址分配给网关。分配给网关的哪个可用主机网络地址实际上并不重要,但是您应该尽量保持一致。
/31
(网络掩码255.255.255.254
)网络最初,/31
(网络掩码255.255.255.254
)网络不可用,因为只有一个主机位,从而为您提供了两个网络主机地址,但是可用的网络主机地址数是网络主机地址总数减去2
(2 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
网络的点对点链接。
/32
(网络掩码255.255.255.255
)网络甲/32
(网络掩码255.255.255.255
)网络既是没有主机地址网络,和一个主机地址,本身。网络中只有一个地址,即网络地址。由于网络上没有其他主机,因此必须将流量路由到网络地址和从网络地址路由。
这些地址通常用于设备内部定义的虚拟网络接口上,该设备可以在其虚拟接口和物理接口之间路由数据包。这样的一个示例是在网络设备中创建虚拟接口,以用作设备本身的源或目标。由于物理问题(例如拔下电缆),虚拟接口无法断开,并且如果设备具有多条路径,当设备的物理接口由于某种原因无法操作时,其他设备仍可以使用虚拟接口地址与该设备通信。
子网划分网络是根据网络地址和掩码创建多个更长的网络。基本思想是从原始网络的主机部分借用高阶位。假设您想从我们的原始198.51.96.0/21
网络中创建14个大小相等的子网。由于您是从原始网络的主机部分借用高阶位,因此您将获得一个数字,该数字是的幂2
,但14
不是的幂2
,因此您必须获得的下一个更高的幂2
,恰好是16
(16 = 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
边界,但是以二进制形式查看它可以肯定地告诉您您是否犯了错误。
常见的考试问题将为您提供一个网络,并要求您根据每个子网的主机数量提出几个大小不同的子网。如果可以,您需要澄清主机数是基于网络上的主机地址总数,还是基于网络上可用的主机数。(例如,如果问题要求一个包含256
或255
主机的子网,则/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.223
和198.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/0
(0
网络位),它是所有IPv4地址的公用网络,因此它是任何IPv4地址之间的最小公用网络。之所以会出现这种混乱,是因为许多人都在查看地址的主机部分,并将其大小视为网络大小,而不是地址的网络部分大小。
IPv4本身不具有公共寻址和专用寻址的概念,也没有区别。IPv4专用寻址是任意选择的,根据协议,ISP不会使用专用地址空间中的地址在公共Internet上转发数据包,但是网络设备和主机不知道地址是公用还是专用。
定义了IPv4专用寻址的三个地址范围:
10.0.0.0/8
172.16.0.0/12
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
255.0.0.0
(/8
),默认的主机掩码为0.255.255.255
,为您提供16,777,216
每个网络的总主机地址。255.255.0.0
(/16
),默认的主机掩码为0.0.255.255
,为您提供65,536
每个网络的总主机地址。255.255.255.0
(/24
),默认的主机掩码为0.0.0.255
,为您提供256
每个网络的总主机地址。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类网络的子网。
(为了将所有网络掩码答案都保留在一个位置,在其他出色答案之后,我添加了关于视觉方法的一个。)
基于主机数的子网大小
这是一个常见的问题:“我如何切一个给定的网络规模成ñ件允许X 1台网络1主机,X 2个,网络2中,等主人......?” 通过使用其他出色答案中描述的方法可以绝对解决。
但是,有些人可能希望使用更直观的方法和一些常规技巧。
可视“玻璃切割机”方法
我经常通过以下方法教对此进行视觉理解:
首先想象一下这样的纸断头台:
(图片来自维基百科,内森·CC BY-SA 3.0)
这种切纸器的特性是,它仅切割直线,始终在纸张上一直切割,并且垂直于侧面切割。我们特殊的断头台非常挑剔:它只会将纸张切成两半,并且我们不能将切纸距离边缘的距离切近1厘米。
这是该过程的说明。您会看到在第一个剪切和第二个剪切中只有一种可能的剪切,但是在第3个剪切中,我们可以选择:剪切小片(红色)或大片(蓝色),提供两种不同的可能性。
这就是通常所说的断头台问题,我将其称为“切玻璃器”问题,因为平板玻璃确实必须被完全切开,并且这个特有的切入点可能被称为“二进制切玻璃器”,因为它总是被切成两半。
当我在现实生活中真正做到这一点时,我在看待网格时会心智减半。我记得/ 26必须以0,.64、128或.192开头;我可能知道第七个租用线在上季度需要第七个/ 30,但我不记得是.216。
网格显然也可以用来表示第三个八位位组,每个正方形表示一个/ 24。现在,它说/ 18从.0,.64,.128或.192开始。
通用技巧
通用程序为:
例:
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......