如何使用 ipcalc 在 Linux 上计算子网掩码

对大型网络进行子网划分可提高安全性、性能并以合乎逻辑的方式组织您的网络。但是有些计算很困难。 Linux ipcalc
命令使规划阶段变得简单。
什么是子网划分?
子网划分是一种将大型网络分成较小的、相互连接的部分的方法。每一块称为一个子网。您可以选择组织您的网络,以便您的销售团队使用一个子网,HR 使用另一个子网,客户支持使用另一个子网,等等。
这有很多好处。第一个与安全和控制有关。没有子网划分,一切都是一个大的“扁平”网络。通过子网划分,您可以决定哪些子网可以与其他子网通信。不同的子网有不同的IP地址范围,使用不同的子网掩码,我们稍后会讲到。
您的路由器必须配置为允许来自一个子网的流量到达另一个子网。而且,由于路由器是受管设备,因此您可以控制不同子网之间允许的流量和交互类型。
子网划分还可以防止未经授权的用户和恶意软件在未经检查的情况下漫游您的网络。或者至少,它会减慢他们的速度。把它想象成一艘潜艇。如果您的船体某一部分出现破口,您可以关闭舱壁门,这样船只的其余部分就不会被淹没。子网就像那些舱壁门。
通常,纯粹从对大型网络划分子网的行为中获得性能优势。如果您的网络足够大且足够繁忙,那么性能的提升将来自每个子网内网络流量的减少。仅 ARP 流量的下降就可能使事情看起来更灵敏。
当然,一旦您的网络被隔离,您的 IT 员工就更容易理解、维护和支持您的基础设施。
IP 地址和子网掩码
这一切听起来不错,确实如此。但这意味着我们需要在 IP 寻址方面非常特别。我们需要使用部分 IP 地址作为网络 ID,部分 IP 地址用于设备寻址。对于子网,我们还需要使用子网的部分 IP 地址。
IPv4 IP 地址使用四个由句点分隔的三位数。它被称为点十进制表示法。这些数字的范围是 0 到 255。前两个数字是网络 ID。第三个用于保存子网ID,第四个数字用于保存设备地址。那是在简单的情况下。
数字在计算机内部表示为二进制值序列。如果子网中的设备太少以至于设备地址编号范围内有未使用的高位,则这些“备用”二进制位可由子网 ID 使用。
路由器或任何其他网络设备如何知道 IP 地址的组成?什么表示子网ID是全部包含在第三个数字中,还是挖走了第四个数字的部分高位?答案是子网掩码。
子网掩码看起来像一个 IP 地址。是四个三位数字,数字的取值范围是0到255。但是确实需要考虑它们的二进制形式。
子网掩码中每个为 1 的二进制位表示 IP 地址中的相应位是指网络 ID 或子网 ID。子网掩码中的所有零都表示 IP 地址中的相应位指的是设备地址。
让我们取一个典型的 IP 地址并为其应用子网掩码。子网掩码的前三个数字均为 255,第四个为 0。
- IP地址:192.168.1.0
- 子网掩码:255.255.255.0=11111111.11111111.11111111.00000000
255的二进制为11111111。如果子网掩码位设置为1,则IP地址中对应的位就是网络号和子网号。子网掩码中的255表示IP地址中对应数字的所有位均指代网络号或子网号。
第四个数字是零,意味着没有位被设置为一。所以那个数字指的是网络设备地址。所以我们的子网掩码 255.255.255.0 表示 IP 地址的前三个数字包含网络 ID 和子网 ID,最后一个数字保留用于网络设备地址。
这意味着所有这一切的副作用是子网掩码还决定了 IP 地址中有多少位可用于识别单个设备。换句话说,子网掩码决定了 IP 地址中的哪些位可以识别子网,以及该子网可以包含多少设备。
更改子网掩码会对网络产生巨大影响。这就是为什么我们需要把它做好。
ipcalc 命令
ipcalc
可以轻松计算出正确子网化网络所需的子网掩码和 IP 地址。 ipcalc
已经安装在 Fedora 36 上。我们必须在 Ubuntu 22.04 和 Manjaro 21 上安装它。
Ubuntu 的命令是:
sudo apt install ipcalc

要在 Manjaro 上安装 ipcalc
,请使用:
sudo pacman -Sy ipcalc

至少,我们需要将 IP 地址传递给 ipcalc
。如果这就是我们传递的全部内容,ipcalc
假定子网掩码为 255.255.255.0。它提供有关网络和 IP 地址的信息读出。
ipcalc 192.168.1.0

输出包含点十进制值及其等效的二进制值。这就是每一位信息的含义。
- 地址:192.168.1.0。我们提供的 IP 地址。
- Netmask:255.255.255.0=24。子网掩码。如果未在命令行上提供子网掩码,则使用 255.255.255.0。 24 表示子网掩码中有 24 位设置为 1。这些用于网络 ID 和子网 ID。这些是从左边数起的。设置为 1 的位将是连续的 1 序列。其中不能有任何0位。我们知道在二进制中将 8 位设置为 1 可以得到十进制的 255。所以 24 意味着三组 8 位都设置为 1。在点十进制中,我们得到 255.255.255。其余位将为 0,即 255.255.255.0。因此,通过计算设置为 1 的位并将其表示为 24 之类的十进制数,我们可以传达整个子网掩码。这称为无类域间路由表示法。
- 通配符:0.0.0.255。这在 Cisco 网络设备中用作允许列表/阻止列表设置的一部分。
- 网络:192.168.1.0/24。这是以 CIDR 表示法描述的网络 IP 地址和子网。如果有路由器连接到该子网,通常会为其分配允许范围内的最低 IP 地址。
- HostMin:192.168.1.1。连接到此子网的设备可以拥有的最低 IP 地址。
- HostMax:192.168.1.254。连接到此子网的设备可以拥有的最高 IP 地址。
- 广播:192.168.1.255。这是广播地址。发送到此 IP 地址的网络数据包将回显到子网中的所有设备。
- Hosts/Net:254。您可以连接到该子网的最大设备数。在这个例子中,我们的设备 IP 地址范围是 0 到 255,这意味着我们可以识别 256 个不同的 IP 地址(0 到 255)。但是我们丢失了一个网络 IP 地址(“.0”地址)和一个广播 IP 地址(“.255”地址)。
- C 类,专用互联网:网络的类。
网络的类别由用于网络 ID 和子网 ID 的位数以及用于包含网络类别的几位(称为前导位 )指示。
- A 类:前导位为 0。IP 地址以 0 开头。默认子网:255.0.0.0。 CIDR 表示法是 /8。
- B 类:前导位 10。IP 地址以 128 开头。默认子网:255.255.0.0。 CIDR 表示法是 /16。
- C 类:前导位 110。IP 地址以 192 开头。默认子网:255.255.255.0。 CIDR 表示法是 /24。
- D 类:前导位 1110。IP 地址以 224 开头。默认子网:未定义。 CIDR 表示法是 /4。
更改子网掩码
ipcalc
命令无法更改任何设置,因此我们可以尝试任何我们想要的,而不用担心影响任何东西。让我们看看更改子网掩码对我们的网络有什么影响。
您可以使用 CIDR 或点十进制表示法。对于 CIDR,空格是可选的。这些命令都是等价的。
ipcalc 192.168.1.0/16
ipcalc 192.168.1.0 /16
ipcalc 192.168.1.0 255.255.0.0

这大大增加了您可以连接到该网络的设备数量。该网络的网络设备地址从 192.168.0.0 开始,到 192.168.255.254 结束。
和以前一样,我们丢失了一个网络地址和一个广播地址。但这仍然为我们提供了惊人的 65,534 种可能的设备。
但它们仍然都在同一个子网中。
将 ipcalc 与子网一起使用
假设我们要向我们的网络添加三个子网,分别容纳 20、15 和 80 台主机。我们可以使用 -s
(拆分)选项,然后使用我们想要的子网大小。
ipcalc 192.168.1.0 -s 20 15 80

第一部分与我们之前看到的相同,其中 ipcalc
分析了包含我们在命令行中提供的 IP 地址的网络。我们的子网在以下三个部分中描述。

总之,我们得到的信息是:
第一个子网:
- 子网掩码:255.255.255.224
- 第一个设备地址:192.168.0.129
- 最后的设备地址:192.168.0.158
- 子网容量:30 台设备
第二个子网:
- 子网掩码:255.255.255.224
- 第一个设备地址:192.168.0.161
- 最后的设备地址:192.168.0.190
- 子网容量:30 台设备
第三个子网:
- 子网掩码:255.255.255.128
- 第一个设备地址:192.168.0.1
- 最后的设备地址:192.168.0.126
- 子网容量:126 台设备
请注意二进制值中的绿色条目。这些是为子网保留的位。
另外,请注意,因为第一个和第二个子网具有相同的子网掩码 27,所以硬件字段中的三个位已用于子网指示符。在第一个子网中,位是 100,在第二个中是 101。这种差异允许路由器正确地引导网络流量。
它可以迅速升级
很明显,在更大或更复杂的网络中,很容易出现错误。使用 ipcalc
,您可以确定您的值是正确的。您仍然需要配置您的网络,但至少您知道您使用的值是正确的。