例子:
IP:128.42.5.4
二进制:10000000 00101010 00000101 00000100
子网:255.255.248.0
如何确定前缀、网络、子网和主机号?
例子:
IP:128.42.5.4
二进制:10000000 00101010 00000101 00000100
子网:255.255.248.0
如何确定前缀、网络、子网和主机号?
将网络掩码的点分十进制表示转换为二进制。然后,从第一个八位字节中的最高有效位(即二进制数的左侧)开始计算连续的 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
广播地址将所有主机位转换为 1...
请记住,我们的十进制 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 的掩码长度?通过返回包含 100 个主机所需的主机位数来计算前缀。一个需要 7 个主机位才能包含 100 个主机。官方计算方法如下:
主机位= Log 2(主机数)= Log 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 和全零的主机号。全零的主机号是网络号;全1的主机号是广播地址。
使用上面的示例子网 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
现在要找出网络地址,我们所做的就是将下面有 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的最后可用地址。
我们终于得到它了!我们的模板已经完成。为方便参考,这里又是:
作为一种快捷方式,您也可以使用此公式。它适用于任何大小的子网:
我不想从Mike Pennington 的出色回答中拿走任何东西,我一直在大力推广,但我一直看到他的回答没有直接解决的问题,我已经创建了一些最初基于 Mike 的回答的东西,但我有更多信息来解决随着时间的推移出现的问题。不幸的是,它太大了,我不得不把它分成两个答案。
给定一个 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 为假,1 为真):
-----------------------------------------
| 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 地址实际上是一个 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
因为每个八位字节的长度为 8 位,所以每个八位字节都有一个介于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 位)相同,它以点分十进制表示法表示,与以点分十进制表示法(四个 8 位八位字节,由一个时期)。例如,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
位数得到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 网络地址可以通过AND
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
(network mask 255.255.255.254
) 和/32
(network mask 255.255.255.255
) 网络,IPv4 网络上可用的主机地址数是网络主机地址总数减去2
(因为 IPv4 网络和广播地址对于网络上的主机地址不可用,您必须从可用主机地址的数量中减去它们)。对于我们的/21
( 255.255.248.0
) 网络示例,有2046
可用的主机地址 ( 2^11 - 2 = 2046
)。
除了/31
(network mask 255.255.255.254
) 和/32
(network mask 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
(network mask 255.255.255.254
) 和/32
(network mask 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
(network mask 255.255.255.254
) 或/32
(network mask 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
----------------------------------------------
*有一个长期存在的神话,即对于子网,对于主机地址,不能使用全零和全一的子网,但是这个神话在很多年前被标准明确地消除了。不幸的是,这个神话扩展到一些网络教育课程,对于那些(不正确的)课程的正确答案是使用第 2 到第 15 个子网。
可以将网络划分为不同大小的子网(每个 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
子网必须在每 4 个/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
正如我们在 Subnetting IPv4 Networks 部分看到的那样,最简单的方法是首先按主机数从最大到最小对部门进行排序,因为我们不需要处理网络间隙:
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
*)转换为二进制: 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 台主机的主机地址。由于您需要第 923 台主机,您可以转换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
网络,由于网络掩码,许多人错误地称其为 C 类网络,即使地址的第一位是0
,使其成为 A 类网络,尽管网络掩码比默认值更长A 类网络掩码,意味着它是 A 类网络的子网,而不是 C 类网络。