【网络协议】IPv4 地址分配 - 第一部分
文章目录
- 十进制与二进制
- 网络如何被寻址
- 地址类型
- 网络地址
- 广播地址
- 主机地址
- 如何确定网络和主机部分的位数?
- 网络中的主机数量与前缀号的关系
- 计算每个前缀的主机数量公式
- 子网掩码
- 二进制与操作(Binary ANDing)
- 与操作(AND Operation)
- 二进制与操作的结果
- 关于子网划分
- 为什么要进行子网划分
- 总结
十进制与二进制
我们习惯使用十进制。在日常生活中广泛使用的数字系统大多是基于十进制的,其底数为10。
10^0 = 1
10^1 = 10
10^2 = 100
这就是我们在日常活动中使用的数字系统。然而,计算机仅限于使用两个数字:“1”和“0”,它们分别表示“开”和“关”。我们使用的IP地址系统正是基于这个概念的。所有我们使用的IPv4地址,都是计算机所理解的二进制形式的十进制表示。
下表展示了十进制与二进制之间的对应关系。
网络如何被寻址
相信大多数人都见过IP地址。IP地址方案包含两个部分:
- 网络部分 - 位于左侧
- 主机部分 - 位于右侧
在IPv4地址中,高位(从左侧开始的位)代表网络地址,低位(右侧的位)代表主机部分。在IPv4寻址中,高位匹配的主机被认为属于同一网络。
网络部分和主机部分的位数分别决定了网络数量和主机数量。
为了理解网络如何工作,我们需要掌握二进制到十进制以及十进制到二进制的转换。
以IP地址 192.168.1.0 为例,我们需要将其转换为二进制。下图展示了转换过程:
上图是怎么转换的呢?步骤如下:
- 将32位分成4个八位字节(octets)。
- 将每个八位字节转换为十进制。
- 在每个十进制数之间加上“点”(dot)。
现在我们已经学习了这个概念,下表展示了一种可以轻松将每个数字转换为二进制的方法。
例如,如果我们想将255转换为二进制,可以按照以下步骤操作:
- 取255,与128比较,如果大于128,则减去128,结果为127。
- 判断127是否大于64,如果是,则减去64,结果为63。
- 判断63是否大于32,如果是,则减去32,结果为31。
- 判断31是否大于16,如果是,则减去16,结果为15。
- 判断15是否大于8,如果是,则减去8,结果为7。
- 判断7是否大于4,如果是,则减去4,结果为3。
- 判断3是否大于2,如果是,则减去2,结果为1。
- 判断1是否大于或等于1,如果是,则停止。这是最后一步。
这一过程可以用下图中的流程图进行总结说明。
现在,根据上述例子,如果一个数字大于或等于对应的二进制值,则该二进制位为1;如果小于,则该二进制位为0。
因此,255 的二进制转换结果为:11111111
。
这些顺序步骤对于理解如何进行子网划分非常重要。
由于我们的地址表示限制为单个八位字节的十进制值(0到255),因此我们仅探讨将8位二进制数转换为十进制值的过程。
地址类型
在任何IPv4网络地址范围内,我们主要有以下三种类型的地址:
-
网络地址(Network Address):用于命名网络的地址。
-
广播地址(Broadcast Address):一种特殊类型的IPv4地址,用于向特定网络中的所有主机发送数据包。
-
主机地址(Host Addresses):可以分配给网络中的主机或设备的地址,例如PC、笔记本电脑、IP电话等。
网络地址
网络地址是我们为网络命名的地址。例如,一个地址范围内的网络可以命名为“10.0.0.0”网络。此网络中的所有主机都属于“10.0.0.0”网络,其主机的网络部分(network portion)都是相同的。
在网络中,第一个IPv4地址通常是网络地址。
广播地址
在IPv4中,广播地址是一种特殊的地址,用于向网络中的所有主机发送信息。广播地址始终是网络中的最高地址或最后一个地址。
在以下示例中,广播地址是主机部分(host region)全部为1
的地址。
任何网络中的最后一个地址始终是广播地址。
主机地址
正如之前讨论的那样,网络中的主机需要分配一个IPv4地址。可以分配给这些主机的地址是介于网络IP地址和广播IP地址之间的任何IP地址。
注意:网络地址和广播地址不能分配给主机,因为这些地址是保留的。
如何确定网络和主机部分的位数?
为了确定网络部分和主机部分的位数,我们使用前缀长度(prefix length)。
- 通过计算网络部分的位数即可得出前缀长度。
- 在十进制形式表示地址时,我们用斜杠“/”加上高阶位的数量来表示,如下表所示。
例如网络172.16.1.0
有24位高阶位,因此表示为172.16.1.0/24
。
网络中的主机数量与前缀号的关系
网络中的主机数量或网络位的数量决定了前缀号的使用。
当高阶位(网络位)的数量增加时,低阶位(主机位)的数量减少,因此可用的主机地址也会减少。
计算每个前缀的主机数量公式
计算主机数量的公式为:
2^n - 2 = 主机地址数量,其中,n为主机位的数量。
例如,对于192.168.3.0/28
:
- 网络位(高阶位)数量为28。
- IPv4地址总共有32位,因此主机位(低阶位)的数量为:32 - 28 = 4
根据公式计算主机数量:2^4 - 2 = 14
因此,该网络中有14个可用的主机IP地址。
子网掩码
正如我们之前所看到的,IPv4地址被划分为网络部分和主机部分。我们还提到,前缀长度是网络部分或高阶位的位数,它告诉我们网络和主机地址的数量。
网络中的路由器和其他设备也需要知道高阶位和低阶位的数量,因此它们使用子网掩码,子网掩码是前缀长度在十进制中的表示。正如之前提到的,前缀长度是从左侧开始的1的数量,它表示网络部分和主机部分。
为了在网络设备中表示前缀长度,使用一种特殊类型的IPv4地址,称为子网掩码。它由32位组成,就像常规IPv4地址一样。子网掩码通过在网络部分放置1,在主机部分放置0来表示。例如,/24前缀表示的子网掩码是255.255.255.0(11111111.11111111.11111111.00000000)。子网掩码的剩余位(低阶位)为零,表示网络中的主机地址。
当我们在网络设备上配置IP地址时,必须配合使用子网掩码。
二进制与操作(Binary ANDing)
问题是,在做转发决策时,路由器如何知道收到的数据包中的IP地址属于哪个网络?
IPv4主机地址与其子网掩码进行逻辑与(AND)运算,以确定主机所属的网络地址。当对地址和子网掩码进行与操作时,结果是网络地址。
与操作(AND Operation)
与(AND)是逻辑运算,在给定子网掩码和IP地址的情况下,使用与运算来计算网络地址。逻辑与操作的结果如下所示,当在IP地址和子网掩码的位上进行比较时:
- 1 AND 1 = 1
- 1 AND 0 = 0
- 0 AND 1 = 0
- 0 AND 0 = 0
二进制与操作的结果
- 进行与操作后,同一网络中的网络设备可以决定数据包是否属于本地网络,还是应该转发到远程网络。
- 路由器根据二进制与操作的结果做出转发决策。
下表展示了对于网络192.168.2.45/24
的与操作过程。
因此,IP地址192.168.2.45/24
的网络地址将是192.168.2.0
。
关于子网划分
现在我们已经理解了如何将IP地址从十进制转换为二进制,是时候学习子网划分了。
子网划分允许我们从一个IP地址块创建更多的网络。这些网络通过路由器互联,因此每个路由器上的接口必须处于不同的网络中。
注意: 通过子网划分创建的网络将被称为子网。因此,当你看到“子网”而不是“网络”时,千万不要混淆。
子网划分是一个简单的过程,我们从主机部分借用位来创建新的网络。以下面的示例为例,地址192.168.1.0/24
是主网络,如果我们从主机部分借用2个位,那么新的前缀长度将是26。因此,这2个位将分配给网络部分。
当我们借用主机位时,新的二进制地址将保持不变,但是,显示网络部分的子网掩码将会不同,如下所示:
当我们通过借用主机部分的位来扩展子网掩码时,我们实际上是将网络的数量加倍。然而,借用的位越多,每个子网中可用的主机 IP 地址数量就会越少。
计算每次借用主机位时创建的子网数量的公式是:
2^n = 新网络的数量。
要计算每个网络中的主机数量,我们使用公式:
2^n - 2,其中 n = 为主机保留的位数。
以下面的网络 172.16.1.0/24 为例,如果我们想将该网络子网化以创建 2 个子网,我们需要从主机部分借用 1 位并将其添加到网络部分。
在从第四个八位组借用两个主机位之后,新的网络将如下所示。
子网掩码将多出一个 1 位。
因此,在借用 1 个主机位后,我们将创建 2 个新网络,但我们会减少每个子网中的主机数量。
现在,新的子网将如下所示:
172.16.1.0/25
172.16.1.128/25
子网掩码将是 255.255.255.128
注意:每当我们进行子网划分时,最后一个子网将始终与新子网掩码的最后一个八位字节具有相同的位。
以下是示例:
如果我们将 172.16.1.0/24 子网划分为 8 个新网络。
步骤 1:我们需要从主机部分借用多少位?
2^n = 8
2^3 = 8
因此,我们需要借用 3 个主机位。
新的子网掩码 – 255.255.255.224
前两个子网和最后一个子网将是:
172.16.1.0/27
172.16.1.32/27
172.16.1.224
增量数通常是最后借用的主机位。在上述场景中,这是 32。
将 172.16.1.0/24 子网划分为 /27 后的子网为:
为什么要进行子网划分
在我们的网络中,IP 地址的需求可能会有所不同。例如,某些连接(如点对点连接)可能只需要少量的 IP 地址,而某些部门可能有 200 个用户,而另一些部门只有 20 个用户。
子网划分使我们能够将网络划分成多个子网,从而最优地使用 IP 地址。如果我们将 200 个 IP 地址分配给一个只需要 20 个的网络,就会浪费大量地址。
如果用电话服务提供商的类比,未进行子网划分就像是给一个客户分配 100 个电话号码,而他们只需要 1 个。
在进行子网划分时,我们应该仔细考虑扩展计划,因为由于需求,网络可能会增长。
在下面的场景中,我们将根据主机数量进行子网划分。这是理解子网划分的一个关键因素。
场景描述
在以下场景中,我们需要对三个网络地址进行子网划分:
- 192.168.1.0/24 用于 WAN 连接 LINK A 和 LINK B
- 172.16.1.0/24 用于 LAN A
- 172.16.2.0/24 用于 LAN B
- 192.168.2.0/24 用于 LAN C
所以我们将从 WAN 链接开始。
1、WAN 链接
对于这样的链接,我们每个链接只需要 2 个 IP 地址,因此,我们需要确定哪个子网掩码可以仅提供 2 个主机地址。
我们需要计算需要多少个右侧位,然后其余的将分配给网络部分。
2^n = 2 - 2
2^2 = 4
4 - 2 = 2
因此,我们只需要 2 个主机位。剩余的 6 个位将用于网络部分。
在将 6 位添加到网络部分后,新的子网掩码将是:
192.168.1.0/30
因此,增量将是 4。在这种情况下,第一个网络将是 192.168.1.0/30。
第二个网络将是 192.168.1.4/30,如下所示。
这些将为 WAN 链接提供足够的主机 IP 地址。
2、LAN A
对于第二部分,我们需要为 LAN A 提供足够的主机 IP 地址。
LAN A 需要 40 个 IP 地址。
因此,我们需要计算需要多少个主机位来容纳这些 IP 地址。
2^n - 2 = 40
2^5 - 2 = 30,这小于 40,因此不够。
2^6 - 2 = 62。因此,这将足够满足 LAN A 的主机需求。
主机位将是 6,我们将借用 2 个主机位来获得这些新的子网。
在进行子网划分后,172.16.1.0/24 网络的新子网掩码将是:
255.255.255.192
增量数将是 64,因此四个网络将是:
3、LAN B
我们需要 65 个主机 IP 地址,给定网络 172.16.2.0/24。
首先,我们需要确定在主机部分需要多少个主机位。
2^n - 2 = 65
2^6 - 2 = 62,这不足够。
2^7 - 2 = 126,这足够并且可以支持扩展。
因此,主机部分将有 7 个位,网络部分将从第四个八位字节借用 1 个位。
172.16.2.0 网络的新子网掩码将如下所示。
这是 255.255.255.128
因此,增量将是 128。
第一个网络将如下所示:172.16.2.0/25
第二个也是最后一个网络将是 172.16.2.128/25。
4、LAN C
在 LAN C 中,我们需要有能够容纳每个子网 12 个主机的子网,使用网络192.168.2.0/24。
首先,我们确定需要多少个主机 IP 地址位。
2^n - 2 = 12
2^4 - 2 = 14,足够了。
因此,主机部分将有 4 个位,而网络部分将借用 4 个位。
192.168.2.0 网络的新子网掩码将是
子网掩码是:255.255.255.240
该网络的增量将是 16。
第一个和第二个网络将分别是 192.168.2.0/28 和 192.168.2.16/28。
总结
IPv4 地址分配第一部分到此结束。在第二部分,我们将深入探讨子网划分,并且还会探索其他概念,如超网划分。